summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--docs/source/commandline/commandline-all.rst2
-rw-r--r--hash/buzztime_cart.xml28
-rw-r--r--hash/c64_cass.xml29
-rw-r--r--hash/gameboy.xml2
-rw-r--r--hash/gamegear.xml12
-rw-r--r--hash/jaguar.xml10
-rw-r--r--hash/lynx.xml33
-rw-r--r--hash/megadriv.xml57
-rw-r--r--hash/nes.xml16
-rw-r--r--hash/odyssey2.xml29
-rw-r--r--hash/pi_storyreader_cart.xml255
-rw-r--r--hash/sdk85.xml31
-rw-r--r--hash/snes.xml20
-rw-r--r--hash/spectrum_cass.xml340
-rw-r--r--scripts/src/bus.lua14
-rw-r--r--scripts/src/machine.lua12
-rw-r--r--scripts/target/mame/mess.lua4
-rw-r--r--src/devices/bus/sdk85/i8755.cpp65
-rw-r--r--src/devices/bus/sdk85/i8755.h40
-rw-r--r--src/devices/bus/sdk85/memexp.cpp94
-rw-r--r--src/devices/bus/sdk85/memexp.h83
-rw-r--r--src/devices/cpu/arm7/arm7.cpp48
-rw-r--r--src/devices/cpu/arm7/arm7.h8
-rw-r--r--src/devices/cpu/arm7/arm7core.h2
-rw-r--r--src/devices/cpu/drccache.cpp2
-rw-r--r--src/devices/cpu/i8089/i8089_dasm.cpp28
-rw-r--r--src/devices/cpu/i8089/i8089_dasm.h28
-rw-r--r--src/devices/cpu/ns32000/ns32000dasm.cpp2
-rw-r--r--src/devices/cpu/ns32000/ns32000dasm.h2
-rw-r--r--src/devices/cpu/pace/pace.h2
-rw-r--r--src/devices/cpu/s2650/2650dasm.cpp2
-rw-r--r--src/devices/cpu/s2650/2650dasm.h2
-rw-r--r--src/devices/cpu/unsp/unsp.cpp2
-rw-r--r--src/devices/cpu/we32000/we32100d.cpp3
-rw-r--r--src/devices/machine/i8355.cpp16
-rw-r--r--src/devices/machine/i8355.h6
-rw-r--r--src/devices/machine/mc68901.cpp3
-rw-r--r--src/devices/machine/netlist.cpp10
-rw-r--r--src/devices/machine/s3c2400.h2
-rw-r--r--src/devices/machine/s3c2410.h2
-rw-r--r--src/devices/machine/s3c2440.h2
-rw-r--r--src/devices/machine/s3c24xx.hxx44
-rw-r--r--src/devices/machine/s3c44b0.cpp20
-rw-r--r--src/devices/machine/s3c44b0.h2
-rw-r--r--src/devices/machine/spg2xx_io.cpp52
-rw-r--r--src/devices/machine/vic_pl192.cpp130
-rw-r--r--src/devices/machine/vic_pl192.h51
-rw-r--r--src/devices/sound/megd.cpp2
-rw-r--r--src/devices/sound/megd.h2
-rw-r--r--src/devices/sound/ymf278b.cpp2
-rw-r--r--src/devices/video/fixfreq.cpp2
-rw-r--r--src/devices/video/ims_cvc.cpp12
-rw-r--r--src/devices/video/ims_cvc.h5
-rw-r--r--src/emu/config.cpp16
-rw-r--r--src/emu/debug/debugcon.cpp2
-rw-r--r--src/emu/debug/express.cpp12
-rw-r--r--src/emu/device.cpp8
-rw-r--r--src/emu/diimage.cpp2
-rw-r--r--src/emu/driver.cpp2
-rw-r--r--src/emu/emumem.cpp6
-rw-r--r--src/emu/emuopts.cpp2
-rw-r--r--src/emu/http.cpp24
-rw-r--r--src/emu/machine.cpp6
-rw-r--r--src/emu/natkeyboard.cpp6
-rw-r--r--src/emu/rendlay.cpp6
-rw-r--r--src/emu/validity.cpp18
-rw-r--r--src/emu/video.cpp4
-rw-r--r--src/emu/xtal.cpp2
-rw-r--r--src/emu/xtal.h2
-rw-r--r--src/lib/netlist/analog/nld_fourterm.h15
-rw-r--r--src/lib/netlist/analog/nld_generic_models.h24
-rw-r--r--src/lib/netlist/analog/nld_mosfet.cpp6
-rw-r--r--src/lib/netlist/analog/nld_switches.cpp11
-rw-r--r--src/lib/netlist/analog/nlid_fourterm.cpp20
-rw-r--r--src/lib/netlist/analog/nlid_fourterm.h57
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.cpp5
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.h4
-rw-r--r--src/lib/netlist/devices/net_lib.cpp1
-rw-r--r--src/lib/netlist/devices/net_lib.h3
-rw-r--r--src/lib/netlist/devices/nld_4066.cpp9
-rw-r--r--src/lib/netlist/devices/nld_mm5837.cpp16
-rw-r--r--src/lib/netlist/devices/nld_r2r_dac.cpp3
-rw-r--r--src/lib/netlist/devices/nld_r2r_dac.h5
-rw-r--r--src/lib/netlist/devices/nlid_system.h7
-rw-r--r--src/lib/netlist/devices/nlid_truthtable.cpp4
-rw-r--r--src/lib/netlist/examples/congo_bongo.cpp (renamed from src/lib/netlist/examples/congo_bongo.c)53
-rw-r--r--src/lib/netlist/examples/congo_bongo.csv2
-rw-r--r--src/lib/netlist/macro/nlm_base.cpp4
-rw-r--r--src/lib/netlist/macro/nlm_cd4xxx.cpp16
-rw-r--r--src/lib/netlist/macro/nlm_cd4xxx.h4
-rw-r--r--src/lib/netlist/macro/nlm_opamp.cpp5
-rw-r--r--src/lib/netlist/macro/nlm_other.cpp2
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx.cpp2
-rw-r--r--src/lib/netlist/nl_base.cpp16
-rw-r--r--src/lib/netlist/nl_base.h10
-rw-r--r--src/lib/netlist/nl_config.h2
-rw-r--r--src/lib/netlist/nl_parser.cpp75
-rw-r--r--src/lib/netlist/nl_parser.h4
-rw-r--r--src/lib/netlist/nl_setup.cpp30
-rw-r--r--src/lib/netlist/nl_setup.h12
-rw-r--r--src/lib/netlist/plib/palloc.h4
-rw-r--r--src/lib/netlist/plib/pfunction.cpp2
-rw-r--r--src/lib/netlist/plib/pmath.h4
-rw-r--r--src/lib/netlist/plib/pmempool.h4
-rw-r--r--src/lib/netlist/plib/ppreprocessor.cpp82
-rw-r--r--src/lib/netlist/plib/ppreprocessor.h2
-rw-r--r--src/lib/netlist/plib/pstream.h40
-rw-r--r--src/lib/netlist/plib/pstring.cpp4
-rw-r--r--src/lib/netlist/plib/pstring.h60
-rw-r--r--src/lib/netlist/plib/ptime.h14
-rw-r--r--src/lib/netlist/plib/ptokenizer.cpp22
-rw-r--r--src/lib/netlist/plib/ptypes.h2
-rw-r--r--src/lib/netlist/prg/nltool.cpp82
-rw-r--r--src/lib/netlist/prg/nlwav.cpp7
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.cpp4
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.h2
-rw-r--r--src/lib/netlist/solver/nld_ms_direct.h4
-rw-r--r--src/lib/netlist/solver/nld_ms_gcr.h2
-rw-r--r--src/lib/netlist/solver/nld_solver.cpp81
-rw-r--r--src/lib/netlist/tools/nl_convert.cpp277
-rw-r--r--src/lib/netlist/tools/nl_convert.h37
-rw-r--r--src/lib/util/avhuff.cpp12
-rw-r--r--src/lib/util/avhuff.h2
-rw-r--r--src/lib/util/aviio.cpp22
-rw-r--r--src/lib/util/aviio.h4
-rw-r--r--src/lib/util/cdrom.cpp4
-rw-r--r--src/lib/util/chd.cpp14
-rw-r--r--src/lib/util/chdcd.cpp4
-rw-r--r--src/lib/util/chdcodec.cpp32
-rw-r--r--src/lib/util/chdcodec.h2
-rw-r--r--src/lib/util/corefile.cpp15
-rw-r--r--src/lib/util/corefile.h2
-rw-r--r--src/lib/util/flac.cpp2
-rw-r--r--src/lib/util/hashing.cpp2
-rw-r--r--src/lib/util/huffman.cpp18
-rw-r--r--src/lib/util/huffman.h4
-rw-r--r--src/lib/util/jedparse.cpp8
-rw-r--r--src/lib/util/opresolv.cpp9
-rw-r--r--src/lib/util/opresolv.h2
-rw-r--r--src/lib/util/options.cpp11
-rw-r--r--src/lib/util/options.h4
-rw-r--r--src/lib/util/palette.cpp9
-rw-r--r--src/lib/util/palette.h2
-rw-r--r--src/lib/util/plaparse.cpp2
-rw-r--r--src/lib/util/png.cpp10
-rw-r--r--src/lib/util/pool.cpp2
-rw-r--r--src/lib/util/unzip.cpp2
-rw-r--r--src/lib/util/wavwrite.cpp2
-rw-r--r--src/lib/util/xmlfile.cpp11
-rw-r--r--src/lib/util/xmlfile.h4
-rw-r--r--src/mame/audio/galaxian.cpp12
-rw-r--r--src/mame/audio/galaxian.h11
-rw-r--r--src/mame/audio/nl_zac1b11142.cpp8
-rw-r--r--src/mame/drivers/armedf.cpp472
-rw-r--r--src/mame/drivers/atarigx2.cpp8
-rw-r--r--src/mame/drivers/blockade.cpp3
-rw-r--r--src/mame/drivers/decwritr.cpp44
-rw-r--r--src/mame/drivers/elan_eu3a05.cpp117
-rw-r--r--src/mame/drivers/esq5505.cpp38
-rw-r--r--src/mame/drivers/galaxian.cpp56
-rw-r--r--src/mame/drivers/gba.cpp4
-rw-r--r--src/mame/drivers/goldnpkr.cpp115
-rw-r--r--src/mame/drivers/goldstar.cpp52
-rw-r--r--src/mame/drivers/iphone2g.cpp236
-rw-r--r--src/mame/drivers/iris3130.cpp658
-rw-r--r--src/mame/drivers/itech32.cpp33
-rw-r--r--src/mame/drivers/jaguar.cpp3
-rw-r--r--src/mame/drivers/jazz.cpp67
-rw-r--r--src/mame/drivers/jvh.cpp40
-rw-r--r--src/mame/drivers/konendev.cpp131
-rw-r--r--src/mame/drivers/konmedal.cpp12
-rw-r--r--src/mame/drivers/megatech.cpp16
-rw-r--r--src/mame/drivers/mephisto_brikett.cpp18
-rw-r--r--src/mame/drivers/mephisto_montec.cpp8
-rw-r--r--src/mame/drivers/model3.cpp14
-rw-r--r--src/mame/drivers/mrdo.cpp48
-rw-r--r--src/mame/drivers/naomi.cpp122
-rw-r--r--src/mame/drivers/nes.cpp15
-rw-r--r--src/mame/drivers/pong.cpp2
-rw-r--r--src/mame/drivers/rampart.cpp42
-rw-r--r--src/mame/drivers/sdk85.cpp179
-rw-r--r--src/mame/drivers/seta.cpp7
-rw-r--r--src/mame/drivers/snk.cpp34
-rw-r--r--src/mame/drivers/spg2xx_pdc.cpp38
-rw-r--r--src/mame/drivers/spg2xx_zone.cpp90
-rw-r--r--src/mame/drivers/stadhero.cpp92
-rw-r--r--src/mame/drivers/stv.cpp8
-rw-r--r--src/mame/drivers/superga2.cpp13
-rw-r--r--src/mame/drivers/timeplt.cpp37
-rw-r--r--src/mame/drivers/tsamurai.cpp52
-rw-r--r--src/mame/drivers/tti.cpp16
-rw-r--r--src/mame/drivers/tutor.cpp2
-rw-r--r--src/mame/includes/armedf.h134
-rw-r--r--src/mame/includes/goldstar.h2
-rw-r--r--src/mame/includes/jazz.h3
-rw-r--r--src/mame/includes/nes.h8
-rw-r--r--src/mame/machine/3dom2.cpp4
-rw-r--r--src/mame/machine/atarifdc.cpp1
-rw-r--r--src/mame/machine/atarixga.cpp3
-rw-r--r--src/mame/machine/cuda.cpp2
-rw-r--r--src/mame/machine/dc305.cpp101
-rw-r--r--src/mame/machine/dc305.h75
-rw-r--r--src/mame/machine/egret.cpp2
-rw-r--r--src/mame/machine/elan_eu3a05gpio.cpp36
-rw-r--r--src/mame/machine/elan_eu3a05gpio.h20
-rw-r--r--src/mame/machine/esqpanel.cpp4
-rw-r--r--src/mame/machine/mac.cpp1
-rw-r--r--src/mame/machine/mct_adr.cpp31
-rw-r--r--src/mame/machine/mct_adr.h10
-rw-r--r--src/mame/machine/megadriv.cpp2
-rw-r--r--src/mame/machine/nl_pongf.cpp4
-rw-r--r--src/mame/mame.lst24
-rw-r--r--src/mame/video/3dom2_te.cpp6
-rw-r--r--src/mame/video/armedf.cpp166
-rw-r--r--src/mame/video/jagblit.hxx46
-rw-r--r--src/mame/video/k052109.cpp57
-rw-r--r--src/mame/video/powervr2.cpp2
-rw-r--r--src/osd/modules/debugger/debuggdbstub.cpp30
-rw-r--r--src/osd/modules/debugger/debugimgui.cpp28
-rw-r--r--src/osd/modules/debugger/debugwin.cpp2
-rw-r--r--src/osd/modules/debugger/none.cpp2
-rw-r--r--src/osd/modules/debugger/win/consolewininfo.cpp3
-rw-r--r--src/osd/modules/debugger/win/debugviewinfo.cpp4
-rw-r--r--src/osd/modules/debugger/win/debugwininfo.cpp6
-rw-r--r--src/osd/modules/debugger/win/disasmbasewininfo.cpp4
-rw-r--r--src/osd/modules/debugger/win/disasmviewinfo.h2
-rw-r--r--src/osd/modules/debugger/win/editwininfo.cpp2
-rw-r--r--src/osd/modules/debugger/win/logviewinfo.h2
-rw-r--r--src/osd/modules/debugger/win/logwininfo.cpp1
-rw-r--r--src/osd/modules/debugger/win/memoryviewinfo.h2
-rw-r--r--src/osd/modules/debugger/win/memorywininfo.cpp4
-rw-r--r--src/osd/modules/diagnostics/diagnostics_win32.cpp12
-rw-r--r--src/osd/modules/diagnostics/none.cpp4
-rw-r--r--src/osd/modules/font/font_none.cpp2
-rw-r--r--src/osd/modules/input/input_dinput.cpp6
-rw-r--r--src/osd/modules/input/input_rawinput.cpp8
-rw-r--r--src/osd/modules/input/input_win32.cpp2
-rw-r--r--src/osd/modules/lib/osdlib_win32.cpp6
-rw-r--r--src/osd/modules/lib/osdobj_common.cpp4
-rw-r--r--src/osd/modules/midi/none.cpp8
-rw-r--r--src/osd/modules/midi/portmidi.cpp8
-rw-r--r--src/osd/modules/monitor/monitor_win32.cpp2
-rw-r--r--src/osd/modules/netdev/none.cpp2
-rw-r--r--src/osd/modules/netdev/pcap.cpp4
-rw-r--r--src/osd/modules/netdev/taptun.cpp4
-rw-r--r--src/osd/modules/opengl/gl_shader_tool.cpp2
-rw-r--r--src/osd/modules/output/console.cpp2
-rw-r--r--src/osd/modules/output/network.cpp6
-rw-r--r--src/osd/modules/output/none.cpp2
-rw-r--r--src/osd/modules/output/win32_output.cpp4
-rw-r--r--src/osd/modules/render/bgfx/chain.cpp4
-rw-r--r--src/osd/modules/render/bgfx/chainentry.cpp10
-rw-r--r--src/osd/modules/render/bgfx/chainentryreader.cpp2
-rw-r--r--src/osd/modules/render/bgfx/clearreader.cpp2
-rw-r--r--src/osd/modules/render/bgfx/effect.cpp2
-rw-r--r--src/osd/modules/render/bgfx/inputpair.h2
-rw-r--r--src/osd/modules/render/bgfx/paramreader.cpp2
-rw-r--r--src/osd/modules/render/bgfx/slider.cpp2
-rw-r--r--src/osd/modules/render/bgfx/sliderreader.cpp2
-rw-r--r--src/osd/modules/render/bgfx/targetmanager.cpp8
-rw-r--r--src/osd/modules/render/bgfx/texturemanager.cpp18
-rw-r--r--src/osd/modules/render/bgfx/uniformreader.cpp4
-rw-r--r--src/osd/modules/render/bgfxutil.cpp6
-rw-r--r--src/osd/modules/render/binpacker.cpp6
-rw-r--r--src/osd/modules/render/d3d/d3dhlsl.cpp12
-rw-r--r--src/osd/modules/render/drawbgfx.cpp8
-rw-r--r--src/osd/modules/render/drawd3d.cpp38
-rw-r--r--src/osd/modules/render/drawogl.cpp2
-rw-r--r--src/osd/modules/sound/direct_sound.cpp4
-rw-r--r--src/osd/modules/sound/none.cpp2
-rw-r--r--src/osd/modules/sound/pa_sound.cpp2
-rw-r--r--src/osd/modules/sound/xaudio2_sound.cpp2
-rw-r--r--src/osd/osdcore.cpp4
-rw-r--r--src/osd/osdnet.cpp2
-rw-r--r--src/osd/osdsync.cpp12
-rw-r--r--src/osd/watchdog.cpp2
-rw-r--r--src/osd/windows/video.cpp2
-rw-r--r--src/osd/windows/window.cpp20
-rw-r--r--src/osd/windows/winmain.cpp2
-rw-r--r--src/osd/windows/winutf8.cpp2
-rw-r--r--src/osd/windows/winutil.cpp2
281 files changed, 5078 insertions, 2177 deletions
diff --git a/docs/source/commandline/commandline-all.rst b/docs/source/commandline/commandline-all.rst
index e2154f6c849..636aef571ec 100644
--- a/docs/source/commandline/commandline-all.rst
+++ b/docs/source/commandline/commandline-all.rst
@@ -2357,7 +2357,7 @@ Core Misc Options
**\-confirm_quit**
- Display a Confirm Quit dialong to screen on exit, requiring one extra step
+ Display a Confirm Quit dialog to screen on exit, requiring one extra step
to exit MAME.
The default is OFF (**-noconfirm_quit**).
diff --git a/hash/buzztime_cart.xml b/hash/buzztime_cart.xml
new file mode 100644
index 00000000000..38fd947a6c7
--- /dev/null
+++ b/hash/buzztime_cart.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+
+<softwarelist name="buzztime_cart" description="Cadaco Buzztime Trivia Cartridges">
+ <software name="s1tv" supported="no">
+ <description>Series 1 - TV</description>
+ <year>200?</year>
+ <publisher>Cadaco</publisher>
+ <part name="cart" interface="buzztime_cart">
+ <dataarea name="rom" size="0x200000">
+ <rom name="buzztimeseries1tv.bin" size="0x200000" crc="295be60f" sha1="960065e7b8eb0b65dfb7c3b067940de3362d1b0e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="s1hist" supported="no">
+ <description>Series 1 - History</description>
+ <year>200?</year>
+ <publisher>Cadaco</publisher>
+ <part name="cart" interface="buzztime_cart">
+ <dataarea name="rom" size="0x200000">
+ <rom name="buzztimeseries1history.bin" size="0x200000" crc="384b0c0e" sha1="c359e69b5c91ba98ebf477aee1bb5f62b721b427"/>
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/c64_cass.xml b/hash/c64_cass.xml
index 7181612f4e5..d34f536c16d 100644
--- a/hash/c64_cass.xml
+++ b/hash/c64_cass.xml
@@ -1407,6 +1407,24 @@
</part>
</software>
+ <software name="cfpp9">
+ <description>The CF Power Pack Tape 9</description>
+ <year>1991</year>
+ <publisher>Future Publishing</publisher>
+ <part name="cass1" interface="cbm_cass">
+ <feature name="part_id" value="Side 1: Zamzara / HeroQuest"/>
+ <dataarea name="cass" size="1008161">
+ <rom name="The CF Powerpack 9 Side 1.tap" size="1008161" crc="6d6687a6" sha1="28de672d1ee73b5df64327f6c53608ea2d94c490"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cbm_cass">
+ <feature name="part_id" value="Side 2: Bulldog / Firepower"/>
+ <dataarea name="cass" size="1005608">
+ <rom name="The CF Powerpack 9 Side 2.tap" size="1005608" crc="7ef0ecff" sha1="e8e0d3c2f4ba04f2aa0a96e3216f259e49c945aa"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="chainreac">
<description>Chain Reaction</description>
<year>19??</year>
@@ -4854,6 +4872,17 @@
</part>
</software>
+ <software name="postman2">
+ <description>Postman Pat 2</description>
+ <year>1989</year>
+ <publisher>Alternative Software</publisher>
+ <part name="cass1" interface="cbm_cass">
+ <dataarea name="cass" size="638869">
+ <rom name="postman pat 2.tap" size="638869" crc="b892a405" sha1="d85b42eecbabb3b615bfb783869c4d98ef5f772a"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="pwrpack">
<description>The Power Pack</description>
<year>1990</year>
diff --git a/hash/gameboy.xml b/hash/gameboy.xml
index 2a5a6501919..0ab4a9bb7d0 100644
--- a/hash/gameboy.xml
+++ b/hash/gameboy.xml
@@ -17261,7 +17261,7 @@
</part>
</software>
- <software name="pokepika">
+ <software name="pokepika" cloneof="pokeyell">
<description>Pocket Monsters - Pikachu (Japan, Rev. 3)</description>
<year>1998</year>
<publisher>Nintendo</publisher>
diff --git a/hash/gamegear.xml b/hash/gamegear.xml
index 41f1085c233..3a4c36b8dd9 100644
--- a/hash/gamegear.xml
+++ b/hash/gamegear.xml
@@ -7682,6 +7682,18 @@ a certain item) -->
</part>
</software>
+ <software name="sonic2p1" cloneof="sonic2">
+ <description>Sonic The Hedgehog 2 (World, final prototype 19920925)</description>
+ <year>1992</year>
+ <publisher>Sega</publisher>
+ <part name="cart" interface="gamegear_cart">
+ <dataarea name="rom" size="524288">
+ <rom name="gg sonic 2 0 25.9.eprom" size="262144" crc="6fb9e149" sha1="f65d2e8ed1c6548b803c3967e54fce2523e7101d" offset="0x00000"/>
+ <rom name="gg sonic 2 1 25.9..eprom" size="262144" crc="751fe756" sha1="aa3be441d440f6b49953eaff3bd47ad07252f8df" offset="0x40000"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="sonic2d" cloneof="sonic2">
<!-- This predates the final release and contains some different tiles & sprites compared to the final game -->
<description>Sonic The Hedgehog 2 (Rolling Demo)</description>
diff --git a/hash/jaguar.xml b/hash/jaguar.xml
index 7e65188a3dd..430f6221130 100644
--- a/hash/jaguar.xml
+++ b/hash/jaguar.xml
@@ -257,7 +257,7 @@ Unreleased (possibly no prototypes exist):
</part>
</software>
- <!-- throws an exception if the Telegames logo isn't skipped, switching items in main menu causes a glitch on the text -->
+ <!-- switching items in main menu causes a glitch on the text -->
<!-- rightmost column of gameplay has odd "overscan" area -->
<software name="brutalsp" supported="no">
<description>Brutal Sports Football</description>
@@ -719,7 +719,7 @@ Unreleased (possibly no prototypes exist):
</part>
</software>
- <!-- throws an exception off the bat -->
+ <!-- black screen -->
<software name="ruinerp" supported="no">
<description>Ruiner Pinball</description>
<year>1995</year>
@@ -803,7 +803,7 @@ Unreleased (possibly no prototypes exist):
</part>
</software>
- <!-- throws an exception off the bat -->
+ <!-- gets to title screen (with wrong GFX width) then hangs -->
<software name="spacewar" supported="no">
<description>Space War 2000</description>
<year>2001</year>
@@ -815,7 +815,7 @@ Unreleased (possibly no prototypes exist):
</part>
</software>
- <!-- throws an exception off the bat -->
+ <!-- gets to title screen (with wrong GFX width) then hangs -->
<software name="spacewarp" cloneof="spacewar" supported="no">
<description>Space War 2000 (Prototype)</description>
<year>19??</year>
@@ -869,7 +869,7 @@ Unreleased (possibly no prototypes exist):
</part>
</software>
- <!-- throws exception after few seconds on title screen -->
+ <!-- boot OK -->
<software name="tempst2k" supported="no">
<description>Tempest 2000</description>
<year>1994</year>
diff --git a/hash/lynx.xml b/hash/lynx.xml
index ab05445ba04..5b9df4dff39 100644
--- a/hash/lynx.xml
+++ b/hash/lynx.xml
@@ -1084,17 +1084,6 @@ Known undumped prototypes:
</part>
</software>
- <software name="dragnet">
- <description>Dragnet Sound Demo</description>
- <year>1995</year>
- <publisher>&lt;unknown&gt;</publisher>
- <part name="cart" interface="lynx_cart">
- <dataarea name="rom" size="262144">
- <rom name="dragnet (1995).bin" size="262144" crc="5598a4c9" sha1="fc802b8b6a62312e6f68065881d0e4f23a967451" offset="000000" />
- </dataarea>
- </part>
- </software>
-
<!-- Quoting the dev: "Zow started as a collection of sound and graphics demos. It was killed when someone who had no right to, released a version to the 'net" -->
<software name="conquest">
<description>Conquest of Zow</description>
@@ -1108,6 +1097,17 @@ Known undumped prototypes:
</part>
</software>
+ <software name="dragnet">
+ <description>Dragnet Sound Demo</description>
+ <year>1995</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="cart" interface="lynx_cart">
+ <dataarea name="rom" size="262144">
+ <rom name="dragnet (1995).bin" size="262144" crc="5598a4c9" sha1="fc802b8b6a62312e6f68065881d0e4f23a967451" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="lynx2tst">
<description>Lynx II Production Test Program V0.02 (Prototype)</description>
<year>19??</year>
@@ -1119,6 +1119,17 @@ Known undumped prototypes:
</part>
</software>
+ <software name="weltensc">
+ <description>Weltenschlächter</description>
+ <year>2016</year>
+ <publisher>Luchs Soft</publisher>
+ <part name="cart" interface="lynx_cart">
+ <dataarea name="rom" size="524288">
+ <rom name="weltenschlacht.lyx" size="524288" crc="a0c59271" sha1="dbba003684efe249b6f17a070b3b008b09c67d3f" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="zaku">
<description>Zaku</description>
<year>2009</year>
diff --git a/hash/megadriv.xml b/hash/megadriv.xml
index 8421446130e..25275af7118 100644
--- a/hash/megadriv.xml
+++ b/hash/megadriv.xml
@@ -25105,14 +25105,14 @@ Notice that these are not working on real hardware due to bugged code with VDP i
<publisher>Sega</publisher>
<part name="cart" interface="megadriv_cart">
<dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom loadflag="load16_byte" name="md sonic 2 0 21.8 alpha.bin" size="131072" crc="53c60603" sha1="70e3c828a8553d44d9d7713a61a667d492cd059f" offset="0x000001"/>
- <rom loadflag="load16_byte" name="md sonic 2 1 21.8 alpha.bin" size="131072" crc="a63f55a2" sha1="1d490b7de709372fae0444d1ee371fb3bf93e0e4" offset="0x000000"/>
- <rom loadflag="load16_byte" name="md sonic 2 2 21.8 alpha.bin" size="131072" crc="4399cf0a" sha1="c501bcb7b235b5e83d3b21d49e3336332e676690" offset="0x040001"/>
- <rom loadflag="load16_byte" name="md sonic 2 3 21.8 alpha.bin" size="131072" crc="f3af68eb" sha1="5831013831662d2116723ae94250871bc71e7f83" offset="0x040000"/>
- <rom loadflag="load16_byte" name="md sonic 2 4 21.8 alpha.bin" size="131072" crc="457292ef" sha1="074134e9ab0b0848a51a17726e91d69cdb24ecce" offset="0x080001"/>
- <rom loadflag="load16_byte" name="md sonic 2 5 21.8 alpha.bin" size="131072" crc="6f66f6ad" sha1="8a4692be96940a8752a9bcbb97921810927dd62f" offset="0x080000"/>
- <rom loadflag="load16_byte" name="md sonic 2 6 21.8 alpha.bin" size="131072" crc="b83b188c" sha1="e8ba63b92ffcc19c8913d0a7de051972b392f535" offset="0x0c0001"/>
- <rom loadflag="load16_byte" name="md sonic 2 7 21.8 alpha.bin" size="131072" crc="4e40d221" sha1="3a8e66fd5e8408f284c7a687f6a3926a43416f08" offset="0x0c0000"/>
+ <rom loadflag="load16_byte" name="md sonic 2 0 21.8 alpha.eprom" size="131072" crc="53c60603" sha1="70e3c828a8553d44d9d7713a61a667d492cd059f" offset="0x000001"/>
+ <rom loadflag="load16_byte" name="md sonic 2 1 21.8 alpha.eprom" size="131072" crc="a63f55a2" sha1="1d490b7de709372fae0444d1ee371fb3bf93e0e4" offset="0x000000"/>
+ <rom loadflag="load16_byte" name="md sonic 2 2 21.8 alpha.eprom" size="131072" crc="4399cf0a" sha1="c501bcb7b235b5e83d3b21d49e3336332e676690" offset="0x040001"/>
+ <rom loadflag="load16_byte" name="md sonic 2 3 21.8 alpha.eprom" size="131072" crc="f3af68eb" sha1="5831013831662d2116723ae94250871bc71e7f83" offset="0x040000"/>
+ <rom loadflag="load16_byte" name="md sonic 2 4 21.8 alpha.eprom" size="131072" crc="457292ef" sha1="074134e9ab0b0848a51a17726e91d69cdb24ecce" offset="0x080001"/>
+ <rom loadflag="load16_byte" name="md sonic 2 5 21.8 alpha.eprom" size="131072" crc="6f66f6ad" sha1="8a4692be96940a8752a9bcbb97921810927dd62f" offset="0x080000"/>
+ <rom loadflag="load16_byte" name="md sonic 2 6 21.8 alpha.eprom" size="131072" crc="b83b188c" sha1="e8ba63b92ffcc19c8913d0a7de051972b392f535" offset="0x0c0001"/>
+ <rom loadflag="load16_byte" name="md sonic 2 7 21.8 alpha.eprom" size="131072" crc="4e40d221" sha1="3a8e66fd5e8408f284c7a687f6a3926a43416f08" offset="0x0c0000"/>
</dataarea>
</part>
</software>
@@ -25123,10 +25123,24 @@ Notice that these are not working on real hardware due to bugged code with VDP i
<publisher>Sega</publisher>
<part name="cart" interface="megadriv_cart">
<dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom loadflag="load16_byte" name="md s2 0 14.9. pre beta.bin" size="262144" crc="d56757fe" sha1="5d48a511ed9f1ba9e2bb99d109ef261e5868f5a5" offset="0x000001"/>
- <rom loadflag="load16_byte" name="md s2 1 14.9. pre beta.bin" size="262144" crc="3b62957a" sha1="cff4baf78c950f1e9960e944af8d79459b777f7d" offset="0x000000"/>
- <rom loadflag="load16_byte" name="md s2 2 14.9. pre beta.bin" size="262144" crc="27415f0f" sha1="ee8c51c84e413b084d07b1a6531ee3572dfc6c2d" offset="0x080001"/>
- <rom loadflag="load16_byte" name="md s2 3 14.9. pre beta.bin" size="262144" crc="36323522" sha1="6c9a7a4712b16fb4f65c34b3ab8551ff173df24f" offset="0x080000"/>
+ <rom loadflag="load16_byte" name="md s2 0 14.9. pre beta.eprom" size="262144" crc="d56757fe" sha1="5d48a511ed9f1ba9e2bb99d109ef261e5868f5a5" offset="0x000001"/>
+ <rom loadflag="load16_byte" name="md s2 1 14.9. pre beta.eprom" size="262144" crc="3b62957a" sha1="cff4baf78c950f1e9960e944af8d79459b777f7d" offset="0x000000"/>
+ <rom loadflag="load16_byte" name="md s2 2 14.9. pre beta.eprom" size="262144" crc="27415f0f" sha1="ee8c51c84e413b084d07b1a6531ee3572dfc6c2d" offset="0x080001"/>
+ <rom loadflag="load16_byte" name="md s2 3 14.9. pre beta.eprom" size="262144" crc="36323522" sha1="6c9a7a4712b16fb4f65c34b3ab8551ff173df24f" offset="0x080000"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sonic2p11" cloneof="sonic2">
+ <description>Sonic the Hedgehog 2 (World, final prototype 19921102)</description>
+ <year>1992</year>
+ <publisher>Sega</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="md sonic2 0 2-11.eprom" size="262144" crc="1f1260f9" sha1="40dd11fb557fc54c0115eb0bf43f090c5b00b200" offset="0x000001" loadflag="load16_byte"/> <!-- MD Sonic2 0 2/11 -->
+ <rom name="md sonic2 1 2-11.eprom" size="262144" crc="bfa5f8c7" sha1="a54cadff1b49373472a6c2fcd0f7c8c7655a04d7" offset="0x000000" loadflag="load16_byte"/> <!-- MD Sonic2 1 2/11 -->
+ <rom name="md sonic2 2 2-11.eprom" size="262144" crc="d75b618f" sha1="37276337a7c1516ea3781677e6b2bbe53b27e403" offset="0x080001" loadflag="load16_byte"/> <!-- MD Sonic2 2 2/11 -->
+ <rom name="md sonic2 3 2-11.eprom" size="262144" crc="c2293c87" sha1="3e467e24c220bd8128c03fb79e45d42d86fcc851" offset="0x080000" loadflag="load16_byte"/> <!-- MD Sonic2 3 2/11 -->
</dataarea>
</part>
</software>
@@ -25181,6 +25195,25 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+ <software name="sonic3p1" cloneof="sonic3">
+ <description>Sonic the Hedgehog 3 (World, prototype 19931103)</description>
+ <year>1993</year>
+ <publisher>Sega</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="slot" value="megadriv_cart"/>
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="sonic 3 0 md 3-11 2.eprom" size="262144" crc="f1013d40" sha1="dba64a8a12cc8b3a2b92684a4f06df8fc9bbb20e" offset="0x000001" loadflag="load16_byte" /> <!-- Sonic 3 0 MD 3\11 2 -->
+ <rom name="sonic 3 1 md 3-11 2.eprom" size="262144" crc="87765386" sha1="fb1c803f9a40892a5d4125bfec163f9372357c46" offset="0x000000" loadflag="load16_byte" /> <!-- Sonic 3 1 MD 3\11 2 -->
+ <rom name="sonic 3 2 md 3-11 2.eprom" size="262144" crc="4e0d637f" sha1="5b8f8048a68b7a41fbaa096742b62eb89a474086" offset="0x080001" loadflag="load16_byte" /> <!-- Sonic 3 2 MD 3\11 2 -->
+ <rom name="sonic 3 3 md 3-11 2.eprom" size="262144" crc="46546c5b" sha1="f4be05074ee1e883fe99a0a5136989b061f837fd" offset="0x080000" loadflag="load16_byte" /> <!-- Sonic 3 3 MD 3\11 2 -->
+ <rom name="sonic 3 4 md 3-11 2.eprom" size="262144" crc="4a6f9ad9" sha1="a386d8e7b24d50c4ce6796e240e1595dff1cf1db" offset="0x140001" loadflag="load16_byte" /> <!-- Sonic 3 4 MD 3\11 2 -->
+ <rom name="sonic 3 5 md 3-11 2.eprom" size="262144" crc="d064c206" sha1="b979be1ce6c7c7accd824146aea50e8cd5ebce5b" offset="0x140000" loadflag="load16_byte" /> <!-- Sonic 3 5 MD 3\11 2 -->
+ <rom name="sonic 3 6 md 3-11 2.eprom" size="262144" crc="fa68199e" sha1="37104cf987361a1a52edae10a30abdf01c42c129" offset="0x1c0001" loadflag="load16_byte" /> <!-- Sonic 3 6 MD 3\11 2 -->
+ <rom name="sonic 3 7 md 3-11 2.eprom" size="262144" crc="81987c07" sha1="a5c227ea2b7cd388863b4721ac6989800652dfe7" offset="0x1c0000" loadflag="load16_byte" /> <!-- Sonic 3 7 MD 3\11 2 -->
+ </dataarea>
+ </part>
+ </software>
+
<software name="sorcerk">
<description>Sorcerer's Kingdom (USA, v1.1)</description>
<year>1992</year>
diff --git a/hash/nes.xml b/hash/nes.xml
index 1f450a5c028..dffc745fced 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -6336,7 +6336,7 @@
</part>
</software>
- <software name="chevlzod">
+ <software name="chevlzod" cloneof="sseiya">
<description>Les Chevaliers Du Zodiaque - La Legende D'Or (Fra)</description>
<year>1992</year>
<publisher>Bandai</publisher>
@@ -21914,7 +21914,7 @@
</part>
</software>
- <software name="worldjen">
+ <software name="wordjen">
<description>Lost Word of Jenny - Ushinawareta Message (Jpn)</description>
<year>1987</year>
<publisher>Takara</publisher>
@@ -40800,7 +40800,7 @@
<publisher>Sigma Shouji</publisher>
<info name="serial" value="SEI-1B"/>
<info name="release" value="19891124"/>
- <info name="alt_title" value="ベガスコネクション カジノより愛をこめて"/>
+ <info name="alt_title" value="ベガスコネクション カジノから愛をこめて"/>
<part name="cart" interface="nes_cart">
<feature name="slot" value="sxrom" />
<feature name="pcb" value="HVC-SNROM" />
@@ -62588,10 +62588,10 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<feature name="slot" value="jyc_a" />
<feature name="pcb" value="JYCOMPANY-A" />
<dataarea name="chr" size="262144">
- <rom name="mickey mania 7 (pirate origianl).chr" size="262144" crc="ad8c83c3" sha1="5308a96d5c54fa63398f20c8c703225330cb423c" offset="00000" status="baddump" />
+ <rom name="mickey mania 7 (pirate original).chr" size="262144" crc="ad8c83c3" sha1="5308a96d5c54fa63398f20c8c703225330cb423c" offset="00000" status="baddump" />
</dataarea>
<dataarea name="prg" size="262144">
- <rom name="mickey mania 7 (pirate origianl).prg" size="262144" crc="60fb492c" sha1="4826b32e22a60985020acaf3a06f2d32e4ca0c8d" offset="00000" status="baddump" />
+ <rom name="mickey mania 7 (pirate original).prg" size="262144" crc="60fb492c" sha1="4826b32e22a60985020acaf3a06f2d32e4ca0c8d" offset="00000" status="baddump" />
</dataarea>
</part>
</software>
@@ -69549,7 +69549,7 @@ Also notice that VRAM, WRAM & mirror are probably incorrect for some of these se
</part>
</software>
- <software name="edu18a">
+ <software name="edu18a" cloneof="edu18">
<description>Education Games 18 in 1 (Chi, Alt)</description>
<year>19??</year>
<publisher>&lt;pirate&gt;</publisher>
@@ -69897,7 +69897,7 @@ Also notice that VRAM, WRAM & mirror are probably incorrect for some of these se
<feature name="mirroring" value="vertical" />
<feature name="peripheral" value="subor_keyboard" />
<dataarea name="prg" size="1048576">
- <rom name="unknown_arabic_study_cartridge_contain_32_itmes_(unl).prg" size="1048576" crc="c0a76428" sha1="68a826b1f8589015cad42f22e6593a682e56ab25" offset="00000" status="baddump" />
+ <rom name="unknown_arabic_study_cartridge_contain_32_items_(unl).prg" size="1048576" crc="c0a76428" sha1="68a826b1f8589015cad42f22e6593a682e56ab25" offset="00000" status="baddump" />
</dataarea>
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
@@ -81133,7 +81133,7 @@ that the real dumps might surface -->
<description>Family Computer Disk System (Jpn)</description>
<year>1986</year>
<publisher>Nintendo</publisher>
- <info name="usage" value="This only is only supported by Famicom"/>
+ <info name="usage" value="This is only supported by Famicom"/>
<part name="cart" interface="nes_cart">
<feature name="slot" value="disksys" />
<!-- This is a fake and unused PRG dataarea to avoid changing the loading routines for the moment-->
diff --git a/hash/odyssey2.xml b/hash/odyssey2.xml
index 0cb1e958940..503f1255549 100644
--- a/hash/odyssey2.xml
+++ b/hash/odyssey2.xml
@@ -1794,6 +1794,35 @@ adds 16K RAM and 18K ROM, that plugs into the G7000 needs to be dumped.
</part>
</software>
+<!-- NTSC Cartidge dumped from a 39SF010 flashrom (1MB) and actual data (2KB) data is repeated to fill space and matches publicly posted rom from author -->
+ <software name="deathrac">
+ <description>Death Race (USA)</description>
+ <year>2014</year>
+ <publisher>&lt;homebrew&gt;</publisher>
+ <info name="programmer" value="Ivan Machado" />
+ <sharedfeat name="compatibility" value="NTSC"/>
+ <part name="cart" interface="odyssey_cart">
+ <feature name="slot" value="o2_rom" />
+ <dataarea name="rom" size="2048">
+ <rom name="DRace_RC04.NTSC.rom" size="2048" crc="91a767de" sha1="26a044c68ff08f574f6649b731b82caca8c0e797" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="deathracp">
+ <description>Death Race (Euro)</description>
+ <year>2014</year>
+ <publisher>&lt;homebrew&gt;</publisher>
+ <info name="programmer" value="Ivan Machado" />
+ <sharedfeat name="compatibility" value="PAL"/>
+ <part name="cart" interface="odyssey_cart">
+ <feature name="slot" value="o2_rom" />
+ <dataarea name="rom" size="2048">
+ <rom name="DRace_RC04.PAL.rom" size="2048" crc="0ca8c961" sha1="3918d6c2c324fba55e8b90acc8d38e540e4ec5c6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="ktaa">
<description>Kill the Attacking Aliens</description>
<year>2003</year>
diff --git a/hash/pi_storyreader_cart.xml b/hash/pi_storyreader_cart.xml
index 0eaeb6b2732..dfa32f9bf37 100644
--- a/hash/pi_storyreader_cart.xml
+++ b/hash/pi_storyreader_cart.xml
@@ -1,11 +1,258 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
-<softwarelist name="pi_storyreader_cart" description="Publications International Ltd Story Reader cartridges">
+<softwarelist name="pi_storyreader_cart" description="Publications International Ltd. Story Reader cartridges">
- <software name="ts2" supported="no">
- <description>Toy Story 2</description>
+ <software name="srbamltpetp3" supported="no">
+ <description>Disney's Bambi / Lady and the Tramp / Peter Pan</description>
<year>200?</year>
- <publisher>Publications International Ltd / Disney</publisher>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x200000">
+ <rom name="storyreaderv1_bambiladyandthetramppeterpan.bin" size="0x200000" crc="68e5c946" sha1="34cce52e203223e6d306a8a568094ea543968ca2" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srbarney3" supported="no">
+ <description>Barney: Barney Cares / Best Manners Show / Let's Work Together</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="30473" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x400000">
+ <rom name="storyreaderv1_barneycaresbestmannersshowletsworktogether.bin" size="0x400000" crc="89e6df6a" sha1="f5d598c7f695f4f7e09060c05e58ba14bf8f805c" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srbluespps" supported="no">
+ <description>Blue's Perfect Picnic Spot</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="01465" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv1_bluesperfectpicnicspot.bin" size="0x100000" crc="88536a08" sha1="a124e5a653bf86e3eb0a00b3eaae068b2a9245b6" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srcarincmon3" supported="no">
+ <description>Disney/Pixar Cars / The Incredibles / Monsters Inc.</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="62823" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x400000">
+ <rom name="storyreaderv1_carsincrediblesmonstersinc.bin" size="0x400000" crc="88ba4b2b" sha1="f30d95476d120b1fca1b8fc9004baf7951f7cb67" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srdoragrdn" supported="no">
+ <description>Dora's Garden Adventure</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="01457" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv1_dorasgardenadventure.bin" size="0x100000" crc="83fe2fcf" sha1="44a4b1fb79f54f49883f37fee448f93972363bfe" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srdoragrgiar3" supported="no">
+ <description>Dora the Explorer: Dora's Garden Adventure / The Gingerbread Boy / Dora's Art Adventure</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="33618" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x400000">
+ <rom name="storyreaderv1_dorasgardenadventuregingerbreadboydorasartadventure.bin" size="0x400000" crc="891472a9" sha1="cdc78012a41283032fabe4977e37b330be50d320" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srfindnemo" supported="no">
+ <description>Disney/Pixar Finding Nemo</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="32018" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv1_findingnemo.bin" size="0x100000" crc="9ad6c87a" sha1="f1b33c3501b2850757eaf7c9a44d148ca9f093c1" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srlionkng" supported="no">
+ <description>Disney's The Lion King</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv1_lionking.bin" size="0x100000" crc="8d1a63f1" sha1="6596739951a76cb311b7a5dc1db123fa045c5351" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srlimermaid" supported="no">
+ <description>Disney's The Little Mermaid</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv1_littlemermaid.bin" size="0x100000" crc="bdf625f7" sha1="084864e2ee310f30811e8a0bf1bbaa2885de5ada" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srnoahark" supported="no">
+ <description>Noah's Ark</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="0151-1" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv1_noahsark.bin" size="0x100000" crc="7d518933" sha1="fa8913d2dfc33af9669cdb1019784ed9085e06e1" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srpetjetom3" supported="no">
+ <description>Petter Rabbit / Jemima Puddle-Duck / Tom Kitten</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="06238" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x400000">
+ <rom name="storyreaderv1_peterrabbitjemimapuddleducktomkitten.bin" size="0x400000" crc="1eb175a8" sha1="1ead97956e5d2866dbfe9878ff48522fac8818f9" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srpitsjb3" supported="no">
+ <description>Disney's Pinocchio / Disney/Pixar Toy Story 2 / The Jungle Book</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x200000">
+ <rom name="storyreaderv1_pinocchiotoystory2junglebook.bin" size="0x200000" crc="3530ac76" sha1="4722dac345f754ea72d1de082f8f9f401a0b1975" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srpoohrmbly" supported="no">
+ <description>Disney No Rumbly In Pooh's Tumbly</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="0161-9" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv1_norumblyinpoohstumbly.bin" size="0x100000" crc="78b7ee0a" sha1="257b91be7eb0bfc3b22c3f6a7535a5c8a4269332" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srpoohwndy" supported="no">
+ <description>Disney Pooh Windy Day</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="01597" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv1_poohswindyday.bin" size="0x100000" crc="fe167f3c" sha1="bb9dcd5cd2231a2f1150ed127dac148b0a7416ff" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srprinjamupo3" supported="no">
+ <description>Disney Princess: Jasmine / Mulan / Pocahontas</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="67224" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x400000">
+ <rom name="storyreaderv1_jasminemulanpocahontas.bin" size="0x400000" crc="d0c4b8d9" sha1="affe7f6f13be2e391a430fd602b0069f095bd2fa" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srprinlmswbb3" supported="no">
+ <description>Disney Princess: The Little Mermaid / Snow White / Beauty and the Beast</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x200000">
+ <rom name="storyreaderv1_littlemermaidsnowwhitebeautyandthebeast.bin" size="0x200000" crc="3c1623da" sha1="a7b6b7a251aa6d53b47f599ea57663aa096f5206" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srscoobymgm" supported="no">
+ <description>Scooby-Doo! Miniature Golf Mistery</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="01473" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv1_scoobydoominiaturegolfmystery.bin" size="0x100000" crc="bfed0514" sha1="1fde50f130df60772501d72380a3fdb975fc831e" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srsesame3" supported="no">
+ <description>Sesame Street: Elmo's Colorful Adventure / Grover Stays Up Very Very Late / Me Loves Cookies</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="30481" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x400000">
+ <rom name="storyreaderv1_elmoscolorfuladventuregroverstaysupverylatemelovecookies.bin" size="0x400000" crc="54bc8b1f" sha1="f11d90fd2ff032b6a93e50d61e471005fe0c8710" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srsbobgpw" supported="no">
+ <description>Spongebob Squarepants Grand Price Winner!</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="01449" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv1_grandprizewinner.bin" size="0x100000" crc="da0428ce" sha1="fb0d95ccb2a116d676b386249668b240a7178f2d" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srsbodobl3" supported="no">
+ <description>Spongebob Squarepants Grand Price Winner! / Dora's Garden Adventure / Blue's Perfect Picnic Spot</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="30376" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x400000">
+ <rom name="storyreaderv1_grandprizewinnerdorasgardenadventurebluesperfectpicnicspot.bin" size="0x400000" crc="1ea36f2f" sha1="bb63e6988b629f531fca081d3f5c611a8ba3cca0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srthomas3" supported="no">
+ <description>Thomas &amp; Friends: Cheer up Cranky! / The Big Race / Carnival Capers</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
+ <info name="serial" value="84009" />
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x400000">
+ <rom name="storyreaderv1_cheerupcrankythebigracecarnivalcapers.bin" size="0x400000" crc="4ddcadbc" sha1="78e8ee67da04111c17039bbbcbfc665ec2729372" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srtoystry2" supported="no">
+ <description>Disney/Pixar Toy Story 2</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd. / Disney</publisher>
<part name="cart" interface="pi_storyreader_cart">
<dataarea name="rom" size="0x100000">
<rom name="storyreaderv1_toystory2.bin" size="0x100000" crc="496fe7b5" sha1="4a66e1e7ec0fdcfe578d60437fcbaaa19f7ac2d3" />
diff --git a/hash/sdk85.xml b/hash/sdk85.xml
new file mode 100644
index 00000000000..dfe1ecc69bd
--- /dev/null
+++ b/hash/sdk85.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<softwarelist name="sdk85" description="SDK-85 expansion ROMs">
+
+ <software name="ap29" supported="no">
+ <!-- Program listed in "Using the Intel 8085 Serial I/O Lines" application note -->
+ <!-- CRT and cassette tape interfaces require custom SID/SOD hookups -->
+ <description>AP-29 Serial I/O Routines</description>
+ <year>1977</year>
+ <publisher>Intel</publisher>
+ <info name="author" value="John Wharton"/>
+ <part name="prom" interface="sdk85_rom">
+ <dataarea name="rom" size="2048">
+ <rom name="ap29.bin" size="2048" crc="c17c3020" sha1="d96dd85fd47ad4af41366a4df758a421b1c39d49"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mmind">
+ <description>Mastermind</description>
+ <year>2019</year>
+ <publisher>hack (Peter Naszvadi)</publisher>
+ <info name="author" value="Paolo Forlani and Stefano Bodrato"/>
+ <part name="prom" interface="sdk85_rom">
+ <dataarea name="rom" size="2048">
+ <rom name="mastermind.a15" size="2048" crc="0538e162" sha1="c351975e2cf515cee29fcaeb04ef47189afe5250"/>
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/snes.xml b/hash/snes.xml
index cfefc339a0f..66c9d39f6cd 100644
--- a/hash/snes.xml
+++ b/hash/snes.xml
@@ -9734,7 +9734,7 @@ more investigation needed...
<publisher>T&amp;E Soft</publisher>
<info name="serial" value="SHVC-AC6J-JPN" />
<info name="release" value="19961220" />
- <info name="alt_title" value="クオンハ SFC" />
+ <info name="alt_title" value="クオンパ SFC" />
<sharedfeat name="compatibility" value="NTSC"/>
<part name="cart" interface="snes_cart">
<feature name="pcb" value="SHVC-1A3M-30" />
@@ -13675,7 +13675,7 @@ more investigation needed...
</part>
</software>
- <software name="gdleena">
+ <software name="gdleena" cloneof="gdleen">
<description>Gdleen (Jpn)</description>
<year>1991</year>
<publisher>Seta</publisher>
@@ -16053,7 +16053,7 @@ more investigation needed...
</part>
</software>
- <software name="kamaita1">
+ <software name="kamaita1" cloneof="kamaita">
<description>Kamaitachi no Yoru (Jpn, Alt)</description>
<year>1994</year>
<publisher>Chunsoft</publisher>
@@ -28233,7 +28233,7 @@ Alternate board (XL-1)
</part>
</software>
- <software name="sscope6j" cloneof="sscope6">
+ <software name="sscope6j" cloneof="nscope6">
<description>Super Scope 6 (Jpn)</description>
<year>1993</year>
<publisher>Nintendo</publisher>
@@ -32048,7 +32048,7 @@ Alternate board (XL-1)
</part>
</software>
- <software name="yuyua">
+ <software name="yuyua" cloneof="yuyu">
<description>Yu Yu Hakusho (Jpn, Alt)</description>
<year>1993</year>
<publisher>Namco</publisher>
@@ -36573,7 +36573,7 @@ List of unclassified roms
</part>
</software>
- <software name="classro2" cloneof="classrod">
+ <software name="classro2">
<description>Classic Road II (Jpn)</description>
<year>1995</year>
<publisher>Victor Entertainment</publisher>
@@ -44636,7 +44636,7 @@ List of unclassified roms
</part>
</software>
- <software name="keiba8sa">
+ <software name="keiba8sa" cloneof="keiba8s">
<description>Keiba Eight Special (Jpn)</description>
<year>1993</year>
<publisher>Misawa Entertainment</publisher>
@@ -47378,7 +47378,7 @@ to ensure nothing has been touched in the Retro Quest cart production in 2013/20
<publisher>Shouei System</publisher>
<info name="serial" value="SHVC-24" />
<info name="release" value="19940826" />
- <info name="alt_title" value="松村邦洋伝 最強の歴史をぬりかえ ろ!" />
+ <info name="alt_title" value="松村邦洋伝 最強の歴史をぬりかえろ!" />
<part name="cart" interface="snes_cart">
<feature name="slot" value="hirom" />
<dataarea name="rom" size="3145728">
@@ -54300,7 +54300,7 @@ to ensure nothing has been touched in the Retro Quest cart production in 2013/20
</part>
</software>
- <software name="shinstrk">
+ <software name="shinstrk" cloneof="stng">
<description>Shin Star Trek - Ooinaru Isan IFD no Nazo o Oe (Jpn)</description>
<year>1995</year>
<publisher>Takuma Shoten</publisher>
@@ -58874,7 +58874,7 @@ to ensure nothing has been touched in the Retro Quest cart production in 2013/20
</part>
</software>
- <software name="sscope6">
+ <software name="sscope6" cloneof="nscope6">
<description>Super Scope 6 (USA)</description>
<year>1992</year>
<publisher>Nintendo</publisher>
diff --git a/hash/spectrum_cass.xml b/hash/spectrum_cass.xml
index b65ca4b6741..ffee8609163 100644
--- a/hash/spectrum_cass.xml
+++ b/hash/spectrum_cass.xml
@@ -32085,6 +32085,346 @@
</software>
<!-- ##############################################################################################################################
+ covertapes from "Load'N'Run (Spain)"
+ ############################################################################################################################## -->
+
+ <software name="lnrsp100">
+ <description>Load'N'Run (Spain) (Issue 00)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="135078">
+ <rom name="load_n_run (spain) (issue 00) (side a).tzx" size="135078" crc="6e776021" sha1="a655810ebdae0c3b097f4e9768cf0a0899aad253"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="108036">
+ <rom name="load_n_run (spain) (issue 00) (side b).tzx" size="108036" crc="c17dfb11" sha1="73b3e1d913c17e0403d5a40eebc0d05a85d52d73"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp101">
+ <description>Load'N'Run (Spain) (Issue 01)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="70602">
+ <rom name="load_n_run (spain) (issue 01) (side a).tzx" size="70602" crc="85dd13cf" sha1="30298848c050bae1625e1c747184750c609a2fd8"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="47069">
+ <rom name="load_n_run (spain) (issue 01) (side b).tzx" size="47069" crc="fbccdb05" sha1="906ac870ea8a7f8b75c8ecc7c28c93a9cf96f81b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp102">
+ <description>Load'N'Run (Spain) (Issue 02)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="114586">
+ <rom name="load_n_run (spain) (issue 02) (side a).tzx" size="114586" crc="e2c4f627" sha1="024180a6ae71ff3043448e58d92ebe00f966e7c2"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="101625">
+ <rom name="load_n_run (spain) (issue 02) (side b).tzx" size="101625" crc="0d574b99" sha1="a02bcdb8d5d161ac8dcb1f8dcb5ab9801eb8c4dc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp103">
+ <description>Load'N'Run (Spain) (Issue 03)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="180349">
+ <rom name="load_n_run (spain) (issue 03) (side a).tzx" size="180349" crc="cbff03e0" sha1="b5e4a1283736d35832b37265d13d9732811bdc9b"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="83401">
+ <rom name="load_n_run (spain) (issue 03) (side b).tzx" size="83401" crc="b30e6b93" sha1="a88bdfa2a542a07ead0f780231758b3b2c909a19"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp104">
+ <description>Load'N'Run (Spain) (Issue 04)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="145949">
+ <rom name="load_n_run (spain) (issue 04) (side a).tzx" size="145949" crc="e5917930" sha1="e1f5af533de0c2f9f405003b3032dd64f88ae0a2"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="151767">
+ <rom name="load_n_run (spain) (issue 04) (side b).tzx" size="151767" crc="9b5eef77" sha1="3a5e615334afae8fc282782109e3c665abbbd1d6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp105">
+ <description>Load'N'Run (Spain) (Issue 05)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="148350">
+ <rom name="load_n_run (spain) (issue 05) (side a).tzx" size="148350" crc="fdc7f4b1" sha1="9f4c44c0ecc2cd337f633c241dbc84800072e213"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="107976">
+ <rom name="load_n_run (spain) (issue 05) (side b).tzx" size="107976" crc="52281a59" sha1="c177ea3f483502690b18f7224cd4f584eb94052e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp106">
+ <description>Load'N'Run (Spain) (Issue 06)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="245832">
+ <rom name="load_n_run (spain) (issue 06) (side a).tzx" size="245832" crc="c503cf0e" sha1="f29c51c89cf6ceb4d22120eba2a9b1bfeb5cf43e"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="247738">
+ <rom name="load_n_run (spain) (issue 06) (side b).tzx" size="247738" crc="deb47c68" sha1="51a8ef7278590063f9461616c8dd1f6802294ac6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp107">
+ <description>Load'N'Run (Spain) (Issue 07)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="128542">
+ <rom name="load_n_run (spain) (issue 07) (side a).tzx" size="128542" crc="4dd5838a" sha1="0c099cae3ca431309dc86085debf677dbc8635e4"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="132258">
+ <rom name="load_n_run (spain) (issue 07) (side b).tzx" size="132258" crc="f0816565" sha1="71d307d7004a929934b5eaa9c7c74d39143235d3"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp108">
+ <description>Load'N'Run (Spain) (Issue 08)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="148769">
+ <rom name="load_n_run (spain) (issue 08) (side a).tzx" size="148769" crc="915533b4" sha1="4175f1c281d820fba951b0c54790742af0ab095f"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="149172">
+ <rom name="load_n_run (spain) (issue 08) (side b).tzx" size="149172" crc="986d6192" sha1="e59ca49d9660f65b53ac720142d27890c16c3e9c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp109">
+ <description>Load'N'Run (Spain) (Issue 09)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="168967">
+ <rom name="load_n_run (spain) (issue 09) (side a).tzx" size="168967" crc="1dda174c" sha1="72d9da3d7183182dd9dd92c93d252fcd5322eeb7"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="153316">
+ <rom name="load_n_run (spain) (issue 09) (side b).tzx" size="153316" crc="c3dc9242" sha1="2af5e3e7ac886a4ac3ec96b638a3c1979365d95e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp110">
+ <description>Load'N'Run (Spain) (Issue 10)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="157298">
+ <rom name="load_n_run (spain) (issue 10) (side a).tzx" size="157298" crc="f07d2967" sha1="580fb54b1166dfc997db9d87597cdc0095f9a4bc"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="144323">
+ <rom name="load_n_run (spain) (issue 10) (side b).tzx" size="144323" crc="fd501a17" sha1="672ae183ef97b7cb30738fc590ab08703748b0f9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp111">
+ <description>Load'N'Run (Spain) (Issue 11)</description>
+ <year>1985</year>
+ <publisher>Mecsa / Inforpress</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="241319">
+ <rom name="load_n_run (spain) (issue 11) (side a).tzx" size="241319" crc="d25458fa" sha1="65bb2d7ff4905230185580ef679d49a1c2b052fe"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="237231">
+ <rom name="load_n_run (spain) (issue 11) (side b).tzx" size="237231" crc="0d7b2a15" sha1="dd9ccc8dc6f5ee4a8efd18e1963398a76d6302f0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp200">
+ <description>Load'N'Run 2ª época (Spain) (Issue 00)</description>
+ <year>1986</year>
+ <publisher>Audimicro</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="97942">
+ <rom name="load_n_run 2a epoca (spain) (issue 00) (side a).tzx" size="97942" crc="b943b7c2" sha1="6fb0ff63684619f5d75fa145cfcfeb18348bac85"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="113637">
+ <rom name="load_n_run 2a epoca (spain) (issue 00) (side b).tzx" size="113637" crc="333c4340" sha1="078d2f325ebff10c62e093e444fb618703e16da7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp201">
+ <description>Load'N'Run 2ª época (Spain) (Issue 01)</description>
+ <year>1986</year>
+ <publisher>Audimicro</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="65397">
+ <rom name="load_n_run 2a epoca (spain) (issue 01) (side a).tzx" size="65397" crc="ce3cf6ca" sha1="93bebcf922558dadbbeb8618832ca4fe38ff338d"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="79996">
+ <rom name="load_n_run 2a epoca (spain) (issue 01) (side b).tzx" size="79996" crc="9faedf29" sha1="b72409365849d1ab578c8da827dc43f0f3cf6d81"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp202">
+ <description>Load'N'Run 2ª época (Spain) (Issue 02)</description>
+ <year>1986</year>
+ <publisher>Audimicro</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="120900">
+ <rom name="load_n_run 2a epoca (spain) (issue 02) (side a).tzx" size="120900" crc="ffd369f1" sha1="3754ca90d0ad2c16b16f3f3e965874890eb46b98"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="129653">
+ <rom name="load_n_run 2a epoca (spain) (issue 02) (side b).tzx" size="129653" crc="8cad587e" sha1="aa544e34f320a5ff4e1c3a24bf225030f79cfd82"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp203">
+ <description>Load'N'Run 2ª época (Spain) (Issue 03)</description>
+ <year>1986</year>
+ <publisher>Audimicro</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="174747">
+ <rom name="load_n_run 2a epoca (spain) (issue 03) (side a).tzx" size="174747" crc="635b9406" sha1="00efb0bce43583fb218a06830424f4dbdea151af"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="167695">
+ <rom name="load_n_run 2a epoca (spain) (issue 03) (side b).tzx" size="167695" crc="8806c8b5" sha1="4f0930c4b68d6132d38599cf0542018409c2e73f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp204">
+ <description>Load'N'Run 2ª época (Spain) (Issue 04)</description>
+ <year>1986</year>
+ <publisher>Audimicro</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="162009">
+ <rom name="load_n_run 2a epoca (spain) (issue 04) (side a).tzx" size="162009" crc="0ddfe7f1" sha1="820f294c1baf91d1775ed0998eb2b25076ddcb19"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="160674">
+ <rom name="load_n_run 2a epoca (spain) (issue 04) (side b).tzx" size="160674" crc="c311e034" sha1="11eadb79a2fe32a8964bccff50591c1938685153"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp205">
+ <description>Load'N'Run 2ª época (Spain) (Issue 05)</description>
+ <year>1986</year>
+ <publisher>Audimicro</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="130318">
+ <rom name="load_n_run 2a epoca (spain) (issue 05) (side a).tzx" size="130318" crc="8e075bbd" sha1="4f7640a667e2890a9ff3239320801a9c912b376f"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="126528">
+ <rom name="load_n_run 2a epoca (spain) (issue 05) (side b).tzx" size="126528" crc="805e4987" sha1="2ab62537f31c8f7bc3515e03dadbdc1cd2b99142"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp206">
+ <description>Load'N'Run 2ª época (Spain) (Issue 06)</description>
+ <year>1986</year>
+ <publisher>Audimicro</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="212341">
+ <rom name="load_n_run 2a epoca (spain) (issue 06) (side a).tzx" size="212341" crc="fe4c5006" sha1="7face0bdbeb75d751971917050e91e848da6fab0"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="193484">
+ <rom name="load_n_run 2a epoca (spain) (issue 06) (side b).tzx" size="193484" crc="36e3bfde" sha1="be755335125686263e0a8fa43503ef33aa6d0149"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp207">
+ <description>Load'N'Run 2ª época (Spain) (Issue 07)</description>
+ <year>1986</year>
+ <publisher>Audimicro</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="147048">
+ <rom name="load_n_run 2a epoca (spain) (issue 07) (side a).tzx" size="147048" crc="eb734673" sha1="1cc5c34cfb6233b978c633b905f69cd38cb60291"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="135281">
+ <rom name="load_n_run 2a epoca (spain) (issue 07) (side b).tzx" size="135281" crc="e7e2c754" sha1="9db36be9fad050d1e1ce477c4c5ea9346ea468ee"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lnrsp208">
+ <description>Load'N'Run 2ª época (Spain) (Issue 08)</description>
+ <year>1986</year>
+ <publisher>Audimicro</publisher>
+ <part name="cass1" interface="spectrum_cass">
+ <dataarea name="cass" size="83196">
+ <rom name="load_n_run 2a epoca (spain) (issue 08) (side a).tzx" size="83196" crc="9071b92f" sha1="856fec3d42fa910fdcd37c9b41e3614ae46d7bfa"/>
+ </dataarea>
+ </part>
+ <part name="cass2" interface="spectrum_cass">
+ <dataarea name="cass" size="38948">
+ <rom name="load_n_run 2a epoca (spain) (issue 08) (side b).tzx" size="38948" crc="0d4589d3" sha1="0528a23138269a62c0abe3175ac3ff31388a2966"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- ##############################################################################################################################
covertapes from 'Crash'
############################################################################################################################## -->
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index b443021f745..a2155edcea2 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -2670,6 +2670,20 @@ end
---------------------------------------------------
--
+--@src/devices/bus/sdk85/memexp.h,BUSES["SDK85"] = true
+---------------------------------------------------
+
+if (BUSES["SDK85"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/bus/sdk85/memexp.cpp",
+ MAME_DIR .. "src/devices/bus/sdk85/memexp.h",
+ MAME_DIR .. "src/devices/bus/sdk85/i8755.cpp",
+ MAME_DIR .. "src/devices/bus/sdk85/i8755.h",
+ }
+end
+
+---------------------------------------------------
+--
--@src/devices/bus/snes/snes_slot.h,BUSES["SNES"] = true
---------------------------------------------------
diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua
index f04cb88e031..d831ac381ca 100644
--- a/scripts/src/machine.lua
+++ b/scripts/src/machine.lua
@@ -3132,6 +3132,18 @@ end
---------------------------------------------------
--
+--@src/devices/machine/vic_pl192.h,MACHINES["VIC_PL192"] = true
+---------------------------------------------------
+
+if (MACHINES["VIC_PL192"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/machine/vic_pl192.cpp",
+ MAME_DIR .. "src/devices/machine/vic_pl192.h",
+ }
+end
+
+---------------------------------------------------
+--
--@src/devices/machine/wd_fdc.h,MACHINES["WD_FDC"] = true
---------------------------------------------------
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index d07aeab2569..85b6ee9c86e 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -672,6 +672,7 @@ MACHINES["UPD71071"] = true
MACHINES["UPD765"] = true
MACHINES["FDC_PLL"] = true
MACHINES["V3021"] = true
+MACHINES["VIC_PL192"] = true
MACHINES["WD_FDC"] = true
MACHINES["WD1000"] = true
MACHINES["WD1010"] = true
@@ -861,6 +862,7 @@ BUSES["SATURN"] = true
BUSES["SBUS"] = true
BUSES["SCSI"] = true
BUSES["SCV"] = true
+BUSES["SDK85"] = true
BUSES["SEGA8"] = true
BUSES["SG1000_EXP"] = true
BUSES["SGIKBD"] = true
@@ -2081,6 +2083,8 @@ files {
MAME_DIR .. "src/mame/machine/decioga.h",
MAME_DIR .. "src/mame/drivers/dectalk.cpp",
MAME_DIR .. "src/mame/drivers/decwritr.cpp",
+ MAME_DIR .. "src/mame/machine/dc305.cpp",
+ MAME_DIR .. "src/mame/machine/dc305.h",
MAME_DIR .. "src/mame/drivers/jensen.cpp",
MAME_DIR .. "src/mame/includes/jensen.h",
MAME_DIR .. "src/mame/drivers/pdp11.cpp",
diff --git a/src/devices/bus/sdk85/i8755.cpp b/src/devices/bus/sdk85/i8755.cpp
new file mode 100644
index 00000000000..8c1d7a79fbf
--- /dev/null
+++ b/src/devices/bus/sdk85/i8755.cpp
@@ -0,0 +1,65 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+
+#include "emu.h"
+#include "i8755.h"
+
+// device type definition
+DEFINE_DEVICE_TYPE(SDK85_I8755, sdk85exp_i8755_device, "sdk85exp_i8755", "SDK-85 PROM I/O Expansion (Intel 8755)")
+
+sdk85exp_i8755_device::sdk85exp_i8755_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, SDK85_I8755, tag, owner, clock)
+ , device_sdk85_romexp_card_interface(mconfig, *this)
+ , m_i8755(*this, "i8755")
+{
+}
+
+void sdk85exp_i8755_device::device_start()
+{
+}
+
+u8 sdk85exp_i8755_device::read_memory(offs_t offset)
+{
+ return m_i8755->memory_r(offset);
+}
+
+void sdk85exp_i8755_device::write_memory(offs_t offset, u8 data)
+{
+ logerror("Writing %02Xh to base + %03Xh\n", data, offset);
+ m_i8755->io_w(offset & 3, data);
+}
+
+u8 sdk85exp_i8755_device::read_io(offs_t offset)
+{
+ return m_i8755->io_r(offset & 3);
+}
+
+void sdk85exp_i8755_device::write_io(offs_t offset, u8 data)
+{
+ m_i8755->io_w(offset & 3, data);
+}
+
+void sdk85exp_i8755_device::device_add_mconfig(machine_config &config)
+{
+ I8355(config, m_i8755, DERIVED_CLOCK(1, 1));
+}
+
+u8 *sdk85exp_i8755_device::get_rom_base(u32 size)
+{
+ if (size != 0x800)
+ {
+ osd_printf_error("sdk85exp_i8755: Data length must be 2,048 bytes\n");
+ return nullptr;
+ }
+
+ return memregion("i8755")->base();
+}
+
+ROM_START(sdk85exp_i8755)
+ ROM_REGION(0x800, "i8755", ROMREGION_ERASE00)
+ROM_END
+
+const tiny_rom_entry *sdk85exp_i8755_device::device_rom_region() const
+{
+ return ROM_NAME(sdk85exp_i8755);
+}
diff --git a/src/devices/bus/sdk85/i8755.h b/src/devices/bus/sdk85/i8755.h
new file mode 100644
index 00000000000..2960be386e7
--- /dev/null
+++ b/src/devices/bus/sdk85/i8755.h
@@ -0,0 +1,40 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+
+#ifndef MAME_BUS_SDK85_I8755_H
+#define MAME_BUS_SDK85_I8755_H
+
+#pragma once
+
+#include "memexp.h"
+#include "machine/i8355.h"
+
+// ======================> sdk85exp_i8755_device
+
+class sdk85exp_i8755_device : public device_t, public device_sdk85_romexp_card_interface
+{
+public:
+ // construction/destruction
+ sdk85exp_i8755_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_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ // device_sdk85_romexp_card_interface overrides
+ virtual u8 read_memory(offs_t offset) override;
+ virtual void write_memory(offs_t offset, u8 data) override;
+ virtual u8 read_io(offs_t offset) override;
+ virtual void write_io(offs_t offset, u8 data) override;
+ virtual u8 *get_rom_base(u32 size) override;
+
+private:
+ required_device<i8355_device> m_i8755;
+};
+
+// device type declaration
+DECLARE_DEVICE_TYPE(SDK85_I8755, sdk85exp_i8755_device)
+
+#endif // MAME_BUS_SDK85_I8755_H
diff --git a/src/devices/bus/sdk85/memexp.cpp b/src/devices/bus/sdk85/memexp.cpp
new file mode 100644
index 00000000000..ba7f402ca68
--- /dev/null
+++ b/src/devices/bus/sdk85/memexp.cpp
@@ -0,0 +1,94 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ SDK-85 memory expansion (ALE-multiplexed)
+
+***************************************************************************/
+
+#include "emu.h"
+#include "memexp.h"
+
+#include "i8755.h"
+
+// device type definition
+DEFINE_DEVICE_TYPE(SDK85_ROMEXP, sdk85_romexp_device, "sdk85_romexp", "SDK-85 expansion ROM socket")
+
+sdk85_romexp_device::sdk85_romexp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, SDK85_ROMEXP, tag, owner, clock)
+ , device_image_interface(mconfig, *this)
+ , device_single_card_slot_interface<device_sdk85_romexp_card_interface>(mconfig, *this)
+ , m_dev(nullptr)
+{
+}
+
+image_init_result sdk85_romexp_device::call_load()
+{
+ if (get_card_device() != nullptr)
+ {
+ u32 size = loaded_through_softlist() ? get_software_region_length("rom") : length();
+ u8 *base = get_card_device()->get_rom_base(size);
+ if (base == nullptr)
+ return image_init_result::FAIL;
+
+ if (loaded_through_softlist())
+ memcpy(base, get_software_region("rom"), size);
+ else
+ fread(base, size);
+ }
+
+ return image_init_result::PASS;
+}
+
+std::string sdk85_romexp_device::get_default_card_software(get_default_card_software_hook &hook) const
+{
+ return software_get_default_slot("i8755");
+}
+
+void sdk85_romexp_device::device_start()
+{
+ m_dev = get_card_device();
+}
+
+u8 sdk85_romexp_device::memory_r(offs_t offset)
+{
+ if (m_dev != nullptr)
+ return m_dev->read_memory(offset);
+ else
+ return 0xff;
+}
+
+void sdk85_romexp_device::memory_w(offs_t offset, u8 data)
+{
+ if (m_dev != nullptr)
+ m_dev->write_memory(offset, data);
+}
+
+u8 sdk85_romexp_device::io_r(offs_t offset)
+{
+ if (m_dev != nullptr)
+ return m_dev->read_io(offset);
+ else
+ return 0xff;
+}
+
+void sdk85_romexp_device::io_w(offs_t offset, u8 data)
+{
+ if (m_dev != nullptr)
+ m_dev->write_io(offset, data);
+}
+
+void sdk85_romexp_device::rom_options(device_slot_interface &slot)
+{
+ slot.option_add_internal("i8755", SDK85_I8755);
+}
+
+device_sdk85_romexp_card_interface::device_sdk85_romexp_card_interface(const machine_config &mconfig, device_t &device)
+ : device_interface(device, "sdk85_romexp")
+{
+}
+
+u8 *device_sdk85_romexp_card_interface::get_rom_base(u32 size)
+{
+ return nullptr;
+}
diff --git a/src/devices/bus/sdk85/memexp.h b/src/devices/bus/sdk85/memexp.h
new file mode 100644
index 00000000000..3023ea584bf
--- /dev/null
+++ b/src/devices/bus/sdk85/memexp.h
@@ -0,0 +1,83 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+
+#ifndef MAME_BUS_SDK85_MEMEXP_H
+#define MAME_BUS_SDK85_MEMEXP_H
+
+#pragma once
+
+#include "softlist_dev.h"
+
+// ======================> device_sdk85_romexp_card_interface
+
+class device_sdk85_romexp_card_interface : public device_interface
+{
+ friend class sdk85_romexp_device;
+
+protected:
+ device_sdk85_romexp_card_interface(const machine_config &mconfig, device_t &device);
+
+ virtual u8 read_memory(offs_t offset) = 0;
+ virtual void write_memory(offs_t offset, u8 data) = 0;
+ virtual u8 read_io(offs_t offset) = 0;
+ virtual void write_io(offs_t offset, u8 data) = 0;
+
+ virtual u8 *get_rom_base(u32 size);
+};
+
+// ======================> sdk85_romexp_device
+
+class sdk85_romexp_device : public device_t,
+ public device_image_interface,
+ public device_single_card_slot_interface<device_sdk85_romexp_card_interface>
+{
+public:
+ // construction/destruction
+ sdk85_romexp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+ template <typename T>
+ sdk85_romexp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock, T &&opts, const char *dflt)
+ : sdk85_romexp_device(mconfig, tag, owner, clock)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ static void rom_options(device_slot_interface &device);
+
+ u8 memory_r(offs_t offset);
+ void memory_w(offs_t offset, u8 data);
+ u8 io_r(offs_t offset);
+ void io_w(offs_t offset, u8 data);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // image-level overrides
+ virtual image_init_result call_load() override;
+ virtual void call_unload() override { }
+
+ virtual iodevice_t image_type() const noexcept override { return IO_ROM; }
+ virtual bool is_readable() const noexcept override { return true; }
+ virtual bool is_writeable() const noexcept override { return false; }
+ virtual bool is_creatable() const noexcept override { return false; }
+ virtual bool must_be_loaded() const noexcept override { return false; }
+ virtual bool is_reset_on_load() const noexcept override { return true; }
+ virtual const char *image_interface() const noexcept override { return "sdk85_rom"; }
+ virtual const char *file_extensions() const noexcept override { return "bin"; }
+
+ virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
+
+ // slot interface overrides
+ virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
+
+private:
+ device_sdk85_romexp_card_interface *m_dev;
+};
+
+// device type declaration
+DECLARE_DEVICE_TYPE(SDK85_ROMEXP, sdk85_romexp_device)
+
+#endif // MAME_BUS_SDK85_MEMEXP_H
diff --git a/src/devices/cpu/arm7/arm7.cpp b/src/devices/cpu/arm7/arm7.cpp
index 76eefbb44d3..0637c42ddc4 100644
--- a/src/devices/cpu/arm7/arm7.cpp
+++ b/src/devices/cpu/arm7/arm7.cpp
@@ -42,7 +42,7 @@ TODO:
#define LOG_COPRO_UNKNOWN (1 << 4)
#define LOG_COPRO_RESERVED (1 << 5)
-#define VERBOSE (0)
+#define VERBOSE (0) //(LOG_MMU | LOG_COPRO_READS | LOG_COPRO_WRITES)
#include "logmacro.h"
#define PRINT_HAPYFSH2 (0)
@@ -726,7 +726,6 @@ void arm946es_cpu_device::device_start()
save_item(NAME(DTCM));
}
-
void arm7_cpu_device::state_export(const device_state_entry &entry)
{
switch (entry.index())
@@ -787,6 +786,11 @@ void arm7_cpu_device::device_reset()
m_impstate.cache_dirty = true;
}
+void arm1176jzf_s_cpu_device::device_reset()
+{
+ arm7_cpu_device::device_reset();
+ m_control = 0x00050078;
+}
#define UNEXECUTED() \
m_r[eR15] += 4; \
@@ -1413,7 +1417,7 @@ WRITE32_MEMBER( arm7_cpu_device::arm7_rt_w_callback )
#if ARM7_MMU_ENABLE_HACK
if (((data & COPRO_CTRL_MMU_EN) != 0) && ((COPRO_CTRL & COPRO_CTRL_MMU_EN) == 0))
{
- >m_mmu_enable_addr = R15;
+ m_mmu_enable_addr = R15;
}
if (((data & COPRO_CTRL_MMU_EN) == 0) && ((COPRO_CTRL & COPRO_CTRL_MMU_EN) != 0))
{
@@ -1778,6 +1782,44 @@ void arm7_cpu_device::arm7_dt_w_callback(uint32_t insn, uint32_t *prn)
}
}
+READ32_MEMBER( arm1176jzf_s_cpu_device::arm7_rt_r_callback )
+{
+ uint32_t opcode = offset;
+ uint8_t crn = (opcode & INSN_COPRO_CREG) >> INSN_COPRO_CREG_SHIFT;
+ uint8_t op1 = (opcode & INSN_COPRO_OP1) >> INSN_COPRO_OP1_SHIFT;
+ uint8_t op2 = (opcode & INSN_COPRO_OP2) >> INSN_COPRO_OP2_SHIFT;
+ uint8_t crm = opcode & INSN_COPRO_OP3;
+ uint8_t cpnum = (opcode & INSN_COPRO_CPNUM) >> INSN_COPRO_CPNUM_SHIFT;
+ uint32_t data = 0;
+
+// printf("arm7946: copro %d write %x to cReg %d op2 %d op3 %d (mask %08x)\n", cpnum, data, cReg, op2, op3, mem_mask);
+
+ if (cpnum == 15)
+ {
+ if(crn == 0 && op1 == 0 && crm == 0 && op2 == 0) data = 0x410FB767; //ARM1176JZF-S Main ID.
+ if(crn == 1 && op1 == 0 && crm == 0 && op2 == 0) data = m_control;
+ }
+
+ return data;
+}
+
+WRITE32_MEMBER( arm1176jzf_s_cpu_device::arm7_rt_w_callback )
+{
+ uint32_t opcode = offset;
+ uint8_t crn = (opcode & INSN_COPRO_CREG) >> INSN_COPRO_CREG_SHIFT;
+ uint8_t op1 = (opcode & INSN_COPRO_OP1) >> INSN_COPRO_OP1_SHIFT;
+ uint8_t op2 = (opcode & INSN_COPRO_OP2) >> INSN_COPRO_OP2_SHIFT;
+ uint8_t crm = opcode & INSN_COPRO_OP3;
+ uint8_t cpnum = (opcode & INSN_COPRO_CPNUM) >> INSN_COPRO_CPNUM_SHIFT;
+
+// printf("arm7946: copro %d write %x to cReg %d op2 %d op3 %d (mask %08x)\n", cpnum, data, cReg, op2, op3, mem_mask);
+
+ if (cpnum == 15)
+ {
+ LOGMASKED(LOG_COPRO_WRITES, "arm7_rt_w_callback: CP15 CRn %02x Op1 %02x CRm %02x Op2 %02x data %08x\n", crn, op1, crm, op2, data);
+ if(crn == 1 && op1 == 0 && crm == 0 && op2 == 0) m_control = data;
+ }
+}
/***************************************************************************
* Default Memory Handlers
diff --git a/src/devices/cpu/arm7/arm7.h b/src/devices/cpu/arm7/arm7.h
index 938950cc9d8..5a7ca665b6f 100644
--- a/src/devices/cpu/arm7/arm7.h
+++ b/src/devices/cpu/arm7/arm7.h
@@ -179,7 +179,7 @@ protected:
uint32_t m_domainAccessControl;
uint8_t m_decoded_access_control[16];
- uint8_t m_archRev; // ARM architecture revision (3, 4, and 5 are valid)
+ uint8_t m_archRev; // ARM architecture revision (3, 4, 5, and 6 are valid)
uint32_t m_archFlags; // architecture flags
uint32_t m_vectorbase;
@@ -674,6 +674,12 @@ class arm1176jzf_s_cpu_device : public arm11_cpu_device
public:
// construction/destruction
arm1176jzf_s_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual DECLARE_READ32_MEMBER( arm7_rt_r_callback ) override;
+ virtual DECLARE_WRITE32_MEMBER( arm7_rt_w_callback ) override;
+
+protected:
+ virtual void device_reset() override;
};
class igs036_cpu_device : public arm946es_cpu_device
diff --git a/src/devices/cpu/arm7/arm7core.h b/src/devices/cpu/arm7/arm7core.h
index a6a7838bed4..320638ce626 100644
--- a/src/devices/cpu/arm7/arm7core.h
+++ b/src/devices/cpu/arm7/arm7core.h
@@ -356,12 +356,14 @@ static const int sRegisterTable[ARM7_NUM_MODES][18] =
#define INSN_RD_SHIFT 12
#define INSN_COND_SHIFT 28
+#define INSN_COPRO_OP1 ((uint32_t) 0x00e00000u)
#define INSN_COPRO_N ((uint32_t) 0x00100000u)
#define INSN_COPRO_CREG ((uint32_t) 0x000f0000u)
#define INSN_COPRO_AREG ((uint32_t) 0x0000f000u)
#define INSN_COPRO_CPNUM ((uint32_t) 0x00000f00u)
#define INSN_COPRO_OP2 ((uint32_t) 0x000000e0u)
#define INSN_COPRO_OP3 ((uint32_t) 0x0000000fu)
+#define INSN_COPRO_OP1_SHIFT 21
#define INSN_COPRO_N_SHIFT 20
#define INSN_COPRO_CREG_SHIFT 16
#define INSN_COPRO_AREG_SHIFT 12
diff --git a/src/devices/cpu/drccache.cpp b/src/devices/cpu/drccache.cpp
index 5906a641fee..fc86fd37cc6 100644
--- a/src/devices/cpu/drccache.cpp
+++ b/src/devices/cpu/drccache.cpp
@@ -245,7 +245,7 @@ void drc_cache::request_oob_codegen(drc_oob_delegate callback, void *param1, voi
new (oob) oob_handler();
// fill it in
- oob->m_callback = callback;
+ oob->m_callback = std::move(callback);
oob->m_param1 = param1;
oob->m_param2 = param2;
diff --git a/src/devices/cpu/i8089/i8089_dasm.cpp b/src/devices/cpu/i8089/i8089_dasm.cpp
index 8e45053b1ba..ad8b9d5705e 100644
--- a/src/devices/cpu/i8089/i8089_dasm.cpp
+++ b/src/devices/cpu/i8089/i8089_dasm.cpp
@@ -60,7 +60,7 @@ std::string i8089_disassembler::invalid()
}
// to register or memory from immediate
-std::string i8089_disassembler::from_i(std::string instr8, std::string instr16, std::string target)
+std::string i8089_disassembler::from_i(const std::string &instr8, const std::string &instr16, const std::string &target)
{
if (m_w == 0 && m_wb == 1)
return util::string_format("%s %s, %02x", instr8, target, fetch_immediate());
@@ -71,7 +71,7 @@ std::string i8089_disassembler::from_i(std::string instr8, std::string instr16,
}
// register, immediate
-std::string i8089_disassembler::inst_ri(std::string instr8, std::string instr16)
+std::string i8089_disassembler::inst_ri(const std::string &instr8, const std::string &instr16)
{
if (m_mm == 0)
return from_i(instr8, instr16, m_reg[m_brp]);
@@ -80,7 +80,7 @@ std::string i8089_disassembler::inst_ri(std::string instr8, std::string instr16)
}
// register
-std::string i8089_disassembler::inst_r(std::string instr)
+std::string i8089_disassembler::inst_r(const std::string &instr)
{
if (m_mm == 0 && m_w == 0 && m_aa == 0 && m_wb == 0)
return util::string_format("%s %s", instr, m_reg[m_brp]);
@@ -89,7 +89,7 @@ std::string i8089_disassembler::inst_r(std::string instr)
}
// jump register
-std::string i8089_disassembler::inst_jr(std::string instr8, std::string instr16)
+std::string i8089_disassembler::inst_jr(const std::string &instr8, const std::string &instr16)
{
uint16_t i = fetch_immediate();
if (m_mm == 0 && m_w == 0 && m_wb == 1)
@@ -101,14 +101,14 @@ std::string i8089_disassembler::inst_jr(std::string instr8, std::string instr16)
}
// memory immediate
-std::string i8089_disassembler::inst_mi(std::string instr8, std::string instr16)
+std::string i8089_disassembler::inst_mi(const std::string &instr8, const std::string &instr16)
{
std::string off = offset();
return from_i(instr8, instr16, off);
}
// register memory
-std::string i8089_disassembler::inst_rm(std::string instr8, std::string instr16)
+std::string i8089_disassembler::inst_rm(const std::string &instr8, const std::string &instr16)
{
std::string off = offset();
if (m_w == 0 && m_wb == 0)
@@ -120,7 +120,7 @@ std::string i8089_disassembler::inst_rm(std::string instr8, std::string instr16)
}
// jump memory
-std::string i8089_disassembler::inst_jm(std::string jump8short, std::string jump8long)
+std::string i8089_disassembler::inst_jm(const std::string &jump8short, const std::string &jump8long)
{
std::string off = offset();
uint16_t i = fetch_immediate();
@@ -133,7 +133,7 @@ std::string i8089_disassembler::inst_jm(std::string jump8short, std::string jump
}
// jump memory bit
-std::string i8089_disassembler::inst_jmb(std::string jump8short, std::string jump8long)
+std::string i8089_disassembler::inst_jmb(const std::string &jump8short, const std::string &jump8long)
{
std::string off = offset();
uint16_t i = fetch_immediate();
@@ -146,7 +146,7 @@ std::string i8089_disassembler::inst_jmb(std::string jump8short, std::string jum
}
// memory register
-std::string i8089_disassembler::inst_mr(std::string instr8, std::string instr16)
+std::string i8089_disassembler::inst_mr(const std::string &instr8, const std::string &instr16)
{
std::string off = offset();
if (m_w == 0 && m_wb == 0)
@@ -158,7 +158,7 @@ std::string i8089_disassembler::inst_mr(std::string instr8, std::string instr16)
}
// pointer memory
-std::string i8089_disassembler::inst_pm(std::string instr16)
+std::string i8089_disassembler::inst_pm(const std::string &instr16)
{
std::string off = offset();
if (m_w == 1 && m_wb == 0)
@@ -168,7 +168,7 @@ std::string i8089_disassembler::inst_pm(std::string instr16)
}
// memory pointer
-std::string i8089_disassembler::inst_mp(std::string instr16)
+std::string i8089_disassembler::inst_mp(const std::string &instr16)
{
std::string off = offset();
if (m_w == 1 && m_wb == 0)
@@ -178,7 +178,7 @@ std::string i8089_disassembler::inst_mp(std::string instr16)
}
// jump memory
-std::string i8089_disassembler::inst_j16(std::string jump8short, std::string jump16short, std::string jump8long, std::string jump16long)
+std::string i8089_disassembler::inst_j16(const std::string &jump8short, const std::string &jump16short, const std::string &jump8long, const std::string &jump16long)
{
std::string off = offset();
uint16_t i = fetch_immediate();
@@ -195,7 +195,7 @@ std::string i8089_disassembler::inst_j16(std::string jump8short, std::string jum
}
// memory
-std::string i8089_disassembler::inst_m(std::string instr8, std::string instr16)
+std::string i8089_disassembler::inst_m(const std::string &instr8, const std::string &instr16)
{
std::string off = offset();
if (m_w == 0 && m_wb == 0)
@@ -207,7 +207,7 @@ std::string i8089_disassembler::inst_m(std::string instr8, std::string instr16)
}
// memory bit
-std::string i8089_disassembler::inst_b(std::string instr)
+std::string i8089_disassembler::inst_b(const std::string &instr)
{
std::string off = offset();
if (m_w == 0 && m_wb == 0)
diff --git a/src/devices/cpu/i8089/i8089_dasm.h b/src/devices/cpu/i8089/i8089_dasm.h
index cf59d4b483c..a8a7c2115a5 100644
--- a/src/devices/cpu/i8089/i8089_dasm.h
+++ b/src/devices/cpu/i8089/i8089_dasm.h
@@ -49,20 +49,20 @@ private:
std::string offset();
std::string invalid();
- std::string from_i(std::string instr8, std::string instr16, std::string target);
- std::string inst_ri(std::string instr8, std::string instr16);
- std::string inst_r(std::string instr);
- std::string inst_jr(std::string instr8, std::string instr16);
- std::string inst_mi(std::string instr8, std::string instr16);
- std::string inst_rm(std::string instr8, std::string instr16);
- std::string inst_jm(std::string jump8short, std::string jump8long);
- std::string inst_jmb(std::string jump8short, std::string jump8long);
- std::string inst_mr(std::string instr8, std::string instr16);
- std::string inst_pm(std::string instr16);
- std::string inst_mp(std::string instr16);
- std::string inst_j16(std::string jump8short, std::string jump16short, std::string jump8long, std::string jump16long);
- std::string inst_m(std::string instr8, std::string instr16);
- std::string inst_b(std::string instr);
+ std::string from_i(const std::string &instr8, const std::string &instr16, const std::string &target);
+ std::string inst_ri(const std::string &instr8, const std::string &instr16);
+ std::string inst_r(const std::string &instr);
+ std::string inst_jr(const std::string &instr8, const std::string &instr16);
+ std::string inst_mi(const std::string &instr8, const std::string &instr16);
+ std::string inst_rm(const std::string &instr8, const std::string &instr16);
+ std::string inst_jm(const std::string &jump8short, const std::string &jump8long);
+ std::string inst_jmb(const std::string &jump8short, const std::string &jump8long);
+ std::string inst_mr(const std::string &instr8, const std::string &instr16);
+ std::string inst_pm(const std::string &instr16);
+ std::string inst_mp(const std::string &instr16);
+ std::string inst_j16(const std::string &jump8short, const std::string &jump16short, const std::string &jump8long, const std::string &jump16long);
+ std::string inst_m(const std::string &instr8, const std::string &instr16);
+ std::string inst_b(const std::string &instr);
std::string do_disassemble();
void load_instruction();
diff --git a/src/devices/cpu/ns32000/ns32000dasm.cpp b/src/devices/cpu/ns32000/ns32000dasm.cpp
index 8bc25f48c60..9556f7bcdda 100644
--- a/src/devices/cpu/ns32000/ns32000dasm.cpp
+++ b/src/devices/cpu/ns32000/ns32000dasm.cpp
@@ -360,7 +360,7 @@ int8_t ns32000_disassembler::short2int(uint8_t val)
return (val & 0x08) ? val | 0xf0 : val;
}
-std::string ns32000_disassembler::mnemonic_index(std::string form, std::string itype, std::string ftype)
+std::string ns32000_disassembler::mnemonic_index(std::string form, const std::string &itype, const std::string &ftype)
{
if (itype.size() && form.find('i') != std::string::npos)
form.replace(form.find('i'), 1, itype);
diff --git a/src/devices/cpu/ns32000/ns32000dasm.h b/src/devices/cpu/ns32000/ns32000dasm.h
index 4cbf4cf3bda..0c8d3e2ab82 100644
--- a/src/devices/cpu/ns32000/ns32000dasm.h
+++ b/src/devices/cpu/ns32000/ns32000dasm.h
@@ -101,7 +101,7 @@ private:
static char const *const M[];
static char const *const PR[];
- std::string mnemonic_index(std::string form, std::string itype, std::string ftype);
+ std::string mnemonic_index(std::string form, const std::string &itype, const std::string &ftype);
uint8_t opcode_format(uint8_t byte);
int8_t short2int(uint8_t val);
static inline int32_t get_disp(offs_t &pc, const data_buffer &opcodes);
diff --git a/src/devices/cpu/pace/pace.h b/src/devices/cpu/pace/pace.h
index 5fdbcdb7e57..3d181104002 100644
--- a/src/devices/cpu/pace/pace.h
+++ b/src/devices/cpu/pace/pace.h
@@ -91,7 +91,7 @@ protected:
virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
private:
- enum class cycle {
+ enum class cycle : u8 {
IFETCH_M1, LEA_M2, RDEA_M3,
BOC_M4, BOC_M5,
diff --git a/src/devices/cpu/s2650/2650dasm.cpp b/src/devices/cpu/s2650/2650dasm.cpp
index 34b144532d2..871ea354594 100644
--- a/src/devices/cpu/s2650/2650dasm.cpp
+++ b/src/devices/cpu/s2650/2650dasm.cpp
@@ -45,7 +45,7 @@ std::string s2650_disassembler::IMM(offs_t pc, const data_buffer &params)
const char s2650_disassembler::cc[4] = { 'z', 'p', 'm', 'a' };
-void s2650_disassembler::add(std::string &buf, std::string str)
+void s2650_disassembler::add(std::string &buf, const std::string &str)
{
if(!buf.empty())
buf += '+';
diff --git a/src/devices/cpu/s2650/2650dasm.h b/src/devices/cpu/s2650/2650dasm.h
index 15f04cdffa7..cb5db5f85c8 100644
--- a/src/devices/cpu/s2650/2650dasm.h
+++ b/src/devices/cpu/s2650/2650dasm.h
@@ -34,7 +34,7 @@ private:
static const int rel[0x100];
static const char cc[4];
- void add(std::string &buf, std::string str);
+ void add(std::string &buf, const std::string &str);
std::string SYM(int addr);
std::string IMM(offs_t pc, const data_buffer &params);
std::string IMM_PSL(offs_t pc, const data_buffer &params);
diff --git a/src/devices/cpu/unsp/unsp.cpp b/src/devices/cpu/unsp/unsp.cpp
index ff27f97df62..40b96419e9f 100644
--- a/src/devices/cpu/unsp/unsp.cpp
+++ b/src/devices/cpu/unsp/unsp.cpp
@@ -296,7 +296,7 @@ void unsp_20_device::device_start()
void unsp_device::device_reset()
{
- for (int i = 0; i < m_numregs; i++)
+ for (int i = 0; i < ARRAY_LENGTH(m_core->m_r); i++)
{
if (i < m_numregs)
m_core->m_r[i] = 0;
diff --git a/src/devices/cpu/we32000/we32100d.cpp b/src/devices/cpu/we32000/we32100d.cpp
index f2453d33ac9..65406d85446 100644
--- a/src/devices/cpu/we32000/we32100d.cpp
+++ b/src/devices/cpu/we32000/we32100d.cpp
@@ -293,7 +293,8 @@ offs_t we32100_disassembler::dasm_30xx(std::ostream &stream, offs_t &pc, const w
u8 op = opcodes.r8(pc++);
switch (op)
- { case 0x09:
+ {
+ case 0x09:
stream << "MVERNO";
break;
diff --git a/src/devices/machine/i8355.cpp b/src/devices/machine/i8355.cpp
index 917f46ea8b1..f6a28f07297 100644
--- a/src/devices/machine/i8355.cpp
+++ b/src/devices/machine/i8355.cpp
@@ -51,9 +51,9 @@ DEFINE_DEVICE_TYPE(I8355, i8355_device, "i8355", "Intel 8355")
// read_port - read from input port
//-------------------------------------------------
-inline uint8_t i8355_device::read_port(int port)
+inline u8 i8355_device::read_port(int port)
{
- uint8_t data = m_output[port] & m_ddr[port];
+ u8 data = m_output[port] & m_ddr[port];
if (m_ddr[port] != 0xff)
{
@@ -69,7 +69,7 @@ inline uint8_t i8355_device::read_port(int port)
// write_port - write to output port
//-------------------------------------------------
-inline void i8355_device::write_port(int port, uint8_t data)
+inline void i8355_device::write_port(int port, u8 data)
{
m_output[port] = data;
@@ -87,7 +87,7 @@ inline void i8355_device::write_port(int port, uint8_t data)
// i8355_device - constructor
//-------------------------------------------------
-i8355_device::i8355_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+i8355_device::i8355_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, I8355, tag, owner, clock),
m_in_pa_cb(*this),
m_out_pa_cb(*this),
@@ -131,11 +131,11 @@ void i8355_device::device_reset()
// io_r - register read
//-------------------------------------------------
-READ8_MEMBER( i8355_device::io_r )
+u8 i8355_device::io_r(offs_t offset)
{
int port = offset & 0x01;
- uint8_t data = 0;
+ u8 data = 0;
switch (offset & 0x03)
{
@@ -158,7 +158,7 @@ READ8_MEMBER( i8355_device::io_r )
// io_w - register write
//-------------------------------------------------
-WRITE8_MEMBER( i8355_device::io_w )
+void i8355_device::io_w(offs_t offset, u8 data)
{
int port = offset & 0x01;
@@ -186,7 +186,7 @@ WRITE8_MEMBER( i8355_device::io_w )
// memory_r - internal ROM read
//-------------------------------------------------
-READ8_MEMBER( i8355_device::memory_r )
+u8 i8355_device::memory_r(offs_t offset)
{
return m_rom[offset];
}
diff --git a/src/devices/machine/i8355.h b/src/devices/machine/i8355.h
index 9a6228d0fa0..e9205a86a9d 100644
--- a/src/devices/machine/i8355.h
+++ b/src/devices/machine/i8355.h
@@ -45,10 +45,10 @@ public:
auto in_pb() { return m_in_pb_cb.bind(); }
auto out_pb() { return m_out_pb_cb.bind(); }
- DECLARE_READ8_MEMBER( io_r );
- DECLARE_WRITE8_MEMBER( io_w );
+ u8 io_r(offs_t offset);
+ void io_w(offs_t offset, u8 data);
- DECLARE_READ8_MEMBER( memory_r );
+ u8 memory_r(offs_t offset);
protected:
// device-level overrides
diff --git a/src/devices/machine/mc68901.cpp b/src/devices/machine/mc68901.cpp
index 3994a4863c6..082e02985a7 100644
--- a/src/devices/machine/mc68901.cpp
+++ b/src/devices/machine/mc68901.cpp
@@ -1436,7 +1436,10 @@ void mc68901_device::tx_clock()
// automatic turnaround enables the receiver
if (m_tsr & TSR_AUTO_TURNAROUND)
+ {
m_rsr |= RSR_RCV_ENABLE;
+ m_tsr &= ~TSR_AUTO_TURNAROUND;
+ }
}
else if ((m_tsr & TSR_BUFFER_EMPTY) && !(m_tsr & TSR_UNDERRUN_ERROR) && !send_break)
{
diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp
index 01aa2170dff..799dbe7d640 100644
--- a/src/devices/machine/netlist.cpp
+++ b/src/devices/machine/netlist.cpp
@@ -991,9 +991,9 @@ void netlist_mame_stream_input_device::custom_netlist_additions(netlist::netlist
pstring sparam = plib::pfmt("STREAM_INPUT.CHAN{1}")(m_channel);
nlstate.setup().register_param(sparam, pstring(m_param_name));
sparam = plib::pfmt("STREAM_INPUT.MULT{1}")(m_channel);
- nlstate.setup().register_param(sparam, m_mult);
+ nlstate.setup().register_param_val(sparam, m_mult);
sparam = plib::pfmt("STREAM_INPUT.OFFSET{1}")(m_channel);
- nlstate.setup().register_param(sparam, m_offset);
+ nlstate.setup().register_param_val(sparam, m_offset);
}
// ----------------------------------------------------------------------------------------
@@ -1027,9 +1027,9 @@ void netlist_mame_stream_output_device::custom_netlist_additions(netlist::netlis
//snd_out = dynamic_cast<NETLIB_NAME(sound_out) *>(setup.register_dev("nld_sound_out", sname));
nlstate.setup().register_dev("NETDEV_SOUND_OUT", sname);
- nlstate.setup().register_param(sname + ".CHAN" , m_channel);
- nlstate.setup().register_param(sname + ".MULT", m_mult);
- nlstate.setup().register_param(sname + ".OFFSET", m_offset);
+ nlstate.setup().register_param_val(sname + ".CHAN" , m_channel);
+ nlstate.setup().register_param_val(sname + ".MULT", m_mult);
+ nlstate.setup().register_param_val(sname + ".OFFSET", m_offset);
nlstate.setup().register_link(sname + ".IN", pstring(m_out_name));
}
diff --git a/src/devices/machine/s3c2400.h b/src/devices/machine/s3c2400.h
index e8aeb2b14fc..8ffff4968ff 100644
--- a/src/devices/machine/s3c2400.h
+++ b/src/devices/machine/s3c2400.h
@@ -455,6 +455,8 @@ private:
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
+ memory_access_cache<2, 0, ENDIANNESS_LITTLE> *m_cache;
+
memcon_t m_memcon;
usbhost_t m_usbhost;
irq_t m_irq;
diff --git a/src/devices/machine/s3c2410.h b/src/devices/machine/s3c2410.h
index 8094c109128..dd87eba239f 100644
--- a/src/devices/machine/s3c2410.h
+++ b/src/devices/machine/s3c2410.h
@@ -563,6 +563,8 @@ private:
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
+ memory_access_cache<2, 0, ENDIANNESS_LITTLE> *m_cache;
+
uint8_t m_steppingstone[4*1024];
memcon_t m_memcon;
usbhost_t m_usbhost;
diff --git a/src/devices/machine/s3c2440.h b/src/devices/machine/s3c2440.h
index a29f7d8c765..40a92776c3f 100644
--- a/src/devices/machine/s3c2440.h
+++ b/src/devices/machine/s3c2440.h
@@ -608,6 +608,8 @@ private:
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
+ memory_access_cache<2, 0, ENDIANNESS_LITTLE> *m_cache;
+
uint8_t m_steppingstone[4*1024];
memcon_t m_memcon;
usbhost_t m_usbhost;
diff --git a/src/devices/machine/s3c24xx.hxx b/src/devices/machine/s3c24xx.hxx
index 55ab2651d6c..603ee085b1b 100644
--- a/src/devices/machine/s3c24xx.hxx
+++ b/src/devices/machine/s3c24xx.hxx
@@ -289,20 +289,17 @@ void S3C24_CLASS_NAME::s3c24xx_lcd_dma_init()
#if 0
uint32_t S3C24_CLASS_NAME::s3c24xx_lcd_dma_read()
{
- address_space& space = m_cpu->space( AS_PROGRAM);
- uint8_t *vram, data[4];
- vram = (uint8_t *)space.get_read_ptr( m_lcd.vramaddr_cur);
+ uint8_t data[4];
for (int i = 0; i < 2; i++)
{
- data[i*2+0] = *vram++;
- data[i*2+1] = *vram++;
+ data[i*2+0] = m_cache->read_byte(m_lcd.vramaddr_cur + 0);
+ data[i*2+1] = m_cache->read_byte(m_lcd.vramaddr_cur + 1);
m_lcd.vramaddr_cur += 2;
m_lcd.pagewidth_cur++;
if (m_lcd.pagewidth_cur >= m_lcd.pagewidth_max)
{
m_lcd.vramaddr_cur += m_lcd.offsize << 1;
m_lcd.pagewidth_cur = 0;
- vram = (uint8_t *)space.get_read_ptr( m_lcd.vramaddr_cur);
}
}
if (m_lcd.hwswp == 0)
@@ -332,9 +329,7 @@ uint32_t S3C24_CLASS_NAME::s3c24xx_lcd_dma_read()
uint32_t S3C24_CLASS_NAME::s3c24xx_lcd_dma_read()
{
- address_space& space = m_cpu->space( AS_PROGRAM);
- uint8_t *vram, data[4];
- vram = (uint8_t *)space.get_read_ptr( m_lcd.vramaddr_cur);
+ uint8_t data[4];
for (int i = 0; i < 2; i++)
{
if (m_lcd.hwswp == 0)
@@ -343,39 +338,39 @@ uint32_t S3C24_CLASS_NAME::s3c24xx_lcd_dma_read()
{
if ((m_lcd.vramaddr_cur & 2) == 0)
{
- data[i*2+0] = *(vram + 3);
- data[i*2+1] = *(vram + 2);
+ data[i*2+0] = m_cache->read_byte(m_lcd.vramaddr_cur + 3);
+ data[i*2+1] = m_cache->read_byte(m_lcd.vramaddr_cur + 2);
}
else
{
- data[i*2+0] = *(vram - 1);
- data[i*2+1] = *(vram - 2);
+ data[i*2+0] = m_cache->read_byte(m_lcd.vramaddr_cur - 1);
+ data[i*2+1] = m_cache->read_byte(m_lcd.vramaddr_cur - 2);
}
}
else
{
- data[i*2+0] = *(vram + 0);
- data[i*2+1] = *(vram + 1);
+ data[i*2+0] = m_cache->read_byte(m_lcd.vramaddr_cur + 0);
+ data[i*2+1] = m_cache->read_byte(m_lcd.vramaddr_cur + 1);
}
}
else
{
if (m_lcd.bswp == 0)
{
- data[i*2+0] = *(vram + 1);
- data[i*2+1] = *(vram + 0);
+ data[i*2+0] = m_cache->read_byte(m_lcd.vramaddr_cur + 1);
+ data[i*2+1] = m_cache->read_byte(m_lcd.vramaddr_cur + 0);
}
else
{
if ((m_lcd.vramaddr_cur & 2) == 0)
{
- data[i*2+0] = *(vram + 2);
- data[i*2+1] = *(vram + 3);
+ data[i*2+0] = m_cache->read_byte(m_lcd.vramaddr_cur + 2);
+ data[i*2+1] = m_cache->read_byte(m_lcd.vramaddr_cur + 3);
}
else
{
- data[i*2+0] = *(vram - 2);
- data[i*2+1] = *(vram - 1);
+ data[i*2+0] = m_cache->read_byte(m_lcd.vramaddr_cur - 2);
+ data[i*2+1] = m_cache->read_byte(m_lcd.vramaddr_cur - 1);
}
}
}
@@ -385,11 +380,6 @@ uint32_t S3C24_CLASS_NAME::s3c24xx_lcd_dma_read()
{
m_lcd.vramaddr_cur += m_lcd.offsize << 1;
m_lcd.pagewidth_cur = 0;
- vram = (uint8_t *)space.get_read_ptr( m_lcd.vramaddr_cur);
- }
- else
- {
- vram += 2;
}
}
if (m_flags & S3C24XX_INTERFACE_LCD_REVERSE)
@@ -753,6 +743,8 @@ void S3C24_CLASS_NAME::s3c24xx_video_start()
{
m_lcd.bitmap[0] = std::make_unique<bitmap_rgb32>(m_screen->width(), m_screen->height());
m_lcd.bitmap[1] = std::make_unique<bitmap_rgb32>(m_screen->width(), m_screen->height());
+
+ m_cache = m_cpu->space(AS_PROGRAM).cache<2, 0, ENDIANNESS_LITTLE>();
}
void S3C24_CLASS_NAME::bitmap_blend( bitmap_rgb32 &bitmap_dst, bitmap_rgb32 &bitmap_src_1, bitmap_rgb32 &bitmap_src_2)
diff --git a/src/devices/machine/s3c44b0.cpp b/src/devices/machine/s3c44b0.cpp
index 0c56bb51a17..8478f54bc58 100644
--- a/src/devices/machine/s3c44b0.cpp
+++ b/src/devices/machine/s3c44b0.cpp
@@ -264,6 +264,7 @@ void s3c44b0_device::device_start()
m_data_r_cb.resolve_safe(0);
m_data_w_cb.resolve();
+ m_cache = m_cpu->space(AS_PROGRAM).cache<2, 0, ENDIANNESS_LITTLE>();
for (int i = 0; i < 6; i++) m_pwm.timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::pwm_timer_exp),this));
for (auto & elem : m_uart) elem.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::uart_timer_exp),this));
@@ -536,27 +537,25 @@ void s3c44b0_device::lcd_dma_init()
void s3c44b0_device::lcd_dma_read(int count, uint8_t *data)
{
- address_space &space = m_cpu->space(AS_PROGRAM);
- uint8_t *vram = (uint8_t *)space.get_read_ptr(m_lcd.vramaddr_cur);
for (int i = 0; i < count / 2; i++)
{
if (m_lcd.bswp == 0)
{
if ((m_lcd.vramaddr_cur & 2) == 0)
{
- data[0] = *(vram + 3);
- data[1] = *(vram + 2);
+ data[0] = m_cache->read_byte(m_lcd.vramaddr_cur + 3);
+ data[1] = m_cache->read_byte(m_lcd.vramaddr_cur + 2);
}
else
{
- data[0] = *(vram - 1);
- data[1] = *(vram - 2);
+ data[0] = m_cache->read_byte(m_lcd.vramaddr_cur - 1);
+ data[1] = m_cache->read_byte(m_lcd.vramaddr_cur - 2);
}
}
else
{
- data[0] = *(vram + 0);
- data[1] = *(vram + 1);
+ data[0] = m_cache->read_byte(m_lcd.vramaddr_cur + 0);
+ data[1] = m_cache->read_byte(m_lcd.vramaddr_cur + 1);
}
m_lcd.vramaddr_cur += 2;
m_lcd.pagewidth_cur++;
@@ -568,11 +567,6 @@ void s3c44b0_device::lcd_dma_read(int count, uint8_t *data)
lcd_dma_reload();
}
m_lcd.pagewidth_cur = 0;
- vram = (uint8_t *)space.get_read_ptr(m_lcd.vramaddr_cur);
- }
- else
- {
- vram += 2;
}
data += 2;
}
diff --git a/src/devices/machine/s3c44b0.h b/src/devices/machine/s3c44b0.h
index f4f194ce3c8..bebddc710ac 100644
--- a/src/devices/machine/s3c44b0.h
+++ b/src/devices/machine/s3c44b0.h
@@ -599,6 +599,8 @@ private:
devcb_write_line m_sda_w_cb;
devcb_read32 m_data_r_cb;
devcb_write16 m_data_w_cb;
+
+ memory_access_cache<2, 0, ENDIANNESS_LITTLE> *m_cache;
};
DECLARE_DEVICE_TYPE(S3C44B0, s3c44b0_device)
diff --git a/src/devices/machine/spg2xx_io.cpp b/src/devices/machine/spg2xx_io.cpp
index 857884ce7a9..796eeed1e9b 100644
--- a/src/devices/machine/spg2xx_io.cpp
+++ b/src/devices/machine/spg2xx_io.cpp
@@ -36,38 +36,38 @@ DEFINE_DEVICE_TYPE(SPG28X_IO, spg28x_io_device, "spg28x_io", "SPG280-series Syst
#define IO_IRQ_ENABLE m_io_regs[0x21]
#define IO_IRQ_STATUS m_io_regs[0x22]
-spg2xx_io_device::spg2xx_io_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, type, tag, owner, clock)
- , m_porta_out(*this)
- , m_portb_out(*this)
- , m_portc_out(*this)
- , m_porta_in(*this)
- , m_portb_in(*this)
- , m_portc_in(*this)
- , m_adc_in{{*this}, {*this}}
- , m_i2c_w(*this)
- , m_i2c_r(*this)
- , m_uart_tx(*this)
- , m_chip_sel(*this)
- , m_cpu(*this, finder_base::DUMMY_TAG)
- , m_screen(*this, finder_base::DUMMY_TAG)
- , m_pal_read_cb(*this)
- , m_timer_irq_cb(*this)
- , m_uart_adc_irq_cb(*this)
- , m_external_irq_cb(*this)
- , m_ffreq_tmr1_irq_cb(*this)
- , m_ffreq_tmr2_irq_cb(*this)
- , m_fiq_vector_w(*this)
+spg2xx_io_device::spg2xx_io_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, type, tag, owner, clock),
+ m_porta_out(*this),
+ m_portb_out(*this),
+ m_portc_out(*this),
+ m_porta_in(*this),
+ m_portb_in(*this),
+ m_portc_in(*this),
+ m_adc_in{{*this}, {*this}},
+ m_i2c_w(*this),
+ m_i2c_r(*this),
+ m_uart_tx(*this),
+ m_chip_sel(*this),
+ m_cpu(*this, finder_base::DUMMY_TAG),
+ m_screen(*this, finder_base::DUMMY_TAG),
+ m_pal_read_cb(*this),
+ m_timer_irq_cb(*this),
+ m_uart_adc_irq_cb(*this),
+ m_external_irq_cb(*this),
+ m_ffreq_tmr1_irq_cb(*this),
+ m_ffreq_tmr2_irq_cb(*this),
+ m_fiq_vector_w(*this)
{
}
-spg24x_io_device::spg24x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : spg2xx_io_device(mconfig, SPG24X_IO, tag, owner, clock, 256)
+spg24x_io_device::spg24x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ spg2xx_io_device(mconfig, SPG24X_IO, tag, owner, clock, 256)
{
}
-spg28x_io_device::spg28x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : spg2xx_io_device(mconfig, SPG28X_IO, tag, owner, clock, 64)
+spg28x_io_device::spg28x_io_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ spg2xx_io_device(mconfig, SPG28X_IO, tag, owner, clock, 64)
{
}
diff --git a/src/devices/machine/vic_pl192.cpp b/src/devices/machine/vic_pl192.cpp
new file mode 100644
index 00000000000..7eda1220987
--- /dev/null
+++ b/src/devices/machine/vic_pl192.cpp
@@ -0,0 +1,130 @@
+// license:BSD-3-Clause
+// copyright-holders:Melissa Goad
+
+// ARM PrimeCell PL192 VIC emulation
+
+#include "emu.h"
+#include "machine/bankdev.h"
+#include "machine/vic_pl192.h"
+
+#define LOG_GENERAL (1U << 0)
+
+#define VERBOSE (LOG_GENERAL)
+#include "logmacro.h"
+
+void vic_pl192_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ if(u32 intrs = (raw_intr | soft_intr) & intr_en)
+ {
+ if(intrs & intr_select) m_out_fiq_func(1);
+ else m_out_fiq_func(0);
+
+ if(intrs & ~intr_select) m_out_irq_func(1);
+ else m_out_irq_func(0);
+ }
+}
+
+void vic_pl192_device::set_irq_line(int irq, int state)
+{
+ u32 mask = (1 << irq);
+
+ if(state)
+ {
+ raw_intr |= mask;
+ }
+ else
+ {
+ raw_intr &= ~mask;
+ }
+
+ timer_set(attotime::zero, TIMER_CHECK_IRQ);
+}
+
+void vic_pl192_device::map(address_map &map)
+{
+ map(0x000, 0x003).lr32([this](offs_t offset){ return raw_intr & ~intr_select; }, "irq_status"); //IRQ_STATUS
+ map(0x004, 0x007).lr32([this](offs_t offset){ return raw_intr & intr_select; }, "fiq_status"); //FIQ_STATUS
+ map(0x008, 0x00b).lr32([this](offs_t offset){ return raw_intr; }, "raw_intr");
+ map(0x00c, 0x00f).lrw32(NAME([this](offs_t offset){ return intr_select; }), NAME([this](offs_t offset, u32 data){ intr_select = data; timer_set(attotime::zero, TIMER_CHECK_IRQ); }));
+ map(0x010, 0x013).lrw32(NAME([this](offs_t offset){ return intr_en; }), NAME([this](offs_t offset, u32 data){ intr_en = data; timer_set(attotime::zero, TIMER_CHECK_IRQ); }));
+ map(0x014, 0x017).lw32([this](u32 data){ intr_en &= ~data; }, "intr_en_clear");
+ map(0x018, 0x01b).lrw32(NAME([this](offs_t offset){ return soft_intr; }), NAME([this](offs_t offset, u32 data){ soft_intr = data; timer_set(attotime::zero, TIMER_CHECK_IRQ); }));
+ map(0x01c, 0x01f).lw32([this](u32 data){ soft_intr &= ~data; }, "soft_intr_clear");
+ map(0x020, 0x020).lrw8(NAME([this](offs_t offset){ return protection; }), NAME([this](offs_t offset, u8 data){ protection = data & 1; })).umask32(0x000000ff);
+ map(0x024, 0x025).lrw8(NAME([this](offs_t offset){ return sw_priority_mask; }), NAME([this](offs_t offset, u16 data){ sw_priority_mask = data; })).umask32(0x0000ffff);
+ map(0x028, 0x028).lrw8(NAME([this](offs_t offset){ return daisy_priority; }), NAME([this](offs_t offset, u8 data){ daisy_priority = data & 0xf; })).umask32(0x000000ff);
+ map(0x100, 0x17f).lrw32(NAME([this](offs_t offset){ return vectaddr[(offset & 0x7c) >> 2]; }), NAME([this](offs_t offset, u32 data){ vectaddr[(offset & 0x7c) >> 2] = data; }));
+ map(0x200, 0x27f).lrw8(NAME([this](offs_t offset){ return vectprio[(offset & 0x7c) >> 2]; }), NAME([this](offs_t offset, u32 data){ vectprio[(offset & 0x7c) >> 2] = data & 0xf; }));
+ map(0xf00, 0xf03).lrw32(NAME([this](offs_t offset){ return vicaddress; }), NAME([this](offs_t offset, u32 data){ vectaddr[(offset & 0x7c) >> 2] = data; }));
+ map(0xfe0, 0xfe0).lr8([this](offs_t offset){ return periph_id[0]; }, "periph_id0").umask32(0x000000ff);
+ map(0xfe4, 0xfe4).lr8([this](offs_t offset){ return periph_id[1]; }, "periph_id1").umask32(0x000000ff);
+ map(0xfe8, 0xfe8).lr8([this](offs_t offset){ return periph_id[2]; }, "periph_id2").umask32(0x000000ff);
+ map(0xfec, 0xfec).lr8([this](offs_t offset){ return periph_id[3]; }, "periph_id3").umask32(0x000000ff);
+ map(0xff0, 0xff0).lr8([this](offs_t offset){ return pcell_id[0]; }, "pcell_id0").umask32(0x000000ff);
+ map(0xff4, 0xff4).lr8([this](offs_t offset){ return pcell_id[1]; }, "pcell_id1").umask32(0x000000ff);
+ map(0xff8, 0xff8).lr8([this](offs_t offset){ return pcell_id[2]; }, "pcell_id2").umask32(0x000000ff);
+ map(0xffc, 0xffc).lr8([this](offs_t offset){ return pcell_id[3]; }, "pcell_id3").umask32(0x000000ff);
+}
+
+device_memory_interface::space_config_vector vic_pl192_device::memory_space_config() const
+{
+ return space_config_vector{
+ std::make_pair(0, &m_mmio_config)
+ };
+}
+
+void vic_pl192_device::device_resolve_objects()
+{
+ // resolve callbacks
+ m_out_irq_func.resolve_safe();
+ m_out_fiq_func.resolve_safe();
+}
+
+void vic_pl192_device::device_start()
+{
+ save_item(NAME(raw_intr));
+ save_item(NAME(intr_select));
+ save_item(NAME(intr_en));
+ save_item(NAME(soft_intr));
+ save_item(NAME(vectaddr));
+ save_item(NAME(vicaddress));
+ save_item(NAME(protection));
+ save_item(NAME(sw_priority_mask));
+ save_item(NAME(daisy_priority));
+ save_item(NAME(vectprio));
+}
+
+void vic_pl192_device::device_reset()
+{
+ raw_intr = intr_select = intr_en = soft_intr = vicaddress = protection = 0;
+ sw_priority_mask = 0xffff;
+ daisy_priority = 0xf;
+
+ for(int i = 0; i < 32; i++)
+ {
+ vectaddr[i] = 0;
+ }
+
+ for(int i = 0; i < 32; i++)
+ {
+ vectprio[i] = 0xf;
+ }
+}
+
+DEFINE_DEVICE_TYPE(PL192_VIC, vic_pl192_device, "vic_pl192", "ARM PL192 VIC")
+
+vic_pl192_device::vic_pl192_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_memory_interface(mconfig, *this)
+ , m_mmio_config("mmio", ENDIANNESS_LITTLE, 32, 32, 0)
+ , m_out_irq_func(*this)
+ , m_out_fiq_func(*this)
+ , periph_id{0x92, 0x11, 0x04, 0x00}
+ , pcell_id{0x0d, 0xf0, 0x05, 0xb1}
+{
+}
+
+vic_pl192_device::vic_pl192_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : vic_pl192_device(mconfig, PL192_VIC, tag, owner, clock)
+{
+} \ No newline at end of file
diff --git a/src/devices/machine/vic_pl192.h b/src/devices/machine/vic_pl192.h
new file mode 100644
index 00000000000..79a40bd38ee
--- /dev/null
+++ b/src/devices/machine/vic_pl192.h
@@ -0,0 +1,51 @@
+// license:BSD-3-Clause
+// copyright-holders:Melissa Goad
+
+// ARM PrimeCell PL192 VIC emulation
+
+#ifndef MAME_MACHINE_VIC_PL192_H
+#define MAME_MACHINE_VIC_PL192_H
+
+class vic_pl192_device : public device_t, public device_memory_interface
+{
+public:
+ vic_pl192_device(const machine_config &mconfig, const char* tag, device_t *owner, uint32_t clock = 0);
+
+ auto out_irq_cb() { return m_out_irq_func.bind(); }
+ auto out_fiq_cb() { return m_out_fiq_func.bind(); }
+
+ template<unsigned IRQ>
+ DECLARE_WRITE_LINE_MEMBER( irq_w ) { set_irq_line(IRQ, state); }
+
+ void map(address_map &map);
+
+protected:
+ vic_pl192_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;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ virtual space_config_vector memory_space_config() const override;
+
+private:
+ static constexpr device_timer_id TIMER_CHECK_IRQ = 0;
+
+ void set_irq_line(int irq, int state);
+
+ address_space_config m_mmio_config;
+
+ devcb_write_line m_out_irq_func;
+ devcb_write_line m_out_fiq_func;
+ u32 raw_intr, intr_select, intr_en, soft_intr, vectaddr[32], vicaddress;
+ int protection;
+ u16 sw_priority_mask;
+ u8 daisy_priority, vectprio[32];
+ u8 periph_id[4], pcell_id[4];
+};
+
+DECLARE_DEVICE_TYPE(PL192_VIC, vic_pl192_device)
+
+#endif // MAME_MACHINE_VIC_PL192_H \ No newline at end of file
diff --git a/src/devices/sound/megd.cpp b/src/devices/sound/megd.cpp
index 2790a7ca69c..47ff6dfdb3d 100644
--- a/src/devices/sound/megd.cpp
+++ b/src/devices/sound/megd.cpp
@@ -37,7 +37,7 @@ u32 meg_disassembler::b(u64 opc, u32 start, u32 count)
return (opc >> start) & ((1 << count) - 1);
}
-void meg_disassembler::append(std::string &r, std::string e)
+void meg_disassembler::append(std::string &r, const std::string &e)
{
if(r != "")
r += " ; ";
diff --git a/src/devices/sound/megd.h b/src/devices/sound/megd.h
index 59a13aa0ea4..82bad8f4beb 100644
--- a/src/devices/sound/megd.h
+++ b/src/devices/sound/megd.h
@@ -33,7 +33,7 @@ private:
std::string goffset(offs_t address) const;
static inline u32 b(u64 opc, u32 start, u32 count);
- static inline void append(std::string &r, std::string e);
+ static inline void append(std::string &r, const std::string &e);
};
#endif
diff --git a/src/devices/sound/ymf278b.cpp b/src/devices/sound/ymf278b.cpp
index ada4a5544c7..ab2b9c7fb9c 100644
--- a/src/devices/sound/ymf278b.cpp
+++ b/src/devices/sound/ymf278b.cpp
@@ -44,6 +44,8 @@
- accurate timing of envelopes
- LFO (vibrato, tremolo)
- integrate YMF262 mixing (used by Fuuki games, not used by Psikyo and Metro games)
+ - Envelope and LFO function is similar algorithm as multipcm.cpp (except Damp, Pseudo Reverb)
+ Can it be merged with/ported to this?
*/
#include "emu.h"
diff --git a/src/devices/video/fixfreq.cpp b/src/devices/video/fixfreq.cpp
index 5e333d9eec5..732a6994ae4 100644
--- a/src/devices/video/fixfreq.cpp
+++ b/src/devices/video/fixfreq.cpp
@@ -20,7 +20,7 @@
// for quick and dirty debugging
#define VERBOSE 0
-#define LOG_OUTPUT_FUNC printf
+#define LOG_OUTPUT_STREAM std::cerr
#include "logmacro.h"
#include <algorithm>
diff --git a/src/devices/video/ims_cvc.cpp b/src/devices/video/ims_cvc.cpp
index 6274028a4f9..0c5b62dfff4 100644
--- a/src/devices/video/ims_cvc.cpp
+++ b/src/devices/video/ims_cvc.cpp
@@ -154,6 +154,8 @@ void ims_cvc_device::device_start()
save_item(NAME(m_mask));
save_item(NAME(m_tos));
save_item(NAME(m_boot));
+
+ save_item(NAME(m_swap));
}
void ims_cvc_device::device_reset()
@@ -194,7 +196,7 @@ u32 g300_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, rect
for (int y = screen.visible_area().min_y; y <= screen.visible_area().max_y; y++)
for (int x = screen.visible_area().min_x; x <= screen.visible_area().max_x; x++)
- bitmap.pix(y, x) = pen_color(m_vram->read(address++) & m_mask);
+ bitmap.pix(y, x) = pen_color(m_vram->read(address++ ^ m_swap) & m_mask);
return 0;
}
@@ -209,7 +211,7 @@ u32 g332_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, rect
for (int y = screen.visible_area().min_y; y <= screen.visible_area().max_y; y++)
for (int x = screen.visible_area().min_x; x <= screen.visible_area().max_x; x += 8)
{
- u8 pixel_data = m_vram->read(address++);
+ u8 pixel_data = m_vram->read(address++ ^ m_swap);
bitmap.pix(y, x + 0) = pen_color(pixel_data & 0x1 & m_mask); pixel_data >>= 1;
bitmap.pix(y, x + 1) = pen_color(pixel_data & 0x1 & m_mask); pixel_data >>= 1;
@@ -226,7 +228,7 @@ u32 g332_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, rect
for (int y = screen.visible_area().min_y; y <= screen.visible_area().max_y; y++)
for (int x = screen.visible_area().min_x; x <= screen.visible_area().max_x; x += 4)
{
- u8 pixel_data = m_vram->read(address++);
+ u8 pixel_data = m_vram->read(address++ ^ m_swap);
bitmap.pix(y, x + 0) = pen_color(pixel_data & 0x3 & m_mask); pixel_data >>= 2;
bitmap.pix(y, x + 1) = pen_color(pixel_data & 0x3 & m_mask); pixel_data >>= 2;
@@ -239,7 +241,7 @@ u32 g332_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, rect
for (int y = screen.visible_area().min_y; y <= screen.visible_area().max_y; y++)
for (int x = screen.visible_area().min_x; x <= screen.visible_area().max_x; x += 2)
{
- u8 pixel_data = m_vram->read(address++);
+ u8 pixel_data = m_vram->read(address++ ^ m_swap);
bitmap.pix(y, x + 0) = pen_color(pixel_data & 0xf & m_mask); pixel_data >>= 4;
bitmap.pix(y, x + 1) = pen_color(pixel_data & 0xf & m_mask);
@@ -249,7 +251,7 @@ u32 g332_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, rect
case BPP_8:
for (int y = screen.visible_area().min_y; y <= screen.visible_area().max_y; y++)
for (int x = screen.visible_area().min_x; x <= screen.visible_area().max_x; x++)
- bitmap.pix(y, x) = pen_color(m_vram->read(address++) & m_mask);
+ bitmap.pix(y, x) = pen_color(m_vram->read(address++ ^ m_swap) & m_mask);
break;
}
diff --git a/src/devices/video/ims_cvc.h b/src/devices/video/ims_cvc.h
index dfe61f178c6..b196272c059 100644
--- a/src/devices/video/ims_cvc.h
+++ b/src/devices/video/ims_cvc.h
@@ -21,6 +21,7 @@ public:
virtual void map(address_map &map) = 0;
virtual u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, rectangle const &cliprect) = 0;
+ virtual void set_swapped(bool swapped) { m_swap = swapped ? 3 : 0; };
protected:
ims_cvc_device(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock);
@@ -88,6 +89,8 @@ protected:
u32 m_mask;
u32 m_tos;
u32 m_boot;
+
+ unsigned m_swap = 0;
};
class g300_device : public ims_cvc_device
@@ -218,6 +221,8 @@ class g364_device : public g332_device
{
public:
g364_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock);
+
+ virtual void set_swapped(bool swapped) override { m_swap = swapped ? 7 : 0; };
};
DECLARE_DEVICE_TYPE(G300, g300_device)
diff --git a/src/emu/config.cpp b/src/emu/config.cpp
index 3574eb2d12e..81a486f73af 100644
--- a/src/emu/config.cpp
+++ b/src/emu/config.cpp
@@ -40,8 +40,8 @@ void configuration_manager::config_register(const char* nodename, config_load_de
{
config_element element;
element.name = nodename;
- element.load = load;
- element.save = save;
+ element.load = std::move(load);
+ element.save = std::move(save);
m_typelist.push_back(element);
}
@@ -60,7 +60,7 @@ int configuration_manager::load_settings()
int loaded = 0;
/* loop over all registrants and call their init function */
- for (auto type : m_typelist)
+ for (const auto &type : m_typelist)
type.load(config_type::INIT, nullptr);
/* now load the controller file */
@@ -93,7 +93,7 @@ int configuration_manager::load_settings()
loaded = load_xml(file, config_type::GAME);
/* loop over all registrants and call their final function */
- for (auto type : m_typelist)
+ for (const auto &type : m_typelist)
type.load(config_type::FINAL, nullptr);
/* if we didn't find a saved config, return 0 so the main core knows that it */
@@ -105,7 +105,7 @@ int configuration_manager::load_settings()
void configuration_manager::save_settings()
{
/* loop over all registrants and call their init function */
- for (auto type : m_typelist)
+ for (const auto &type : m_typelist)
type.save(config_type::INIT, nullptr);
/* save the defaults file */
@@ -120,7 +120,7 @@ void configuration_manager::save_settings()
save_xml(file, config_type::GAME);
/* loop over all registrants and call their final function */
- for (auto type : m_typelist)
+ for (const auto &type : m_typelist)
type.save(config_type::FINAL, nullptr);
}
@@ -204,7 +204,7 @@ int configuration_manager::load_xml(emu_file &file, config_type which_type)
osd_printf_debug("Entry: %s -- processing\n", name);
/* loop over all registrants and call their load function */
- for (auto type : m_typelist)
+ for (const auto &type : m_typelist)
type.load(which_type, systemnode->get_child(type.name.c_str()));
count++;
}
@@ -246,7 +246,7 @@ int configuration_manager::save_xml(emu_file &file, config_type which_type)
/* create the input node and write it out */
/* loop over all registrants and call their save function */
- for (auto type : m_typelist)
+ for (const auto &type : m_typelist)
{
util::xml::data_node *const curnode = systemnode->add_child(type.name.c_str(), nullptr);
if (!curnode)
diff --git a/src/emu/debug/debugcon.cpp b/src/emu/debug/debugcon.cpp
index e24c6a2336e..9219df2f0ca 100644
--- a/src/emu/debug/debugcon.cpp
+++ b/src/emu/debug/debugcon.cpp
@@ -95,7 +95,7 @@ void debugger_console::exit()
***************************************************************************/
debugger_console::debug_command::debug_command(const char *_command, u32 _flags, int _ref, int _minparams, int _maxparams, std::function<void(int, const std::vector<std::string> &)> _handler)
- : params(nullptr), help(nullptr), handler(_handler), flags(_flags), ref(_ref), minparams(_minparams), maxparams(_maxparams)
+ : params(nullptr), help(nullptr), handler(std::move(_handler)), flags(_flags), ref(_ref), minparams(_minparams), maxparams(_maxparams)
{
strcpy(command, _command);
}
diff --git a/src/emu/debug/express.cpp b/src/emu/debug/express.cpp
index d6b5560a51e..114ec589951 100644
--- a/src/emu/debug/express.cpp
+++ b/src/emu/debug/express.cpp
@@ -252,8 +252,8 @@ integer_symbol_entry::integer_symbol_entry(symbol_table &table, const char *name
integer_symbol_entry::integer_symbol_entry(symbol_table &table, const char *name, symbol_table::getter_func getter, symbol_table::setter_func setter, const std::string &format)
: symbol_entry(table, SMT_INTEGER, name, format),
- m_getter(getter),
- m_setter(setter),
+ m_getter(std::move(getter)),
+ m_setter(std::move(setter)),
m_value(0)
{
}
@@ -305,7 +305,7 @@ function_symbol_entry::function_symbol_entry(symbol_table &table, const char *na
: symbol_entry(table, SMT_FUNCTION, name, ""),
m_minparams(minparams),
m_maxparams(maxparams),
- m_execute(execute)
+ m_execute(std::move(execute))
{
}
@@ -381,9 +381,9 @@ symbol_table::symbol_table(void *globalref, symbol_table *parent)
void symbol_table::configure_memory(void *param, valid_func valid, read_func read, write_func write)
{
m_memory_param = param;
- m_memory_valid = valid;
- m_memory_read = read;
- m_memory_write = write;
+ m_memory_valid = std::move(valid);
+ m_memory_read = std::move(read);
+ m_memory_write = std::move(write);
}
diff --git a/src/emu/device.cpp b/src/emu/device.cpp
index 39897887628..055f0707135 100644
--- a/src/emu/device.cpp
+++ b/src/emu/device.cpp
@@ -130,7 +130,7 @@ device_t::~device_t()
memory_region *device_t::memregion(std::string _tag) const
{
// build a fully-qualified name and look it up
- auto search = machine().memory().regions().find(subtag(_tag));
+ auto search = machine().memory().regions().find(subtag(std::move(_tag)));
if (search != machine().memory().regions().end())
return search->second.get();
else
@@ -146,7 +146,7 @@ memory_region *device_t::memregion(std::string _tag) const
memory_share *device_t::memshare(std::string _tag) const
{
// build a fully-qualified name and look it up
- auto search = machine().memory().shares().find(subtag(_tag));
+ auto search = machine().memory().shares().find(subtag(std::move(_tag)));
if (search != machine().memory().shares().end())
return search->second.get();
else
@@ -161,7 +161,7 @@ memory_share *device_t::memshare(std::string _tag) const
memory_bank *device_t::membank(std::string _tag) const
{
- auto search = machine().memory().banks().find(subtag(_tag));
+ auto search = machine().memory().banks().find(subtag(std::move(_tag)));
if (search != machine().memory().banks().end())
return search->second.get();
else
@@ -177,7 +177,7 @@ memory_bank *device_t::membank(std::string _tag) const
ioport_port *device_t::ioport(std::string tag) const
{
// build a fully-qualified name and look it up
- return machine().ioport().port(subtag(tag).c_str());
+ return machine().ioport().port(subtag(std::move(tag)).c_str());
}
diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp
index fe3d6d9e292..8cc849ee189 100644
--- a/src/emu/diimage.cpp
+++ b/src/emu/diimage.cpp
@@ -381,7 +381,7 @@ void device_image_interface::setup_working_directory()
// get user-specified directory and make sure it exists
m_working_directory = device().mconfig().options().sw_path();
// if multipath, get first
- size_t i = m_working_directory.find_first_of(";");
+ size_t i = m_working_directory.find_first_of(';');
if (i != std::string::npos)
m_working_directory.resize(i);
// validate directory
diff --git a/src/emu/driver.cpp b/src/emu/driver.cpp
index d13a4899136..7093b73615d 100644
--- a/src/emu/driver.cpp
+++ b/src/emu/driver.cpp
@@ -71,7 +71,7 @@ void driver_device::set_game_driver(const game_driver &game)
void driver_device::static_set_callback(device_t &device, callback_type type, driver_callback_delegate callback)
{
- downcast<driver_device &>(device).m_callbacks[type] = callback;
+ downcast<driver_device &>(device).m_callbacks[type] = std::move(callback);
}
diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp
index 3514045e32d..f800d09c91f 100644
--- a/src/emu/emumem.cpp
+++ b/src/emu/emumem.cpp
@@ -2321,7 +2321,7 @@ bool address_space::needs_backing_store(const address_map_entry &entry)
int address_space::add_change_notifier(std::function<void (read_or_write)> n)
{
int id = m_notifier_id++;
- m_notifiers.emplace_back(notifier_t{ n, id });
+ m_notifiers.emplace_back(notifier_t{ std::move(n), id });
return id;
}
@@ -2582,7 +2582,7 @@ void memory_bank::set_base(void *base)
m_curentry = 0;
}
m_entries[m_curentry] = reinterpret_cast<u8 *>(base);
- for(auto cb : m_alloc_notifier)
+ for(const auto &cb : m_alloc_notifier)
cb(base);
m_alloc_notifier.clear();
}
@@ -2593,7 +2593,7 @@ void memory_bank::set_base(void *base)
//-------------------------------------------------
void memory_bank::add_notifier(std::function<void (void *)> cb)
{
- m_alloc_notifier.emplace_back(cb);
+ m_alloc_notifier.emplace_back(std::move(cb));
}
//-------------------------------------------------
diff --git a/src/emu/emuopts.cpp b/src/emu/emuopts.cpp
index 6f38f815dcb..a48a4f80811 100644
--- a/src/emu/emuopts.cpp
+++ b/src/emu/emuopts.cpp
@@ -140,7 +140,7 @@ const options_entry emu_options::s_option_entries[] =
// input options
{ nullptr, nullptr, OPTION_HEADER, "CORE INPUT OPTIONS" },
- { OPTION_COIN_LOCKOUT ";coinlock", "1", OPTION_BOOLEAN, "ignore coin inputs if coin lockout ouput is active" },
+ { OPTION_COIN_LOCKOUT ";coinlock", "1", OPTION_BOOLEAN, "ignore coin inputs if coin lockout output is active" },
{ OPTION_CTRLR, nullptr, OPTION_STRING, "preconfigure for specified controller" },
{ OPTION_MOUSE, "0", OPTION_BOOLEAN, "enable mouse input" },
{ OPTION_JOYSTICK ";joy", "1", OPTION_BOOLEAN, "enable joystick input" },
diff --git a/src/emu/http.cpp b/src/emu/http.cpp
index 5b0dcca8d05..48599258aaa 100644
--- a/src/emu/http.cpp
+++ b/src/emu/http.cpp
@@ -127,7 +127,7 @@ public:
std::size_t m_path_end;
std::size_t m_query_end;
- http_request_impl(std::shared_ptr<webpp::Request> request) : m_request(request) {
+ http_request_impl(std::shared_ptr<webpp::Request> request) : m_request(std::move(request)) {
std::size_t len = m_request->path.length();
m_fragment = m_request->path.find('#');
@@ -195,7 +195,7 @@ struct http_response_impl : public http_manager::http_response {
std::stringstream m_headers;
std::stringstream m_body;
- http_response_impl(std::shared_ptr<webpp::Response> response) : m_response(response) { }
+ http_response_impl(std::shared_ptr<webpp::Response> response) : m_response(std::move(response)) { }
virtual ~http_response_impl() = default;
@@ -238,10 +238,10 @@ struct websocket_endpoint_impl : public http_manager::websocket_endpoint {
http_manager::websocket_close_handler on_close,
http_manager::websocket_error_handler on_error)
: m_endpoint(endpoint) {
- this->on_open = on_open;
- this->on_message = on_message;
- this->on_close = on_close;
- this->on_error = on_error;
+ this->on_open = std::move(on_open);
+ this->on_message = std::move(on_message);
+ this->on_close = std::move(on_close);
+ this->on_error = std::move(on_error);
}
};
@@ -295,8 +295,8 @@ http_manager::http_manager(bool active, short port, const char *root)
}
// Determine the file extension.
- std::size_t last_slash_pos = path.find_last_of("/");
- std::size_t last_dot_pos = path.find_last_of(".");
+ std::size_t last_slash_pos = path.find_last_of('/');
+ std::size_t last_dot_pos = path.find_last_of('.');
std::string extension;
if (last_dot_pos != std::string::npos && last_dot_pos > last_slash_pos)
{
@@ -545,21 +545,21 @@ http_manager::websocket_endpoint_ptr http_manager::add_endpoint(const std::strin
auto endpoint_impl = std::make_shared<websocket_endpoint_impl>(endpoint_ptr, on_open, on_message, on_close, on_error);
endpoint.on_open = [&, this, endpoint_impl](std::shared_ptr<webpp::Connection> connection) {
- this->on_open(endpoint_impl, connection);
+ this->on_open(endpoint_impl, std::move(connection));
};
endpoint.on_message = [&, this, endpoint_impl](std::shared_ptr<webpp::Connection> connection, std::shared_ptr<webpp::ws_server::Message> message) {
std::string payload = message->string();
int opcode = message->fin_rsv_opcode & 0x0f;
- this->on_message(endpoint_impl, connection, payload, opcode);
+ this->on_message(endpoint_impl, std::move(connection), payload, opcode);
};
endpoint.on_close = [&, this, endpoint_impl](std::shared_ptr<webpp::Connection> connection, int status, const std::string& reason) {
- this->on_close(endpoint_impl, connection, status, reason);
+ this->on_close(endpoint_impl, std::move(connection), status, reason);
};
endpoint.on_error = [&, this, endpoint_impl](std::shared_ptr<webpp::Connection> connection, const std::error_code& error_code) {
- this->on_error(endpoint_impl, connection, error_code);
+ this->on_error(endpoint_impl, std::move(connection), error_code);
};
m_endpoints[path] = endpoint_impl;
diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp
index b3c0fd0d8e5..8ccb7b5907a 100644
--- a/src/emu/machine.cpp
+++ b/src/emu/machine.cpp
@@ -521,8 +521,8 @@ std::string running_machine::get_statename(const char *option) const
int name_found = 0;
// find length of the device name
- int end1 = statename_str.find("/", pos + 3);
- int end2 = statename_str.find("%", pos + 3);
+ int end1 = statename_str.find('/', pos + 3);
+ int end2 = statename_str.find('%', pos + 3);
int end;
if ((end1 != -1) && (end2 != -1))
@@ -1240,7 +1240,7 @@ running_machine::notifier_callback_item::notifier_callback_item(machine_notify_d
//-------------------------------------------------
running_machine::logerror_callback_item::logerror_callback_item(logerror_callback func)
- : m_func(func)
+ : m_func(std::move(func))
{
}
diff --git a/src/emu/natkeyboard.cpp b/src/emu/natkeyboard.cpp
index 114ad581295..14b5e9578b4 100644
--- a/src/emu/natkeyboard.cpp
+++ b/src/emu/natkeyboard.cpp
@@ -350,9 +350,9 @@ natural_keyboard::natural_keyboard(running_machine &machine)
void natural_keyboard::configure(ioport_queue_chars_delegate queue_chars, ioport_accept_char_delegate accept_char, ioport_charqueue_empty_delegate charqueue_empty)
{
// set the callbacks
- m_queue_chars = queue_chars;
- m_accept_char = accept_char;
- m_charqueue_empty = charqueue_empty;
+ m_queue_chars = std::move(queue_chars);
+ m_accept_char = std::move(accept_char);
+ m_charqueue_empty = std::move(charqueue_empty);
}
diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp
index c4b458ed80c..ea227b2c77b 100644
--- a/src/emu/rendlay.cpp
+++ b/src/emu/rendlay.cpp
@@ -2149,14 +2149,14 @@ public:
// split out position names from string and figure out our number of symbols
int location;
m_numstops = 0;
- location=symbollist.find(",");
+ location=symbollist.find(',');
while (location!=-1)
{
m_stopnames[m_numstops] = symbollist;
m_stopnames[m_numstops] = m_stopnames[m_numstops].substr(0, location);
symbollist = symbollist.substr(location+1, symbollist.length()-(location-1));
m_numstops++;
- location=symbollist.find(",");
+ location=symbollist.find(',');
}
m_stopnames[m_numstops++] = symbollist;
@@ -2166,7 +2166,7 @@ public:
for (int i=0;i<m_numstops;i++)
{
- location=m_stopnames[i].find(":");
+ location=m_stopnames[i].find(':');
if (location!=-1)
{
m_imagefile[i] = m_stopnames[i];
diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp
index 04944255b62..868f7c96935 100644
--- a/src/emu/validity.cpp
+++ b/src/emu/validity.cpp
@@ -222,7 +222,7 @@ bool validity_checker::check_all_matching(const char *string)
bool validated_any = false;
while (m_drivlist.next())
{
- if (m_drivlist.matches(string, m_drivlist.driver().name))
+ if (driver_list::matches(string, m_drivlist.driver().name))
{
validate_one(m_drivlist.driver());
validated_any = true;
@@ -1418,8 +1418,8 @@ void validity_checker::validate_driver()
// determine if we are a clone
bool is_clone = (strcmp(m_current_driver->parent, "0") != 0);
- int clone_of = m_drivlist.clone(*m_current_driver);
- if (clone_of != -1 && (m_drivlist.driver(clone_of).flags & machine_flags::IS_BIOS_ROOT))
+ int clone_of = driver_list::clone(*m_current_driver);
+ if (clone_of != -1 && (driver_list::driver(clone_of).flags & machine_flags::IS_BIOS_ROOT))
is_clone = false;
// if we have at least 100 drivers, validate the clone
@@ -1428,11 +1428,11 @@ void validity_checker::validate_driver()
osd_printf_error("Driver is a clone of nonexistent driver %s\n", m_current_driver->parent);
// look for recursive cloning
- if (clone_of != -1 && &m_drivlist.driver(clone_of) == m_current_driver)
+ if (clone_of != -1 && &driver_list::driver(clone_of) == m_current_driver)
osd_printf_error("Driver is a clone of itself\n");
// look for clones that are too deep
- if (clone_of != -1 && (clone_of = m_drivlist.non_bios_clone(clone_of)) != -1)
+ if (clone_of != -1 && (clone_of = driver_list::non_bios_clone(clone_of)) != -1)
osd_printf_error("Driver is a clone of a clone\n");
// make sure the driver name is not too long
@@ -1463,16 +1463,16 @@ void validity_checker::validate_driver()
compatible_with = nullptr;
// check for this driver being compatible with a nonexistent driver
- if (compatible_with != nullptr && m_drivlist.find(m_current_driver->compatible_with) == -1)
+ if (compatible_with != nullptr && driver_list::find(m_current_driver->compatible_with) == -1)
osd_printf_error("Driver is listed as compatible with nonexistent driver %s\n", m_current_driver->compatible_with);
// check for clone_of and compatible_with being specified at the same time
- if (m_drivlist.clone(*m_current_driver) != -1 && compatible_with != nullptr)
+ if (driver_list::clone(*m_current_driver) != -1 && compatible_with != nullptr)
osd_printf_error("Driver cannot be both a clone and listed as compatible with another system\n");
// find any recursive dependencies on the current driver
- for (int other_drv = m_drivlist.compatible_with(*m_current_driver); other_drv != -1; other_drv = m_drivlist.compatible_with(other_drv))
- if (m_current_driver == &m_drivlist.driver(other_drv))
+ for (int other_drv = driver_list::compatible_with(*m_current_driver); other_drv != -1; other_drv = driver_list::compatible_with(other_drv))
+ if (m_current_driver == &driver_list::driver(other_drv))
{
osd_printf_error("Driver is recursively compatible with itself\n");
break;
diff --git a/src/emu/video.cpp b/src/emu/video.cpp
index 727af74ea01..65ff20473c5 100644
--- a/src/emu/video.cpp
+++ b/src/emu/video.cpp
@@ -1358,8 +1358,8 @@ osd_file::error video_manager::open_next(emu_file &file, const char *extension,
int name_found = 0;
// find length of the device name
- int end1 = snapstr.find("/", pos + 3);
- int end2 = snapstr.find("%", pos + 3);
+ int end1 = snapstr.find('/', pos + 3);
+ int end2 = snapstr.find('%', pos + 3);
int end;
if ((end1 != -1) && (end2 != -1))
diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp
index eabe55f6a14..156a452a1b8 100644
--- a/src/emu/xtal.cpp
+++ b/src/emu/xtal.cpp
@@ -504,7 +504,7 @@ void XTAL::validate(const std::string &message) const
fail(m_base_clock, message);
}
-void XTAL::fail(double base_clock, std::string message)
+void XTAL::fail(double base_clock, const std::string &message)
{
std::string full_message = util::string_format("Unknown crystal value %.0f. ", base_clock);
if(xtal_error_low && xtal_error_high)
diff --git a/src/emu/xtal.h b/src/emu/xtal.h
index f3e9b7d0cbd..b58f00943b2 100644
--- a/src/emu/xtal.h
+++ b/src/emu/xtal.h
@@ -69,7 +69,7 @@ private:
static const double known_xtals[];
static double last_correct_value, xtal_error_low, xtal_error_high;
- static void fail(double base_clock, std::string message);
+ static void fail(double base_clock, const std::string &message);
static bool validate(double base_clock);
static void check_ordering();
};
diff --git a/src/lib/netlist/analog/nld_fourterm.h b/src/lib/netlist/analog/nld_fourterm.h
index dcd32744263..9f0d7760c3b 100644
--- a/src/lib/netlist/analog/nld_fourterm.h
+++ b/src/lib/netlist/analog/nld_fourterm.h
@@ -14,14 +14,17 @@
// Macros
// ----------------------------------------------------------------------------------------
-#define VCCS(name) \
- NET_REGISTER_DEV(VCCS, name)
+#define VCCS(name, G) \
+ NET_REGISTER_DEVEXT(VCCS, G)
-#define CCCS(name) \
- NET_REGISTER_DEV(CCCS, name)
+#define CCCS(name, G) \
+ NET_REGISTER_DEVEXT(CCCS, name, G)
-#define VCVS(name) \
- NET_REGISTER_DEV(VCVS, name)
+#define VCVS(name, G) \
+ NET_REGISTER_DEVEXT(VCVS, name, G)
+
+#define CCVS(name, G) \
+ NET_REGISTER_DEVEXT(CCVS, name, G)
#define LVCCS(name) \
NET_REGISTER_DEV(LVCCS, name)
diff --git a/src/lib/netlist/analog/nld_generic_models.h b/src/lib/netlist/analog/nld_generic_models.h
index fac8bcb9a6d..570a4339bbb 100644
--- a/src/lib/netlist/analog/nld_generic_models.h
+++ b/src/lib/netlist/analog/nld_generic_models.h
@@ -138,11 +138,9 @@ namespace analog
, m_Vmin(nlconst::zero()) // not used in MOS model
, m_Is(nlconst::zero())
, m_logIs(nlconst::zero())
- , m_n(nlconst::zero())
, m_gmin(nlconst::magic(1e-15))
, m_VtInv(nlconst::zero())
, m_Vcrit(nlconst::zero())
- , m_name(name)
{
set_param(
nlconst::magic(1e-15)
@@ -151,6 +149,15 @@ namespace analog
, nlconst::magic(300.0));
}
+ // Basic math
+ //
+ // I(V) = f(V)
+ //
+ // G(V) = df/dV(V)
+ //
+ // Ieq(V) = I(V) - V * G(V)
+ //
+ //
void update_diode(nl_fptype nVd) noexcept
{
if (TYPE == diode_e::BIPOLAR)
@@ -165,11 +172,9 @@ namespace analog
const nl_fptype d = std::min(+fp_constants<nl_fptype>::DIODE_MAXDIFF(), nVd - old);
const nl_fptype a = plib::abs(d) * m_VtInv;
m_Vd = old + nlconst::magic(d < 0 ? -1.0 : 1.0) * plib::log1p(a) * m_Vt;
- //printf("new VD: %g\n", (nl_fptype)m_Vd);
}
else
m_Vd = std::max(-fp_constants<nl_fptype>::DIODE_MAXDIFF(), nVd);
- //m_Vd = nVd;
if (m_Vd < m_Vmin)
{
@@ -185,15 +190,14 @@ namespace analog
}
else if (TYPE == diode_e::MOS)
{
+ m_Vd = nVd;
if (nVd < nlconst::zero())
{
- m_Vd = nVd;
m_G = m_Is * m_VtInv + m_gmin;
m_Id = m_G * m_Vd;
}
else // log stepping should already be done in mosfet
{
- m_Vd = nVd;
const auto IseVDVt = plib::exp(std::min(+fp_constants<nl_fptype>::DIODE_MAXVOLT(), m_logIs + m_Vd * m_VtInv));
m_Id = IseVDVt - m_Is;
m_G = IseVDVt * m_VtInv + m_gmin;
@@ -205,16 +209,15 @@ namespace analog
{
m_Is = Is;
m_logIs = plib::log(Is);
- m_n = n;
m_gmin = gmin;
- m_Vt = m_n * temp * nlconst::k_b() / nlconst::Q_e();
+ m_Vt = n * temp * nlconst::k_b() / nlconst::Q_e();
m_Vmin = nlconst::magic(-5.0) * m_Vt;
+ // Vcrit : f(V) has smallest radius of curvature rho(V) == min(rho(v))
m_Vcrit = m_Vt * plib::log(m_Vt / m_Is / nlconst::sqrt2());
m_VtInv = plib::reciprocal(m_Vt);
- //printf("%g %g\n", m_Vmin, m_Vcrit);
}
@@ -234,13 +237,10 @@ namespace analog
nl_fptype m_Vmin;
nl_fptype m_Is;
nl_fptype m_logIs;
- nl_fptype m_n;
nl_fptype m_gmin;
nl_fptype m_VtInv;
nl_fptype m_Vcrit;
-
- pstring m_name;
};
diff --git a/src/lib/netlist/analog/nld_mosfet.cpp b/src/lib/netlist/analog/nld_mosfet.cpp
index fff7b8d03eb..4817f6cc00c 100644
--- a/src/lib/netlist/analog/nld_mosfet.cpp
+++ b/src/lib/netlist/analog/nld_mosfet.cpp
@@ -476,7 +476,11 @@ namespace analog
const nl_fptype Vctrl = (is_forward ? Vgs : Vgd) - Vth;
- nl_fptype Ids(0), gm(0), gds(0), gmb(0);
+ nl_fptype Ids(0);
+ nl_fptype gm(0);
+ nl_fptype gds(0);
+ nl_fptype gmb(0);
+
const nl_fptype absVds = plib::abs(Vds);
if (Vctrl <= nlconst::zero())
diff --git a/src/lib/netlist/analog/nld_switches.cpp b/src/lib/netlist/analog/nld_switches.cpp
index 9861b4fd1e5..a5d68228af1 100644
--- a/src/lib/netlist/analog/nld_switches.cpp
+++ b/src/lib/netlist/analog/nld_switches.cpp
@@ -108,13 +108,13 @@ namespace netlist
m_R1.set_R(R_OFF);
m_R2.set_R(R_ON);
}
-
- //m_R1.update_dev(time);
- //m_R2.update_dev(time);
}
NETLIB_UPDATE_PARAM(switch2)
{
+ // FIXME: We only need to update the net first if this is a time stepping net
+ m_R1.solve_now();
+ m_R2.solve_now();
if (!m_POS())
{
m_R1.set_R(R_ON);
@@ -125,9 +125,8 @@ namespace netlist
m_R1.set_R(R_OFF);
m_R2.set_R(R_ON);
}
-
- m_R1.solve_now();
- m_R2.solve_now();
+ m_R1.solve_later();
+ m_R2.solve_later();
}
} //namespace analog
diff --git a/src/lib/netlist/analog/nlid_fourterm.cpp b/src/lib/netlist/analog/nlid_fourterm.cpp
index 8b1240c7f82..0478a73fb50 100644
--- a/src/lib/netlist/analog/nlid_fourterm.cpp
+++ b/src/lib/netlist/analog/nlid_fourterm.cpp
@@ -108,12 +108,26 @@ NETLIB_RESET(VCVS)
m_ON2.set_conductivity(m_gfac);
}
+// ----------------------------------------------------------------------------------------
+// nld_CCVS
+// ----------------------------------------------------------------------------------------
+
+NETLIB_RESET(CCVS)
+{
+ m_gfac = plib::reciprocal(m_RO());
+ NETLIB_NAME(VCCS)::reset();
+
+ m_OP2.set_conductivity(m_gfac);
+ m_ON2.set_conductivity(m_gfac);
+}
+
} //namespace analog
namespace devices {
- NETLIB_DEVICE_IMPL_NS(analog, VCVS, "VCVS", "")
- NETLIB_DEVICE_IMPL_NS(analog, VCCS, "VCCS", "")
- NETLIB_DEVICE_IMPL_NS(analog, CCCS, "CCCS", "")
+ NETLIB_DEVICE_IMPL_NS(analog, VCVS, "VCVS", "G")
+ NETLIB_DEVICE_IMPL_NS(analog, VCCS, "VCCS", "G")
+ NETLIB_DEVICE_IMPL_NS(analog, CCCS, "CCCS", "G")
+ NETLIB_DEVICE_IMPL_NS(analog, CCVS, "CCVS", "G")
NETLIB_DEVICE_IMPL_NS(analog, LVCCS, "LVCCS", "")
} // namespace devices
} // namespace netlist
diff --git a/src/lib/netlist/analog/nlid_fourterm.h b/src/lib/netlist/analog/nlid_fourterm.h
index c7ec2524b9b..862fe8f79e5 100644
--- a/src/lib/netlist/analog/nlid_fourterm.h
+++ b/src/lib/netlist/analog/nlid_fourterm.h
@@ -36,9 +36,9 @@ namespace analog {
NETLIB_OBJECT(VCCS)
{
public:
- NETLIB_CONSTRUCTOR(VCCS)
+ NETLIB_CONSTRUCTOR_EX(VCCS, nl_fptype ari = nlconst::magic(1e9))
, m_G(*this, "G", nlconst::one())
- , m_RI(*this, "RI", nlconst::magic(1e9))
+ , m_RI(*this, "RI", ari)
, m_OP(*this, "OP", &m_IP)
, m_ON(*this, "ON", &m_IP)
, m_IP(*this, "IP", &m_IN) // <= this should be NULL and terminal be filtered out prior to solving...
@@ -126,7 +126,7 @@ namespace analog {
NETLIB_OBJECT_DERIVED(CCCS, VCCS)
{
public:
- NETLIB_CONSTRUCTOR_DERIVED(CCCS, VCCS)
+ NETLIB_CONSTRUCTOR_DERIVED_PASS(CCCS, VCCS, nlconst::one())
{
m_gfac = plib::reciprocal(m_RI());
}
@@ -191,6 +191,57 @@ namespace analog {
};
+ // ----------------------------------------------------------------------------------------
+ // nld_CCVS
+ // ----------------------------------------------------------------------------------------
+
+ //
+ // Voltage controlled voltage source
+ //
+ // Parameters:
+ // G Default: 1
+ // RO Default: 1 (would be typically 50 for an op-amp
+ //
+ // IP ---+ +--+---- OP
+ // | | |
+ // RI I RO
+ // RI => G => I RO V(OP) - V(ON) = (V(IP)-V(IN)) / RI * G
+ // RI I RO
+ // | | |
+ // IN ---+ +--+---- ON
+ //
+ // G=1 ==> 1A ==> 1V
+ //
+ // RI = 1
+ //
+ // Internal GI = G / RO
+ //
+
+ NETLIB_OBJECT_DERIVED(CCVS, VCCS)
+ {
+ public:
+ NETLIB_CONSTRUCTOR_DERIVED_PASS(CCVS, VCCS, nlconst::one())
+ , m_RO(*this, "RO", nlconst::one())
+ , m_OP2(*this, "_OP2", &m_ON2)
+ , m_ON2(*this, "_ON2", &m_OP2)
+ {
+ connect(m_OP2, m_OP1);
+ connect(m_ON2, m_ON1);
+ }
+
+ NETLIB_RESETI();
+
+ param_fp_t m_RO;
+
+ private:
+ //NETLIB_UPDATEI();
+ //NETLIB_UPDATE_PARAMI();
+
+ terminal_t m_OP2;
+ terminal_t m_ON2;
+ };
+
+
} // namespace analog
} // namespace netlist
diff --git a/src/lib/netlist/analog/nlid_twoterm.cpp b/src/lib/netlist/analog/nlid_twoterm.cpp
index e06a9cf275a..5aa312bc64a 100644
--- a/src/lib/netlist/analog/nlid_twoterm.cpp
+++ b/src/lib/netlist/analog/nlid_twoterm.cpp
@@ -66,6 +66,7 @@ namespace analog
NETLIB_UPDATE_PARAM(POT)
{
+ // FIXME: We only need to update the net first if this is a time stepping net
m_R1.solve_now();
m_R2.solve_now();
@@ -76,6 +77,8 @@ namespace analog
v = nlconst::one() - v;
m_R1.set_R(std::max(m_R() * v, exec().gmin()));
m_R2.set_R(std::max(m_R() * (nlconst::one() - v), exec().gmin()));
+ m_R1.solve_later();
+ m_R2.solve_later();
}
@@ -97,6 +100,7 @@ namespace analog
NETLIB_UPDATE_PARAM(POT2)
{
+ // FIXME: We only need to update the net first if this is a time stepping net
m_R1.solve_now();
nl_fptype v = m_Dial();
@@ -106,6 +110,7 @@ namespace analog
if (m_Reverse())
v = nlconst::one() - v;
m_R1.set_R(std::max(m_R() * v, exec().gmin()));
+ m_R1.solve_later();
}
// ----------------------------------------------------------------------------------------
diff --git a/src/lib/netlist/analog/nlid_twoterm.h b/src/lib/netlist/analog/nlid_twoterm.h
index ee3acdd1132..d869144cbe2 100644
--- a/src/lib/netlist/analog/nlid_twoterm.h
+++ b/src/lib/netlist/analog/nlid_twoterm.h
@@ -167,8 +167,10 @@ namespace analog
NETLIB_UPDATE_PARAMI()
{
+ // FIXME: We only need to update the net first if this is a time stepping net
solve_now();
set_R(std::max(m_R(), exec().gmin()));
+ solve_later();
}
private:
@@ -485,11 +487,13 @@ namespace analog
NETLIB_UPDATE_PARAMI()
{
+ // FIXME: We only need to update the net first if this is a time stepping net
//FIXME: works only for CS without function
solve_now();
const auto zero(nlconst::zero());
set_mat(zero, zero, -m_I(),
zero, zero, m_I());
+ solve_later();
}
private:
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp
index c68a8ce5755..6685f6231d9 100644
--- a/src/lib/netlist/devices/net_lib.cpp
+++ b/src/lib/netlist/devices/net_lib.cpp
@@ -38,6 +38,7 @@ namespace devices
LIB_ENTRY(VCVS)
LIB_ENTRY(VCCS)
LIB_ENTRY(CCCS)
+ LIB_ENTRY(CCVS)
LIB_ENTRY(LVCCS)
LIB_ENTRY(opamp)
LIB_ENTRY(nc_pin)
diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h
index 93c28b2987e..bae49e160f2 100644
--- a/src/lib/netlist/devices/net_lib.h
+++ b/src/lib/netlist/devices/net_lib.h
@@ -43,8 +43,7 @@
#else
#define SOLVER(name, freq) \
- NET_REGISTER_DEV(SOLVER, name) \
- PARAM(name.FREQ, freq)
+ NET_REGISTER_DEVEXT(SOLVER, name, freq)
#include "nld_system.h"
diff --git a/src/lib/netlist/devices/nld_4066.cpp b/src/lib/netlist/devices/nld_4066.cpp
index bd9b7bfe004..a45b2ab9e22 100644
--- a/src/lib/netlist/devices/nld_4066.cpp
+++ b/src/lib/netlist/devices/nld_4066.cpp
@@ -23,6 +23,7 @@ namespace netlist
, m_R(*this, "R")
, m_control(*this, "CTL")
, m_base_r(*this, "BASER", nlconst::magic(270.0))
+ , m_last(*this, "m_last", false)
{
}
@@ -34,7 +35,8 @@ namespace netlist
analog::NETLIB_SUB(R_base) m_R;
analog_input_t m_control;
- param_fp_t m_base_r;
+ param_fp_t m_base_r;
+ state_var<bool> m_last;
};
NETLIB_RESET(CD4066_GATE)
@@ -53,6 +55,7 @@ namespace netlist
nl_fptype in = m_control() - m_supply.GND().Q_Analog();
nl_fptype rON = m_base_r() * nlconst::magic(5.0) / sup;
nl_fptype R = -nlconst::one();
+ bool new_state(false);
if (in < low)
{
@@ -61,10 +64,12 @@ namespace netlist
else if (in > high)
{
R = rON;
+ new_state = true;
}
//printf("%s %f %f %g\n", name().c_str(), sup, in, R);
- if (R > nlconst::zero())
+ if (R > nlconst::zero() && (m_last != new_state))
{
+ m_last = new_state;
m_R.update();
m_R.set_R(R);
m_R.solve_later();
diff --git a/src/lib/netlist/devices/nld_mm5837.cpp b/src/lib/netlist/devices/nld_mm5837.cpp
index ea987e68e4b..a813a779665 100644
--- a/src/lib/netlist/devices/nld_mm5837.cpp
+++ b/src/lib/netlist/devices/nld_mm5837.cpp
@@ -20,24 +20,20 @@ namespace netlist
, m_VDD(*this, "1")
, m_VGG(*this, "2")
, m_VSS(*this, "4")
- , m_FREQ(*this, "FREQ", 24000)
+ , m_FREQ(*this, "FREQ", 24000 * 2)
, m_R_LOW(*this, "R_LOW", 1000)
, m_R_HIGH(*this, "R_HIGH", 1000)
/* clock */
, m_feedback(*this, "_FB")
, m_Q(*this, "_Q")
- , m_inc(netlist_time::from_hz(24000))
+ , m_inc(netlist_time::from_hz(24000 * 2))
, m_shift(*this, "m_shift", 0)
, m_is_timestep(false)
{
connect(m_feedback, m_Q);
-
- /* output */
- //register_term("_RV1", m_RV.m_P);
- //register_term("_RV2", m_RV.m_N);
+
+ // output
connect(m_RV.m_N, m_VDD);
-
- /* device */
register_subalias("3", m_RV.m_P);
}
@@ -74,7 +70,7 @@ namespace netlist
nlconst::zero(),
nlconst::zero());
m_inc = netlist_time::from_fp(plib::reciprocal(m_FREQ()));
- if (m_FREQ() < nlconst::magic(24000) || m_FREQ() > nlconst::magic(56000))
+ if (m_FREQ() < nlconst::magic(24000*2) || m_FREQ() > nlconst::magic(56000*2))
log().warning(MW_FREQUENCY_OUTSIDE_OF_SPECS_1(m_FREQ()));
m_shift = 0x1ffff;
@@ -84,7 +80,7 @@ namespace netlist
NETLIB_UPDATE_PARAM(MM5837_dip)
{
m_inc = netlist_time::from_fp(plib::reciprocal(m_FREQ()));
- if (m_FREQ() < nlconst::magic(24000) || m_FREQ() > nlconst::magic(56000))
+ if (m_FREQ() < nlconst::magic(24000*2) || m_FREQ() > nlconst::magic(56000*2))
log().warning(MW_FREQUENCY_OUTSIDE_OF_SPECS_1(m_FREQ()));
}
diff --git a/src/lib/netlist/devices/nld_r2r_dac.cpp b/src/lib/netlist/devices/nld_r2r_dac.cpp
index 8f2c62d2185..361652a373a 100644
--- a/src/lib/netlist/devices/nld_r2r_dac.cpp
+++ b/src/lib/netlist/devices/nld_r2r_dac.cpp
@@ -39,12 +39,13 @@ namespace netlist
NETLIB_UPDATE_PARAM(r2r_dac)
{
+ // FIXME: We only need to update the net first if this is a time stepping net
solve_now();
-
nl_fptype V = m_VIN() / static_cast<nl_fptype>(1 << m_num())
* static_cast<nl_fptype>(m_val());
this->set_G_V_I(plib::reciprocal(m_R()), V, nlconst::zero());
+ solve_later();
}
} //namespace analog
diff --git a/src/lib/netlist/devices/nld_r2r_dac.h b/src/lib/netlist/devices/nld_r2r_dac.h
index 8a4257a3cbf..d440f999d67 100644
--- a/src/lib/netlist/devices/nld_r2r_dac.h
+++ b/src/lib/netlist/devices/nld_r2r_dac.h
@@ -49,9 +49,6 @@
#include "netlist/nl_setup.h"
#define R2R_DAC(name, p_VIN, p_R, p_N) \
- NET_REGISTER_DEV(R2R_DAC, name) \
- NETDEV_PARAMI(name, VIN, p_VIN) \
- NETDEV_PARAMI(name, R, p_R) \
- NETDEV_PARAMI(name, N, p_N)
+ NET_REGISTER_DEVEXT(R2R_DAC, name, p_VIN, p_R, p_N)
#endif /* NLD_R2R_DAC_H_ */
diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h
index a2c4951794a..ce9970df81e 100644
--- a/src/lib/netlist/devices/nlid_system.h
+++ b/src/lib/netlist/devices/nlid_system.h
@@ -179,8 +179,6 @@ namespace devices
netlist_time::mult_type total = 0;
for (unsigned i=0; i<m_size; i++)
{
- // FIXME: use pstonum_ne
- //pati[i] = plib::pstonum<decltype(pati[i])>(pat[i]);
pati[i] = plib::pstonum<std::int64_t>(pat[i]);
total += pati[i];
}
@@ -344,7 +342,6 @@ namespace devices
private:
analog::NETLIB_NAME(twoterm) m_RIN;
- // Fixme: only works if the device is time-stepped - need to rework
analog::NETLIB_NAME(twoterm) m_ROUT;
analog_input_t m_I;
analog_output_t m_Q;
@@ -355,8 +352,6 @@ namespace devices
// -----------------------------------------------------------------------------
// nld_function
- //
- // FIXME: Currently a proof of concept to get congo bongo working
// ----------------------------------------------------------------------------- */
NETLIB_OBJECT(function)
@@ -437,7 +432,7 @@ namespace devices
const nl_fptype R = state ? m_RON() : m_ROFF();
// FIXME: We only need to update the net first if this is a time stepping net
- m_R.update();
+ m_R.solve_now();
m_R.set_R(R);
m_R.solve_later();
}
diff --git a/src/lib/netlist/devices/nlid_truthtable.cpp b/src/lib/netlist/devices/nlid_truthtable.cpp
index e575e5a8b3b..d674513e62a 100644
--- a/src/lib/netlist/devices/nlid_truthtable.cpp
+++ b/src/lib/netlist/devices/nlid_truthtable.cpp
@@ -162,7 +162,7 @@ namespace devices
void parseline(unsigned cur, std::vector<pstring> list,
tt_bitset state, std::uint_least64_t val, std::vector<uint_least8_t> &timing_index);
- tt_bitset calculate_ignored_inputs(tt_bitset i) const;
+ tt_bitset calculate_ignored_inputs(tt_bitset state) const;
unsigned m_NO;
unsigned m_NI;
@@ -321,7 +321,7 @@ namespace devices
{
tt_bitset bj(j);
size_t nb(bj.count());
- if ((t[j] == false) && (nb>jb))
+ if (!t[j] && (nb > jb))
{
jb = nb;
jm = bj;
diff --git a/src/lib/netlist/examples/congo_bongo.c b/src/lib/netlist/examples/congo_bongo.cpp
index 9c5db529d6c..5acfb898b7c 100644
--- a/src/lib/netlist/examples/congo_bongo.c
+++ b/src/lib/netlist/examples/congo_bongo.cpp
@@ -1,6 +1,5 @@
-// license:GPL-2.0+
-// copyright-holders:Couriersud
-/* € */ // ABC
+// license:CC0
+// copyright-holders:Andrew Gardner,Couriersud
#include "netlist/devices/net_lib.h"
@@ -19,13 +18,9 @@
#ifndef __PLIB_PREPROCESSOR__
-#define LM358_DIP(_name) \
- NET_REGISTER_DEV_X(LM358_DIP, _name)
-
#define G501534_DIP(_name) \
NET_REGISTER_DEV_X(G501534_DIP, _name)
-
NETLIST_EXTERNAL(congob_lib)
#endif
@@ -43,23 +38,27 @@ NETLIST_START(dummy)
// IGNORED O_AUDIO0: O_AUDIO0 64 0
// .END
- PARAM(Solver.ACCURACY, 1e-7)
- PARAM(Solver.NR_LOOPS, 90000)
+ PARAM(Solver.RELTOL, 1e-3)
+ PARAM(Solver.VNTOL, 1e-5)
+ PARAM(Solver.NR_LOOPS, 30)
PARAM(Solver.SOR_FACTOR, 1.0)
PARAM(Solver.GS_LOOPS, 99)
- //PARAM(Solver.METHOD, "GMRES")
PARAM(Solver.METHOD, "MAT_CR")
+
+ //PARAM(Solver.METHOD, "GMRES")
+ PARAM(Solver.ACCURACY, 1e-5)
//PARAM(Solver.METHOD, "SOR")
#if USE_OPTMIZATIONS
#if USE_FRONTIERS
- SOLVER(Solver, 48000)
+ SOLVER(Solver, 96000)
#else
SOLVER(Solver, 48000)
#endif
PARAM(Solver.DYNAMIC_TS, 0)
- PARAM(Solver.PARALLEL, 1)
+ PARAM(Solver.PARALLEL, 4)
PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 2e-6)
+ PARAM(Solver.DYNAMIC_LTE, 1e-4)
#else
SOLVER(Solver, 48000)
PARAM(Solver.DYNAMIC_TS, 1)
@@ -78,8 +77,6 @@ NETLIST_START(dummy)
TTL_INPUT(I_GORILLA0, 0)
TTL_INPUT(I_RIM0, 0)
- ALIAS(I_V0.Q, GND.Q)
-
ANALOG_INPUT(I_V12, 12)
ANALOG_INPUT(I_V5, 5)
ANALOG_INPUT(I_V6, 6)
@@ -90,7 +87,7 @@ NETLIST_START(dummy)
NET_C(R94.1, CO.1)
NET_C(CO.2, RO.1)
- NET_C(RO.2, GND)
+ NET_C(GND, RO.2)
// Found here: https://hamesspam.sakura.ne.jp/hes2016/160521.html
NET_MODEL("1S2075 D(IS=1.387E-9 N=1.702 RS=1.53 CJO=1.92pf VJ=0.4996 M=0.0605 TT=5ns BV=75 IBV=100E-15)")
@@ -99,6 +96,9 @@ NETLIST_START(dummy)
INCLUDE(CongoBongo_schematics)
+ NET_C(I_V5, I_RIM0.VCC, I_CONGA_H0.VCC, I_CONGA_L0.VCC, I_GORILLA0.VCC, I_BASS_DRUM0.VCC)
+ NET_C(GND, I_RIM0.GND, I_CONGA_H0.GND, I_CONGA_L0.GND, I_GORILLA0.GND, I_BASS_DRUM0.GND)
+
#if USE_OPTMIZATIONS
/* provide resistance feedback loop. This helps convergence for
* Newton-Raphson a lot. This puts a resistor of 1e100 Ohms in parallel
@@ -114,8 +114,11 @@ NETLIST_START(dummy)
/* The opamp actually has an FPF of about 1000k. This doesn't work here and causes oscillations.
* FPF here therefore about half the Solver clock.
*/
- PARAM(XU16.B.MODEL, "MB3614(TYPE=3)")
+#if 1
+ PARAM(XU16.B.MODEL, "MB3614(TYPE=3 UGF=22k)")
+ //PARAM(XU17.A.MODEL, "MB3614(TYPE=3 UGF=22k)")
PARAM(XU17.C.MODEL, "MB3614(TYPE=3 UGF=44k)")
+#endif
#if 0
PARAM(XU17.A.MODEL, "MB3614(TYPE=1)")
PARAM(XU17.B.MODEL, "MB3614(TYPE=1)")
@@ -288,14 +291,14 @@ NETLIST_START(CongoBongo_schematics)
NET_C(XU13.1, C37.2, C36.1, R48.1)
NET_C(XU13.2, C35.2, R48.2)
NET_C(XU13.3, R44.1, R46.2, R45.1)
- NET_C(XU13.4, R27.1, R21.1, R37.1, R31.1, R47.1, R41.1, R57.1, R51.1, C46.2, C45.2, XU17.4, R80.2, XU16.4, XU20.4, XU15.12, I_V12.Q)
+ NET_C(I_V12.Q, XU13.4, R27.1, R21.1, R37.1, R31.1, R47.1, R41.1, R57.1, R51.1, C46.2, C45.2, XU17.4, R80.2, XU16.4, XU20.4, XU15.12)
NET_C(XU13.5, R54.1, R56.2, R55.1)
NET_C(XU13.6, C41.2, R58.2, R60.2)
NET_C(XU13.7, C44.2, C42.1, R58.1, R61.1)
NET_C(XU13.8, C29.2, C31.1, R38.1)
NET_C(XU13.9, C30.2, R38.2)
NET_C(XU13.10, R34.1, R36.2, R35.1)
- NET_C(XU13.11, C22.2, R29.2, R25.2, R23.2, R22.2, XU6.1, XU6.3, XU6.7, C28.2, R39.2, R35.2, R33.2, R32.2, C34.2, R49.2, R45.2, R43.2, R42.2, C40.2, R59.2, R55.2, R53.2, R52.2, C43.2, R69.1, R64.1, C49.2, C48.2, C47.2, C46.1, C45.1, XU17.11, XU19.1, XU19.4, XU19.8, XU19.12, XU19.15, R81.1, C56.2, C55.2, C53.2, C52.2, XU18.1, XU18.2, XU18.7, XU18.12, XU18.13, C54.2, XU16.11, R84.1, R88.1, Q2.E, C58.2, C60.2, XU20.1, XU20.2, XU15.4, I_V0.Q)
+ NET_C(GND, XU13.11, C22.2, R29.2, R25.2, R23.2, R22.2, XU6.1, XU6.3, XU6.7, C28.2, R39.2, R35.2, R33.2, R32.2, C34.2, R49.2, R45.2, R43.2, R42.2, C40.2, R59.2, R55.2, R53.2, R52.2, C43.2, R69.1, R64.1, C49.2, C48.2, C47.2, C46.1, C45.1, XU17.11, XU19.1, XU19.4, XU19.8, XU19.12, XU19.15, R81.1, C56.2, C55.2, C53.2, C52.2, XU18.1, XU18.2, XU18.7, XU18.12, XU18.13, C54.2, XU16.11, R84.1, R88.1, Q2.E, C58.2, C60.2, XU20.1, XU20.2, XU15.4)
NET_C(XU13.12, R24.1, R26.2, R25.1)
NET_C(XU13.13, C23.2, R28.2)
NET_C(XU13.14, C25.2, C24.1, R28.1)
@@ -377,6 +380,7 @@ NETLIST_START(CongoBongo_schematics)
NET_C(C60.1, XU15.2)
NET_C(XU15.3, C61.2)
NET_C(C61.1, R94.2)
+
NETLIST_END()
@@ -385,7 +389,8 @@ NETLIST_START(G501534_DIP)
//AFUNC(f, 2, "A0 A1 A1 A1 * * 0.01 * *")
//AFUNC(f, 2, "A0")
//AFUNC(f, 2, "A0 6 - A1 3 pow * 0.02 * 6 +")
- AFUNC(f, 2, "A0 * pow(A1,3.0) * 0.02")
+ //AFUNC(f, 2, "A0 * pow(A1,3.0) * 0.02")
+ AFUNC(f, 2, "A0 * A1 * 0.2")
/*
* 12: VCC
@@ -396,15 +401,13 @@ NETLIST_START(G501534_DIP)
* 2: RDL - connected via Capacitor to ground
*/
- DUMMY_INPUT(DU1)
- DUMMY_INPUT(DU2)
- DUMMY_INPUT(DU3)
+ RES(DUMMY, RES_K(1))
RES(RO, 1000)
- ALIAS(12, DU1.I)
- ALIAS(4, DU2.I)
- ALIAS(2, DU3.I)
+ ALIAS(12, DUMMY.1) // VCC
+ ALIAS(4, DUMMY.2) // GND
+ ALIAS(2, DUMMY.2) // RDL
ALIAS(1, f.A0)
ALIAS(13, f.A1)
NET_C(f.Q, RO.1)
diff --git a/src/lib/netlist/examples/congo_bongo.csv b/src/lib/netlist/examples/congo_bongo.csv
index 55ec61fe0de..a245deb399f 100644
--- a/src/lib/netlist/examples/congo_bongo.csv
+++ b/src/lib/netlist/examples/congo_bongo.csv
@@ -1,6 +1,6 @@
0.000,I_GORILLA0.IN,0
0.100,I_GORILLA0.IN,1
-0.200,I_GORILLA0.IN,0
+0.300,I_GORILLA0.IN,0
1.000,I_BASS_DRUM0.IN,1
1.100,I_BASS_DRUM0.IN,0
2.000,I_CONGA_H0.IN,1
diff --git a/src/lib/netlist/macro/nlm_base.cpp b/src/lib/netlist/macro/nlm_base.cpp
index 79a6a358fa7..e04d98e59ad 100644
--- a/src/lib/netlist/macro/nlm_base.cpp
+++ b/src/lib/netlist/macro/nlm_base.cpp
@@ -75,11 +75,11 @@ NETLIST_END()
* ---------------------------------------------------------------------------*/
static NETLIST_START(family_models)
- NET_MODEL("FAMILY _(TYPE=CUSTOM FV=5 IVL=0.16 IVH=0.4 OVL=0.1 OVH=1.0 ORL=1.0 ORH=130.0)")
+ NET_MODEL("FAMILY _(TYPE=CUSTOM IVL=0.16 IVH=0.4 OVL=0.1 OVH=1.0 ORL=1.0 ORH=130.0)")
NET_MODEL("OPAMP _()")
NET_MODEL("SCHMITT_TRIGGER _()")
- NET_MODEL("74XXOC FAMILY(FV=5 IVL=0.16 IVH=0.4 OVL=0.1 OVH=0.05 ORL=10.0 ORH=1.0e8)")
+ NET_MODEL("74XXOC FAMILY(IVL=0.16 IVH=0.4 OVL=0.1 OVH=0.05 ORL=10.0 ORH=1.0e8)")
NET_MODEL("74XX FAMILY(TYPE=TTL)")
NET_MODEL("CD4XXX FAMILY(TYPE=CD4XXX)")
NETLIST_END()
diff --git a/src/lib/netlist/macro/nlm_cd4xxx.cpp b/src/lib/netlist/macro/nlm_cd4xxx.cpp
index 595045f66da..22fa4f27be5 100644
--- a/src/lib/netlist/macro/nlm_cd4xxx.cpp
+++ b/src/lib/netlist/macro/nlm_cd4xxx.cpp
@@ -23,21 +23,21 @@
*/
static NETLIST_START(CD4001_DIP)
- CD4001_NOR(s1)
- CD4001_NOR(s2)
- CD4001_NOR(s3)
- CD4001_NOR(s4)
+ CD4001_GATE(s1)
+ CD4001_GATE(s2)
+ CD4001_GATE(s3)
+ CD4001_GATE(s4)
NET_C(s1.VCC, s2.VCC, s3.VCC, s4.VCC)
- NET_C(s1.VDD, s2.VDD, s3.VDD, s4.VDD)
+ NET_C(s1.GND, s2.GND, s3.GND, s4.GND)
DIPPINS( /* +--------------+ */
- s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC,
+ s1.A, /* A1 |1 ++ 14| VDD */ s1.VCC,
s1.B, /* B1 |2 13| A6 */ s4.B,
s1.Q, /* A2 |3 12| Y6 */ s4.A,
s2.Q, /* Y2 |4 4001 11| A5 */ s4.Q,
s2.A, /* A3 |5 10| Y5 */ s3.Q,
s2.B, /* Y3 |6 9| A4 */ s3.B,
- s1.VDD, /* GND |7 8| Y4 */ s3.A
+ s1.GND, /* VSS |7 8| Y4 */ s3.A
/* +--------------+ */
)
@@ -222,7 +222,7 @@ NETLIST_END()
NETLIST_START(CD4XXX_lib)
- TRUTHTABLE_START(CD4001_NOR, 2, 1, "")
+ TRUTHTABLE_START(CD4001_GATE, 2, 1, "")
TT_HEAD("A , B | Q ")
TT_LINE("0,0|1|85")
TT_LINE("X,1|0|120")
diff --git a/src/lib/netlist/macro/nlm_cd4xxx.h b/src/lib/netlist/macro/nlm_cd4xxx.h
index efa7f33d586..4f92539f0a3 100644
--- a/src/lib/netlist/macro/nlm_cd4xxx.h
+++ b/src/lib/netlist/macro/nlm_cd4xxx.h
@@ -27,8 +27,8 @@
#ifndef NL_AUTO_DEVICES
-#define CD4001_NOR(name) \
- NET_REGISTER_DEV(CD4001_NOR, name)
+#define CD4001_GATE(name) \
+ NET_REGISTER_DEV(CD4001_GATE, name)
#define CD4001_DIP(name) \
NET_REGISTER_DEV(CD4001_DIP, name)
diff --git a/src/lib/netlist/macro/nlm_opamp.cpp b/src/lib/netlist/macro/nlm_opamp.cpp
index 5132333f09d..e06be8a5e00 100644
--- a/src/lib/netlist/macro/nlm_opamp.cpp
+++ b/src/lib/netlist/macro/nlm_opamp.cpp
@@ -225,9 +225,10 @@ static NETLIST_START(LM3900)
ALIAS(MINUS, R2.1) // Negative input
ALIAS(OUT, G1.OP) // Opamp output ...
ALIAS(GND, G1.ON) // V- terminal
- ALIAS(VCC, DUMMY.I) // V+ terminal
+ ALIAS(VCC, DUMMY.1) // V+ terminal
- DUMMY_INPUT(DUMMY)
+ RES(DUMMY, RES_K(1))
+ NET_C(DUMMY.2, GND)
/* The opamp model */
diff --git a/src/lib/netlist/macro/nlm_other.cpp b/src/lib/netlist/macro/nlm_other.cpp
index befbc99a364..873f3ad84c5 100644
--- a/src/lib/netlist/macro/nlm_other.cpp
+++ b/src/lib/netlist/macro/nlm_other.cpp
@@ -48,7 +48,7 @@ NETLIST_START(otheric_lib)
TT_LINE(" 0 | 1 |100")
TT_LINE(" 1 | 0 |100")
// 2.1V negative going and 2.7V positive going at 5V
- TT_FAMILY("FAMILY(FV=0 IVL=0.42 IVH=0.54 OVL=0.05 OVH=0.05 ORL=10.0 ORH=10.0)")
+ TT_FAMILY("FAMILY(IVL=0.42 IVH=0.54 OVL=0.05 OVH=0.05 ORL=10.0 ORH=10.0)")
TRUTHTABLE_END()
LOCAL_LIB_ENTRY(MC14584B_DIP)
diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx.cpp
index 9e0fa15c582..e96c32f66cf 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx.cpp
+++ b/src/lib/netlist/macro/nlm_ttl74xx.cpp
@@ -897,7 +897,7 @@ NETLIST_START(TTL74XX_lib)
NET_MODEL("DM7414 SCHMITT_TRIGGER(VTP=1.7 VTM=0.9 VI=4.35 RI=6.15k VOH=3.5 ROH=120 VOL=0.1 ROL=37.5 TPLH=15 TPHL=15)")
NET_MODEL("TTL_7414_GATE SCHMITT_TRIGGER(VTP=1.7 VTM=0.9 VI=4.35 RI=6.15k VOH=3.5 ROH=120 VOL=0.1 ROL=37.5 TPLH=15 TPHL=15)")
NET_MODEL("DM74LS14 SCHMITT_TRIGGER(VTP=1.6 VTM=0.8 VI=4.4 RI=19.3k VOH=3.45 ROH=130 VOL=0.1 ROL=31.2 TPLH=15 TPHL=15)")
- //NET_MODEL("DM7414 FAMILY(FV=5 IVL=0.16 IVH=0.4 OVL=0.1 OVH=0.05 ORL=10.0 ORH=1.0e8)")
+ //NET_MODEL("DM7414 FAMILY(IVL=0.16 IVH=0.4 OVL=0.1 OVH=0.05 ORL=10.0 ORH=1.0e8)")
TRUTHTABLE_START(TTL_7400_GATE, 2, 1, "")
diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp
index 14bb0e5530b..336f6783e8f 100644
--- a/src/lib/netlist/nl_base.cpp
+++ b/src/lib/netlist/nl_base.cpp
@@ -35,7 +35,6 @@ namespace netlist
public:
logic_family_ttl_t() : logic_family_desc_t()
{
- m_fixed_V = nlconst::magic(5.0);
m_low_thresh_PCNT = nlconst::magic(0.8 / 5.0);
m_high_thresh_PCNT = nlconst::magic(2.0 / 5.0);
// m_low_V - these depend on sinked/sourced current. Values should be suitable for typical applications.
@@ -62,7 +61,6 @@ namespace netlist
public:
logic_family_cd4xxx_t() : logic_family_desc_t()
{
- m_fixed_V = nlconst::magic(0.0);
m_low_thresh_PCNT = nlconst::magic(1.5 / 5.0);
m_high_thresh_PCNT = nlconst::magic(3.5 / 5.0);
// m_low_V - these depend on sinked/sourced current. Values should be suitable for typical applications.
@@ -214,6 +212,20 @@ namespace netlist
// Initialize factory
devices::initialize_factory(m_setup->factory());
+
+ // Add default include file
+ using a = plib::psource_str_t<plib::psource_t>;
+ const pstring content =
+ "#define RES_R(res) (res) \n"
+ "#define RES_K(res) ((res) * 1e3) \n"
+ "#define RES_M(res) ((res) * 1e6) \n"
+ "#define CAP_U(cap) ((cap) * 1e-6) \n"
+ "#define CAP_N(cap) ((cap) * 1e-9) \n"
+ "#define CAP_P(cap) ((cap) * 1e-12) \n"
+ "#define IND_U(ind) ((ind) * 1e-6) \n"
+ "#define IND_N(ind) ((ind) * 1e-9) \n"
+ "#define IND_P(ind) ((ind) * 1e-12) \n";
+ setup().add_include(plib::make_unique<a>("netlist/devices/net_lib.h", content));
NETLIST_NAME(base)(*m_setup);
}
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index ae1a17a8975..0f8feea9faf 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -62,11 +62,18 @@ class NETLIB_NAME(name) : public device_t
public: template <class CLASS> NETLIB_NAME(cname)(CLASS &owner, const pstring &name) \
: NETLIB_NAME(pclass)(owner, name)
+// FIXME: Only used by diode
#define NETLIB_CONSTRUCTOR_DERIVED_EX(cname, pclass, ...) \
private: detail::family_setter_t m_famsetter; \
public: template <class CLASS> NETLIB_NAME(cname)(CLASS &owner, const pstring &name, __VA_ARGS__) \
: NETLIB_NAME(pclass)(owner, name)
+#define NETLIB_CONSTRUCTOR_DERIVED_PASS(cname, pclass, ...) \
+ private: detail::family_setter_t m_famsetter; \
+ public: template <class CLASS> NETLIB_NAME(cname)(CLASS &owner, const pstring &name) \
+ : NETLIB_NAME(pclass)(owner, name, __VA_ARGS__)
+
+
/// \brief Used to define the constructor of a netlist device.
/// Use this to define the constructor of a netlist device. Please refer to
/// #NETLIB_OBJECT for an example.
@@ -258,8 +265,6 @@ namespace netlist
virtual unique_pool_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name,
logic_input_t *proxied) const = 0;
- // FIXME: remove fixed_V()
- nl_fptype fixed_V() const noexcept{return m_fixed_V; }
nl_fptype low_thresh_V(nl_fptype VN, nl_fptype VP) const noexcept{ return VN + (VP - VN) * m_low_thresh_PCNT; }
nl_fptype high_thresh_V(nl_fptype VN, nl_fptype VP) const noexcept{ return VN + (VP - VN) * m_high_thresh_PCNT; }
nl_fptype low_offset_V() const noexcept{ return m_low_VO; }
@@ -273,7 +278,6 @@ namespace netlist
bool is_below_low_thresh_V(nl_fptype V, nl_fptype VN, nl_fptype VP) const noexcept
{ return (V - VN) < low_thresh_V(VN, VP); }
- nl_fptype m_fixed_V; //!< For variable voltage families, specify 0. For TTL this would be 5.
nl_fptype m_low_thresh_PCNT; //!< low input threshhold offset. If the input voltage is below this value times supply voltage, a "0" input is signalled
nl_fptype m_high_thresh_PCNT; //!< high input threshhold offset. If the input voltage is above the value times supply voltage, a "0" input is signalled
nl_fptype m_low_VO; //!< low output voltage offset. This voltage is output if the ouput is "0"
diff --git a/src/lib/netlist/nl_config.h b/src/lib/netlist/nl_config.h
index 3d50da284c4..a6aa74381e4 100644
--- a/src/lib/netlist/nl_config.h
+++ b/src/lib/netlist/nl_config.h
@@ -17,7 +17,7 @@
///
/// \brief Version - Minor.
///
-#define NL_VERSION_MINOR 9
+#define NL_VERSION_MINOR 11
/// \brief Version - Patch level.
///
#define NL_VERSION_PATCHLEVEL 0
diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp
index d1156117f8e..04cfd43c635 100644
--- a/src/lib/netlist/nl_parser.cpp
+++ b/src/lib/netlist/nl_parser.cpp
@@ -236,10 +236,12 @@ void parser_t::frontier()
// don't do much
pstring attachat = get_identifier();
require_token(m_tok_comma);
- nl_fptype r_IN = eval_param(get_token());
- require_token(m_tok_comma);
- nl_fptype r_OUT = eval_param(get_token());
- require_token(m_tok_paren_right);
+ auto tok = get_token();
+ auto r_IN = stringify_expression(tok);
+ require_token(tok, m_tok_comma);
+ tok = get_token();
+ auto r_OUT = stringify_expression(tok);
+ require_token(tok, m_tok_paren_right);
m_setup.register_frontier(attachat, r_IN, r_OUT);
}
@@ -335,14 +337,15 @@ void parser_t::netdev_param()
{
m_setup.log().debug("Parser: Param: {1} {2}\n", param, tok.str());
m_setup.register_param(param, tok.str());
+ require_token(m_tok_paren_right);
}
else
{
- nl_fptype val = eval_param(tok);
+ auto val = stringify_expression(tok);
m_setup.log().debug("Parser: Param: {1} {2}\n", param, val);
m_setup.register_param(param, val);
+ require_token(tok, m_tok_paren_right);
}
- require_token(m_tok_paren_right);
}
void parser_t::netdev_hint()
@@ -351,7 +354,7 @@ void parser_t::netdev_hint()
pstring dev(get_identifier());
require_token(m_tok_comma);
pstring hint(get_identifier());
- m_setup.register_param(dev + ".HINT_" + hint, 1);
+ m_setup.register_param_val(dev + ".HINT_" + hint, 1);
require_token(m_tok_paren_right);
}
@@ -370,18 +373,15 @@ void parser_t::device(const pstring &dev_type)
{
tok = get_token();
if (tok.is_type(token_type::IDENTIFIER) || tok.is_type(token_type::STRING))
+ {
params.push_back(tok.str());
+ tok = get_token();
+ }
else
{
- // FIXME: Do we really need this?
- nl_fptype value = eval_param(tok);
- if (plib::abs(value - plib::floor(value)) > nlconst::magic(1e-30)
- || plib::abs(value) > nlconst::magic(1e9))
- params.push_back(plib::pfmt("{1:.9}").e(value));
- else
- params.push_back(plib::pfmt("{1}")(static_cast<long>(value)));
+ auto value = stringify_expression(tok);
+ params.push_back(value);
}
- tok = get_token();
}
require_token(tok, m_tok_paren_right);
@@ -393,39 +393,24 @@ void parser_t::device(const pstring &dev_type)
// private
// ----------------------------------------------------------------------------------------
-nl_fptype parser_t::eval_param(const token_t &tok)
+pstring parser_t::stringify_expression(token_t &tok)
{
- static std::array<pstring, 7> macs = {"", "RES_R", "RES_K", "RES_M", "CAP_U", "CAP_N", "CAP_P"};
- static std::array<nl_fptype, 7> facs = {
- nlconst::magic(1.0),
- nlconst::magic(1.0),
- nlconst::magic(1e3),
- nlconst::magic(1e6),
- nlconst::magic(1e-6),
- nlconst::magic(1e-9),
- nlconst::magic(1e-12)
- };
- std::size_t f=0;
- nl_fptype ret(0);
-
- for (std::size_t i=1; i<macs.size();i++)
- if (tok.str() == macs[i])
- f = i;
- if (f>0)
+ int pc(0);
+ pstring ret;
+ while (!tok.is(m_tok_comma))
{
- require_token(m_tok_paren_left);
- ret = static_cast<nl_fptype>(get_number_double());
- require_token(m_tok_paren_right);
- }
- else
- {
- bool err(false);
- ret = plib::pstonum_ne<nl_fptype>(tok.str(), err);
- if (err)
- error(MF_PARAM_NOT_FP_1(tok.str()));
+ if (tok.is(m_tok_paren_left))
+ pc++;
+ else if (tok.is(m_tok_paren_right))
+ {
+ if (pc<=0)
+ break;
+ pc--;
+ }
+ ret += tok.str();
+ tok = get_token();
}
- return ret * facs[f];
-
+ return ret;
}
} // namespace netlist
diff --git a/src/lib/netlist/nl_parser.h b/src/lib/netlist/nl_parser.h
index e747f2dac28..524f2cfeed8 100644
--- a/src/lib/netlist/nl_parser.h
+++ b/src/lib/netlist/nl_parser.h
@@ -43,9 +43,7 @@ namespace netlist
void verror(const pstring &msg) override;
private:
-
- nl_fptype eval_param(const token_t &tok);
-
+ pstring stringify_expression(token_t &tok);
token_id_t m_tok_paren_left;
token_id_t m_tok_paren_right;
token_id_t m_tok_comma;
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index dad4684e2eb..727b37c54c6 100644
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -121,11 +121,9 @@ namespace netlist
pstring paramfq = name + "." + tp;
log().debug("Defparam: {1}\n", paramfq);
- // remove quotes
- if (plib::startsWith(*ptok, "\"") && plib::endsWith(*ptok, "\""))
- register_param(paramfq, ptok->substr(1, ptok->length() - 2));
- else
- register_param(paramfq, *ptok);
+
+ register_param(paramfq, *ptok);
+
++ptok;
}
}
@@ -216,11 +214,16 @@ namespace netlist
void nlparse_t::register_param(const pstring &param, const pstring &value)
{
pstring fqn = build_fqn(param);
+ pstring val(value);
+
+ // strip " from stringified strings
+ if (plib::startsWith(value, "\"") && plib::endsWith(value, "\""))
+ val = value.substr(1, value.length() - 2);
auto idx = m_param_values.find(fqn);
if (idx == m_param_values.end())
{
- if (!m_param_values.insert({fqn, value}).second)
+ if (!m_param_values.insert({fqn, val}).second)
{
log().fatal(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST(param));
throw nl_exception(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST(param));
@@ -229,8 +232,8 @@ namespace netlist
else
{
log().warning(MW_OVERWRITING_PARAM_1_OLD_2_NEW_3(fqn, idx->second,
- value));
- m_param_values[fqn] = value;
+ val));
+ m_param_values[fqn] = val;
}
}
@@ -239,7 +242,7 @@ namespace netlist
m_factory.register_device(plib::make_unique<factory::library_element_t>(name, name, "", sourcefile));
}
- void nlparse_t::register_frontier(const pstring &attach, const nl_fptype r_IN, const nl_fptype r_OUT)
+ void nlparse_t::register_frontier(const pstring &attach, const pstring &r_IN, const pstring &r_OUT)
{
pstring frontier_name = plib::pfmt("frontier_{1}")(m_frontier_cnt);
m_frontier_cnt++;
@@ -310,9 +313,9 @@ namespace netlist
bool nlparse_t::parse_stream(plib::psource_t::stream_ptr &&istrm, const pstring &name)
{
- plib::ppreprocessor y(m_includes, &m_defines);
- plib::ppreprocessor &x(y.process(std::move(istrm)));
- return parser_t(std::move(x), *this).parse(name);
+ auto y = plib::make_unique<plib::ppreprocessor>(m_includes, &m_defines);
+ y->process(std::move(istrm));
+ return parser_t(std::move(y), *this).parse(name);
//return parser_t(std::move(plib::ppreprocessor(&m_defines).process(std::move(istrm))), *this).parse(name);
}
@@ -1054,7 +1057,7 @@ void models_t::model_parse(const pstring &model_in, model_map_t &map)
}
}
-pstring models_t::model_string(const model_map_t &map) const
+pstring models_t::model_string(const model_map_t &map)
{
// operator [] has no const implementation
pstring ret = map.at("COREMODEL") + "(";
@@ -1150,7 +1153,6 @@ const logic_family_desc_t *setup_t::family_from_model(const pstring &model)
auto ret = plib::make_unique<logic_family_std_proxy_t>();
- ret->m_fixed_V = m_models.value(model, "FV");
ret->m_low_thresh_PCNT = m_models.value(model, "IVL");
ret->m_high_thresh_PCNT = m_models.value(model, "IVH");
ret->m_low_VO = m_models.value(model, "OVL");
diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h
index 4ea7e94730a..946f271fafa 100644
--- a/src/lib/netlist/nl_setup.h
+++ b/src/lib/netlist/nl_setup.h
@@ -53,10 +53,10 @@
setup.register_link_arr( # term1 ", " # __VA_ARGS__);
#define PARAM(name, val) \
- setup.register_param(# name, val);
+ setup.register_param(# name, # val);
#define HINT(name, val) \
- setup.register_param(# name ".HINT_" # val, 1);
+ setup.register_param(# name ".HINT_" # val, "1");
#define NETDEV_PARAMI(name, param, val) \
setup.register_param(# name "." # param, val);
@@ -88,7 +88,7 @@ void NETLIST_NAME(name)(netlist::nlparse_t &setup) \
setup.namespace_pop();
#define OPTIMIZE_FRONTIER(attach, r_in, r_out) \
- setup.register_frontier(# attach, r_in, r_out);
+ setup.register_frontier(# attach, PSTRINGIFY_VA(r_in), PSTRINGIFY_VA(r_out));
// -----------------------------------------------------------------------------
// truthtable defines
@@ -224,7 +224,7 @@ namespace netlist
using model_map_t = std::unordered_map<pstring, pstring>;
void model_parse(const pstring &model, model_map_t &map);
- pstring model_string(const model_map_t &map) const;
+ static pstring model_string(const model_map_t &map);
std::unordered_map<pstring, pstring> m_models;
std::unordered_map<pstring, model_map_t> m_cache;
@@ -261,7 +261,7 @@ namespace netlist
template <typename T>
typename std::enable_if<std::is_floating_point<T>::value || std::is_integral<T>::value>::type
- register_param(const pstring &param, T value)
+ register_param_val(const pstring &param, T value)
{
register_param_x(param, static_cast<nl_fptype>(value));
}
@@ -274,7 +274,7 @@ namespace netlist
#endif
void register_lib_entry(const pstring &name, const pstring &sourcefile);
- void register_frontier(const pstring &attach, nl_fptype r_IN, nl_fptype r_OUT);
+ void register_frontier(const pstring &attach, const pstring &r_IN, const pstring &r_OUT);
// register a source
void register_source(plib::unique_ptr<plib::psource_t> &&src)
diff --git a/src/lib/netlist/plib/palloc.h b/src/lib/netlist/plib/palloc.h
index c1269e3752c..035fbdb749d 100644
--- a/src/lib/netlist/plib/palloc.h
+++ b/src/lib/netlist/plib/palloc.h
@@ -367,8 +367,8 @@ namespace plib {
return true;
}
- size_type cur_alloc() const noexcept { return m_stat_cur_alloc(); }
- size_type max_alloc() const noexcept { return m_stat_max_alloc(); }
+ size_type cur_alloc() const noexcept { return m_stat_cur_alloc(); } // NOLINT(readability-convert-member-functions-to-static)
+ size_type max_alloc() const noexcept { return m_stat_max_alloc(); } // NOLINT(readability-convert-member-functions-to-static)
private:
static size_t &m_stat_cur_alloc() noexcept { static size_t val = 0; return val; }
static size_t &m_stat_max_alloc() noexcept { static size_t val = 0; return val; }
diff --git a/src/lib/netlist/plib/pfunction.cpp b/src/lib/netlist/plib/pfunction.cpp
index cf43ddc0dde..f05a92ad339 100644
--- a/src/lib/netlist/plib/pfunction.cpp
+++ b/src/lib/netlist/plib/pfunction.cpp
@@ -211,7 +211,7 @@ namespace plib {
}
else if (p == 0) // Function or variable
{
- if (sexpr[i+1] == "(")
+ if ((i+1<sexpr.size()) && sexpr[i+1] == "(")
opstk.push(s);
else
postfix.push_back(s);
diff --git a/src/lib/netlist/plib/pmath.h b/src/lib/netlist/plib/pmath.h
index 4fd928ddb54..e995c3a6c27 100644
--- a/src/lib/netlist/plib/pmath.h
+++ b/src/lib/netlist/plib/pmath.h
@@ -76,7 +76,7 @@ namespace plib
/// later.
///
template <typename V>
- static inline constexpr const T magic(V &&v) noexcept { return static_cast<T>(v); }
+ static inline constexpr T magic(V &&v) noexcept { return static_cast<T>(v); }
};
/// \brief typesafe reciprocal function
@@ -415,7 +415,7 @@ namespace plib
return (m != 0 && n != 0) ? (plib::abs(m) / gcd(m, n)) * plib::abs(n) : 0;
}
- static_assert(noexcept(constants<double>::one()) == true, "Not evaluated as constexpr");
+ static_assert(noexcept(constants<double>::one()), "Not evaluated as constexpr");
} // namespace plib
diff --git a/src/lib/netlist/plib/pmempool.h b/src/lib/netlist/plib/pmempool.h
index a06c67acd8e..aab6448258b 100644
--- a/src/lib/netlist/plib/pmempool.h
+++ b/src/lib/netlist/plib/pmempool.h
@@ -149,7 +149,7 @@ namespace plib {
}
catch (...)
{
- this->deallocate(mem, sizeof(T));
+ deallocate(mem, sizeof(T));
throw;
}
}
@@ -165,7 +165,7 @@ namespace plib {
}
catch (...)
{
- this->deallocate(mem, sizeof(T));
+ deallocate(mem, sizeof(T));
throw;
}
}
diff --git a/src/lib/netlist/plib/ppreprocessor.cpp b/src/lib/netlist/plib/ppreprocessor.cpp
index f98a57cb921..3ed1885f007 100644
--- a/src/lib/netlist/plib/ppreprocessor.cpp
+++ b/src/lib/netlist/plib/ppreprocessor.cpp
@@ -56,7 +56,7 @@ namespace plib {
pstring e = plib::pfmt("{1}:{2}:0: error: {3}\n")
(m_stack.back().m_name, m_stack.back().m_lineno, err);
m_stack.pop_back();
- while (m_stack.size() > 0)
+ while (!m_stack.empty())
{
if (m_stack.size() == 1)
trail = trail_first;
@@ -226,7 +226,6 @@ namespace plib {
{
pstring s(STR);
pi++;
- // FIXME : \"
while (pi < tmp.size() && tmp[pi] != STR)
{
s += tmp[pi];
@@ -236,38 +235,51 @@ namespace plib {
tmpret.push_back(s);
}
else
- if (!remove_ws || (tmp[pi] != " " && tmp[pi] != "\t"))
- tmpret.push_back(tmp[pi]);
+ {
+ pstring tok=tmp[pi];
+ if (tok.size() >= 2 && pi < tmp.size() - 2 )
+ {
+ auto sc=tok.substr(0,1);
+ auto ec=tok.substr(tok.size()-1, 1);
+ if ((sc == "." || (sc>="0" && sc<="9")) && (ec=="e" || ec=="E"))
+ {
+ // looks like an incomplete float due splitting by - or +
+ tok = tok + tmp[pi+1] + tmp[pi+2];
+ pi += 2;
+ }
+ }
+ if (!remove_ws || (tok != " " && tok != "\t"))
+ tmpret.push_back(tok);
+ }
pi++;
}
+
if (!concat)
return tmpret;
- else
+
+ // FIXME: error if concat at beginning or end
+ string_list ret;
+ pi = 0;
+ while (pi<tmpret.size())
{
- // FIXME: error if concat at beginning or end
- string_list ret;
- pi = 0;
- while (pi<tmpret.size())
+ if (tmpret[pi] == "##")
{
- if (tmpret[pi] == "##")
- {
- while (ret.back() == " " || ret.back() == "\t")
- ret.pop_back();
- pstring cc = ret.back();
+ while (ret.back() == " " || ret.back() == "\t")
ret.pop_back();
- pi++;
- while (pi < tmpret.size() && (tmpret[pi] == " " || tmpret[pi] == "\t"))
- pi++;
- if (pi == tmpret.size())
- error("## found at end of sequence");
- ret.push_back(cc + tmpret[pi]);
- }
- else
- ret.push_back(tmpret[pi]);
+ pstring cc = ret.back();
+ ret.pop_back();
pi++;
+ while (pi < tmpret.size() && (tmpret[pi] == " " || tmpret[pi] == "\t"))
+ pi++;
+ if (pi == tmpret.size())
+ error("## found at end of sequence");
+ ret.push_back(cc + tmpret[pi]);
}
- return ret;
+ else
+ ret.push_back(tmpret[pi]);
+ pi++;
}
+ return ret;
}
bool ppreprocessor::is_valid_token(const pstring &str)
@@ -435,13 +447,12 @@ namespace plib {
m_state = LINE_CONTINUATION;
return {"", false};
}
- else
- m_state = PROCESS;
+
+ m_state = PROCESS;
line = process_comments(m_line);
pstring lt = plib::trim(plib::replace_all(line, "\t", " "));
- // FIXME ... revise and extend macro handling
if (plib::startsWith(lt, "#"))
{
string_list lti(psplit(lt, " ", true));
@@ -449,7 +460,6 @@ namespace plib {
{
m_if_level++;
lt = replace_macros(lt);
- //std::vector<pstring> t(psplit(replace_all(lt.substr(3), " ", ""), m_expr_sep));
auto t(simple_iter<ppreprocessor>(this, tokenize(lt.substr(3), m_expr_sep, true, true)));
auto val = static_cast<int>(prepro_expr(t, 255));
t.skip_ws();
@@ -572,13 +582,11 @@ namespace plib {
}
return { "", false };
}
- else
- {
- if (m_if_flag == 0)
- return { replace_macros(lt), true };
- else
- return { "", false };
- }
+
+ if (m_if_flag == 0)
+ return { replace_macros(lt), true };
+
+ return { "", false };
}
void ppreprocessor::push_out(const pstring &s)
@@ -590,7 +598,7 @@ namespace plib {
void ppreprocessor::process_stack()
{
- while (m_stack.size() > 0)
+ while (!m_stack.empty())
{
pstring line;
pstring linemarker = pfmt("# {1} \"{2}\"\n")(m_stack.back().m_lineno, m_stack.back().m_name);
@@ -611,7 +619,7 @@ namespace plib {
last_skipped = true;
}
m_stack.pop_back();
- if (m_stack.size() > 0)
+ if (!m_stack.empty())
{
linemarker = pfmt("# {1} \"{2}\" 2\n")(m_stack.back().m_lineno, m_stack.back().m_name);
push_out(linemarker);
diff --git a/src/lib/netlist/plib/ppreprocessor.h b/src/lib/netlist/plib/ppreprocessor.h
index fe498fc1148..30af8d936f2 100644
--- a/src/lib/netlist/plib/ppreprocessor.h
+++ b/src/lib/netlist/plib/ppreprocessor.h
@@ -132,7 +132,7 @@ namespace plib {
void process_stack();
string_list tokenize(const pstring &str, const string_list &sep, bool remove_ws, bool concat);
- bool is_valid_token(const pstring &str);
+ static bool is_valid_token(const pstring &str);
std::pair<pstring,bool> process_line(pstring line);
pstring process_comments(pstring line);
diff --git a/src/lib/netlist/plib/pstream.h b/src/lib/netlist/plib/pstream.h
index ea19d673931..b1dd55669b7 100644
--- a/src/lib/netlist/plib/pstream.h
+++ b/src/lib/netlist/plib/pstream.h
@@ -26,12 +26,6 @@
namespace plib {
-template <typename T>
-struct constructor_helper
-{
- plib::unique_ptr<std::istream> operator()(T &&s) { return std::move(plib::make_unique<T>(std::move(s))); }
-};
-
///
/// \brief: putf8reader_t: reader on top of istream.
///
@@ -43,17 +37,24 @@ class putf8_reader
public:
COPYASSIGN(putf8_reader, delete)
- putf8_reader &operator=(putf8_reader &&src) = delete;
virtual ~putf8_reader() = default;
- template <typename T>
- friend struct constructor_helper;
+ putf8_reader(putf8_reader &&rhs)
+ : m_strm(std::move(rhs.m_strm))
+ , m_linebuf(std::move(rhs.m_linebuf))
+ {
+ }
- template <typename T>
- putf8_reader(T &&strm) // NOLINT(cppcoreguidelines-special-member-functions, misc-forwarding-reference-overload, bugprone-forwarding-reference-overload)
- : m_strm(std::move(constructor_helper<T>()(std::move(strm)))) // NOLINT(bugprone-move-forwarding-reference)
+ putf8_reader(plib::unique_ptr<std::istream> &&rhs)
+ : m_strm(std::move(rhs))
+ {
+ }
+#if 0
+ template<typename T, typename... Args>
+ putf8_reader(Args&&... args)
+ : m_strm(plib::make_unique<T>(std::forward<Args>(args)...))
{}
-
+#endif
bool eof() const { return m_strm->eof(); }
bool readline(pstring &line)
@@ -111,19 +112,6 @@ private:
putf8string m_linebuf;
};
-template <>
-struct constructor_helper<putf8_reader>
-{
- plib::unique_ptr<std::istream> operator()(putf8_reader &&s) const { return std::move(s.m_strm); }
-};
-
-template <>
-struct constructor_helper<plib::unique_ptr<std::istream>>
-{
- plib::unique_ptr<std::istream> operator()(plib::unique_ptr<std::istream> &&s) const { return std::move(s); }
-};
-
-
// -----------------------------------------------------------------------------
// putf8writer_t: writer on top of ostream
// -----------------------------------------------------------------------------
diff --git a/src/lib/netlist/plib/pstring.cpp b/src/lib/netlist/plib/pstring.cpp
index ba09f342838..a7b18cd7e17 100644
--- a/src/lib/netlist/plib/pstring.cpp
+++ b/src/lib/netlist/plib/pstring.cpp
@@ -29,9 +29,9 @@ int pstring_t<F>::compare(const pstring_t &right) const noexcept
if (si != this->end() && ri != right.end())
return static_cast<int>(*si) - static_cast<int>(*ri);
- else if (this->mem_t_size() > right.mem_t_size())
+ if (this->mem_t_size() > right.mem_t_size())
return 1;
- else if (this->mem_t_size() < right.mem_t_size())
+ if (this->mem_t_size() < right.mem_t_size())
return -1;
return 0;
}
diff --git a/src/lib/netlist/plib/pstring.h b/src/lib/netlist/plib/pstring.h
index 29f8fe2e6da..11397c54c51 100644
--- a/src/lib/netlist/plib/pstring.h
+++ b/src/lib/netlist/plib/pstring.h
@@ -186,8 +186,8 @@ public:
pstring_t& operator+=(const pstring_t &string) { m_str.append(string.m_str); return *this; }
pstring_t& operator+=(const code_t c) { traits_type::encode(c, m_str); return *this; }
friend pstring_t operator+(const pstring_t &lhs, const pstring_t &rhs) { return pstring_t(lhs) += rhs; }
- friend pstring_t operator+(const pstring_t &lhs, const code_t rhs) { return pstring_t(lhs) += rhs; }
- friend pstring_t operator+(const code_t lhs, const pstring_t &rhs) { return pstring_t(1, lhs) += rhs; }
+ friend pstring_t operator+(const pstring_t &lhs, code_t rhs) { return pstring_t(lhs) += rhs; }
+ friend pstring_t operator+(code_t lhs, const pstring_t &rhs) { return pstring_t(1, lhs) += rhs; }
// comparison operators
bool operator==(const pstring_t &string) const noexcept { return (compare(string) == 0); }
@@ -251,42 +251,43 @@ struct putf8_traits
const auto p1 = reinterpret_cast<const unsigned char *>(p);
if ((*p1 & 0xE0) == 0xC0)
return 2;
- else if ((*p1 & 0xF0) == 0xE0)
+ if ((*p1 & 0xF0) == 0xE0)
return 3;
- else if ((*p1 & 0xF8) == 0xF0)
+ if ((*p1 & 0xF8) == 0xF0)
return 4;
- else
- {
- // valid utf8: ((*p1 & 0x80) == 0x00)
- // However, we return 1 here.
- return 1;
- }
+
+ // valid utf8: ((*p1 & 0x80) == 0x00)
+ // However, we return 1 here.
+ return 1;
}
+
static std::size_t codelen(const code_t c) noexcept
{
if (c < 0x0080)
return 1;
- else if (c < 0x800)
+ if (c < 0x800)
return 2;
- else if (c < 0x10000)
+ if (c < 0x10000)
return 3;
- else // U+10000 U+1FFFFF
- return 4; // no checks
+ // U+10000 U+1FFFFF
+ return 4; // no checks
}
+
static code_t code(const mem_t *p) noexcept
{
const auto p1 = reinterpret_cast<const unsigned char *>(p);
if ((*p1 & 0x80) == 0x00)
return *p1;
- else if ((*p1 & 0xE0) == 0xC0)
+ if ((*p1 & 0xE0) == 0xC0)
return static_cast<code_t>(((p1[0] & 0x3f) << 6) | (p1[1] & 0x3f));
- else if ((*p1 & 0xF0) == 0xE0)
+ if ((*p1 & 0xF0) == 0xE0)
return static_cast<code_t>(((p1[0] & 0x1f) << 12) | ((p1[1] & 0x3f) << 6) | ((p1[2] & 0x3f) << 0));
- else if ((*p1 & 0xF8) == 0xF0)
+ if ((*p1 & 0xF8) == 0xF0)
return static_cast<code_t>(((p1[0] & 0x0f) << 18) | ((p1[1] & 0x3f) << 12) | ((p1[2] & 0x3f) << 6) | ((p1[3] & 0x3f) << 0));
- else
- return 0xFFFD; // unicode-replacement character
+
+ return 0xFFFD; // unicode-replacement character
}
+
static void encode(const code_t c, string_type &s)
{
if (c < 0x0080)
@@ -312,6 +313,7 @@ struct putf8_traits
s += static_cast<mem_t>(0x80 | (c & 0x3f));
}
}
+
static const mem_t *nthcode(const mem_t *p, const std::size_t n) noexcept
{
const mem_t *p1 = p;
@@ -409,8 +411,8 @@ struct pwchar_traits
}
return ret;
}
- else
- return p.size();
+
+ return p.size();
}
static std::size_t codelen(const mem_t *p) noexcept
@@ -420,16 +422,16 @@ struct pwchar_traits
auto c = static_cast<uint16_t>(*p);
return ((c & 0xd800) == 0xd800) ? 2 : 1;
}
- else
- return 1;
+
+ return 1;
}
static std::size_t codelen(const code_t c) noexcept
{
if (sizeof(wchar_t) == 2)
return ((c & 0xd800) == 0xd800) ? 2 : 1;
- else
- return 1;
+
+ return 1;
}
static code_t code(const mem_t *p)
@@ -444,8 +446,8 @@ struct pwchar_traits
}
return static_cast<code_t>(c);
}
- else
- return static_cast<code_t>(*p);
+
+ return static_cast<code_t>(*p);
}
static void encode(code_t c, string_type &s)
@@ -475,8 +477,8 @@ struct pwchar_traits
p += codelen(p);
return p;
}
- else
- return p + n;
+
+ return p + n;
}
};
diff --git a/src/lib/netlist/plib/ptime.h b/src/lib/netlist/plib/ptime.h
index 8bd0cca6c65..7168477f49f 100644
--- a/src/lib/netlist/plib/ptime.h
+++ b/src/lib/netlist/plib/ptime.h
@@ -82,7 +82,7 @@ namespace plib
}
template <typename M>
- C14CONSTEXPR ptime &operator*=(const M factor) noexcept
+ C14CONSTEXPR ptime &operator*=(const M &factor) noexcept
{
static_assert(plib::is_integral<M>::value, "Factor must be an integral type");
m_time *= factor;
@@ -117,32 +117,32 @@ namespace plib
return static_cast<mult_type>(m_time / rhs.m_time);
}
- friend constexpr bool operator<(const ptime lhs, const ptime rhs) noexcept
+ friend constexpr bool operator<(const ptime &lhs, const ptime &rhs) noexcept
{
return (lhs.m_time < rhs.m_time);
}
- friend constexpr bool operator>(const ptime lhs, const ptime rhs) noexcept
+ friend constexpr bool operator>(const ptime &lhs, const ptime &rhs) noexcept
{
return (rhs < lhs);
}
- friend constexpr bool operator<=(const ptime lhs, const ptime rhs) noexcept
+ friend constexpr bool operator<=(const ptime &lhs, const ptime &rhs) noexcept
{
return !(lhs > rhs);
}
- friend constexpr bool operator>=(const ptime lhs, const ptime rhs) noexcept
+ friend constexpr bool operator>=(const ptime &lhs, const ptime &rhs) noexcept
{
return !(lhs < rhs);
}
- friend constexpr bool operator==(const ptime lhs, const ptime rhs) noexcept
+ friend constexpr bool operator==(const ptime &lhs, const ptime &rhs) noexcept
{
return lhs.m_time == rhs.m_time;
}
- friend constexpr bool operator!=(const ptime lhs, const ptime rhs) noexcept
+ friend constexpr bool operator!=(const ptime &lhs, const ptime &rhs) noexcept
{
return !(lhs == rhs);
}
diff --git a/src/lib/netlist/plib/ptokenizer.cpp b/src/lib/netlist/plib/ptokenizer.cpp
index a29b3342333..46af36d2bf9 100644
--- a/src/lib/netlist/plib/ptokenizer.cpp
+++ b/src/lib/netlist/plib/ptokenizer.cpp
@@ -151,7 +151,8 @@ namespace plib {
{
if (ret.is_type(token_type::token_type::ENDOFFILE))
return ret;
- else if (m_support_line_markers && ret.is_type(token_type::LINEMARKER))
+
+ if (m_support_line_markers && ret.is_type(token_type::LINEMARKER))
{
bool benter(false);
bool bexit(false);
@@ -215,7 +216,8 @@ namespace plib {
}
if (m_support_line_markers && c == '#')
return token_t(token_type::LINEMARKER, "#");
- else if (m_number_chars_start.find(c) != pstring::npos)
+
+ if (m_number_chars_start.find(c) != pstring::npos)
{
// read number while we receive number or identifier chars
// treat it as an identifier when there are identifier chars in it
@@ -243,10 +245,9 @@ namespace plib {
}
ungetc(c);
auto id = m_tokens.find(tokstr);
- if (id != m_tokens.end())
- return token_t(id->second, tokstr);
- else
- return token_t(token_type::IDENTIFIER, tokstr);
+ return (id != m_tokens.end()) ?
+ token_t(id->second, tokstr)
+ : token_t(token_type::IDENTIFIER, tokstr);
}
else if (c == m_string)
{
@@ -277,10 +278,9 @@ namespace plib {
}
ungetc(c);
auto id = m_tokens.find(tokstr);
- if (id != m_tokens.end())
- return token_t(id->second, tokstr);
- else
- return token_t(token_type::UNKNOWN, tokstr);
+ return (id != m_tokens.end()) ?
+ token_t(id->second, tokstr)
+ : token_t(token_type::UNKNOWN, tokstr);
}
}
@@ -292,7 +292,7 @@ namespace plib {
pstring e = plib::pfmt("{1}:{2}:0: error: {3}\n")
(m_source_location.back().file_name(), m_source_location.back().line(), errs());
m_source_location.pop_back();
- while (m_source_location.size() > 0)
+ while (!m_source_location.empty())
{
if (m_source_location.size() == 1)
trail = trail_first;
diff --git a/src/lib/netlist/plib/ptypes.h b/src/lib/netlist/plib/ptypes.h
index 32ec6e7f9bf..d011d228154 100644
--- a/src/lib/netlist/plib/ptypes.h
+++ b/src/lib/netlist/plib/ptypes.h
@@ -80,7 +80,7 @@ namespace plib
// Avoid unused variable warnings
//============================================================
template<typename... Ts>
- inline void unused_var(Ts&&...) noexcept {}
+ inline void unused_var(Ts&&...) noexcept {} // NOLINT(readability-named-parameter)
} // namespace plib
diff --git a/src/lib/netlist/prg/nltool.cpp b/src/lib/netlist/prg/nltool.cpp
index 6fd7c03b446..af1e212439e 100644
--- a/src/lib/netlist/prg/nltool.cpp
+++ b/src/lib/netlist/prg/nltool.cpp
@@ -218,8 +218,24 @@ public:
for (auto & r : roms)
setup().register_source(plib::make_unique<netlist_data_folder_t>(r));
+#if 0
using a = plib::psource_str_t<plib::psource_t>;
+#if USE_EVAL
+ const pstring content =
+ "#define RES_R(res) (res) \n"
+ "#define RES_K(res) ((res) * 1e3) \n"
+ "#define RES_M(res) ((res) * 1e6) \n"
+ "#define CAP_U(cap) ((cap) * 1e-6) \n"
+ "#define CAP_N(cap) ((cap) * 1e-9) \n"
+ "#define CAP_P(cap) ((cap) * 1e-12) \n"
+ "#define IND_U(ind) ((ind) * 1e-6) \n"
+ "#define IND_N(ind) ((ind) * 1e-9) \n"
+ "#define IND_P(ind) ((ind) * 1e-12) \n";
+ setup().add_include(plib::make_unique<a>("netlist/devices/net_lib.h", content));
+#else
setup().add_include(plib::make_unique<a>("netlist/devices/net_lib.h",""));
+#endif
+#endif
for (auto & i : includes)
setup().add_include(plib::make_unique<netlist_data_folder_t>(i));
@@ -352,7 +368,7 @@ static std::vector<input_t> read_input(const netlist::setup_t &setup, const pstr
std::vector<input_t> ret;
if (fname != "")
{
- plib::putf8_reader r = plib::putf8_reader(std::ifstream(plib::filesystem::u8path(fname)));
+ plib::putf8_reader r = plib::putf8_reader(plib::make_unique<std::ifstream>(plib::filesystem::u8path(fname)));
if (r.stream().fail())
throw netlist::nl_exception(netlist::MF_FILE_OPEN_ERROR(fname));
r.stream().imbue(std::locale::classic());
@@ -400,28 +416,31 @@ void tool_app_t::run()
pout("startup time ==> {1:5.3f}\n", t.as_seconds<nl_fptype>() );
+ // FIXME: error handling
+ if (opt_loadstate.was_specified())
+ {
+ std::ifstream strm(plib::filesystem::u8path(opt_loadstate()));
+ if (strm.fail())
+ throw netlist::nl_exception(netlist::MF_FILE_OPEN_ERROR(opt_loadstate()));
+ strm.imbue(std::locale::classic());
+ plib::pbinary_reader reader(strm);
+ std::vector<char> loadstate;
+ reader.read(loadstate);
+ nt.load_state(loadstate);
+ pout("Loaded state, run will continue at {1:.6f}\n", nt.exec().time().as_double());
+ }
+
t.reset();
- netlist::netlist_time_ext nlt = nt.exec().time();
+ netlist::netlist_time_ext nlstart = nt.exec().time();
{
auto t_guard(t.guard());
- // FIXME: error handling
- if (opt_loadstate.was_specified())
- {
- std::ifstream strm(plib::filesystem::u8path(opt_loadstate()));
- if (strm.fail())
- throw netlist::nl_exception(netlist::MF_FILE_OPEN_ERROR(opt_loadstate()));
- strm.imbue(std::locale::classic());
- plib::pbinary_reader reader(strm);
- std::vector<char> loadstate;
- reader.read(loadstate);
- nt.load_state(loadstate);
- pout("Loaded state, run will continue at {1:.6f}\n", nt.exec().time().as_double());
- }
+ pout("runnning ...\n");
unsigned pos = 0;
+ netlist::netlist_time_ext nlt = nlstart;
while (pos < inps.size()
&& inps[pos].m_time < ttr
@@ -433,8 +452,6 @@ void tool_app_t::run()
pos++;
}
- pout("runnning ...\n");
-
if (ttr > nlt)
nt.exec().process_queue(ttr - nlt);
else
@@ -444,24 +461,25 @@ void tool_app_t::run()
ttr = nlt;
}
- if (opt_savestate.was_specified())
- {
- auto savestate = nt.save_state();
- std::ofstream strm(plib::filesystem::u8path(opt_savestate()), std::ios_base::binary);
- if (strm.fail())
- throw plib::file_open_e(opt_savestate());
- strm.imbue(std::locale::classic());
-
- plib::pbinary_writer writer(strm);
- writer.write(savestate);
- }
- nt.exec().stop();
}
+ if (opt_savestate.was_specified())
+ {
+ auto savestate = nt.save_state();
+ std::ofstream strm(plib::filesystem::u8path(opt_savestate()), std::ios_base::binary);
+ if (strm.fail())
+ throw plib::file_open_e(opt_savestate());
+ strm.imbue(std::locale::classic());
+
+ plib::pbinary_writer writer(strm);
+ writer.write(savestate);
+ }
+ nt.exec().stop();
+
auto emutime(t.as_seconds<nl_fptype>());
pout("{1:f} seconds emulation took {2:f} real time ==> {3:5.2f}%\n",
- (ttr - nlt).as_fp<nl_fptype>(), emutime,
- (ttr - nlt).as_fp<nl_fptype>() / emutime * netlist::nlconst::magic(100.0));
+ (ttr - nlstart).as_fp<nl_fptype>(), emutime,
+ (ttr - nlstart).as_fp<nl_fptype>() / emutime * netlist::nlconst::magic(100.0));
}
void tool_app_t::validate()
@@ -562,7 +580,7 @@ struct doc_ext
static doc_ext read_docsrc(const pstring &fname, const pstring &id)
{
//printf("file %s\n", fname.c_str());
- plib::putf8_reader r = plib::putf8_reader(std::ifstream(plib::filesystem::u8path(fname)));
+ plib::putf8_reader r = plib::putf8_reader(plib::make_unique<std::ifstream>(plib::filesystem::u8path(fname)));
if (r.stream().fail())
throw netlist::nl_exception(netlist::MF_FILE_OPEN_ERROR(fname));
r.stream().imbue(std::locale::classic());
diff --git a/src/lib/netlist/prg/nlwav.cpp b/src/lib/netlist/prg/nlwav.cpp
index 93a6d6e24a5..a6334edbda9 100644
--- a/src/lib/netlist/prg/nlwav.cpp
+++ b/src/lib/netlist/prg/nlwav.cpp
@@ -138,6 +138,7 @@ public:
bool readmore(std::vector<plib::putf8_reader> &r)
{
+ fprintf(stderr, "%d %d\n", (int) m_e.size(), (int) r.size());
bool success = false;
for (std::size_t i = 0; i< r.size(); i++)
{
@@ -145,11 +146,13 @@ public:
{
pstring line;
m_e[i].eof = !r[i].readline(line);
+ //fprintf(stderr, "bla: <%s>\n", line.c_str());
if (!m_e[i].eof)
{
// sscanf is very fast ...
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
- std::sscanf(line.c_str(), "%lf %lf", &m_e[i].t, &m_e[i].v);
+ if (2 != std::sscanf(line.c_str(), "%lf %lf", &m_e[i].t, &m_e[i].v))
+ fprintf(stderr, "arg: <%s>\n", line.c_str());
m_e[i].need_more = false;
}
}
@@ -515,7 +518,7 @@ int nlwav_app::execute()
for (auto &oi: opt_args())
{
plib::unique_ptr<std::istream> fin;
-
+ printf("%s\n", oi.c_str());
if (oi == "-")
{
auto temp(plib::make_unique<std::stringstream>());
diff --git a/src/lib/netlist/solver/nld_matrix_solver.cpp b/src/lib/netlist/solver/nld_matrix_solver.cpp
index 951ae526999..f6d9c0c579b 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.cpp
+++ b/src/lib/netlist/solver/nld_matrix_solver.cpp
@@ -433,7 +433,7 @@ namespace solver
d->timestep(dd);
}
- const netlist_time matrix_solver_t::solve(netlist_time_ext now)
+ netlist_time matrix_solver_t::solve(netlist_time_ext now)
{
const netlist_time_ext delta = now - m_last_step();
@@ -561,10 +561,8 @@ namespace solver
{
m_terms[net_idx].add_terminal(term, ot, true);
}
- // Should this be allowed ?
else
{
- m_rails_temp[net_idx].add_terminal(term, ot, true);
log().fatal(MF_FOUND_TERM_WITH_MISSING_OTHERNET(term->name()));
throw nl_exception(MF_FOUND_TERM_WITH_MISSING_OTHERNET(term->name()));
}
diff --git a/src/lib/netlist/solver/nld_matrix_solver.h b/src/lib/netlist/solver/nld_matrix_solver.h
index cc63af716d6..a6b3c6774fd 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.h
+++ b/src/lib/netlist/solver/nld_matrix_solver.h
@@ -177,7 +177,7 @@ namespace solver
// after every call to solve, update inputs must be called.
// this can be done as well as a batch to ease parallel processing.
- const netlist_time solve(netlist_time_ext now);
+ netlist_time solve(netlist_time_ext now);
void update_inputs();
bool has_dynamic_devices() const noexcept { return !m_dynamic_devices.empty(); }
diff --git a/src/lib/netlist/solver/nld_ms_direct.h b/src/lib/netlist/solver/nld_ms_direct.h
index 806e56764ba..fbb8e4a8250 100644
--- a/src/lib/netlist/solver/nld_ms_direct.h
+++ b/src/lib/netlist/solver/nld_ms_direct.h
@@ -30,7 +30,7 @@ namespace solver
matrix_solver_direct_t(netlist_state_t &anetlist, const pstring &name,
const analog_net_t::list_t &nets,
- const solver_parameters_t *params, const std::size_t size);
+ const solver_parameters_t *params, std::size_t size);
void reset() override { matrix_solver_t::reset(); }
@@ -184,7 +184,7 @@ namespace solver
matrix_solver_direct_t<FT, SIZE>::matrix_solver_direct_t(netlist_state_t &anetlist, const pstring &name,
const analog_net_t::list_t &nets,
const solver_parameters_t *params,
- const std::size_t size)
+ std::size_t size)
: matrix_solver_ext_t<FT, SIZE>(anetlist, name, nets, params, size)
, m_pitch(m_pitch_ABS ? m_pitch_ABS : (((size + 0) + 7) / 8) * 8)
, m_A(size, m_pitch)
diff --git a/src/lib/netlist/solver/nld_ms_gcr.h b/src/lib/netlist/solver/nld_ms_gcr.h
index f63a24a8ccb..be3fd5fa524 100644
--- a/src/lib/netlist/solver/nld_ms_gcr.h
+++ b/src/lib/netlist/solver/nld_ms_gcr.h
@@ -146,7 +146,7 @@ namespace solver
{
const auto &nzbd = this->m_terms[i].m_nzbd;
- if (nzbd.size() > 0)
+ if (!nzbd.empty())
{
std::size_t pi = mat.diag[i];
diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp
index 09920dfd73c..2d003354455 100644
--- a/src/lib/netlist/solver/nld_solver.cpp
+++ b/src/lib/netlist/solver/nld_solver.cpp
@@ -252,6 +252,31 @@ namespace devices
struct net_splitter
{
+ void run(netlist_state_t &netlist)
+ {
+ for (auto & net : netlist.nets())
+ {
+ netlist.log().verbose("processing {1}", net->name());
+ if (!net->isRailNet() && net->num_cons() > 0)
+ {
+ netlist.log().verbose(" ==> not a rail net");
+ // Must be an analog net
+ auto &n = *static_cast<analog_net_t *>(net.get());
+ if (!already_processed(n))
+ {
+ groupspre.emplace_back(analog_net_t::list_t());
+ process_net(netlist, n);
+ }
+ }
+ }
+ for (auto &g : groupspre)
+ if (!g.empty())
+ groups.push_back(g);
+ }
+
+ std::vector<analog_net_t::list_t> groups;
+
+ private:
bool already_processed(const analog_net_t &n) const
{
@@ -265,49 +290,59 @@ namespace devices
return false;
}
+ bool check_if_processed_and_join(const analog_net_t &n)
+ {
+ // no need to process rail nets - these are known variables
+ if (n.isRailNet())
+ return true;
+ // First check if it is in a previous group.
+ // In this case we need to merge this group into the current group
+ if (groupspre.size() > 1)
+ {
+ for (std::size_t i = 0; i<groupspre.size() - 1; i++)
+ if (plib::container::contains(groupspre[i], &n))
+ {
+ // copy all nets
+ for (auto & cn : groupspre[i])
+ if (!plib::container::contains(groupspre.back(), cn))
+ groupspre.back().push_back(cn);
+ // clear
+ groupspre[i].clear();
+ return true;
+ }
+ }
+ // if it's already processed - no need to continue
+ if (!groupspre.empty() && plib::container::contains(groupspre.back(), &n))
+ return true;
+ return false;
+ }
+
void process_net(netlist_state_t &netlist, analog_net_t &n)
{
// ignore empty nets. FIXME: print a warning message
+ netlist.log().verbose("Net {}", n.name());
if (n.num_cons() == 0)
return;
// add the net
- groups.back().push_back(&n);
+ groupspre.back().push_back(&n);
// process all terminals connected to this net
for (auto &term : n.core_terms())
{
+ netlist.log().verbose("Term {} {}", term->name(), static_cast<int>(term->type()));
// only process analog terminals
if (term->is_type(detail::terminal_type::TERMINAL))
{
auto *pt = static_cast<terminal_t *>(term);
// check the connected terminal
- // analog_net_t &connected_net = pt->connected_terminal()->net();
analog_net_t &connected_net = netlist.setup().get_connected_terminal(*pt)->net();
- if (!already_processed(connected_net))
+ netlist.log().verbose(" Connected net {}", connected_net.name());
+ if (!check_if_processed_and_join(connected_net))
process_net(netlist, connected_net);
}
}
}
- void run(netlist_state_t &netlist)
- {
- for (auto & net : netlist.nets())
- {
- netlist.log().debug("processing {1}\n", net->name());
- if (!net->isRailNet() && net->num_cons() > 0)
- {
- netlist.log().debug(" ==> not a rail net\n");
- // Must be an analog net
- auto &n = *static_cast<analog_net_t *>(net.get());
- if (!already_processed(n))
- {
- groups.emplace_back(analog_net_t::list_t());
- process_net(netlist, n);
- }
- }
- }
- }
-
- std::vector<analog_net_t::list_t> groups;
+ std::vector<analog_net_t::list_t> groupspre;
};
void NETLIB_NAME(solver)::post_start()
diff --git a/src/lib/netlist/tools/nl_convert.cpp b/src/lib/netlist/tools/nl_convert.cpp
index 030eb6d47c9..d1a4235633e 100644
--- a/src/lib/netlist/tools/nl_convert.cpp
+++ b/src/lib/netlist/tools/nl_convert.cpp
@@ -9,6 +9,7 @@
#include <algorithm>
#include <unordered_map>
+#include <vector>
// FIXME: temporarily defined here - should be in a file
// FIXME: family logic in netlist is convoluted, create
@@ -42,7 +43,7 @@ using lib_map_t = std::unordered_map<pstring, lib_map_entry>;
static lib_map_t read_lib_map(const pstring &lm)
{
- auto reader = plib::putf8_reader(std::istringstream(lm));
+ auto reader = plib::putf8_reader(plib::make_unique<std::istringstream>(lm));
reader.stream().imbue(std::locale::classic());
lib_map_t m;
pstring line;
@@ -60,7 +61,7 @@ static lib_map_t read_lib_map(const pstring &lm)
nl_convert_base_t::nl_convert_base_t()
: out(&m_buf)
- , m_numberchars("0123456789-+e.")
+ , m_numberchars("0123456789-+Ee.")
{
m_buf.imbue(std::locale::classic());
m_units = {
@@ -83,6 +84,16 @@ nl_convert_base_t::nl_convert_base_t()
{"MIL", "{1}", 25.4e-6}
};
+ dev_map =
+ {
+ { "VCCS", {"OP", "ON", "IP", "IN"} },
+ { "VCVS", {"OP", "ON", "IP", "IN"} },
+ { "CCCS", {"OP", "ON", "IP", "IN"} },
+ { "CCVS", {"OP", "ON", "IP", "IN"} },
+ { "VS", {"1", "2"} },
+ { "TTL_INPUT", {"Q", "VCC", "GND"} },
+ { "DIODE", {"A", "K"} },
+ };
}
nl_convert_base_t::~nl_convert_base_t()
@@ -129,6 +140,10 @@ void nl_convert_base_t::add_device(const pstring &atype, const pstring &aname)
void nl_convert_base_t::add_term(const pstring &netname, const pstring &termname)
{
+ // Ignore NC nets!
+ if (plib::startsWith(netname,"NC_"))
+ return;
+
net_t * net = nullptr;
auto idx = m_nets.find(netname);
if (idx != m_nets.end())
@@ -149,8 +164,65 @@ void nl_convert_base_t::add_term(const pstring &netname, const pstring &termname
net->terminals().push_back(termname);
}
+void nl_convert_base_t::add_term(const pstring &netname, const pstring &devname, unsigned term)
+{
+ auto e = dev_map.find(get_device(devname)->type());
+ if (e == dev_map.end())
+ out("// ERROR: No terminals found for device {}\n", devname);
+ else
+ {
+ if (term >= e->second.size())
+ out("// ERROR: {} : Term {} exceeds number of terminals {}\n", netname, devname, term);
+ else
+ add_term(netname, devname + "." + e->second[term]);
+ }
+}
+
+void nl_convert_base_t::add_device_extra_s(const pstring &devname, const pstring &extra)
+{
+ auto dev = get_device(devname);
+ if (dev == nullptr)
+ out("// ERROR: Device {} not found\n", devname);
+ else
+ {
+ dev->add_extra(extra);
+ }
+}
+
+
+
void nl_convert_base_t::dump_nl()
{
+ // do replacements
+ for (auto &r : m_replace)
+ {
+ // Get the device entry
+ auto *d = get_device(r.m_ce);
+ if (d == nullptr)
+ {
+ out("ERROR: Can not find <{}>\n", r.m_ce);
+ continue;
+ }
+
+ auto e = dev_map.find(d->type());
+ if (e == dev_map.end())
+ {
+ out("ERROR: Can not find type {}\n", d->type());
+ continue;
+ }
+ pstring term1 = r.m_ce + "." + e->second[0];
+ // scan all nets
+ for (auto &n : m_nets)
+ {
+ for (auto &t : n.second->terminals())
+ {
+ if (t == term1)
+ t = r.m_repterm;
+ }
+ }
+ add_term(r.m_net, term1);
+ }
+
for (auto & alias : m_ext_alias)
{
net_t *net = m_nets[alias].get();
@@ -180,12 +252,15 @@ void nl_convert_base_t::dump_nl()
else
out("{}({})\n", m_devs[j]->type().c_str(),
m_devs[j]->name().c_str());
+ for (auto &e : m_devs[j]->extra())
+ out("{}\n", e);
+
}
// print nets
for (auto & i : m_nets)
{
net_t * net = i.second.get();
- if (!net->is_no_export())
+ if (!net->is_no_export() && !(net->terminals().size() == 1 && net->terminals()[0] == "GND" ))
{
out("NET_C({}", net->terminals()[0].c_str() );
for (std::size_t j=1; j<net->terminals().size(); j++)
@@ -195,6 +270,7 @@ void nl_convert_base_t::dump_nl()
out(")\n");
}
}
+ m_replace.clear();
m_devs.clear();
m_nets.clear();
m_pins.clear();
@@ -206,8 +282,16 @@ pstring nl_convert_base_t::get_nl_val(double val)
for (auto &e : m_units)
{
if (e.m_mult <= plib::abs(val))
- return plib::pfmt(e.m_func)(val / e.m_mult);
+ {
+ double v = val / e.m_mult;
+ if (plib::abs(v - std::round(v)) <= 1e-6)
+ return plib::pfmt(e.m_func)(static_cast<int>(std::round(v)));
+ return plib::pfmt(e.m_func)(v);
+ }
}
+
+ if (plib::abs(val - std::round(val)) <= 1e-6)
+ return plib::pfmt("{1}")(static_cast<int>(std::round(val)));
return plib::pfmt("{1}")(val);
}
@@ -264,6 +348,7 @@ void nl_convert_spice_t::convert(const pstring &contents)
// FIXME: Parameter
out("NETLIST_START(dummy)\n");
add_term("0", "GND");
+ add_term("GND", "GND"); // For Kicad
pstring line = "";
@@ -293,6 +378,22 @@ static pstring rem(const std::vector<pstring> &vps, std::size_t start)
return r;
}
+static int npoly(const pstring &s)
+{
+ // Brute force
+ if (s=="POLY(1)")
+ return 1;
+ if (s=="POLY(2)")
+ return 2;
+ if (s=="POLY(3)")
+ return 3;
+ if (s=="POLY(4)")
+ return 4;
+ if (s=="POLY(5)")
+ return 5;
+ return -1;
+}
+
void nl_convert_spice_t::process_line(const pstring &line)
{
if (line != "")
@@ -326,6 +427,10 @@ void nl_convert_spice_t::process_line(const pstring &line)
{
out("NET_MODEL(\"{} {}\")\n", m_subckt + tt[1], rem(tt,2));
}
+ else if (tt[0] == ".TITLE" && tt[1] == "KICAD")
+ {
+ m_is_kicad = true;
+ }
else
out("// {}\n", line.c_str());
break;
@@ -386,49 +491,120 @@ void nl_convert_spice_t::process_line(const pstring &line)
add_term(tt[2], tt[0] + ".N");
break;
case 'E':
- add_device("VCVS", tt[0]);
- add_term(tt[1], tt[0] + ".OP");
- add_term(tt[2], tt[0] + ".ON");
- add_term(tt[3], tt[0] + ".IP");
- add_term(tt[4], tt[0] + ".IN");
- out("PARAM({}, {})\n", tt[0] + ".G", tt[5]);
- break;
- case 'V':
- // just simple Voltage sources ....
- if (tt[2] == "0")
+ {
+ auto n=npoly(tt[3]);
+ if (n<0)
{
- val = get_sp_val(tt[3]);
- add_device("ANALOG_INPUT", tt[0], val);
- add_term(tt[1], tt[0] + ".Q");
- //add_term(tt[2], tt[0] + ".2");
+ add_device("VCVS", tt[0]);
+ add_term(tt[1], tt[0], 0);
+ add_term(tt[2], tt[0], 1);
+ add_term(tt[3], tt[0], 2);
+ add_term(tt[4], tt[0], 3);
+ add_device_extra(tt[0], "PARAM({}, {})", tt[0] + ".G", tt[5]);
}
else
- plib::perrlogger("Voltage Source {} not connected to GND\n", tt[0]);
- break;
+ {
+ unsigned sce(4);
+ auto scoeff(static_cast<unsigned>(5 + n));
+ if ((tt.size() != 5 + 2 * static_cast<unsigned>(n)) || (tt[scoeff-1] != "0"))
+ {
+ out("// IGNORED {}: {}\n", tt[0].c_str(), line.c_str());
+ break;
+ }
+ pstring lastnet = tt[1];
+ for (std::size_t i=0; i < static_cast<std::size_t>(n); i++)
+ {
+ pstring devname = tt[0] + plib::pfmt("{}")(i);
+ pstring nextnet = (i<static_cast<std::size_t>(n)-1) ? tt[1] + "a" + plib::pfmt("{}")(i) : tt[2];
+ auto net2 = plib::psplit(plib::replace_all(plib::replace_all(tt[sce+i],")",""),"(",""),",");
+ add_device("VCVS", devname);
+ add_term(lastnet, devname, 0);
+ add_term(nextnet, devname, 1);
+ add_term(net2[0], devname, 2);
+ add_term(net2[1], devname, 3);
+ add_device_extra(devname, "PARAM({}, {})", devname + ".G", tt[scoeff+i]);
+ lastnet = nextnet;
+ //printf("xxx %d %s %s\n", (int) net2.size(), net2[0].c_str(), net2[1].c_str());
#if 0
- // This is wrong ... Need to use something else for inputs!
- case 'I': // Input pin special notation
+ pstring extranetname = devname + "net";
+ m_replace.push_back({, devname + ".IP", extranetname });
+ add_term(extranetname, devname + ".IN");
+ add_device_extra(devname, "PARAM({}, {})", devname + ".G", tt[scoeff+i]);
+#endif
+ }
+ }
+ }
+ break;
+ case 'F':
{
- val = get_sp_val(tt[2]);
- add_device("ANALOG_INPUT", tt[0], val);
- add_term(tt[1], tt[0] + ".Q");
+ auto n=npoly(tt[3]);
+ unsigned sce(4);
+ unsigned scoeff(5 + static_cast<unsigned>(n));
+ if (n<0)
+ {
+ sce = 3;
+ scoeff = 4;
+ n = 1;
+ }
+ else
+ {
+ if ((tt.size() != 5 + 2 * static_cast<unsigned>(n)) || (tt[scoeff-1] != "0"))
+ {
+ out("// IGNORED {}: {}\n", tt[0].c_str(), line.c_str());
+ break;
+ }
+ }
+ for (std::size_t i=0; i < static_cast<std::size_t>(n); i++)
+ {
+ pstring devname = tt[0] + plib::pfmt("{}")(i);
+ add_device("CCCS", devname);
+ add_term(tt[1], devname, 0);
+ add_term(tt[2], devname, 1);
+
+ pstring extranetname = devname + "net";
+ m_replace.push_back({tt[sce+i], devname + ".IP", extranetname });
+ add_term(extranetname, devname + ".IN");
+ add_device_extra(devname, "PARAM({}, {})", devname + ".G", tt[scoeff+i]);
+ }
}
break;
-#else
+ case 'H':
+ add_device("CCVS", tt[0]);
+ add_term(tt[1], tt[0] + ".OP");
+ add_term(tt[2], tt[0] + ".ON");
+ m_replace.push_back({tt[3], tt[0] + ".IP", tt[2] + "a" });
+ add_term(tt[2] + "a", tt[0] + ".IN");
+ add_device_extra(tt[0], "PARAM({}, {})", tt[0] + ".G", tt[4]);
+ break;
+ case 'G':
+ add_device("VCCS", tt[0]);
+ add_term(tt[1], tt[0], 0);
+ add_term(tt[2], tt[0], 1);
+ add_term(tt[3], tt[0], 2);
+ add_term(tt[4], tt[0], 3);
+ add_device_extra(tt[0], "PARAM({}, {})", tt[0] + ".G", tt[5]);
+ break;
+ case 'V':
+ // only DC Voltage sources ....
+ val = get_sp_val(tt[3] == "DC" ? tt[4] : tt[3]);
+ add_device("VS", tt[0], val);
+ add_term(tt[1], tt[0] + ".1");
+ add_term(tt[2], tt[0] + ".2");
+ break;
case 'I':
{
- val = get_sp_val(tt[3]);
+ val = get_sp_val(tt[3] == "DC" ? tt[4] : tt[3]);
add_device("CS", tt[0], val);
add_term(tt[1], tt[0] + ".1");
add_term(tt[2], tt[0] + ".2");
}
break;
-#endif
case 'D':
- add_device("DIODE", tt[0], tt[3]);
- // FIXME ==> does Kicad use different notation from LTSPICE
- add_term(tt[1], tt[0] + ".K");
- add_term(tt[2], tt[0] + ".A");
+ add_device("DIODE", tt[0], m_subckt + tt[3]);
+ // Spice D Anode Kathode model
+ // Kicad outputs K first and D as second net
+ add_term(tt[1], tt[0], is_kicad() ? 1 : 0);
+ add_term(tt[2], tt[0], is_kicad() ? 0 : 1);
break;
case 'U':
case 'X':
@@ -438,15 +614,44 @@ void nl_convert_spice_t::process_line(const pstring &line)
// FIXME: Parameter
pstring xname = plib::replace_all(tt[0], pstring("."), pstring("_"));
- pstring tname = "TTL_" + tt[tt.size()-1] + "_DIP";
+ pstring modname = tt[tt.size()-1];
+ pstring tname = modname;
+ if (plib::startsWith(modname, "7"))
+ tname = "TTL_" + modname + "_DIP";
+ else if (plib::startsWith(modname, "4"))
+ tname = "CD" + modname + "_DIP";
+
add_device(tname, xname);
for (std::size_t i=1; i < tt.size() - 1; i++)
{
- pstring term = plib::pfmt("{1}.{2}")(xname)(i);
+ pstring term = plib::pfmt("X{1}.{2}")(xname)(i);
add_term(tt[i], term);
}
break;
}
+ case 'Y':
+ {
+ auto st=tt[0].substr(0,3);
+ if (st == "YT_")
+ {
+ auto yname=pstring("I_") + tt[0].substr(3);
+ val = get_sp_val(tt[4]);
+ add_device("TTL_INPUT", yname, val);
+ add_term(tt[1], yname, 0);
+ add_term(tt[2], yname, 1);
+ add_term(tt[3], yname, 2);
+ }
+ else if (st == "YA_")
+ {
+ auto yname=pstring("I_") + tt[0].substr(3);
+ val = get_sp_val(tt[2]);
+ add_device("ANALOG_INPUT", yname, val);
+ add_term(tt[1], yname + ".Q");
+ }
+ else
+ out("// IGNORED {}: {}\n", tt[0].c_str(), line.c_str());
+ break;
+ }
default:
out("// IGNORED {}: {}\n", tt[0].c_str(), line.c_str());
}
@@ -485,7 +690,7 @@ void nl_convert_eagle_t::tokenizer::verror(const pstring &msg)
void nl_convert_eagle_t::convert(const pstring &contents)
{
- tokenizer tok(*this, plib::putf8_reader(std::istringstream(contents)));
+ tokenizer tok(*this, plib::putf8_reader(plib::make_unique<std::istringstream>(contents)));
tok.stream().stream().imbue(std::locale::classic());
out("NETLIST_START(dummy)\n");
@@ -632,7 +837,7 @@ void nl_convert_rinf_t::tokenizer::verror(const pstring &msg)
void nl_convert_rinf_t::convert(const pstring &contents)
{
- tokenizer tok(*this, plib::putf8_reader(std::istringstream(contents)));
+ tokenizer tok(*this, plib::putf8_reader(plib::make_unique<std::istringstream>(contents)));
tok.stream().stream().imbue(std::locale::classic());
auto lm = read_lib_map(s_lib_map);
diff --git a/src/lib/netlist/tools/nl_convert.h b/src/lib/netlist/tools/nl_convert.h
index 876215c6b29..f47eaf5ccaa 100644
--- a/src/lib/netlist/tools/nl_convert.h
+++ b/src/lib/netlist/tools/nl_convert.h
@@ -22,6 +22,7 @@
class nl_convert_base_t
{
public:
+ using str_list = std::vector<pstring>;
COPYASSIGNMOVE(nl_convert_base_t, delete)
@@ -42,7 +43,16 @@ protected:
void add_device(const pstring &atype, const pstring &aname, double aval);
void add_device(const pstring &atype, const pstring &aname);
+ void add_device_extra_s(const pstring &devname, const pstring &extra);
+
+ template<typename... Args>
+ void add_device_extra(const pstring &devname, const pstring &fmt, Args&&... args)
+ {
+ add_device_extra_s(devname, plib::pfmt(fmt)(std::forward<Args>(args)...));
+ }
+
void add_term(const pstring &netname, const pstring &termname);
+ void add_term(const pstring &netname, const pstring &devname, unsigned term);
void dump_nl();
@@ -52,6 +62,15 @@ protected:
double get_sp_val(const pstring &sin);
plib::putf8_fmt_writer out;
+
+ struct replace_t
+ {
+ pstring m_ce; // controlling element - must be twoterm
+ pstring m_repterm; // replace with terminal
+ pstring m_net; // connect to net
+ };
+ std::vector<replace_t> m_replace;
+
private:
struct net_t
@@ -102,16 +121,19 @@ private:
const pstring &type() const { return m_type;}
const pstring &model() const { return m_model;}
double value() const { return m_val;}
+ const str_list &extra() const { return m_extra;}
bool has_model() const { return m_model != ""; }
bool has_value() const { return m_has_val; }
+ void add_extra(const pstring &s) { m_extra.push_back(s); }
private:
pstring m_type;
pstring m_name;
pstring m_model;
double m_val;
bool m_has_val;
+ str_list m_extra;
};
struct unit_t {
@@ -133,9 +155,14 @@ private:
pstring m_alias;
};
-private:
-
void add_device(plib::unique_ptr<dev_t> dev);
+ dev_t *get_device(const pstring &name)
+ {
+ for (auto &e : m_devs)
+ if (e->name() == name)
+ return e.get();
+ return nullptr;
+ }
std::stringstream m_buf;
@@ -147,22 +174,26 @@ private:
std::vector<unit_t> m_units;
pstring m_numberchars;
+ std::unordered_map<pstring, str_list> dev_map;
+
};
class nl_convert_spice_t : public nl_convert_base_t
{
public:
- nl_convert_spice_t() = default;
+ nl_convert_spice_t() : m_is_kicad(false) { }
void convert(const pstring &contents) override;
protected:
+ bool is_kicad() const { return m_is_kicad; }
void process_line(const pstring &line);
private:
pstring m_subckt;
+ bool m_is_kicad;
};
class nl_convert_eagle_t : public nl_convert_base_t
diff --git a/src/lib/util/avhuff.cpp b/src/lib/util/avhuff.cpp
index 50eea9f24dc..73a41df50d7 100644
--- a/src/lib/util/avhuff.cpp
+++ b/src/lib/util/avhuff.cpp
@@ -679,18 +679,6 @@ uint16_t *avhuff_encoder::deltarle_encoder::rle_and_histo_bitmap(const uint8_t *
//**************************************************************************
/**
- * @fn avhuff_decoder::avhuff_decoder()
- *
- * @brief -------------------------------------------------
- * avhuff_decoder - constructor
- * -------------------------------------------------.
- */
-
-avhuff_decoder::avhuff_decoder()
-{
-}
-
-/**
* @fn void avhuff_decoder::configure(const avhuff_decompress_config &config)
*
* @brief -------------------------------------------------
diff --git a/src/lib/util/avhuff.h b/src/lib/util/avhuff.h
index 90ef43e977f..d14046e1f62 100644
--- a/src/lib/util/avhuff.h
+++ b/src/lib/util/avhuff.h
@@ -144,7 +144,7 @@ class avhuff_decoder
{
public:
// construction/destruction
- avhuff_decoder();
+ avhuff_decoder() = default;
// configuration
void configure(const avhuff_decompress_config &config);
diff --git a/src/lib/util/aviio.cpp b/src/lib/util/aviio.cpp
index c66f706b6e2..067f81fef27 100644
--- a/src/lib/util/aviio.cpp
+++ b/src/lib/util/aviio.cpp
@@ -298,7 +298,7 @@ public:
std::uint32_t width = info.video_width;
std::uint32_t height = info.video_height;
- std::uint32_t integal_multiple = std::uint32_t(AVI_INTEGRAL_MULTIPLE);
+ auto integal_multiple = std::uint32_t(AVI_INTEGRAL_MULTIPLE);
if (integal_multiple > 1)
{
width = width - (width % integal_multiple);
@@ -720,8 +720,8 @@ inline void put_64bits(std::uint8_t *data, std::uint64_t value)
inline void u64toa(std::uint64_t val, char *output)
{
- std::uint32_t lo = std::uint32_t(val & 0xffffffff);
- std::uint32_t hi = std::uint32_t(val >> 32);
+ auto lo = std::uint32_t(val & 0xffffffff);
+ auto hi = std::uint32_t(val >> 32);
if (hi != 0)
sprintf(output, "%X%08X", hi, lo);
else
@@ -1055,7 +1055,7 @@ avi_file::error avi_stream::rgb32_compress_to_rgb(const bitmap_rgb32 &bitmap, st
avi_file::error avi_stream::yuv_decompress_to_yuy16(const std::uint8_t *data, std::uint32_t numbytes, bitmap_yuy16 &bitmap) const
{
- std::uint16_t const *const dataend = reinterpret_cast<const std::uint16_t *>(data + numbytes);
+ auto const *const dataend = reinterpret_cast<const std::uint16_t *>(data + numbytes);
int x, y;
/* compressed video */
@@ -1107,7 +1107,7 @@ avi_file::error avi_stream::yuv_decompress_to_yuy16(const std::uint8_t *data, st
avi_file::error avi_stream::yuy16_compress_to_yuy(const bitmap_yuy16 &bitmap, std::uint8_t *data, std::uint32_t numbytes) const
{
- std::uint16_t *const dataend = reinterpret_cast<std::uint16_t *>(data + numbytes);
+ auto *const dataend = reinterpret_cast<std::uint16_t *>(data + numbytes);
int x, y;
/* compressed video */
@@ -1871,7 +1871,7 @@ avi_file::error avi_file_impl::read_sound_samples(int channel, std::uint32_t fir
/* extract 16-bit samples from the chunk */
if (stream->samplebits() == 16)
{
- const std::int16_t *base = reinterpret_cast<const std::int16_t *>(&m_tempbuffer[8]);
+ const auto *base = reinterpret_cast<const std::int16_t *>(&m_tempbuffer[8]);
base += stream->channels() * (firstsample - chunkbase) + offset;
for (sampnum = 0; sampnum < samples_this_chunk; sampnum++)
{
@@ -3803,13 +3803,3 @@ const char *avi_file::error_string(error err)
default: return "undocumented error";
}
}
-
-
-avi_file::avi_file()
-{
-}
-
-
-avi_file::~avi_file()
-{
-}
diff --git a/src/lib/util/aviio.h b/src/lib/util/aviio.h
index c951f71b22f..8aa36d80b8b 100644
--- a/src/lib/util/aviio.h
+++ b/src/lib/util/aviio.h
@@ -111,7 +111,7 @@ public:
static error open(std::string const &filename, ptr &file);
static error create(std::string const &filename, movie_info const &info, ptr &file);
- virtual ~avi_file();
+ virtual ~avi_file() = default;
virtual void printf_chunks() = 0;
static const char *error_string(error err);
@@ -128,7 +128,7 @@ public:
virtual error append_sound_samples(int channel, std::int16_t const *samples, std::uint32_t numsamples, std::uint32_t sampleskip) = 0;
protected:
- avi_file();
+ avi_file() = default;
};
#endif // MAME_LIB_UTIL_AVIIO_H
diff --git a/src/lib/util/cdrom.cpp b/src/lib/util/cdrom.cpp
index d2415108d80..94efa870d8d 100644
--- a/src/lib/util/cdrom.cpp
+++ b/src/lib/util/cdrom.cpp
@@ -558,7 +558,7 @@ uint32_t cdrom_read_data(cdrom_file *file, uint32_t lbasector, void *buffer, uin
/* return 2352 byte mode 1 raw sector from 2048 bytes of mode 1 data */
if ((datatype == CD_TRACK_MODE1_RAW) && (tracktype == CD_TRACK_MODE1))
{
- uint8_t *bufptr = (uint8_t *)buffer;
+ auto *bufptr = (uint8_t *)buffer;
uint32_t msf = lba_to_msf(lbasector);
static const uint8_t syncbytes[12] = {0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00};
@@ -1247,7 +1247,7 @@ chd_error cdrom_parse_metadata(chd_file *chd, cdrom_toc *toc)
return err;
/* reconstruct the TOC from it */
- uint32_t *mrp = reinterpret_cast<uint32_t *>(&oldmetadata[0]);
+ auto *mrp = reinterpret_cast<uint32_t *>(&oldmetadata[0]);
toc->numtrks = *mrp++;
for (i = 0; i < CD_MAX_TRACKS; i++)
diff --git a/src/lib/util/chd.cpp b/src/lib/util/chd.cpp
index d71eb436ea0..daad423147a 100644
--- a/src/lib/util/chd.cpp
+++ b/src/lib/util/chd.cpp
@@ -888,7 +888,7 @@ chd_error chd_file::read_hunk(uint32_t hunknum, void *buffer)
uint32_t blocklen;
util::crc32_t blockcrc;
uint8_t *rawmap;
- uint8_t *dest = reinterpret_cast<uint8_t *>(buffer);
+ auto *dest = reinterpret_cast<uint8_t *>(buffer);
switch (m_version)
{
// v3/v4 map entries
@@ -1045,7 +1045,7 @@ chd_error chd_file::write_hunk(uint32_t hunknum, const void *buffer)
{
// first make sure we need to allocate it
bool all_zeros = true;
- const uint32_t *scan = reinterpret_cast<const uint32_t *>(buffer);
+ const auto *scan = reinterpret_cast<const uint32_t *>(buffer);
for (uint32_t index = 0; index < m_hunkbytes / 4; index++)
if (scan[index] != 0)
{
@@ -1140,7 +1140,7 @@ chd_error chd_file::read_bytes(uint64_t offset, void *buffer, uint32_t bytes)
// iterate over hunks
uint32_t first_hunk = offset / m_hunkbytes;
uint32_t last_hunk = (offset + bytes - 1) / m_hunkbytes;
- uint8_t *dest = reinterpret_cast<uint8_t *>(buffer);
+ auto *dest = reinterpret_cast<uint8_t *>(buffer);
for (uint32_t curhunk = first_hunk; curhunk <= last_hunk; curhunk++)
{
// determine start/end boundaries
@@ -1193,7 +1193,7 @@ chd_error chd_file::write_bytes(uint64_t offset, const void *buffer, uint32_t by
// iterate over hunks
uint32_t first_hunk = offset / m_hunkbytes;
uint32_t last_hunk = (offset + bytes - 1) / m_hunkbytes;
- const uint8_t *source = reinterpret_cast<const uint8_t *>(buffer);
+ const auto *source = reinterpret_cast<const uint8_t *>(buffer);
for (uint32_t curhunk = first_hunk; curhunk <= last_hunk; curhunk++)
{
// determine start/end boundaries
@@ -2947,7 +2947,7 @@ chd_error chd_file_compressor::compress_continue(double &progress, double &ratio
hunk_write_compressed(item.m_hunknum, item.m_compression, item.m_compressed, item.m_complen, item.m_hash[0].m_crc16);
m_total_out += item.m_complen;
m_current_map.add(item.m_hunknum, item.m_hash[0].m_crc16, item.m_hash[0].m_sha1);
- } while (0);
+ } while (false);
// reset the item and advance
item.m_status = WS_READY;
@@ -3010,7 +3010,7 @@ chd_error chd_file_compressor::compress_continue(double &progress, double &ratio
void *chd_file_compressor::async_walk_parent_static(void *param, int threadid)
{
- work_item *item = reinterpret_cast<work_item *>(param);
+ auto *item = reinterpret_cast<work_item *>(param);
item->m_compressor->async_walk_parent(*item);
return nullptr;
}
@@ -3052,7 +3052,7 @@ void chd_file_compressor::async_walk_parent(work_item &item)
void *chd_file_compressor::async_compress_hunk_static(void *param, int threadid)
{
- work_item *item = reinterpret_cast<work_item *>(param);
+ auto *item = reinterpret_cast<work_item *>(param);
item->m_compressor->async_compress_hunk(*item, threadid);
return nullptr;
}
diff --git a/src/lib/util/chdcd.cpp b/src/lib/util/chdcd.cpp
index aafac22e968..b2b0e141499 100644
--- a/src/lib/util/chdcd.cpp
+++ b/src/lib/util/chdcd.cpp
@@ -262,7 +262,7 @@ static uint32_t parse_wav_sample(const char *filename, uint32_t *dataoffs)
}
/* seek until we find a format tag */
- while (1)
+ while (true)
{
file->read(buf, offset, 4, actual);
offset += actual;
@@ -329,7 +329,7 @@ static uint32_t parse_wav_sample(const char *filename, uint32_t *dataoffs)
offset += length - 16;
/* seek until we find a data tag */
- while (1)
+ while (true)
{
file->read(buf, offset, 4, actual);
offset += actual;
diff --git a/src/lib/util/chdcodec.cpp b/src/lib/util/chdcodec.cpp
index 9785929d0bd..3f76af302bd 100644
--- a/src/lib/util/chdcodec.cpp
+++ b/src/lib/util/chdcodec.cpp
@@ -124,7 +124,7 @@ class chd_lzma_compressor : public chd_compressor
public:
// construction/destruction
chd_lzma_compressor(chd_file &chd, uint32_t hunkbytes, bool lossy);
- ~chd_lzma_compressor();
+ ~chd_lzma_compressor() = default;
// core functionality
virtual uint32_t compress(const uint8_t *src, uint32_t srclen, uint8_t *dest) override;
@@ -497,15 +497,6 @@ chd_codec::chd_codec(chd_file &chd, uint32_t hunkbytes, bool lossy)
//-------------------------------------------------
-// ~chd_codec - destructor
-//-------------------------------------------------
-
-chd_codec::~chd_codec()
-{
-}
-
-
-//-------------------------------------------------
// configure - configuration
//-------------------------------------------------
@@ -760,7 +751,7 @@ void chd_zlib_allocator::install(z_stream &stream)
voidpf chd_zlib_allocator::fast_alloc(voidpf opaque, uInt items, uInt size)
{
- chd_zlib_allocator *codec = reinterpret_cast<chd_zlib_allocator *>(opaque);
+ auto *codec = reinterpret_cast<chd_zlib_allocator *>(opaque);
// compute the size, rounding to the nearest 1k
size = (size * items + 0x3ff) & ~0x3ff;
@@ -778,7 +769,7 @@ voidpf chd_zlib_allocator::fast_alloc(voidpf opaque, uInt items, uInt size)
}
// alloc a new one and put it into the list
- uint32_t *ptr = reinterpret_cast<uint32_t *>(new uint8_t[size + sizeof(uint32_t)]);
+ auto *ptr = reinterpret_cast<uint32_t *>(new uint8_t[size + sizeof(uint32_t)]);
for (int scan = 0; scan < MAX_ZLIB_ALLOCS; scan++)
if (codec->m_allocptr[scan] == nullptr)
{
@@ -799,7 +790,7 @@ voidpf chd_zlib_allocator::fast_alloc(voidpf opaque, uInt items, uInt size)
void chd_zlib_allocator::fast_free(voidpf opaque, voidpf address)
{
- chd_zlib_allocator *codec = reinterpret_cast<chd_zlib_allocator *>(opaque);
+ auto *codec = reinterpret_cast<chd_zlib_allocator *>(opaque);
// find the hunk
uint32_t *ptr = reinterpret_cast<uint32_t *>(address) - 1;
@@ -980,7 +971,7 @@ chd_lzma_allocator::~chd_lzma_allocator()
void *chd_lzma_allocator::fast_alloc(void *p, size_t size)
{
- chd_lzma_allocator *codec = reinterpret_cast<chd_lzma_allocator *>(p);
+ auto *codec = reinterpret_cast<chd_lzma_allocator *>(p);
// compute the size, rounding to the nearest 1k
size = (size + 0x3ff) & ~0x3ff;
@@ -998,7 +989,7 @@ void *chd_lzma_allocator::fast_alloc(void *p, size_t size)
}
// alloc a new one and put it into the list
- uint32_t *ptr = reinterpret_cast<uint32_t *>(new uint8_t[size + sizeof(uint32_t)]);
+ auto *ptr = reinterpret_cast<uint32_t *>(new uint8_t[size + sizeof(uint32_t)]);
for (int scan = 0; scan < MAX_LZMA_ALLOCS; scan++)
if (codec->m_allocptr[scan] == nullptr)
{
@@ -1022,7 +1013,7 @@ void chd_lzma_allocator::fast_free(void *p, void *address)
if (address == nullptr)
return;
- chd_lzma_allocator *codec = reinterpret_cast<chd_lzma_allocator *>(p);
+ auto *codec = reinterpret_cast<chd_lzma_allocator *>(p);
// find the hunk
uint32_t *ptr = reinterpret_cast<uint32_t *>(address) - 1;
@@ -1054,15 +1045,6 @@ chd_lzma_compressor::chd_lzma_compressor(chd_file &chd, uint32_t hunkbytes, bool
//-------------------------------------------------
-// ~chd_lzma_compressor - destructor
-//-------------------------------------------------
-
-chd_lzma_compressor::~chd_lzma_compressor()
-{
-}
-
-
-//-------------------------------------------------
// compress - compress data using the LZMA codec
//-------------------------------------------------
diff --git a/src/lib/util/chdcodec.h b/src/lib/util/chdcodec.h
index e688b41a108..8be99b2e710 100644
--- a/src/lib/util/chdcodec.h
+++ b/src/lib/util/chdcodec.h
@@ -50,7 +50,7 @@ protected:
public:
// allow public deletion
- virtual ~chd_codec();
+ virtual ~chd_codec() = default;
// accessors
chd_file &chd() const { return m_chd; }
diff --git a/src/lib/util/corefile.cpp b/src/lib/util/corefile.cpp
index 5b8babfc33a..d241dac6ed1 100644
--- a/src/lib/util/corefile.cpp
+++ b/src/lib/util/corefile.cpp
@@ -143,7 +143,7 @@ class core_proxy_file : public core_file
{
public:
core_proxy_file(core_file &file) : m_file(file) { }
- virtual ~core_proxy_file() override { }
+ virtual ~core_proxy_file() override = default;
virtual osd_file::error compress(int level) override { return m_file.compress(level); }
virtual int seek(std::int64_t offset, int whence) override { return m_file.seek(offset, whence); }
@@ -395,7 +395,7 @@ int core_text_file::getc()
// fetch the next character
char16_t utf16_buffer[UTF16_CHAR_MAX];
- char32_t uchar = char32_t(~0);
+ auto uchar = char32_t(~0);
switch (m_text_type)
{
default:
@@ -647,7 +647,7 @@ bool core_in_memory_file::eof() const
{
// check for buffered chars
if (has_putback())
- return 0;
+ return false;
// if the offset == length, we're at EOF
return (m_offset >= m_length);
@@ -1233,15 +1233,6 @@ osd_file::error core_file::load(std::string const &filename, std::vector<uint8_t
return osd_file::error::NONE;
}
-
-/*-------------------------------------------------
- protected constructor
--------------------------------------------------*/
-
-core_file::core_file()
-{
-}
-
} // namespace util
diff --git a/src/lib/util/corefile.h b/src/lib/util/corefile.h
index d286cb866ac..99496b964e8 100644
--- a/src/lib/util/corefile.h
+++ b/src/lib/util/corefile.h
@@ -128,7 +128,7 @@ public:
protected:
- core_file();
+ core_file() = default;
};
diff --git a/src/lib/util/flac.cpp b/src/lib/util/flac.cpp
index 7fce66c2bce..9030249a7d0 100644
--- a/src/lib/util/flac.cpp
+++ b/src/lib/util/flac.cpp
@@ -559,7 +559,7 @@ void flac_decoder::metadata_callback_static(const FLAC__StreamDecoder *decoder,
return;
// parse out the data we care about
- flac_decoder *fldecoder = reinterpret_cast<flac_decoder *>(client_data);
+ auto *fldecoder = reinterpret_cast<flac_decoder *>(client_data);
fldecoder->m_sample_rate = metadata->data.stream_info.sample_rate;
fldecoder->m_bits_per_sample = metadata->data.stream_info.bits_per_sample;
fldecoder->m_channels = metadata->data.stream_info.channels;
diff --git a/src/lib/util/hashing.cpp b/src/lib/util/hashing.cpp
index 448cdc5d6ec..a5946f1ace8 100644
--- a/src/lib/util/hashing.cpp
+++ b/src/lib/util/hashing.cpp
@@ -284,7 +284,7 @@ void crc16_creator::append(const void *data, uint32_t length)
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
};
- const uint8_t *src = reinterpret_cast<const uint8_t *>(data);
+ const auto *src = reinterpret_cast<const uint8_t *>(data);
// fetch the current value into a local and rip through the source data
uint16_t crc = m_accum.m_raw;
diff --git a/src/lib/util/huffman.cpp b/src/lib/util/huffman.cpp
index 23b13bdaf09..d8900b45e17 100644
--- a/src/lib/util/huffman.cpp
+++ b/src/lib/util/huffman.cpp
@@ -431,7 +431,7 @@ huffman_error huffman_context_base::compute_tree_from_histo()
// binary search to achieve the optimum encoding
uint32_t lowerweight = 0;
uint32_t upperweight = sdatacount * 2;
- while (1)
+ while (true)
{
// build a tree using the current weight
uint32_t curweight = (upperweight + lowerweight) / 2;
@@ -678,14 +678,6 @@ void huffman_context_base::build_lookup_table()
// 8-BIT ENCODER
//**************************************************************************
-//-------------------------------------------------
-// huffman_8bit_encoder - constructor
-//-------------------------------------------------
-
-huffman_8bit_encoder::huffman_8bit_encoder()
-{
-}
-
//-------------------------------------------------
// encode - encode a full buffer
@@ -722,14 +714,6 @@ huffman_error huffman_8bit_encoder::encode(const uint8_t *source, uint32_t sleng
// 8-BIT DECODER
//**************************************************************************
-//-------------------------------------------------
-// huffman_8bit_decoder - constructor
-//-------------------------------------------------
-
-huffman_8bit_decoder::huffman_8bit_decoder()
-{
-}
-
/**
* @fn huffman_error huffman_8bit_decoder::decode(const uint8_t *source, uint32_t slength, uint8_t *dest, uint32_t dlength)
*
diff --git a/src/lib/util/huffman.h b/src/lib/util/huffman.h
index 0eac393f380..233146e8e20 100644
--- a/src/lib/util/huffman.h
+++ b/src/lib/util/huffman.h
@@ -149,7 +149,7 @@ class huffman_8bit_encoder : public huffman_encoder<>
{
public:
// construction/destruction
- huffman_8bit_encoder();
+ huffman_8bit_encoder() = default;
// operations
huffman_error encode(const uint8_t *source, uint32_t slength, uint8_t *dest, uint32_t destlength, uint32_t &complength);
@@ -163,7 +163,7 @@ class huffman_8bit_decoder : public huffman_decoder<>
{
public:
// construction/destruction
- huffman_8bit_decoder();
+ huffman_8bit_decoder() = default;
// operations
huffman_error decode(const uint8_t *source, uint32_t slength, uint8_t *dest, uint32_t destlength);
diff --git a/src/lib/util/jedparse.cpp b/src/lib/util/jedparse.cpp
index 962a41a8ee0..d25b35c3328 100644
--- a/src/lib/util/jedparse.cpp
+++ b/src/lib/util/jedparse.cpp
@@ -189,7 +189,7 @@ static void process_field(jed_data *data, const uint8_t *cursrc, const uint8_t *
int jed_parse(const void *data, size_t length, jed_data *result)
{
- const uint8_t *cursrc = (const uint8_t *)data;
+ const auto *cursrc = (const uint8_t *)data;
const uint8_t *srcend = cursrc + length;
const uint8_t *scan;
jed_parse_info pinfo;
@@ -283,7 +283,7 @@ int jed_parse(const void *data, size_t length, jed_data *result)
size_t jed_output(const jed_data *data, void *result, size_t length)
{
- uint8_t *curdst = (uint8_t *)result;
+ auto *curdst = (uint8_t *)result;
uint8_t *dstend = curdst + length;
int i, zeros, ones;
char tempbuf[256];
@@ -379,7 +379,7 @@ size_t jed_output(const jed_data *data, void *result, size_t length)
int jedbin_parse(const void *data, size_t length, jed_data *result)
{
- const uint8_t *cursrc = (const uint8_t *)data;
+ const auto *cursrc = (const uint8_t *)data;
/* initialize the output */
memset(result, 0, sizeof(*result));
@@ -424,7 +424,7 @@ int jedbin_parse(const void *data, size_t length, jed_data *result)
size_t jedbin_output(const jed_data *data, void *result, size_t length)
{
- uint8_t *curdst = (uint8_t *)result;
+ auto *curdst = (uint8_t *)result;
/* ensure we have enough room */
if (length >= 4 + (data->numfuses + 7) / 8)
diff --git a/src/lib/util/opresolv.cpp b/src/lib/util/opresolv.cpp
index 034f9418426..210dde4f224 100644
--- a/src/lib/util/opresolv.cpp
+++ b/src/lib/util/opresolv.cpp
@@ -63,15 +63,6 @@ option_resolution::option_resolution(const option_guide &guide)
// -------------------------------------------------
-// dtor
-// -------------------------------------------------
-
-option_resolution::~option_resolution()
-{
-}
-
-
-// -------------------------------------------------
// lookup_in_specification
// -------------------------------------------------
diff --git a/src/lib/util/opresolv.h b/src/lib/util/opresolv.h
index 3781b602393..a102dcd8c83 100644
--- a/src/lib/util/opresolv.h
+++ b/src/lib/util/opresolv.h
@@ -243,7 +243,7 @@ public:
// ctor/dtor
option_resolution(const option_guide &guide);
- ~option_resolution();
+ ~option_resolution() = default;
// sets a specification
void set_specification(const std::string &specification);
diff --git a/src/lib/util/options.cpp b/src/lib/util/options.cpp
index bc7b72f896d..fd0783ccaae 100644
--- a/src/lib/util/options.cpp
+++ b/src/lib/util/options.cpp
@@ -423,15 +423,6 @@ const char *core_options::simple_entry::maximum() const noexcept
//**************************************************************************
//-------------------------------------------------
-// core_options - constructor
-//-------------------------------------------------
-
-core_options::core_options()
-{
-}
-
-
-//-------------------------------------------------
// ~core_options - destructor
//-------------------------------------------------
@@ -657,7 +648,7 @@ void core_options::parse_command_line(const std::vector<std::string> &args, int
// special case - collect unadorned arguments after commands into a special place
if (is_unadorned && !m_command.empty())
{
- m_command_arguments.push_back(std::move(args[arg]));
+ m_command_arguments.push_back(args[arg]);
command_argument_processed();
continue;
}
diff --git a/src/lib/util/options.h b/src/lib/util/options.h
index 457ec08dd1d..a28720a0373 100644
--- a/src/lib/util/options.h
+++ b/src/lib/util/options.h
@@ -147,7 +147,7 @@ public:
};
// construction/destruction
- core_options();
+ core_options() = default;
core_options(const core_options &) = delete;
core_options(core_options &&) = default;
core_options& operator=(const core_options &) = delete;
@@ -213,7 +213,7 @@ private:
simple_entry(simple_entry &&) = delete;
simple_entry& operator=(const simple_entry &) = delete;
simple_entry& operator=(simple_entry &&) = delete;
- ~simple_entry();
+ virtual ~simple_entry();
// getters
virtual const char *value() const noexcept override;
diff --git a/src/lib/util/palette.cpp b/src/lib/util/palette.cpp
index 59a63b2c8f5..47fa06c05bd 100644
--- a/src/lib/util/palette.cpp
+++ b/src/lib/util/palette.cpp
@@ -256,15 +256,6 @@ palette_t::palette_t(uint32_t numcolors, uint32_t numgroups)
// palette_t - destructor
//-------------------------------------------------
-palette_t::~palette_t()
-{
-}
-
-
-//-------------------------------------------------
-// palette_t - destructor
-//-------------------------------------------------
-
void palette_t::deref()
{
if (--m_refcount == 0)
diff --git a/src/lib/util/palette.h b/src/lib/util/palette.h
index ff2c7bb80c9..0407a87c29b 100644
--- a/src/lib/util/palette.h
+++ b/src/lib/util/palette.h
@@ -191,7 +191,7 @@ public:
private:
// construction/destruction
palette_t(uint32_t numcolors, uint32_t numgroups = 1);
- ~palette_t();
+ ~palette_t() = default;
// internal helpers
rgb_t adjust_palette_entry(rgb_t entry, float brightness, float contrast, const uint8_t *gamma_map);
diff --git a/src/lib/util/plaparse.cpp b/src/lib/util/plaparse.cpp
index fbecd27232b..756d29f46da 100644
--- a/src/lib/util/plaparse.cpp
+++ b/src/lib/util/plaparse.cpp
@@ -308,7 +308,7 @@ static bool process_field(jed_data *data, const uint8_t **src, const uint8_t *sr
int pla_parse(const void *data, size_t length, jed_data *result)
{
- const uint8_t *src = (const uint8_t *)data;
+ const auto *src = (const uint8_t *)data;
const uint8_t *srcend = src + length;
parse_info pinfo;
diff --git a/src/lib/util/png.cpp b/src/lib/util/png.cpp
index e3ebf10688f..6eb5293da53 100644
--- a/src/lib/util/png.cpp
+++ b/src/lib/util/png.cpp
@@ -201,7 +201,7 @@ private:
stream.next_out = pnginfo.image.get();
stream.avail_out = expected;
stream.avail_in = 0;
- std::list<image_data_chunk>::const_iterator it = idata.begin();
+ auto it = idata.begin();
while ((idata.end() != it) && ((Z_OK == zerr) || (Z_BUF_ERROR == zerr)) && !stream.avail_in)
{
stream.avail_in = it->length;
@@ -1042,7 +1042,7 @@ static png_error convert_bitmap_to_image_palette(png_info &pnginfo, const bitmap
/* copy in the pixels, specifying a nullptr filter */
for (y = 0; y < pnginfo.height; y++)
{
- uint16_t *src = reinterpret_cast<uint16_t *>(bitmap.raw_pixptr(y));
+ auto *src = reinterpret_cast<uint16_t *>(bitmap.raw_pixptr(y));
uint8_t *dst = &pnginfo.image[y * (rowbytes + 1)];
/* store the filter byte, then copy the data */
@@ -1088,7 +1088,7 @@ static png_error convert_bitmap_to_image_rgb(png_info &pnginfo, const bitmap_t &
/* 16bpp palettized format */
if (bitmap.format() == BITMAP_FORMAT_IND16)
{
- uint16_t *src16 = reinterpret_cast<uint16_t *>(bitmap.raw_pixptr(y));
+ auto *src16 = reinterpret_cast<uint16_t *>(bitmap.raw_pixptr(y));
for (x = 0; x < pnginfo.width; x++)
{
rgb_t color = palette[*src16++];
@@ -1101,7 +1101,7 @@ static png_error convert_bitmap_to_image_rgb(png_info &pnginfo, const bitmap_t &
/* 32-bit RGB direct */
else if (bitmap.format() == BITMAP_FORMAT_RGB32)
{
- uint32_t *src32 = reinterpret_cast<uint32_t *>(bitmap.raw_pixptr(y));
+ auto *src32 = reinterpret_cast<uint32_t *>(bitmap.raw_pixptr(y));
for (x = 0; x < pnginfo.width; x++)
{
rgb_t raw = *src32++;
@@ -1114,7 +1114,7 @@ static png_error convert_bitmap_to_image_rgb(png_info &pnginfo, const bitmap_t &
/* 32-bit ARGB direct */
else if (bitmap.format() == BITMAP_FORMAT_ARGB32)
{
- uint32_t *src32 = reinterpret_cast<uint32_t *>(bitmap.raw_pixptr(y));
+ auto *src32 = reinterpret_cast<uint32_t *>(bitmap.raw_pixptr(y));
for (x = 0; x < pnginfo.width; x++)
{
rgb_t raw = *src32++;
diff --git a/src/lib/util/pool.cpp b/src/lib/util/pool.cpp
index 481b8b97f7f..6bf049db03d 100644
--- a/src/lib/util/pool.cpp
+++ b/src/lib/util/pool.cpp
@@ -578,7 +578,7 @@ static void memory_error(const char *message)
* @return An int.
*/
-bool test_memory_pools(void)
+bool test_memory_pools()
{
object_pool *pool;
void *ptrs[16];
diff --git a/src/lib/util/unzip.cpp b/src/lib/util/unzip.cpp
index 836d67f1113..a659445e1cc 100644
--- a/src/lib/util/unzip.cpp
+++ b/src/lib/util/unzip.cpp
@@ -1159,7 +1159,7 @@ archive_file::error zip_file_impl::decompress_data_type_8(std::uint64_t offset,
}
// loop until we're done
- while (1)
+ while (true)
{
// read in the next chunk of data
std::uint32_t read_length(0);
diff --git a/src/lib/util/wavwrite.cpp b/src/lib/util/wavwrite.cpp
index 93b4b0a6ca7..56a7cd4e43b 100644
--- a/src/lib/util/wavwrite.cpp
+++ b/src/lib/util/wavwrite.cpp
@@ -23,7 +23,7 @@ wav_file *wav_open(const char *filename, int sample_rate, int channels)
std::uint16_t temp16;
// allocate memory for the wav struct
- wav_file *const wav = new (std::nothrow) wav_file;
+ auto *const wav = new (std::nothrow) wav_file;
if (!wav)
return nullptr;
diff --git a/src/lib/util/xmlfile.cpp b/src/lib/util/xmlfile.cpp
index 012080c8335..8ba2cec92c3 100644
--- a/src/lib/util/xmlfile.cpp
+++ b/src/lib/util/xmlfile.cpp
@@ -68,9 +68,6 @@ static void expat_element_end(void *data, const XML_Char *name);
XML FILE OBJECTS
***************************************************************************/
-file::file() { }
-file::~file() { }
-
/*-------------------------------------------------
create - create a new, empty XML file
@@ -757,7 +754,7 @@ const char *normalize_string(const char *string)
static void *expat_malloc(size_t size)
{
- uint32_t *result = (uint32_t *)malloc(size + 4 * sizeof(uint32_t));
+ auto *result = (uint32_t *)malloc(size + 4 * sizeof(uint32_t));
*result = size;
return &result[4];
}
@@ -840,7 +837,7 @@ static bool expat_setup_parser(parse_info &info, parse_options const *opts)
static void expat_element_start(void *data, const XML_Char *name, const XML_Char **attributes)
{
- parse_info *info = (parse_info *) data;
+ auto *info = (parse_info *) data;
data_node **curnode = &info->curnode;
data_node *newnode;
int attr;
@@ -869,7 +866,7 @@ static void expat_element_start(void *data, const XML_Char *name, const XML_Char
static void expat_data(void *data, const XML_Char *s, int len)
{
- parse_info *info = (parse_info *) data;
+ auto *info = (parse_info *) data;
data_node **curnode = &info->curnode;
(*curnode)->append_value(s, len);
}
@@ -882,7 +879,7 @@ static void expat_data(void *data, const XML_Char *s, int len)
static void expat_element_end(void *data, const XML_Char *name)
{
- parse_info *info = (parse_info *) data;
+ auto *info = (parse_info *) data;
data_node **curnode = &info->curnode;
/* strip leading/trailing spaces from the value data */
diff --git a/src/lib/util/xmlfile.h b/src/lib/util/xmlfile.h
index 8d09b2b7e1e..659ad59ae31 100644
--- a/src/lib/util/xmlfile.h
+++ b/src/lib/util/xmlfile.h
@@ -215,7 +215,7 @@ public:
using ptr = std::unique_ptr<file>;
- ~file();
+ ~file() = default;
// create a new, empty XML file
static ptr create();
@@ -231,7 +231,7 @@ public:
private:
- file();
+ file() = default;
};
diff --git a/src/mame/audio/galaxian.cpp b/src/mame/audio/galaxian.cpp
index 4485c26104a..ba99ca5e6b3 100644
--- a/src/mame/audio/galaxian.cpp
+++ b/src/mame/audio/galaxian.cpp
@@ -78,7 +78,7 @@ TODO:
* it is only listed once and given as 15k. This is more in line with recordings
*/
#define GAL_R34 RES_K(5.1)
-#define MCRST_R34 RES_K(15)
+#define MCRST_R34 RES_K(15)
#define GAL_R35 RES_K(150)
#define GAL_R36 RES_K(22)
@@ -391,14 +391,14 @@ DEFINE_DEVICE_TYPE(GALAXIAN_SOUND, galaxian_sound_device, "galaxian_sound", "Gal
DEFINE_DEVICE_TYPE(MOONCRST_SOUND, mooncrst_sound_device, "mooncrst_sound", "Mooncrst Custom Sound")
galaxian_sound_device::galaxian_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
-: galaxian_sound_device(mconfig, GALAXIAN_SOUND, tag, owner, clock)
+ : galaxian_sound_device(mconfig, GALAXIAN_SOUND, tag, owner, clock)
{
}
galaxian_sound_device::galaxian_sound_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_discrete(*this, "discrete")
-, m_lfo_val(0)
+ : device_t(mconfig, type, tag, owner, clock)
+ , m_discrete(*this, "discrete")
+ , m_lfo_val(0)
{
}
@@ -498,7 +498,7 @@ WRITE8_MEMBER( galaxian_sound_device::sound_w )
}
mooncrst_sound_device::mooncrst_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
-: galaxian_sound_device(mconfig, MOONCRST_SOUND, tag, owner, clock)
+ : galaxian_sound_device(mconfig, MOONCRST_SOUND, tag, owner, clock)
{
}
diff --git a/src/mame/audio/galaxian.h b/src/mame/audio/galaxian.h
index fe84309fd67..f2129722468 100644
--- a/src/mame/audio/galaxian.h
+++ b/src/mame/audio/galaxian.h
@@ -11,7 +11,6 @@ class galaxian_sound_device : public device_t
{
public:
galaxian_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- galaxian_sound_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
DECLARE_WRITE8_MEMBER( sound_w );
DECLARE_WRITE8_MEMBER( pitch_w );
@@ -22,14 +21,14 @@ public:
DECLARE_WRITE8_MEMBER( lfo_freq_w );
protected:
+ galaxian_sound_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_add_mconfig(machine_config &config) override;
- // sound stream update overrides
- // virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
-
required_device<discrete_device> m_discrete;
+
private:
// internal state
uint8_t m_lfo_val;
@@ -43,13 +42,9 @@ public:
protected:
// device-level overrides
virtual void device_add_mconfig(machine_config &config) override;
-
};
DECLARE_DEVICE_TYPE(GALAXIAN_SOUND, galaxian_sound_device)
DECLARE_DEVICE_TYPE(MOONCRST_SOUND, mooncrst_sound_device)
-//DISCRETE_SOUND_EXTERN(galaxian_discrete);
-//DISCRETE_SOUND_EXTERN(mooncrst_discrete);
-
#endif // MAME_AUDIO_GALAXIAN_H
diff --git a/src/mame/audio/nl_zac1b11142.cpp b/src/mame/audio/nl_zac1b11142.cpp
index 4d3dcf51c6c..06933f97694 100644
--- a/src/mame/audio/nl_zac1b11142.cpp
+++ b/src/mame/audio/nl_zac1b11142.cpp
@@ -16,12 +16,11 @@ NETLIST_START(zac1b11142_schematics)
TTL_7474_DIP(U3A) // FIXME: need 74LS family model (higher input impedance, half the sink capability)
CD4016_DIP(U5D)
- NET_C(VCC, /*U3A.14,*/ U5D.14) // 7474 model doesn't have Vcc pin
- NET_C(GND, /*U3A.7,*/ U5D.7) // 7474 model doesn't have GND pin
+ NET_C(VCC, U3A.14, U5D.14)
+ NET_C(GND, U3A.7, U5D.7)
NET_C(VCC, U3A.10, U3A.11, U3A.12, U3A.13) // only half of this chip is used in this audio section - tie up the other inputs
-
// ANAL1/IOA3/IOA4 -> RULLANTE/CASSA
CAP(C61, CAP_U(10))
@@ -427,9 +426,6 @@ NETLIST_START(zac1b11142)
* Power terminals
* -----------------------------------------------------------------------*/
- NET_C(VCC, U3A.14)
- NET_C(GND, U3A.7)
-
// Reverse so that volume raises with raising percentage in ui
PARAM(P1.REVERSE, 1)
PARAM(P2.REVERSE, 1)
diff --git a/src/mame/drivers/armedf.cpp b/src/mame/drivers/armedf.cpp
index 9c9e99b382a..1752e49f5f8 100644
--- a/src/mame/drivers/armedf.cpp
+++ b/src/mame/drivers/armedf.cpp
@@ -346,11 +346,10 @@ Notes:
---- ---- ---- --x- coin counter 1
---- ---- ---- ---x coin counter 0
*/
-WRITE16_MEMBER(armedf_state::terraf_io_w)
+void armedf_state::terraf_io_w(offs_t offset, u16 data, u16 mem_mask)
{
- if(data & 0x4000 && ((m_vreg & 0x4000) == 0)) //0 -> 1 transition
- m_nb1414m4->exec((m_text_videoram[0] << 8) | (m_text_videoram[1] & 0xff),m_text_videoram.get(),m_fg_scrollx,m_fg_scrolly,m_tx_tilemap);
-
+ if (data & 0x4000 && ((m_vreg & 0x4000) == 0)) //0 -> 1 transition
+ m_nb1414m4->exec((m_text_videoram[0] << 8) | (m_text_videoram[1] & 0xff),m_text_videoram.target(),m_fg_scrollx,m_fg_scrolly,m_tx_tilemap);
COMBINE_DATA(&m_vreg);
@@ -360,9 +359,9 @@ WRITE16_MEMBER(armedf_state::terraf_io_w)
flip_screen_set(m_vreg & 0x1000);
}
-WRITE16_MEMBER(armedf_state::terrafjb_io_w)
+void armedf_state::terrafjb_io_w(offs_t offset, u16 data, u16 mem_mask)
{
- if(data & 0x4000 && ((m_vreg & 0x4000) == 0)) //0 -> 1 transition
+ if (data & 0x4000 && ((m_vreg & 0x4000) == 0)) //0 -> 1 transition
m_extra->set_input_line(0, HOLD_LINE);
COMBINE_DATA(&m_vreg);
@@ -373,13 +372,9 @@ WRITE16_MEMBER(armedf_state::terrafjb_io_w)
flip_screen_set(m_vreg & 0x1000);
}
-WRITE16_MEMBER(armedf_state::bootleg_io_w)
+void armedf_state::armedf_io_w(offs_t offset, u16 data, u16 mem_mask)
{
- if(data & 0x4000 && ((m_vreg & 0x4000) == 0)) //0 -> 1 transition
- {
- // NOP
- }
-
+ // no NB1414M4 present
COMBINE_DATA(&m_vreg);
machine().bookkeeping().coin_counter_w(0, (data & 1) >> 0);
@@ -388,26 +383,26 @@ WRITE16_MEMBER(armedf_state::bootleg_io_w)
flip_screen_set(m_vreg & 0x1000);
}
-WRITE16_MEMBER(armedf_state::sound_command_w)
+void armedf_state::sound_command_w(u8 data)
{
- if (ACCESSING_BITS_0_7)
- m_soundlatch->write(((data & 0x7f) << 1) | 1);
+ m_soundlatch->write(((data & 0x7f) << 1) | 1);
}
-READ8_MEMBER(armedf_state::soundlatch_clear_r)
+u8 armedf_state::soundlatch_clear_r()
{
- m_soundlatch->clear_w();
+ if (!machine().side_effects_disabled())
+ m_soundlatch->clear_w();
return 0;
}
-WRITE16_MEMBER(armedf_state::irq_lv1_ack_w)
+void armedf_state::irq_lv1_ack_w(u16 data)
{
if (m_nb1414m4 != nullptr)
m_nb1414m4->vblank_trigger();
m_maincpu->set_input_line(1, CLEAR_LINE);
}
-WRITE16_MEMBER(armedf_state::irq_lv2_ack_w)
+void armedf_state::irq_lv2_ack_w(u16 data)
{
if (m_nb1414m4 != nullptr)
m_nb1414m4->vblank_trigger();
@@ -415,7 +410,6 @@ WRITE16_MEMBER(armedf_state::irq_lv2_ack_w)
}
-
/*************************************
*
* Address maps
@@ -426,36 +420,57 @@ void armedf_state::common_map(address_map &map)
{
map(0x000000, 0x05ffff).rom();
map(0x064000, 0x064fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x068000, 0x069fff).rw(FUNC(armedf_state::nb1414m4_text_videoram_r), FUNC(armedf_state::nb1414m4_text_videoram_w)).umask16(0x00ff);
+ map(0x068000, 0x069fff).rw(FUNC(armedf_state::text_videoram_r), FUNC(armedf_state::text_videoram_w)).umask16(0x00ff).share("text_videoram");
map(0x06a000, 0x06a9ff).ram();
map(0x06c000, 0x06cfff).ram().share("spr_pal_clut");
- map(0x070000, 0x070fff).ram().w(FUNC(armedf_state::armedf_fg_videoram_w)).share("fg_videoram");
- map(0x074000, 0x074fff).ram().w(FUNC(armedf_state::armedf_bg_videoram_w)).share("bg_videoram");
+ map(0x070000, 0x070fff).ram().w(FUNC(armedf_state::fg_videoram_w)).share("fg_videoram");
+ map(0x074000, 0x074fff).ram().w(FUNC(armedf_state::bg_videoram_w)).share("bg_videoram");
map(0x078000, 0x078001).portr("P1");
map(0x078002, 0x078003).portr("P2");
map(0x078004, 0x078005).portr("DSW1");
map(0x078006, 0x078007).portr("DSW2");
// map(0x07c000, 0x07c001).w(FUNC(armedf_state::terraf_io_w)); handled in DRIVER_INIT
- map(0x07c002, 0x07c003).w(FUNC(armedf_state::armedf_bg_scrollx_w));
- map(0x07c004, 0x07c005).w(FUNC(armedf_state::armedf_bg_scrolly_w));
- map(0x07c00a, 0x07c00b).w(FUNC(armedf_state::sound_command_w));
+ map(0x07c002, 0x07c003).w(FUNC(armedf_state::bg_scrollx_w));
+ map(0x07c004, 0x07c005).w(FUNC(armedf_state::bg_scrolly_w));
+ map(0x07c00b, 0x07c00b).w(FUNC(armedf_state::sound_command_w));
map(0x07c00c, 0x07c00d).nopw(); /* Watchdog ? cycle 0000 -> 0100 -> 0200 back to 0000 */
map(0x07c00e, 0x07c00f).w(FUNC(armedf_state::irq_lv1_ack_w));
}
-void armedf_state::terraf_map(address_map &map)
+void armedf_state::terraf_common_map(address_map &map)
{
common_map(map);
map(0x060000, 0x0603ff).ram().share("spriteram");
map(0x060400, 0x063fff).ram();
}
+void armedf_state::terraf_map(address_map &map)
+{
+ terraf_common_map(map);
+ map(0x07c000, 0x07c001).w(FUNC(armedf_state::terraf_io_w));
+}
+
+void armedf_state::terrafb_map(address_map &map)
+{
+ terraf_common_map(map);
+ map(0x07c000, 0x07c001).w(FUNC(armedf_state::armedf_io_w));
+ map(0x07c006, 0x07c006).w(FUNC(armedf_state::terrafb_fg_scrolly_w));
+ map(0x07c008, 0x07c008).w(FUNC(armedf_state::terrafb_fg_scrollx_w));
+ map(0x0c0000, 0x0c0000).w(FUNC(armedf_state::terrafb_fg_scroll_msb_arm_w));
+}
+
+void armedf_state::terrafjb_map(address_map &map)
+{
+ terraf_common_map(map);
+ map(0x07c000, 0x07c001).w(FUNC(armedf_state::terrafjb_io_w));
+}
+
void armedf_state::kozure_map(address_map &map)
{
common_map(map);
map(0x060000, 0x060fff).ram().share("spriteram");
map(0x061000, 0x063fff).ram();
-// map(0x07c000, 0x07c001).w(FUNC(armedf_state::kozure_io_w));
+ map(0x07c000, 0x07c001).w(FUNC(armedf_state::terraf_io_w));
// map(0x0c0000, 0x0c0001).nopw(); /* watchdog? */
// map(0xffd000, 0xffd001).nopw(); /* passes crc ROM information to MCU, I guess */
}
@@ -466,19 +481,19 @@ void armedf_state::cclimbr2_map(address_map &map)
map(0x060000, 0x060fff).ram().share("spriteram");
map(0x061000, 0x063fff).ram();
map(0x064000, 0x064fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
- map(0x068000, 0x069fff).rw(FUNC(armedf_state::nb1414m4_text_videoram_r), FUNC(armedf_state::nb1414m4_text_videoram_w)).umask16(0x00ff);
+ map(0x068000, 0x069fff).rw(FUNC(armedf_state::text_videoram_r), FUNC(armedf_state::text_videoram_w)).umask16(0x00ff).share("text_videoram");
map(0x06a000, 0x06a9ff).ram();
map(0x06c000, 0x06cfff).ram().share("spr_pal_clut");
- map(0x070000, 0x070fff).ram().w(FUNC(armedf_state::armedf_fg_videoram_w)).share("fg_videoram");
- map(0x074000, 0x074fff).ram().w(FUNC(armedf_state::armedf_bg_videoram_w)).share("bg_videoram");
+ map(0x070000, 0x070fff).ram().w(FUNC(armedf_state::fg_videoram_w)).share("fg_videoram");
+ map(0x074000, 0x074fff).ram().w(FUNC(armedf_state::bg_videoram_w)).share("bg_videoram");
map(0x078000, 0x078001).portr("P1");
map(0x078002, 0x078003).portr("P2");
map(0x078004, 0x078005).portr("DSW1");
map(0x078006, 0x078007).portr("DSW2");
-// map(0x07c000, 0x07c001).w(FUNC(armedf_state::io_w));
- map(0x07c002, 0x07c003).w(FUNC(armedf_state::armedf_bg_scrollx_w));
- map(0x07c004, 0x07c005).w(FUNC(armedf_state::armedf_bg_scrolly_w));
- map(0x07c00a, 0x07c00b).w(FUNC(armedf_state::sound_command_w));
+ map(0x07c000, 0x07c001).w(FUNC(armedf_state::terraf_io_w));
+ map(0x07c002, 0x07c003).w(FUNC(armedf_state::bg_scrollx_w));
+ map(0x07c004, 0x07c005).w(FUNC(armedf_state::bg_scrolly_w));
+ map(0x07c00b, 0x07c00b).w(FUNC(armedf_state::sound_command_w));
map(0x07c00c, 0x07c00d).nopw(); /* Watchdog ? cycle 0000 -> 0100 -> 0200 back to 0000 */
map(0x07c00e, 0x07c00f).w(FUNC(armedf_state::irq_lv2_ack_w));
}
@@ -491,15 +506,15 @@ void armedf_state::legion_common_map(address_map &map)
map(0x064000, 0x064fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x06a000, 0x06a9ff).ram();
map(0x06c000, 0x06cfff).ram().share("spr_pal_clut");
- map(0x070000, 0x070fff).ram().w(FUNC(armedf_state::armedf_fg_videoram_w)).share("fg_videoram");
- map(0x074000, 0x074fff).ram().w(FUNC(armedf_state::armedf_bg_videoram_w)).share("bg_videoram");
+ map(0x070000, 0x070fff).ram().w(FUNC(armedf_state::fg_videoram_w)).share("fg_videoram");
+ map(0x074000, 0x074fff).ram().w(FUNC(armedf_state::bg_videoram_w)).share("bg_videoram");
map(0x078000, 0x078001).portr("P1");
map(0x078002, 0x078003).portr("P2");
map(0x078004, 0x078005).portr("DSW1");
map(0x078006, 0x078007).portr("DSW2");
- map(0x07c002, 0x07c003).w(FUNC(armedf_state::armedf_bg_scrollx_w));
- map(0x07c004, 0x07c005).w(FUNC(armedf_state::armedf_bg_scrolly_w));
- map(0x07c00a, 0x07c00b).w(FUNC(armedf_state::sound_command_w));
+ map(0x07c002, 0x07c003).w(FUNC(armedf_state::bg_scrollx_w));
+ map(0x07c004, 0x07c005).w(FUNC(armedf_state::bg_scrolly_w));
+ map(0x07c00b, 0x07c00b).w(FUNC(armedf_state::sound_command_w));
map(0x07c00c, 0x07c00d).nopw(); /* Watchdog ? cycle 0000 -> 0100 -> 0200 back to 0000 */
map(0x07c00e, 0x07c00f).w(FUNC(armedf_state::irq_lv2_ack_w));
}
@@ -508,13 +523,13 @@ void armedf_state::legion_map(address_map &map)
{
legion_common_map(map);
- map(0x068000, 0x069fff).rw(FUNC(armedf_state::nb1414m4_text_videoram_r), FUNC(armedf_state::nb1414m4_text_videoram_w)).umask16(0x00ff);
+ map(0x068000, 0x069fff).rw(FUNC(armedf_state::text_videoram_r), FUNC(armedf_state::text_videoram_w)).umask16(0x00ff).share("text_videoram");
map(0x07c000, 0x07c001).w(FUNC(armedf_state::terraf_io_w));
}
-WRITE8_MEMBER(armedf_state::legionjb_fg_scroll_w)
+void armedf_state::legionjb_fg_scroll_w(offs_t offset, u8 data)
{
- if(offset >= 0xb && offset < 0xf)
+ if (offset >= 0xb && offset < 0xf)
m_legion_cmd[offset-0xb] = data & 0xff;
m_fg_scrollx = (m_legion_cmd[0x02] & 0xff) | ((m_legion_cmd[0x03] & 0x3) << 8);
@@ -526,8 +541,8 @@ void armedf_state::legionjb_map(address_map &map)
legion_common_map(map);
map(0x040000, 0x04003f).w(FUNC(armedf_state::legionjb_fg_scroll_w)).umask16(0x00ff);
- map(0x068000, 0x069fff).rw(FUNC(armedf_state::armedf_text_videoram_r), FUNC(armedf_state::armedf_text_videoram_w)).umask16(0x00ff);
- map(0x07c000, 0x07c001).w(FUNC(armedf_state::bootleg_io_w));
+ map(0x068000, 0x069fff).rw(FUNC(armedf_state::text_videoram_r), FUNC(armedf_state::text_videoram_w)).umask16(0x00ff).share("text_videoram");
+ map(0x07c000, 0x07c001).w(FUNC(armedf_state::armedf_io_w));
}
void armedf_state::legionjb2_map(address_map &map)
@@ -535,8 +550,8 @@ void armedf_state::legionjb2_map(address_map &map)
legion_common_map(map);
map(0x000000, 0x00003f).w(FUNC(armedf_state::legionjb_fg_scroll_w)).umask16(0x00ff);
- map(0x068000, 0x069fff).rw(FUNC(armedf_state::armedf_text_videoram_r), FUNC(armedf_state::armedf_text_videoram_w)).umask16(0x00ff);
- map(0x07c000, 0x07c001).w(FUNC(armedf_state::bootleg_io_w));
+ map(0x068000, 0x069fff).rw(FUNC(armedf_state::text_videoram_r), FUNC(armedf_state::text_videoram_w)).umask16(0x00ff).share("text_videoram");
+ map(0x07c000, 0x07c001).w(FUNC(armedf_state::armedf_io_w));
//also writes to 7c0010 / 70c020 / 70c030. These could possibly be the scroll registers on this bootleg and the writes to 000000 - 00003f could just be leftovers.
}
@@ -545,9 +560,9 @@ void armedf_state::armedf_map(address_map &map)
map(0x000000, 0x05ffff).rom();
map(0x060000, 0x060fff).ram().share("spriteram");
map(0x061000, 0x065fff).ram();
- map(0x066000, 0x066fff).ram().w(FUNC(armedf_state::armedf_bg_videoram_w)).share("bg_videoram");
- map(0x067000, 0x067fff).ram().w(FUNC(armedf_state::armedf_fg_videoram_w)).share("fg_videoram");
- map(0x068000, 0x069fff).rw(FUNC(armedf_state::armedf_text_videoram_r), FUNC(armedf_state::armedf_text_videoram_w)).umask16(0x00ff);
+ map(0x066000, 0x066fff).ram().w(FUNC(armedf_state::bg_videoram_w)).share("bg_videoram");
+ map(0x067000, 0x067fff).ram().w(FUNC(armedf_state::fg_videoram_w)).share("fg_videoram");
+ map(0x068000, 0x069fff).rw(FUNC(armedf_state::text_videoram_r), FUNC(armedf_state::text_videoram_w)).umask16(0x00ff).share("text_videoram");
map(0x06a000, 0x06afff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x06b000, 0x06bfff).ram().share("spr_pal_clut");
map(0x06c000, 0x06c7ff).ram();
@@ -555,33 +570,34 @@ void armedf_state::armedf_map(address_map &map)
map(0x06c002, 0x06c003).portr("P2");
map(0x06c004, 0x06c005).portr("DSW1");
map(0x06c006, 0x06c007).portr("DSW2");
- map(0x06d000, 0x06d001).w(FUNC(armedf_state::terraf_io_w));
- map(0x06d002, 0x06d003).w(FUNC(armedf_state::armedf_bg_scrollx_w));
- map(0x06d004, 0x06d005).w(FUNC(armedf_state::armedf_bg_scrolly_w));
- map(0x06d006, 0x06d007).w(FUNC(armedf_state::armedf_fg_scrollx_w));
- map(0x06d008, 0x06d009).w(FUNC(armedf_state::armedf_fg_scrolly_w));
- map(0x06d00a, 0x06d00b).w(FUNC(armedf_state::sound_command_w));
+ map(0x06d000, 0x06d001).w(FUNC(armedf_state::armedf_io_w));
+ map(0x06d002, 0x06d003).w(FUNC(armedf_state::bg_scrollx_w));
+ map(0x06d004, 0x06d005).w(FUNC(armedf_state::bg_scrolly_w));
+ map(0x06d006, 0x06d007).w(FUNC(armedf_state::fg_scrollx_w));
+ map(0x06d008, 0x06d009).w(FUNC(armedf_state::fg_scrolly_w));
+ map(0x06d00b, 0x06d00b).w(FUNC(armedf_state::sound_command_w));
map(0x06d00c, 0x06d00d).nopw(); //watchdog?
map(0x06d00e, 0x06d00f).w(FUNC(armedf_state::irq_lv1_ack_w));
}
-READ16_MEMBER(bigfghtr_state::latch_r)
+u16 bigfghtr_state::latch_r()
{
- m_mcu->set_input_line(MCS51_INT0_LINE, HOLD_LINE);
+ if (!machine().side_effects_disabled())
+ m_mcu->set_input_line(MCS51_INT0_LINE, HOLD_LINE);
return 0;
}
-READ8_MEMBER(bigfghtr_state::main_sharedram_r)
+u8 bigfghtr_state::main_sharedram_r(offs_t offset)
{
return m_sharedram[offset];
}
-WRITE8_MEMBER(bigfghtr_state::main_sharedram_w)
+void bigfghtr_state::main_sharedram_w(offs_t offset, u8 data)
{
m_sharedram[offset] = data;
}
-WRITE8_MEMBER(bigfghtr_state::mcu_spritelist_w)
+void bigfghtr_state::mcu_spritelist_w(offs_t offset, u8 data)
{
// add a warning in case it happens for now.
popmessage("MCU access spritelist %04x = %02x, contact MAMEdev",offset,data);
@@ -593,21 +609,21 @@ void bigfghtr_state::bigfghtr_map(address_map &map)
map(0x080000, 0x0805ff).ram().share("spriteram");
map(0x080600, 0x083fff).rw(FUNC(bigfghtr_state::main_sharedram_r), FUNC(bigfghtr_state::main_sharedram_w));
map(0x084000, 0x085fff).ram(); //work ram
- map(0x086000, 0x086fff).ram().w(FUNC(bigfghtr_state::armedf_bg_videoram_w)).share("bg_videoram");
- map(0x087000, 0x087fff).ram().w(FUNC(bigfghtr_state::armedf_fg_videoram_w)).share("fg_videoram");
- map(0x088000, 0x089fff).rw(FUNC(bigfghtr_state::armedf_text_videoram_r), FUNC(bigfghtr_state::armedf_text_videoram_w)).umask16(0x00ff);
+ map(0x086000, 0x086fff).ram().w(FUNC(bigfghtr_state::bg_videoram_w)).share("bg_videoram");
+ map(0x087000, 0x087fff).ram().w(FUNC(bigfghtr_state::fg_videoram_w)).share("fg_videoram");
+ map(0x088000, 0x089fff).rw(FUNC(bigfghtr_state::text_videoram_r), FUNC(bigfghtr_state::text_videoram_w)).umask16(0x00ff).share("text_videoram");
map(0x08a000, 0x08afff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x08b000, 0x08bfff).ram().share("spr_pal_clut");
map(0x08c000, 0x08c001).portr("P1");
map(0x08c002, 0x08c003).portr("P2");
map(0x08c004, 0x08c005).portr("DSW0");
map(0x08c006, 0x08c007).portr("DSW1");
- map(0x08d000, 0x08d001).w(FUNC(bigfghtr_state::terraf_io_w)); //807b0
- map(0x08d002, 0x08d003).w(FUNC(bigfghtr_state::armedf_bg_scrollx_w));
- map(0x08d004, 0x08d005).w(FUNC(bigfghtr_state::armedf_bg_scrolly_w));
- map(0x08d006, 0x08d007).w(FUNC(bigfghtr_state::armedf_fg_scrollx_w));
- map(0x08d008, 0x08d009).w(FUNC(bigfghtr_state::armedf_fg_scrolly_w));
- map(0x08d00a, 0x08d00b).w(FUNC(bigfghtr_state::sound_command_w));
+ map(0x08d000, 0x08d001).w(FUNC(bigfghtr_state::armedf_io_w)); //807b0
+ map(0x08d002, 0x08d003).w(FUNC(bigfghtr_state::bg_scrollx_w));
+ map(0x08d004, 0x08d005).w(FUNC(bigfghtr_state::bg_scrolly_w));
+ map(0x08d006, 0x08d007).w(FUNC(bigfghtr_state::fg_scrollx_w));
+ map(0x08d008, 0x08d009).w(FUNC(bigfghtr_state::fg_scrolly_w));
+ map(0x08d00b, 0x08d00b).w(FUNC(bigfghtr_state::sound_command_w));
map(0x08d00c, 0x08d00d).nopw(); //watchdog
map(0x08d00e, 0x08d00f).w(FUNC(bigfghtr_state::irq_lv1_ack_w));
@@ -637,28 +653,24 @@ void armedf_state::cclimbr2_soundmap(address_map &map)
map(0xc000, 0xffff).ram();
}
-READ8_MEMBER(armedf_state::blitter_txram_r)
-{
- return m_text_videoram[offset];
-}
-
-WRITE8_MEMBER(armedf_state::blitter_txram_w)
+void armedf_state::blitter_txram_w(offs_t offset, u8 data)
{
m_text_videoram[offset] = data;
- m_tx_tilemap->mark_tile_dirty(offset);
+ if (offset < 0x1000)
+ m_tx_tilemap->mark_tile_dirty(offset & 0x7ff);
}
-WRITE8_MEMBER(armedf_state::fg_scrollx_w)
+void armedf_state::terrafjb_fg_scrollx_w(u8 data)
{
m_fg_scrollx = (data & 0xff) | (m_fg_scrollx & 0x300);
}
-WRITE8_MEMBER(armedf_state::fg_scrolly_w)
+void armedf_state::terrafjb_fg_scrolly_w(u8 data)
{
m_fg_scrolly = (data & 0xff) | (m_fg_scrolly & 0x300);
}
-WRITE8_MEMBER(armedf_state::fg_scroll_msb_w)
+void armedf_state::terrafjb_fg_scroll_msb_w(u8 data)
{
m_fg_scrolly = (((data & 0x03) >> 0) << 8) | (m_fg_scrolly & 0xff);
m_fg_scrollx = (((data & 0x0c) >> 2) << 8) | (m_fg_scrollx & 0xff);
@@ -668,16 +680,16 @@ WRITE8_MEMBER(armedf_state::fg_scroll_msb_w)
void armedf_state::terrafjb_extraz80_map(address_map &map)
{
map(0x0000, 0x3fff).rom();
- map(0x4000, 0x5fff).rw(FUNC(armedf_state::blitter_txram_r), FUNC(armedf_state::blitter_txram_w));
+ map(0x4000, 0x5fff).ram().w(FUNC(armedf_state::blitter_txram_w)).share("text_videoram");
map(0x8000, 0x87ff).ram();
}
void armedf_state::terrafjb_extraz80_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0x00).w(FUNC(armedf_state::fg_scrollx_w));
- map(0x01, 0x01).w(FUNC(armedf_state::fg_scrolly_w));
- map(0x02, 0x02).w(FUNC(armedf_state::fg_scroll_msb_w));
+ map(0x00, 0x00).w(FUNC(armedf_state::terrafjb_fg_scrollx_w));
+ map(0x01, 0x01).w(FUNC(armedf_state::terrafjb_fg_scrolly_w));
+ map(0x02, 0x02).w(FUNC(armedf_state::terrafjb_fg_scroll_msb_w));
}
void armedf_state::sound_portmap(address_map &map)
@@ -1037,52 +1049,14 @@ INPUT_PORTS_END
*
*************************************/
-static const gfx_layout char_layout =
-{
- 8,8,
- RGN_FRAC(1,1),
- 4,
- { 0, 1, 2, 3 },
- { 4, 0, 12, 8, 20, 16, 28, 24},
- { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
- 32*8
-};
-
-static const gfx_layout tile_layout =
-{
- 16,16,
- RGN_FRAC(1,1),
- 4,
- { 0, 1, 2, 3 },
- { 4, 0, 12, 8, 20, 16, 28, 24,
- 32+4, 32+0, 32+12, 32+8, 32+20, 32+16, 32+28, 32+24 },
- { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
- 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
- 128*8
-};
-
-static const gfx_layout sprite_layout =
-{
- 16,16,
- RGN_FRAC(1,2),
- 4,
- { 0, 1, 2, 3 },
- { 4, 0, RGN_FRAC(1,2)+4, RGN_FRAC(1,2)+0, 12, 8, RGN_FRAC(1,2)+12, RGN_FRAC(1,2)+8,
- 20, 16, RGN_FRAC(1,2)+20, RGN_FRAC(1,2)+16, 28, 24, RGN_FRAC(1,2)+28, RGN_FRAC(1,2)+24 },
- { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
- 8*32, 9*32, 10*32, 11*32, 12*32, 13*32, 14*32, 15*32 },
- 64*8
-};
-
static GFXDECODE_START( gfx_armedf )
- GFXDECODE_ENTRY( "gfx1", 0, char_layout, 0*16, 32 )
- GFXDECODE_ENTRY( "gfx2", 0, tile_layout, 64*16, 32 )
- GFXDECODE_ENTRY( "gfx3", 0, tile_layout, 96*16, 32 )
- GFXDECODE_ENTRY( "gfx4", 0, sprite_layout, 32*16, 32 )
+ GFXDECODE_ENTRY( "text", 0, gfx_8x8x4_packed_lsb, 0*16, 32 )
+ GFXDECODE_ENTRY( "foreground", 0, gfx_16x16x4_packed_lsb, 64*16, 32 )
+ GFXDECODE_ENTRY( "background", 0, gfx_16x16x4_packed_lsb, 96*16, 32 )
+ GFXDECODE_ENTRY( "sprite", 0, gfx_16x16x4_packed_lsb, 32*16, 32 )
GFXDECODE_END
-
/*************************************
*
* Machine driver
@@ -1121,7 +1095,7 @@ void armedf_state::video_config(machine_config &config, int hchar_start, int vst
// TODO: bootlegs may not run at this speed
m_screen->set_raw(XTAL(16'000'000)/2,531,hchar_start*8,(64-hchar_start)*8, 255, vstart, vend);
m_screen->set_palette(m_palette);
- m_screen->set_screen_update(FUNC(armedf_state::screen_update_armedf));
+ m_screen->set_screen_update(FUNC(armedf_state::screen_update));
m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_armedf);
@@ -1168,7 +1142,7 @@ void armedf_state::terraf(machine_config &config)
void armedf_state::terrafjb(machine_config &config)
{
M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8mhz
- m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::terraf_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::terrafjb_map);
m_maincpu->set_vblank_int("screen", FUNC(armedf_state::irq1_line_assert));
z80_device &audiocpu(Z80(config, "audiocpu", XTAL(24'000'000)/6)); // 4mhz
@@ -1200,6 +1174,7 @@ void armedf_state::terrafjb(machine_config &config)
void armedf_state::terrafb(machine_config &config)
{
terraf(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &armedf_state::terrafb_map);
config.device_remove("nb1414m4");
}
@@ -1344,7 +1319,7 @@ void bigfghtr_state::bigfghtr(machine_config &config)
mcu.port_in_cb<1>().set_constant(0xdf); // bit 5: bus contention related?
video_config(config, 12, 8, 248);
- MCFG_VIDEO_START_OVERRIDE(armedf_state,armedf)
+ MCFG_VIDEO_START_OVERRIDE(bigfghtr_state,armedf)
sound_config(config);
}
@@ -1366,19 +1341,19 @@ ROM_START( legion )
ROM_LOAD( "legion.1h", 0x00000, 0x04000, CRC(2ca4f7f0) SHA1(7cf997af9dd74ced9d28c047069ccfb67d72e257) ) // lg9
ROM_LOAD( "legion.1i", 0x04000, 0x08000, CRC(79f4a827) SHA1(25e4c1b5b8466627244b7226310e67e4261333b6) ) // lg10
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "lg8.bin", 0x00000, 0x08000, CRC(e0596570) SHA1(68ddc950efc55a16e6abc699e3bad18ea19d579f) )
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "legion.1e", 0x00000, 0x10000, CRC(a9d70faf) SHA1(8b8b60ae49c55e931d6838e863463f6b2bf7adb0) ) // lg5
ROM_LOAD( "legion.1f", 0x18000, 0x08000, CRC(f018313b) SHA1(860bc9937202dc3a40c9fa7caad11c2c2aa19f5c) ) // lg6
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "legion.1l", 0x00000, 0x10000, CRC(29b8adaa) SHA1(10338ebe7324960683de1f796dd311ed662e42b4) ) // lg13
- ROM_REGION( 0x20000, "gfx4", 0 )
- ROM_LOAD( "legion.1k", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) ) // lg12
- ROM_LOAD( "legion.1j", 0x010000, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) ) // lg11
+ ROM_REGION( 0x20000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "legion.1k", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) ) // lg12
+ ROM_LOAD16_BYTE( "legion.1j", 0x000001, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) ) // lg11
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
ROM_LOAD ( "lg7.bin", 0x0000, 0x4000, CRC(533e2b58) SHA1(a13ea4a530038760ffa87713903c59a932452717) )
@@ -1395,19 +1370,19 @@ ROM_START( legionj )
ROM_LOAD( "legion.1h", 0x00000, 0x04000, CRC(2ca4f7f0) SHA1(7cf997af9dd74ced9d28c047069ccfb67d72e257) )
ROM_LOAD( "legion.1i", 0x04000, 0x08000, CRC(79f4a827) SHA1(25e4c1b5b8466627244b7226310e67e4261333b6) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "legion.1g", 0x00000, 0x08000, CRC(c50b0125) SHA1(83b5e9707152d97777fb65fa8820ba34ec2fac8d) )
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "legion.1e", 0x00000, 0x10000, CRC(a9d70faf) SHA1(8b8b60ae49c55e931d6838e863463f6b2bf7adb0) )
ROM_LOAD( "legion.1f", 0x18000, 0x08000, CRC(f018313b) SHA1(860bc9937202dc3a40c9fa7caad11c2c2aa19f5c) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "legion.1l", 0x00000, 0x10000, CRC(29b8adaa) SHA1(10338ebe7324960683de1f796dd311ed662e42b4) )
- ROM_REGION( 0x20000, "gfx4", 0 )
- ROM_LOAD( "legion.1k", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) )
- ROM_LOAD( "legion.1j", 0x010000, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) )
+ ROM_REGION( 0x20000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "legion.1k", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) )
+ ROM_LOAD16_BYTE( "legion.1j", 0x000001, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) )
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
ROM_LOAD ( "lg7.bin", 0x0000, 0x4000, CRC(533e2b58) SHA1(a13ea4a530038760ffa87713903c59a932452717) )
@@ -1424,19 +1399,19 @@ ROM_START( legionjb )
ROM_LOAD( "legion.1h", 0x00000, 0x04000, CRC(2ca4f7f0) SHA1(7cf997af9dd74ced9d28c047069ccfb67d72e257) )
ROM_LOAD( "legion.1i", 0x04000, 0x08000, CRC(79f4a827) SHA1(25e4c1b5b8466627244b7226310e67e4261333b6) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "legion.1g", 0x00000, 0x08000, CRC(c50b0125) SHA1(83b5e9707152d97777fb65fa8820ba34ec2fac8d) )
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "legion.1e", 0x00000, 0x10000, CRC(a9d70faf) SHA1(8b8b60ae49c55e931d6838e863463f6b2bf7adb0) )
ROM_LOAD( "legion.1f", 0x18000, 0x08000, CRC(f018313b) SHA1(860bc9937202dc3a40c9fa7caad11c2c2aa19f5c) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "legion.1l", 0x00000, 0x10000, CRC(29b8adaa) SHA1(10338ebe7324960683de1f796dd311ed662e42b4) )
- ROM_REGION( 0x20000, "gfx4", 0 )
- ROM_LOAD( "legion.1k", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) )
- ROM_LOAD( "legion.1j", 0x010000, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) )
+ ROM_REGION( 0x20000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "legion.1k", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) )
+ ROM_LOAD16_BYTE( "legion.1j", 0x000001, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) )
ROM_END
ROM_START( legionjb2 )
@@ -1450,19 +1425,19 @@ ROM_START( legionjb2 )
ROM_LOAD( "9-legion-24128.h15", 0x00000, 0x04000, CRC(2ca4f7f0) SHA1(7cf997af9dd74ced9d28c047069ccfb67d72e257) )
ROM_LOAD( "8-legion-24256.h17", 0x04000, 0x08000, CRC(79f4a827) SHA1(25e4c1b5b8466627244b7226310e67e4261333b6) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "7-legion-24256.c9", 0x00000, 0x08000, CRC(c50b0125) SHA1(83b5e9707152d97777fb65fa8820ba34ec2fac8d) )
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "2-legion-27512.e12", 0x00000, 0x10000, CRC(a9d70faf) SHA1(8b8b60ae49c55e931d6838e863463f6b2bf7adb0) )
ROM_LOAD( "1-legion-24256.e14", 0x18000, 0x08000, CRC(f018313b) SHA1(860bc9937202dc3a40c9fa7caad11c2c2aa19f5c) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "10-legion-27512.e15", 0x00000, 0x10000, CRC(29b8adaa) SHA1(10338ebe7324960683de1f796dd311ed662e42b4) )
- ROM_REGION( 0x20000, "gfx4", 0 )
- ROM_LOAD( "11-legion-27512.e10", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) )
- ROM_LOAD( "12-legion-27512.e7", 0x010000, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) )
+ ROM_REGION( 0x20000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "11-legion-27512.e10", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) )
+ ROM_LOAD16_BYTE( "12-legion-27512.e7", 0x000001, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) )
ROM_END
ROM_START( terraf )
@@ -1477,20 +1452,20 @@ ROM_START( terraf )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */
ROM_LOAD( "11.17k", 0x00000, 0x10000, CRC(4407d475) SHA1(96e86c7ef4dc997812436f7d0ddea332b4e6cb2b) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "9.11e", 0x00000, 0x08000, CRC(bc6f7cbc) SHA1(20b8a34de4bfa0c2fdcd2f7743a0ab35141f4bf9) ) /* characters */
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "5.15h", 0x00000, 0x10000, CRC(25d23dfd) SHA1(da32895c1aca403209b7fb181fa4fa23a8e74d32) ) /* foreground tiles */
ROM_LOAD( "4.13h", 0x10000, 0x10000, CRC(b9b0fe27) SHA1(983c48239ba1524b517f89f281f2b70564bea1e9) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "15.8a", 0x00000, 0x10000, CRC(2144d8e0) SHA1(ed89da11abf3d79753b478603009970c2600ab60) ) /* background tiles */
ROM_LOAD( "14.6a", 0x10000, 0x10000, CRC(744f5c9e) SHA1(696223a087bb575c7cfaba11e682b221ada461e4) )
- ROM_REGION( 0x20000, "gfx4", 0 )
- ROM_LOAD( "12.7d", 0x00000, 0x10000, CRC(2d1f2ceb) SHA1(77544e1c4bda06feac135a96bb76af7c79278dc0) ) /* sprites */
- ROM_LOAD( "13.9d", 0x10000, 0x10000, CRC(1d2f92d6) SHA1(e842c6bf95a5958a6ca2c85e68b9bc3cc15211a4) )
+ ROM_REGION( 0x20000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "12.7d", 0x00000, 0x10000, CRC(2d1f2ceb) SHA1(77544e1c4bda06feac135a96bb76af7c79278dc0) ) /* sprites */
+ ROM_LOAD16_BYTE( "13.9d", 0x00001, 0x10000, CRC(1d2f92d6) SHA1(e842c6bf95a5958a6ca2c85e68b9bc3cc15211a4) )
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) )
@@ -1511,20 +1486,20 @@ ROM_START( terrafu ) /* Bootleg of the USA version?, uses some roms common to bo
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */
ROM_LOAD( "tf-001.17k", 0x00000, 0x10000, CRC(eb6b4138) SHA1(04c53bf46d87a156d3fad86f051985d0df79bd20) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "9.11e", 0x00000, 0x08000, CRC(bc6f7cbc) SHA1(20b8a34de4bfa0c2fdcd2f7743a0ab35141f4bf9) ) /* characters */
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "5.15h", 0x00000, 0x10000, CRC(25d23dfd) SHA1(da32895c1aca403209b7fb181fa4fa23a8e74d32) ) /* foreground tiles */
ROM_LOAD( "4.13h", 0x10000, 0x10000, CRC(b9b0fe27) SHA1(983c48239ba1524b517f89f281f2b70564bea1e9) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "15.8a", 0x00000, 0x10000, CRC(2144d8e0) SHA1(ed89da11abf3d79753b478603009970c2600ab60) ) /* background tiles */
ROM_LOAD( "14.6a", 0x10000, 0x10000, CRC(744f5c9e) SHA1(696223a087bb575c7cfaba11e682b221ada461e4) )
- ROM_REGION( 0x20000, "gfx4", 0 )
- ROM_LOAD( "tf-003.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
- ROM_LOAD( "tf-002.9d", 0x10000, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
+ ROM_REGION( 0x20000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "tf-003.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
+ ROM_LOAD16_BYTE( "tf-002.9d", 0x00001, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) )
@@ -1545,20 +1520,20 @@ ROM_START( terrafj )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */
ROM_LOAD( "11.17k", 0x00000, 0x10000, CRC(4407d475) SHA1(96e86c7ef4dc997812436f7d0ddea332b4e6cb2b) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "9.11e", 0x00000, 0x08000, CRC(bc6f7cbc) SHA1(20b8a34de4bfa0c2fdcd2f7743a0ab35141f4bf9) ) /* characters */
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "5.15h", 0x00000, 0x10000, CRC(25d23dfd) SHA1(da32895c1aca403209b7fb181fa4fa23a8e74d32) ) /* foreground tiles */
ROM_LOAD( "4.13h", 0x10000, 0x10000, CRC(b9b0fe27) SHA1(983c48239ba1524b517f89f281f2b70564bea1e9) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "15.8a", 0x00000, 0x10000, CRC(2144d8e0) SHA1(ed89da11abf3d79753b478603009970c2600ab60) ) /* background tiles */
ROM_LOAD( "14.6a", 0x10000, 0x10000, CRC(744f5c9e) SHA1(696223a087bb575c7cfaba11e682b221ada461e4) )
- ROM_REGION( 0x20000, "gfx4", 0 )
- ROM_LOAD( "tfj-12.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
- ROM_LOAD( "tfj-13.9d", 0x10000, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
+ ROM_REGION( 0x20000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "tfj-12.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
+ ROM_LOAD16_BYTE( "tfj-13.9d", 0x00001, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) )
@@ -1612,20 +1587,20 @@ ROM_START( terrafjb )
ROM_REGION( 0x4000, "extra", 0 ) /* z80 program (replacement mcu/blitter) */
ROM_LOAD( "tfb-10.bin", 0x0000, 0x4000, CRC(3f9aa367) SHA1(8278fb357b2d68869e39efa01ff19005807b41f8) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "9.11e", 0x00000, 0x08000, CRC(bc6f7cbc) SHA1(20b8a34de4bfa0c2fdcd2f7743a0ab35141f4bf9) ) /* characters */
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "5.15h", 0x00000, 0x10000, CRC(25d23dfd) SHA1(da32895c1aca403209b7fb181fa4fa23a8e74d32) ) /* foreground tiles */
ROM_LOAD( "4.13h", 0x10000, 0x10000, CRC(b9b0fe27) SHA1(983c48239ba1524b517f89f281f2b70564bea1e9) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "15.8a", 0x00000, 0x10000, CRC(2144d8e0) SHA1(ed89da11abf3d79753b478603009970c2600ab60) ) /* background tiles */
ROM_LOAD( "14.6a", 0x10000, 0x10000, CRC(744f5c9e) SHA1(696223a087bb575c7cfaba11e682b221ada461e4) )
- ROM_REGION( 0x20000, "gfx4", 0 )
- ROM_LOAD( "tfj-12.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
- ROM_LOAD( "tfj-13.9d", 0x10000, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
+ ROM_REGION( 0x20000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "tfj-12.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
+ ROM_LOAD16_BYTE( "tfj-13.9d", 0x00001, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
ROM_REGION( 0x0100, "proms", 0 ) /* Unknown use */
ROM_LOAD( "n82s129an.11j", 0x0000, 0x0100, CRC(81244757) SHA1(6324f63e571f0f7a0bb9eb97f9994809db79493f) ) /* N82S129AN or compatible labled "TF" */
@@ -1659,20 +1634,20 @@ ROM_START( terrafb )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */
ROM_LOAD( "f-1.1a", 0x00000, 0x10000, CRC(eb6b4138) SHA1(04c53bf46d87a156d3fad86f051985d0df79bd20) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "f-11.4g", 0x00000, 0x08000, CRC(bc6f7cbc) SHA1(20b8a34de4bfa0c2fdcd2f7743a0ab35141f4bf9) ) /* characters */
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "f-6.3c", 0x00000, 0x10000, CRC(25d23dfd) SHA1(da32895c1aca403209b7fb181fa4fa23a8e74d32) ) /* foreground tiles */
ROM_LOAD( "f-7.3e", 0x10000, 0x10000, CRC(b9b0fe27) SHA1(983c48239ba1524b517f89f281f2b70564bea1e9) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "f-4.9k", 0x00000, 0x10000, CRC(2144d8e0) SHA1(ed89da11abf3d79753b478603009970c2600ab60) ) /* background tiles */
ROM_LOAD( "f-5.9m", 0x10000, 0x10000, CRC(744f5c9e) SHA1(696223a087bb575c7cfaba11e682b221ada461e4) )
- ROM_REGION( 0x20000, "gfx4", 0 )
- ROM_LOAD( "f-3.6l", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
- ROM_LOAD( "f-2.6j", 0x10000, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
+ ROM_REGION( 0x20000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "f-3.6l", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
+ ROM_LOAD16_BYTE( "f-2.6j", 0x00001, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
ROM_END
ROM_START( kozure )
@@ -1687,19 +1662,19 @@ ROM_START( kozure )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */
ROM_LOAD( "kozure11.17k", 0x00000, 0x10000, CRC(dba51e2d) SHA1(49e799d39d298cd3e01602ae5a2d123dfbfa9134) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "kozure9.11e", 0x00000, 0x08000, CRC(e041356e) SHA1(3e4c8564e7a8c940bbe72db11759903aa295287f) ) /* characters */
- ROM_REGION( 0x40000, "gfx2", 0 )
+ ROM_REGION( 0x40000, "foreground", 0 )
ROM_LOAD( "kozure5.15h", 0x00000, 0x20000, CRC(0b510258) SHA1(e7ec89faa574b755605ddb67d6c908a9f5f2d6ac) ) /* foreground tiles */
ROM_LOAD( "kozure4.14h", 0x20000, 0x10000, CRC(fb8e13e6) SHA1(f2eafcf6d7362dc62e808f582a7bd2970e5e1ad1) )
- ROM_REGION( 0x10000, "gfx3", 0 )
+ ROM_REGION( 0x10000, "background", 0 )
ROM_LOAD( "kozure14.8a", 0x00000, 0x10000, CRC(94a9c3d0) SHA1(7a5d810ea370d158b2099c17f4d656fbd3deeac8) ) /* background tiles */
- ROM_REGION( 0x40000, "gfx4", 0 )
- ROM_LOAD( "kozure12.8d", 0x00000, 0x20000, CRC(15f4021d) SHA1(b2ba6fda1a7bdaae97de4b0157b9b656b4385e08) ) /* sprites */
- ROM_LOAD( "kozure13.9d", 0x20000, 0x20000, CRC(b3b6c753) SHA1(9ad061cac9558320b5cfd1ac1ac8d7f1788270cc) )
+ ROM_REGION( 0x40000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "kozure12.8d", 0x00000, 0x20000, CRC(15f4021d) SHA1(b2ba6fda1a7bdaae97de4b0157b9b656b4385e08) ) /* sprites */
+ ROM_LOAD16_BYTE( "kozure13.9d", 0x00001, 0x20000, CRC(b3b6c753) SHA1(9ad061cac9558320b5cfd1ac1ac8d7f1788270cc) )
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
ROM_LOAD( "kozure10.11c", 0x0000, 0x4000, CRC(f48be21d) SHA1(5d6db049f30cab98f672814a86a06609c1fa8fb4) )
@@ -1721,22 +1696,22 @@ ROM_START( cclimbr2 )
ROM_LOAD( "11.bin", 0x00000, 0x04000, CRC(fe0175be) SHA1(5c50fa07d8fa61d58a825bbc2cc5a7b85ff3e42e) )
ROM_LOAD( "12.bin", 0x04000, 0x08000, CRC(5ddf18f2) SHA1(b66da5ad400d00b07160986e4841a309a3572bd1) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "10.bin", 0x00000, 0x08000, CRC(7f475266) SHA1(73d544731fcfd7266bca451880120c555d19ea5d) ) /* characters */
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "7.bin", 0x00000, 0x10000, CRC(cbdd3906) SHA1(0525599a5981f1e25ec6faf008e547da7a9ee2cb) ) /* foreground tiles */
ROM_LOAD( "8.bin", 0x10000, 0x10000, CRC(b2a613c0) SHA1(1d92b85a0dd4b7e533677c454ec23359867defda) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "17.bin", 0x00000, 0x10000, CRC(e24bb2d7) SHA1(8f4b8410b77a50ae735d72f2f37e63784ebc10d9) ) /* background tiles */
ROM_LOAD( "18.bin", 0x10000, 0x10000, CRC(56834554) SHA1(6d579c32fb57eb4eddc062cb2cc78b546f6607b2) )
- ROM_REGION( 0x40000, "gfx4", 0 )
- ROM_LOAD( "15.bin", 0x00000, 0x10000, CRC(4bf838be) SHA1(6b1d7448caf406e47268a1276225bb0619b80cc9) ) /* sprites */
- ROM_LOAD( "16.bin", 0x10000, 0x10000, CRC(21a265c5) SHA1(a2b3a1e5aa545030d933c0f058f4f9a18e1af1c9) )
- ROM_LOAD( "13.bin", 0x20000, 0x10000, CRC(6b6ec999) SHA1(7749ce435f497732bd1b6958974cd95e960fc9fe) )
- ROM_LOAD( "14.bin", 0x30000, 0x10000, CRC(f426a4ad) SHA1(facccb21ca73c560d3a38e05e677782516d5b0c0) )
+ ROM_REGION( 0x40000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "15.bin", 0x00000, 0x10000, CRC(4bf838be) SHA1(6b1d7448caf406e47268a1276225bb0619b80cc9) ) /* sprites */
+ ROM_LOAD16_BYTE( "13.bin", 0x00001, 0x10000, CRC(6b6ec999) SHA1(7749ce435f497732bd1b6958974cd95e960fc9fe) )
+ ROM_LOAD16_BYTE( "16.bin", 0x20000, 0x10000, CRC(21a265c5) SHA1(a2b3a1e5aa545030d933c0f058f4f9a18e1af1c9) )
+ ROM_LOAD16_BYTE( "14.bin", 0x20001, 0x10000, CRC(f426a4ad) SHA1(facccb21ca73c560d3a38e05e677782516d5b0c0) )
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
ROM_LOAD( "9.bin", 0x0000, 0x4000, CRC(740d260f) SHA1(5b4487930c7a1fb0a796aec2243bec631b1b5104) )
@@ -1755,22 +1730,22 @@ ROM_START( cclimbr2a )
ROM_LOAD( "11.bin", 0x00000, 0x04000, CRC(fe0175be) SHA1(5c50fa07d8fa61d58a825bbc2cc5a7b85ff3e42e) )
ROM_LOAD( "12.bin", 0x04000, 0x08000, CRC(5ddf18f2) SHA1(b66da5ad400d00b07160986e4841a309a3572bd1) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "10.bin", 0x00000, 0x08000, CRC(7f475266) SHA1(73d544731fcfd7266bca451880120c555d19ea5d) ) /* characters */
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "7.bin", 0x00000, 0x10000, CRC(cbdd3906) SHA1(0525599a5981f1e25ec6faf008e547da7a9ee2cb) ) /* foreground tiles */
ROM_LOAD( "8.bin", 0x10000, 0x10000, CRC(b2a613c0) SHA1(1d92b85a0dd4b7e533677c454ec23359867defda) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "17.bin", 0x00000, 0x10000, CRC(e24bb2d7) SHA1(8f4b8410b77a50ae735d72f2f37e63784ebc10d9) ) /* background tiles */
ROM_LOAD( "18.bin", 0x10000, 0x10000, CRC(56834554) SHA1(6d579c32fb57eb4eddc062cb2cc78b546f6607b2) )
- ROM_REGION( 0x40000, "gfx4", 0 )
- ROM_LOAD( "15.bin", 0x00000, 0x10000, CRC(4bf838be) SHA1(6b1d7448caf406e47268a1276225bb0619b80cc9) ) /* sprites */
- ROM_LOAD( "16.bin", 0x10000, 0x10000, CRC(21a265c5) SHA1(a2b3a1e5aa545030d933c0f058f4f9a18e1af1c9) )
- ROM_LOAD( "13.bin", 0x20000, 0x10000, CRC(6b6ec999) SHA1(7749ce435f497732bd1b6958974cd95e960fc9fe) )
- ROM_LOAD( "14.bin", 0x30000, 0x10000, CRC(f426a4ad) SHA1(facccb21ca73c560d3a38e05e677782516d5b0c0) )
+ ROM_REGION( 0x40000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "15.bin", 0x00000, 0x10000, CRC(4bf838be) SHA1(6b1d7448caf406e47268a1276225bb0619b80cc9) ) /* sprites */
+ ROM_LOAD16_BYTE( "13.bin", 0x00001, 0x10000, CRC(6b6ec999) SHA1(7749ce435f497732bd1b6958974cd95e960fc9fe) )
+ ROM_LOAD16_BYTE( "16.bin", 0x20000, 0x10000, CRC(21a265c5) SHA1(a2b3a1e5aa545030d933c0f058f4f9a18e1af1c9) )
+ ROM_LOAD16_BYTE( "14.bin", 0x20001, 0x10000, CRC(f426a4ad) SHA1(facccb21ca73c560d3a38e05e677782516d5b0c0) )
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
ROM_LOAD( "9.bin", 0x0000, 0x4000, CRC(740d260f) SHA1(5b4487930c7a1fb0a796aec2243bec631b1b5104) )
@@ -1788,20 +1763,20 @@ ROM_START( armedf )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */
ROM_LOAD( "af_10.rom", 0x00000, 0x10000, CRC(c5eacb87) SHA1(33af84b48fbda26729975b02cfb70f23c0bce6a2) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "09.11c", 0x00000, 0x08000, CRC(5c6993d5) SHA1(3991851e5c4d2b3d72c372afdfbb710796874c15) ) /* characters */
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "af_04.rom", 0x00000, 0x10000, CRC(44d3af4f) SHA1(0c2cb54357c314e43cec6f959fe9d4a2c8bc8834) ) /* foreground tiles */
ROM_LOAD( "af_05.rom", 0x10000, 0x10000, CRC(92076cab) SHA1(f47424817373a6735da2b2049b53da5b38178cec) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "af_14.rom", 0x00000, 0x10000, CRC(8c5dc5a7) SHA1(758140ddb9e60fb3950fe58bf53c7aea769a1a94) ) /* background tiles */
ROM_LOAD( "af_13.rom", 0x10000, 0x10000, CRC(136a58a3) SHA1(5481e3ce404881a0470f8740f0de6e42283bedf2) )
- ROM_REGION( 0x40000, "gfx4", 0 )
- ROM_LOAD( "af_11.rom", 0x00000, 0x20000, CRC(b46c473c) SHA1(d8573225e2d8b133b3bdd4fa5a12d445c71d5e0e) ) /* sprites */
- ROM_LOAD( "af_12.rom", 0x20000, 0x20000, CRC(23cb6bfe) SHA1(34cb013827206bea71f5336b308ba92bee688506) )
+ ROM_REGION( 0x40000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "af_11.rom", 0x00000, 0x20000, CRC(b46c473c) SHA1(d8573225e2d8b133b3bdd4fa5a12d445c71d5e0e) ) /* sprites */
+ ROM_LOAD16_BYTE( "af_12.rom", 0x00001, 0x20000, CRC(23cb6bfe) SHA1(34cb013827206bea71f5336b308ba92bee688506) )
ROM_END
ROM_START( armedff )
@@ -1816,20 +1791,20 @@ ROM_START( armedff )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */
ROM_LOAD( "af_10.rom", 0x00000, 0x10000, CRC(c5eacb87) SHA1(33af84b48fbda26729975b02cfb70f23c0bce6a2) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "af_09.rom", 0x00000, 0x08000, CRC(7025e92d) SHA1(e590682092c25bbfb674afeccbfc0e613c51d188) ) /* characters */
- ROM_REGION( 0x20000, "gfx2", 0 )
+ ROM_REGION( 0x20000, "foreground", 0 )
ROM_LOAD( "af_04.rom", 0x00000, 0x10000, CRC(44d3af4f) SHA1(0c2cb54357c314e43cec6f959fe9d4a2c8bc8834) ) /* foreground tiles */
ROM_LOAD( "af_05.rom", 0x10000, 0x10000, CRC(92076cab) SHA1(f47424817373a6735da2b2049b53da5b38178cec) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "af_14.rom", 0x00000, 0x10000, CRC(8c5dc5a7) SHA1(758140ddb9e60fb3950fe58bf53c7aea769a1a94) ) /* background tiles */
ROM_LOAD( "af_13.rom", 0x10000, 0x10000, CRC(136a58a3) SHA1(5481e3ce404881a0470f8740f0de6e42283bedf2) )
- ROM_REGION( 0x40000, "gfx4", 0 )
- ROM_LOAD( "af_11.rom", 0x00000, 0x20000, CRC(b46c473c) SHA1(d8573225e2d8b133b3bdd4fa5a12d445c71d5e0e) ) /* sprites */
- ROM_LOAD( "af_12.rom", 0x20000, 0x20000, CRC(23cb6bfe) SHA1(34cb013827206bea71f5336b308ba92bee688506) )
+ ROM_REGION( 0x40000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "af_11.rom", 0x00000, 0x20000, CRC(b46c473c) SHA1(d8573225e2d8b133b3bdd4fa5a12d445c71d5e0e) ) /* sprites */
+ ROM_LOAD16_BYTE( "af_12.rom", 0x00001, 0x20000, CRC(23cb6bfe) SHA1(34cb013827206bea71f5336b308ba92bee688506) )
ROM_END
ROM_START( skyrobo )
@@ -1846,20 +1821,20 @@ ROM_START( skyrobo )
// coming from Tatakae Big Fighter, might or might not be correct for this version
ROM_LOAD( "i8751.bin", 0x00000, 0x1000, BAD_DUMP CRC(64a0d225) SHA1(ccc5c33c0c412bf9e3a4f7de5e39b042e00c41dd) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "7", 0x00000, 0x08000, CRC(f556ef28) SHA1(2acb83cdf23356091056f2cfbbc2b9828ee25b6f) ) /* Rom location 11C */
- ROM_REGION( 0x30000, "gfx2", 0 )
+ ROM_REGION( 0x30000, "foreground", 0 )
ROM_LOAD( "5.13f", 0x00000, 0x20000, CRC(d440a29f) SHA1(9e6ea7c9903e5e3e8e10ac7680c6120e1aa27250) )
ROM_LOAD( "6.15f", 0x20000, 0x10000, CRC(27469a76) SHA1(ebf2c60e1f70a589680c05adf10771ac2097b9d0) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "12.8a", 0x00000, 0x10000, CRC(a5694ea9) SHA1(ea94174495b3a65b3797932074a94df3b55fa0a2) )
ROM_LOAD( "11.6a", 0x10000, 0x10000, CRC(10b74e2c) SHA1(e3ec68726e7f277dc2043424f2e4d863eb01b3dc) )
- ROM_REGION( 0x40000, "gfx4", 0 )
- ROM_LOAD( "9.8d", 0x00000, 0x20000, CRC(fe67800e) SHA1(0d3c4c3cb185270260fa691a97cddf082d6a056e) )
- ROM_LOAD( "10.9d", 0x20000, 0x20000, CRC(dcb828c4) SHA1(607bc86580a6fe6e15e91131532b0eecd8b7a0cb) )
+ ROM_REGION( 0x40000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "9.8d", 0x00000, 0x20000, CRC(fe67800e) SHA1(0d3c4c3cb185270260fa691a97cddf082d6a056e) )
+ ROM_LOAD16_BYTE( "10.9d", 0x00001, 0x20000, CRC(dcb828c4) SHA1(607bc86580a6fe6e15e91131532b0eecd8b7a0cb) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "tf.13h", 0x0000, 0x0100, CRC(81244757) SHA1(6324f63e571f0f7a0bb9eb97f9994809db79493f) ) /* Prom is a N82S129AN type */
@@ -1878,20 +1853,20 @@ ROM_START( bigfghtr )
ROM_REGION( 0x10000, "mcu", 0 ) /* Intel C8751 read protected MCU */
ROM_LOAD( "i8751.bin", 0x00000, 0x1000, CRC(64a0d225) SHA1(ccc5c33c0c412bf9e3a4f7de5e39b042e00c41dd) )
- ROM_REGION( 0x08000, "gfx1", 0 )
+ ROM_REGION( 0x08000, "text", 0 )
ROM_LOAD( "7.11c", 0x00000, 0x08000, CRC(1809e79f) SHA1(730547771f803857acb552a84a8bc21bd3bda33f) )
- ROM_REGION( 0x30000, "gfx2", 0 )
+ ROM_REGION( 0x30000, "foreground", 0 )
ROM_LOAD( "5.13f", 0x00000, 0x20000, CRC(d440a29f) SHA1(9e6ea7c9903e5e3e8e10ac7680c6120e1aa27250) )
ROM_LOAD( "6.15f", 0x20000, 0x10000, CRC(27469a76) SHA1(ebf2c60e1f70a589680c05adf10771ac2097b9d0) )
- ROM_REGION( 0x20000, "gfx3", 0 )
+ ROM_REGION( 0x20000, "background", 0 )
ROM_LOAD( "12.8a", 0x00000, 0x10000, CRC(a5694ea9) SHA1(ea94174495b3a65b3797932074a94df3b55fa0a2) )
ROM_LOAD( "11.6a", 0x10000, 0x10000, CRC(10b74e2c) SHA1(e3ec68726e7f277dc2043424f2e4d863eb01b3dc) )
- ROM_REGION( 0x40000, "gfx4", 0 )
- ROM_LOAD( "9.8d", 0x00000, 0x20000, CRC(fe67800e) SHA1(0d3c4c3cb185270260fa691a97cddf082d6a056e) )
- ROM_LOAD( "10.9d", 0x20000, 0x20000, CRC(dcb828c4) SHA1(607bc86580a6fe6e15e91131532b0eecd8b7a0cb) )
+ ROM_REGION( 0x40000, "sprite", 0 )
+ ROM_LOAD16_BYTE( "9.8d", 0x00000, 0x20000, CRC(fe67800e) SHA1(0d3c4c3cb185270260fa691a97cddf082d6a056e) )
+ ROM_LOAD16_BYTE( "10.9d", 0x00001, 0x20000, CRC(dcb828c4) SHA1(607bc86580a6fe6e15e91131532b0eecd8b7a0cb) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "tf.13h", 0x0000, 0x0100, CRC(81244757) SHA1(6324f63e571f0f7a0bb9eb97f9994809db79493f) ) /* Prom is a N82S129AN type */
@@ -1906,25 +1881,6 @@ ROM_END
void armedf_state::init_terraf()
{
m_scroll_type = 0;
-
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x07c000, 0x07c001, write16_delegate(*this, FUNC(armedf_state::bootleg_io_w)));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x07c006, 0x07c007, write16_delegate(*this, FUNC(armedf_state::terraf_fg_scrolly_w)));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x07c008, 0x07c009, write16_delegate(*this, FUNC(armedf_state::terraf_fg_scrollx_w)));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x0c0000, 0x0c0001, write16_delegate(*this, FUNC(armedf_state::terraf_fg_scroll_msb_arm_w)));
-}
-
-void armedf_state::init_terrafu()
-{
- m_scroll_type = 0;
-
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x07c000, 0x07c001, write16_delegate(*this, FUNC(armedf_state::terraf_io_w)));
-}
-
-void armedf_state::init_terrafjb()
-{
- m_scroll_type = 0;
-
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x07c000, 0x07c001, write16_delegate(*this, FUNC(armedf_state::terrafjb_io_w)));
}
void armedf_state::init_armedf()
@@ -1932,19 +1888,15 @@ void armedf_state::init_armedf()
m_scroll_type = 1;
}
-
void armedf_state::init_kozure()
{
- uint16_t *ROM = (uint16_t *)memregion("maincpu")->base();
+ u16 *ROM = (u16 *)memregion("maincpu")->base();
/* patch "time over" bug, see notes on top. */
ROM[0x1016c/2] = 0x4e71;
/* ROM check at POST. */
ROM[0x04fc6/2] = 0x4e71;
m_scroll_type = 0;
-
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x07c000, 0x07c001, write16_delegate(*this, FUNC(armedf_state::terraf_io_w)));
-
}
void armedf_state::init_legion()
@@ -1952,7 +1904,7 @@ void armedf_state::init_legion()
#if LEGION_HACK
/* This is a hack to allow you to use the extra features
of 3 of the "Unused" Dip Switches (see notes above). */
- uint16_t *ROM = (uint16_t *)memregion("maincpu")->base();
+ u16 *ROM = (u16 *)memregion("maincpu")->base();
RAM[0x0001d6 / 2] = 0x0001;
/* To avoid checksum error */
RAM[0x000488 / 2] = 0x4e71;
@@ -1966,7 +1918,7 @@ void armedf_state::init_legionjb()
#if LEGION_HACK
/* This is a hack to allow you to use the extra features
of 3 of the "Unused" Dip Switches (see notes above). */
- uint16_t *RAM = (uint16_t *)memregion("maincpu")->base();
+ u16 *RAM = (u16 *)memregion("maincpu")->base();
RAM[0x0001d6/2] = 0x0001;
/* No need to patch the checksum routine (see notes) ! */
#endif
@@ -1978,8 +1930,6 @@ void armedf_state::init_legionjb()
void armedf_state::init_cclimbr2()
{
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x07c000, 0x07c001, write16_delegate(*this, FUNC(armedf_state::terraf_io_w)));
-
m_scroll_type = 3;
}
@@ -1995,10 +1945,10 @@ GAME( 1987, legionj, legion, legion, legion, armedf_state, init_legio
GAME( 1987, legionjb, legion, legionjb, legion, armedf_state, init_legionjb, ROT270, "bootleg", "Chouji Meikyuu Legion (Japan ver 1.05, bootleg set 1)", MACHINE_SUPPORTS_SAVE) /* blitter protection removed */
GAME( 1987, legionjb2, legion, legionjb2, legion, armedf_state, init_legionjb, ROT270, "bootleg", "Chouji Meikyuu Legion (Japan ver 1.05, bootleg set 2)", MACHINE_SUPPORTS_SAVE)
-GAME( 1987, terraf, 0, terraf, terraf, armedf_state, init_terrafu, ROT0, "Nichibutsu", "Terra Force", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, terrafu, terraf, terraf, terraf, armedf_state, init_terrafu, ROT0, "Nichibutsu USA", "Terra Force (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, terrafj, terraf, terraf, terraf, armedf_state, init_terrafu, ROT0, "Nichibutsu Japan", "Terra Force (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, terrafjb, terraf, terrafjb, terraf, armedf_state, init_terrafjb, ROT0, "bootleg", "Terra Force (Japan, bootleg with additional Z80)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, terraf, 0, terraf, terraf, armedf_state, init_terraf, ROT0, "Nichibutsu", "Terra Force", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, terrafu, terraf, terraf, terraf, armedf_state, init_terraf, ROT0, "Nichibutsu USA", "Terra Force (US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, terrafj, terraf, terraf, terraf, armedf_state, init_terraf, ROT0, "Nichibutsu Japan", "Terra Force (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, terrafjb, terraf, terrafjb, terraf, armedf_state, init_terraf, ROT0, "bootleg", "Terra Force (Japan, bootleg with additional Z80)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, terrafb, terraf, terrafb, terraf, armedf_state, init_terraf, ROT0, "bootleg", "Terra Force (Japan, bootleg set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, kozure, 0, kozure, kozure, armedf_state, init_kozure, ROT0, "Nichibutsu", "Kozure Ookami (Japan)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/atarigx2.cpp b/src/mame/drivers/atarigx2.cpp
index 8de721542aa..b0b5efd1ac6 100644
--- a/src/mame/drivers/atarigx2.cpp
+++ b/src/mame/drivers/atarigx2.cpp
@@ -1740,10 +1740,10 @@ ROM_END
ROM_START( motofren )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 8*64k for 68000 code */
- ROM_LOAD32_BYTE( "136094-moto0.23e", 0x000000, 0x020000, CRC(2c6ec446) SHA1(d83fee26b384e6fd783104746e6560504ae43ca6) )
- ROM_LOAD32_BYTE( "136094-moto1.23j", 0x000001, 0x020000, CRC(e7163e7b) SHA1(7ea8a7a63bd1befee4cf9e708949fca7f06572c1) )
- ROM_LOAD32_BYTE( "136094-moto2.37e", 0x000002, 0x020000, CRC(6b1c7626) SHA1(b318a5856bcbd6a8fc7eb92e4b9a576b8c16cbf3) )
- ROM_LOAD32_BYTE( "136094-moto3.37j", 0x000003, 0x020000, CRC(44c3cd2a) SHA1(a16046586cbaa000e056115c92b5f22bf49869ad) )
+ ROM_LOAD32_BYTE( "136094-0021i.23e", 0x000000, 0x020000, CRC(2c6ec446) SHA1(d83fee26b384e6fd783104746e6560504ae43ca6) )
+ ROM_LOAD32_BYTE( "136094-0022i.23j", 0x000001, 0x020000, CRC(e7163e7b) SHA1(7ea8a7a63bd1befee4cf9e708949fca7f06572c1) )
+ ROM_LOAD32_BYTE( "136094-0023i.37e", 0x000002, 0x020000, CRC(6b1c7626) SHA1(b318a5856bcbd6a8fc7eb92e4b9a576b8c16cbf3) )
+ ROM_LOAD32_BYTE( "136094-0024i.37j", 0x000003, 0x020000, CRC(44c3cd2a) SHA1(a16046586cbaa000e056115c92b5f22bf49869ad) )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
diff --git a/src/mame/drivers/blockade.cpp b/src/mame/drivers/blockade.cpp
index 5dcb98e9c19..423cff31072 100644
--- a/src/mame/drivers/blockade.cpp
+++ b/src/mame/drivers/blockade.cpp
@@ -415,18 +415,15 @@ DISCRETE_SOUND_END
WRITE8_MEMBER( blockade_state::sound_freq_w )
{
m_discrete->write(BLOCKADE_NOTE_DATA, data);
- return;
}
WRITE8_MEMBER( blockade_state::env_on_w )
{
m_samples->start(0, 0);
- return;
}
WRITE8_MEMBER( blockade_state::env_off_w )
{
- return;
}
const char *const blockade_sample_names[] =
diff --git a/src/mame/drivers/decwritr.cpp b/src/mame/drivers/decwritr.cpp
index bcd83f09b89..ceb8f48d2c0 100644
--- a/src/mame/drivers/decwritr.cpp
+++ b/src/mame/drivers/decwritr.cpp
@@ -11,10 +11,13 @@
// tech manual: http://manx.classiccmp.org/mirror/vt100.net/docs/la120-tm/la120tm1.pdf
#include "emu.h"
+#include "bus/rs232/rs232.h"
#include "cpu/i8085/i8085.h"
#include "machine/74259.h"
+#include "machine/dc305.h"
#include "machine/er1400.h"
#include "machine/i8251.h"
+#include "machine/input_merger.h"
#include "sound/beep.h"
#include "render.h"
#include "speaker.h"
@@ -38,7 +41,8 @@ public:
m_speaker(*this, "beeper"),
m_usart(*this, "usart"),
m_nvm(*this, "nvm"),
- m_ledlatch(*this, "ledlatch")
+ m_ledlatch(*this, "ledlatch"),
+ m_prtlsi(*this, "prtlsi")
{
}
@@ -49,6 +53,9 @@ private:
bitmap.fill(rgb_t::black(), cliprect);
return 0;
}
+
+ IRQ_CALLBACK_MEMBER(inta_cb);
+
DECLARE_READ8_MEMBER(la120_KBD_r);
DECLARE_WRITE8_MEMBER(la120_LED_w);
DECLARE_READ8_MEMBER(la120_NVR_r);
@@ -67,12 +74,22 @@ private:
required_device<i8251_device> m_usart;
required_device<er1400_device> m_nvm;
required_device<ls259_device> m_ledlatch;
+ required_device<dc305_device> m_prtlsi;
ioport_port* m_col_array[16];
uint8_t m_led_7seg_counter;
uint8_t m_led_7seg[4];
};
+IRQ_CALLBACK_MEMBER( decwriter_state::inta_cb )
+{
+ // one wait state inserted
+ if (!machine().side_effects_disabled())
+ m_maincpu->adjust_icount(-1);
+
+ return m_prtlsi->inta();
+}
+
READ8_MEMBER( decwriter_state::la120_KBD_r )
{
/* for reading the keyboard array, addr bits 5-11 are ignored.
@@ -192,7 +209,7 @@ READ8_MEMBER( decwriter_state::la120_DC305_r )
if (!machine().side_effects_disabled())
m_maincpu->adjust_icount(-1);
- uint8_t data = 0x00;
+ uint8_t data = m_prtlsi->read(offset);
if (DC305_VERBOSE)
logerror("DC305 Read from offset %01x, returning %02X\n", offset, data);
return data;
@@ -213,6 +230,7 @@ WRITE8_MEMBER( decwriter_state::la120_DC305_w )
if (!machine().side_effects_disabled())
m_maincpu->adjust_icount(-1);
+ m_prtlsi->write(offset, data);
if (DC305_VERBOSE)
logerror("DC305 Write of %02X to offset %01X\n", data, offset);
}
@@ -413,7 +431,7 @@ void decwriter_state::la120(machine_config &config)
I8080A(config, m_maincpu, XTAL(18'000'000) / 9); // 18Mhz xtal on schematics, using an i8224 clock divider/reset sanitizer IC
m_maincpu->set_addrmap(AS_PROGRAM, &decwriter_state::la120_mem);
m_maincpu->set_addrmap(AS_IO, &decwriter_state::la120_io);
- //m_maincpu->set_irq_acknowledge_callback("prtlsi", FUNC(dc305_device::inta_cb));
+ m_maincpu->set_irq_acknowledge_callback(FUNC(decwriter_state::inta_cb));
/* video hardware */
//TODO: no actual screen! has 8 leds above the keyboard (similar to vt100/vk100) and has 4 7segment leds for showing an error code.
@@ -423,10 +441,10 @@ void decwriter_state::la120(machine_config &config)
screen.set_visarea_full();
screen.set_refresh_hz(30);
- //dc305_device &prtlsi(DC305(config, "prtlsi", XTAL(18'000'000) / 9));
- //prtlsi.out_rxc_cb().set("usart", FUNC(i8251_device, write_rxc));
- //prtlsi.out_txc_cb().set("usart", FUNC(i8251_device, write_txc));
- //prtlsi.out_int_cb().set("mainint", FUNC(input_merger_device::in_w<0>));
+ DC305(config, m_prtlsi, XTAL(18'000'000) / 9);
+ m_prtlsi->rxc_callback().set("usart", FUNC(i8251_device::write_rxc));
+ m_prtlsi->txc_callback().set("usart", FUNC(i8251_device::write_txc));
+ m_prtlsi->int_callback().set("mainint", FUNC(input_merger_device::in_w<0>));
LS259(config, m_ledlatch); // E2 on keyboard
m_ledlatch->q_out_cb<0>().set_output("led1").invert(); // ON LINE
@@ -445,19 +463,17 @@ void decwriter_state::la120(machine_config &config)
BEEP(config, m_speaker, 786).add_route(ALL_OUTPUTS, "mono", 0.50); // TODO: LA120 speaker is controlled by asic; VT100 has: 7.945us per serial clock = ~125865.324hz, / 160 clocks per char = ~ 786 hz
/* i8251 */
- I8251(config, "usart", XTAL(18'000'000) / 9);
- /*
- usart.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd));
- usart.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr));
- usart.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts));
+ i8251_device &usart(I8251(config, "usart", XTAL(18'000'000) / 9));
+ usart.txd_handler().set("eia", FUNC(rs232_port_device::write_txd));
+ usart.dtr_handler().set("eia", FUNC(rs232_port_device::write_dtr));
+ usart.rts_handler().set("eia", FUNC(rs232_port_device::write_rts));
usart.rxrdy_handler().set("mainint", FUNC(input_merger_device::in_w<1>));
INPUT_MERGER_ANY_HIGH(config, "mainint").output_handler().set_inputline(m_maincpu, 0);
- rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr));
+ rs232_port_device &rs232(RS232_PORT(config, "eia", default_rs232_devices, nullptr));
rs232.rxd_handler().set("usart", FUNC(i8251_device::write_rxd));
rs232.dsr_handler().set("usart", FUNC(i8251_device::write_dsr));
- */
ER1400(config, m_nvm);
}
diff --git a/src/mame/drivers/elan_eu3a05.cpp b/src/mame/drivers/elan_eu3a05.cpp
index c1db29341f0..73f2f3921c9 100644
--- a/src/mame/drivers/elan_eu3a05.cpp
+++ b/src/mame/drivers/elan_eu3a05.cpp
@@ -104,17 +104,19 @@
#include "machine/elan_eu3a05gpio.h"
#include "machine/elan_eu3a05sys.h"
#include "video/elan_eu3a05vid.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
class elan_eu3a05_state : public driver_device
{
public:
elan_eu3a05_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
+ m_sys(*this, "sys"),
+ m_gpio(*this, "gpio"),
m_maincpu(*this, "maincpu"),
m_screen(*this, "screen"),
m_ram(*this, "ram"),
- m_gpio(*this, "gpio"),
- m_sys(*this, "sys"),
m_sound(*this, "eu3a05sound"),
m_vid(*this, "vid"),
m_pixram(*this, "pixram"),
@@ -129,6 +131,14 @@ public:
void elan_sudoku(machine_config &config);
+protected:
+ // driver_device overrides
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ required_device<elan_eu3a05sys_device> m_sys;
+ required_device<elan_eu3a05gpio_device> m_gpio;
+
private:
// screen updates
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -142,17 +152,12 @@ private:
void elan_eu3a05_map(address_map &map);
void elan_sudoku_map(address_map &map);
- // driver_device overrides
- virtual void machine_start() override;
- virtual void machine_reset() override;
virtual void video_start() override;
required_device<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
required_shared_ptr<uint8_t> m_ram;
- required_device<elan_eu3a05gpio_device> m_gpio;
- required_device<elan_eu3a05sys_device> m_sys;
required_device<elan_eu3a05_sound_device> m_sound;
required_device<elan_eu3a05vid_device> m_vid;
required_shared_ptr<uint8_t> m_pixram;
@@ -168,6 +173,94 @@ private:
DECLARE_WRITE_LINE_MEMBER(sound_end5) { m_sys->generate_custom_interrupt(7); }
};
+class elan_eu3a05_buzztime_state : public elan_eu3a05_state
+{
+public:
+ elan_eu3a05_buzztime_state(const machine_config &mconfig, device_type type, const char *tag) :
+ elan_eu3a05_state(mconfig, type, tag),
+ m_cart(*this, "cartslot")
+ { }
+
+ void elan_buzztime(machine_config& config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ //DECLARE_READ8_MEMBER(random_r) { return machine().rand(); }
+ DECLARE_READ8_MEMBER(porta_r);
+ DECLARE_WRITE8_MEMBER(portb_w);
+
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
+
+ required_device<generic_slot_device> m_cart;
+};
+
+void elan_eu3a05_buzztime_state::machine_start()
+{
+ elan_eu3a05_state::machine_start();
+
+ // if there's a cart make sure we can see it
+ if (m_cart && m_cart->exists())
+ {
+ uint8_t *rom = memregion("maincpu")->base();
+ uint8_t* cart = m_cart->get_rom_base();
+ std::copy(&cart[0x000000], &cart[0x200000], &rom[0x200000]);
+ }
+ else
+ {
+ uint8_t *rom = memregion("maincpu")->base();
+ uint8_t* bios = memregion("bios")->base();
+ std::copy(&bios[0x000000], &bios[0x200000], &rom[0x200000]);
+ }
+}
+
+DEVICE_IMAGE_LOAD_MEMBER(elan_eu3a05_buzztime_state::cart_load)
+{
+ uint32_t size = m_cart->common_get_size("rom");
+
+ if (size != 0x200000)
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
+ return image_init_result::FAIL;
+ }
+
+ m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_NATIVE);
+ m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
+
+ return image_init_result::PASS;
+}
+
+void elan_eu3a05_buzztime_state::elan_buzztime(machine_config &config)
+{
+ elan_eu3a05_state::elan_eu3a05(config);
+
+ m_sys->set_alt_timer();
+
+ m_gpio->read_0_callback().set(FUNC(elan_eu3a05_buzztime_state::porta_r)); // I/O lives in here
+// m_gpio->read_1_callback().set(FUNC(elan_eu3a05_buzztime_state::random_r)); // nothing of note
+// m_gpio->read_2_callback().set(FUNC(elan_eu3a05_buzztime_state::random_r)); // nothing of note
+ m_gpio->write_1_callback().set(FUNC(elan_eu3a05_buzztime_state::portb_w)); // control related
+
+ GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "buzztime_cart");
+ m_cart->set_width(GENERIC_ROM16_WIDTH);
+ m_cart->set_device_load(FUNC(elan_eu3a05_buzztime_state::cart_load));
+
+ SOFTWARE_LIST(config, "buzztime_cart").set_original("buzztime_cart");
+}
+
+READ8_MEMBER(elan_eu3a05_buzztime_state::porta_r)
+{
+ logerror("%s: porta_r\n", machine().describe_context());
+ return machine().rand();
+}
+
+WRITE8_MEMBER(elan_eu3a05_buzztime_state::portb_w)
+{
+ logerror("%s: portb_w %02x\n", machine().describe_context(), data);
+}
+
+
void elan_eu3a05_state::video_start()
{
}
@@ -576,7 +669,6 @@ void elan_eu3a05_state::airblsjs(machine_config& config)
m_sys->set_pal(); // TODO: also set PAL clocks
}
-
ROM_START( rad_tetr )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "tetrisrom.bin", 0x000000, 0x100000, CRC(40538e08) SHA1(1aef9a2c678e39243eab8d910bb7f9f47bae0aee) )
@@ -615,7 +707,12 @@ ROM_START( carlecfg )
ROM_END
+ROM_START( buzztime )
+ ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00 )
+ ROM_LOAD( "buzztimeunit.bin", 0x000000, 0x200000, CRC(8ba3569c) SHA1(3e704338a53daed63da90aba0db4f6adb5bccd21) )
+ROM_END
CONS( 2004, rad_sinv, 0, 0, elan_eu3a05, rad_sinv, elan_eu3a05_state, empty_init, "Radica (licensed from Taito)", "Space Invaders [Lunar Rescue, Colony 7, Qix, Phoenix] (Radica, Arcade Legends TV Game)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // "5 Taito games in 1"
@@ -625,6 +722,10 @@ CONS( 2004, rad_tetr, 0, 0, elan_eu3a05, rad_tetr, elan_eu3a05_state, empty_init
// ROM contains the string "Credit:XiAn Hummer Software Studio(CHINA) Tel:86-29-84270600 Email:HummerSoft@126.com" PCB has datecode of "050423" (23rd April 2005)
CONS( 2005, airblsjs, 0, 0, airblsjs, airblsjs, elan_eu3a05_state, empty_init, "Advance Bright Ltd", "Air-Blaster Joystick (AB1500, PAL)", MACHINE_NOT_WORKING )
+CONS( 2004, buzztime, 0, 0, elan_buzztime, sudoku, elan_eu3a05_buzztime_state, empty_init, "Cadaco", "Buzztime Home Trivia System", MACHINE_NOT_WORKING )
+
+// Below are probably not EU3A05 but use similar modes (possibly EU3A13?)
+
CONS( 2006, sudoelan, 0, 0, elan_sudoku, sudoku, elan_eu3a05_state, empty_init, "Senario / All in 1 Products Ltd", "Ultimate Sudoku TV Edition 3-in-1", MACHINE_NOT_WORKING )
CONS( 200?, carlecfg, 0, 0, elan_sudoku, carlecfg, elan_eu3a05_state, empty_init, "Excalibur Electronics Inc", "Carl Edwards' Chase For Glory", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/esq5505.cpp b/src/mame/drivers/esq5505.cpp
index 839b75a5722..7b961a884bc 100644
--- a/src/mame/drivers/esq5505.cpp
+++ b/src/mame/drivers/esq5505.cpp
@@ -2,12 +2,12 @@
// copyright-holders:R. Belmont, Parduz
/***************************************************************************
- esq5505.c - Ensoniq ES5505 + ES5510 based synthesizers and samplers
+ esq5505.cpp - Ensoniq ES5505 + ES5510 based synthesizers and samplers
Ensoniq VFX, VFX-SD, EPS, EPS-16 Plus, SD-1, SD-1 32, SQ-1 and SQ-R (SQ-1 Plus,
SQ-2, and KS-32 are known to also be this architecture).
- The Taito sound system in taito_en.c is directly derived from the 32-voice version
+ The Taito sound system in taito_en.cpp is directly derived from the 32-voice version
of the SD-1.
Driver by R. Belmont and Parduz with thanks to Christian Brunschen, and Phil Bennett
@@ -124,6 +124,40 @@
22 = second digit of patch # becomes 6
23 = first digit of patch # becomes 6
+ Ensoniq SQ-2 MIDI keyboard
+ Ensoniq 1992
+ PCB Layout by Guru
+
+
+ PART NO.: 4001018001 REV B
+
+ |--| |--| |--| |--| |--| |--| |--| |--|
+ |--|J1|--|J2|--|J3|----|J4|-----------------------|J7|-----|J8|---|J9|---|J10--|
+ | PHONE RAUD LAUD PEDAL 3V_BATT FOOT MIDI MIDI MIDI |
+ | CV 74LS244 74LS244 74LS245 IN OUT THRU |
+ | |
+ | TL072 J5 HP6N138 |---| |
+ | 7912 4051 CARTRIDGE LOWER.U27 UPPER.U32 | 6 |LM2926
+ | J15 |-------J6------| 62256 62256 | 8 | |
+ | |---------------| 74HC4053 | 0 |7805
+ | 7812 7407 ENSONIQ | 0 | |
+ | TL072 TL072 ENSONIQ GLU | 0 | |
+ | SUPERGLU |---| |
+ | |
+ | 16MHz 30.47618MHz |
+ | POWER|
+ |TDA1541A ROM3.U38 ROM1.U26 74HC74 LM339 J12|
+ | |
+ | ROM2.U39 ROM0.U25 NCR6500/11 J13 |
+ | |
+ | OTISR2 74LS373 ESP 68681 |
+ | |
+ |7805 74HC74 74F139 6264 6264 ADJ-POT ESPR6 LM339 |
+ | |
+ |7915 74LS174 74HC161 74LS373 LM317T J11 J14 |
+ |------------------------------------------------------------------------------|
+ Note: All parts shown.
+
***************************************************************************/
#include "emu.h"
diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp
index 9aef5f17fe7..99983277adc 100644
--- a/src/mame/drivers/galaxian.cpp
+++ b/src/mame/drivers/galaxian.cpp
@@ -11368,6 +11368,27 @@ ROM_START( theends ) /* The Stern Electronics license */
ROM_LOAD( "6331-1j.86", 0x0000, 0x0020, CRC(24652bc4) SHA1(d89575f3749c75dc963317fe451ffeffd9856e4d) ) /* no label for this chip */
ROM_END
+ROM_START( theendss ) // The End (SegaSA / Sonic)
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "the_end_ss_2.bin", 0x0000, 0x0800, CRC(326e1f69) SHA1(b77d7b8f4835bc1a80586936398dea23ae164d3e) )
+ ROM_LOAD( "the_end_ss.ic14", 0x0800, 0x0800, CRC(950f0a07) SHA1(bde9f3c6cf060dc6f5b7652287b94e04bed7bcf7) )
+ ROM_LOAD( "the_end_ss_1.bin", 0x1000, 0x0800, CRC(93b47650) SHA1(6f65faef1d9aca1dbd3fe3088ae8b1c6bc373a21) )
+ ROM_LOAD( "the_end_ss.ic16", 0x1800, 0x0800, CRC(380a0017) SHA1(3354eb328a32537f722fe8a0949ddcab6cf21eb8) )
+ ROM_LOAD( "the_end_ss.ic17", 0x2000, 0x0800, CRC(af067b7f) SHA1(855c6ddf29fbfea004c7143fe29064abf53801ad) )
+ ROM_LOAD( "the_end_ss.ic18", 0x2800, 0x0800, CRC(a0411b93) SHA1(d644968758a1b73d13e09b24d24bfec82276e8f4) )
+
+ ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_LOAD( "the_end_ss.ic56", 0x0000, 0x0800, CRC(7a141f29) SHA1(ca483943971c8fc7f5775a8a7cc6ddd331d48170) )
+ ROM_LOAD( "the_end_ss.ic55", 0x0800, 0x0800, CRC(218497c1) SHA1(3e080621f2e83909a6f304a2d960a080bccbbdc2) )
+
+ ROM_REGION( 0x1000, "gfx1", 0 )
+ ROM_LOAD( "the_end_ss.ic30", 0x0000, 0x0800, CRC(527fd384) SHA1(92a384899d5acd2c689f637da16a0e2d11a9d9c6) )
+ ROM_LOAD( "the_end_ss.ic31", 0x0800, 0x0800, CRC(af6d09b6) SHA1(f3ad51dc88aa58fd39195ead978b039e0b0b585c) )
+
+ ROM_REGION( 0x0020, "proms", 0 )
+ ROM_LOAD( "6331-1j.86", 0x0000, 0x0020, BAD_DUMP CRC(24652bc4) SHA1(d89575f3749c75dc963317fe451ffeffd9856e4d) ) // Not dumped on this set
+ROM_END
+
ROM_START( takeoff )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "0p.t.o.10l", 0x0000, 0x1000, CRC(46712d43) SHA1(e1b84494b530dd96d8a51a3f8bd7d7d3ba7560a9) )
@@ -12888,19 +12909,18 @@ GAME( 1980, kingballj, kingball, kingball, kingball, galaxian_state, init_
*************************************/
/* Frogger based hardware: 2nd Z80, AY-8910A, 2 8255 PPI for I/O, custom background */
-GAME( 1981, frogger, 0, frogger, frogger, galaxian_state, init_frogger, ROT90, "Konami", "Frogger", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, froggers1, frogger, frogger, frogger, galaxian_state, init_frogger, ROT90, "Konami (Sega license)", "Frogger (Sega set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, froggers2, frogger, frogger, frogger, galaxian_state, init_frogger, ROT90, "Konami (Sega license)", "Frogger (Sega set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, froggers3, frogger, frogger, frogger, galaxian_state, init_frogger, ROT90, "Konami (Sega license)", "Frogger (Sega set 3)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, froggermc, frogger, froggermc, froggermc, galaxian_state, init_froggermc, ROT90, "Konami (Sega license)", "Frogger (Moon Cresta hardware)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, froggers, frogger, froggers, frogger, galaxian_state, init_froggers, ROT90, "bootleg", "Frog", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, frogf, frogger, frogf, frogger, galaxian_state, init_froggers, ROT90, "bootleg (Falcon)", "Frog (Falcon bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, frogg, frogger, frogg, frogg, galaxian_state, init_frogg, ROT90, "bootleg", "Frog (Galaxian hardware)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, froggrs, frogger, froggers, frogger, galaxian_state, init_froggrs, ROT90, "bootleg (Coin Music)", "Frogger (Coin Music, bootleg on Scramble hardware)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, froggervd, frogger, froggervd, frogger, galaxian_state, init_quaak, ROT90, "bootleg (Hermatic)", "Frogger (Hermatic, bootleg on Scramble hardware from Video Dens)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, quaak, frogger, quaak, frogger, galaxian_state, init_quaak, ROT90, "bootleg", "Quaak (bootleg of Frogger)", MACHINE_SUPPORTS_SAVE ) // closest to Super Cobra hardware, presumably a bootleg from Germany (Quaak is the German frog sound)
-GAME( 1981, froggeram, frogger, froggeram, froggeram, galaxian_state, init_quaak, ROT90, "bootleg", "Frogger (bootleg on Amigo? hardware)", MACHINE_SUPPORTS_SAVE ) // meant to be Amigo hardware, but maybe a different bootleg than the one we have?
-
+GAME( 1981, frogger, 0, frogger, frogger, galaxian_state, init_frogger, ROT90, "Konami", "Frogger", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, froggers1, frogger, frogger, frogger, galaxian_state, init_frogger, ROT90, "Konami (Sega license)", "Frogger (Sega set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, froggers2, frogger, frogger, frogger, galaxian_state, init_frogger, ROT90, "Konami (Sega license)", "Frogger (Sega set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, froggers3, frogger, frogger, frogger, galaxian_state, init_frogger, ROT90, "Konami (Sega license)", "Frogger (Sega set 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, froggermc, frogger, froggermc, froggermc, galaxian_state, init_froggermc, ROT90, "Konami (Sega license)", "Frogger (Moon Cresta hardware)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, froggers, frogger, froggers, frogger, galaxian_state, init_froggers, ROT90, "bootleg", "Frog", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, frogf, frogger, frogf, frogger, galaxian_state, init_froggers, ROT90, "bootleg (Falcon)", "Frog (Falcon bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, frogg, frogger, frogg, frogg, galaxian_state, init_frogg, ROT90, "bootleg", "Frog (Galaxian hardware)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, froggrs, frogger, froggers, frogger, galaxian_state, init_froggrs, ROT90, "bootleg (Coin Music)", "Frogger (Coin Music, bootleg on Scramble hardware)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, froggervd, frogger, froggervd, frogger, galaxian_state, init_quaak, ROT90, "bootleg (Hermatic)", "Frogger (Hermatic, bootleg on Scramble hardware from Video Dens)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, quaak, frogger, quaak, frogger, galaxian_state, init_quaak, ROT90, "bootleg", "Quaak (bootleg of Frogger)", MACHINE_SUPPORTS_SAVE ) // closest to Super Cobra hardware, presumably a bootleg from Germany (Quaak is the German frog sound)
+GAME( 1981, froggeram, frogger, froggeram, froggeram, galaxian_state, init_quaak, ROT90, "bootleg", "Frogger (bootleg on Amigo? hardware)", MACHINE_SUPPORTS_SAVE ) // meant to be Amigo hardware, but maybe a different bootleg than the one we have?
// Turtles based hardware
// CPU/Video Board: KT-4108-2
@@ -12927,6 +12947,7 @@ GAME( 1982, mandingac, amidar, mandingarf, mandingarf, galaxian_state, init_
/* The End/Scramble based hardware */
GAME( 1980, theend, 0, theend, theend, galaxian_state, init_theend, ROT90, "Konami", "The End", MACHINE_SUPPORTS_SAVE )
GAME( 1980, theends, theend, theend, theend, galaxian_state, init_theend, ROT90, "Konami (Stern Electronics license)", "The End (Stern Electronics)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, theendss, theend, theend, theend, galaxian_state, init_theend, ROT90, "bootleg (Sonic)", "The End (SegaSA / Sonic)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, takeoff, theend, takeoff, explorer, galaxian_state, init_explorer, ROT90, "bootleg (Sidam)", "Take Off (bootleg of The End)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // colors likely need bitswap<8> somewhere; needs different sound timer. reference: https://www.youtube.com/watch?v=iPYX3yJORTE
GAME( 1981, scramble, 0, scramble, scramble, galaxian_state, init_scramble, ROT90, "Konami", "Scramble", MACHINE_SUPPORTS_SAVE )
@@ -12996,10 +13017,10 @@ GAME( 1982, tazmania, 0, scobra, tazmania, galaxian_state, init_
CPU/Video Board: A969 (Has various wire mods)
Sound Board: A970
*/
-GAME( 1982, anteater, 0, anteater, anteater, galaxian_state, init_anteater, ROT90, "Tago Electronics", "Anteater", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, anteateruk, anteater, anteateruk, anteateruk, galaxian_state, init_anteateruk, ROT90, "Tago Electronics (Free Enterprise Games license", "The Anteater (UK)", MACHINE_SUPPORTS_SAVE ) // distributed in 1983
-GAME( 1982, anteaterg, anteater, anteaterg, anteateruk, galaxian_state, init_anteateruk, ROT90, "Tago Electronics (TV-Tuning license from Free Enterprise Games)", "Ameisenbaer (German)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, anteatergg, anteater, anteatergg, anteatergg, galaxian_state, init_galaxian, ROT90, "bootleg", "Ameisenbaer (German, Galaxian hardware)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, anteater, 0, anteater, anteater, galaxian_state, init_anteater, ROT90, "Tago Electronics", "Anteater", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, anteateruk, anteater, anteateruk, anteateruk, galaxian_state, init_anteateruk, ROT90, "Tago Electronics (Free Enterprise Games license", "The Anteater (UK)", MACHINE_SUPPORTS_SAVE ) // distributed in 1983
+GAME( 1982, anteaterg, anteater, anteaterg, anteateruk, galaxian_state, init_anteateruk, ROT90, "Tago Electronics (TV-Tuning license from Free Enterprise Games)", "Ameisenbaer (German)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, anteatergg, anteater, anteatergg, anteatergg, galaxian_state, init_galaxian, ROT90, "bootleg", "Ameisenbaer (German, Galaxian hardware)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, calipso, 0, scobra, calipso, galaxian_state, init_calipso, ROT90, "Tago Electronics", "Calipso", MACHINE_SUPPORTS_SAVE )
@@ -13016,4 +13037,3 @@ GAME( 1982, losttombh, losttomb, scobra, losttomb, galaxian_state, init_
GAME( 1984, spdcoin, 0, scobra, spdcoin, galaxian_state, init_scobra, ROT90, "Stern Electronics", "Speed Coin (prototype)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, superbon, 0, scobra, superbon, galaxian_state, init_superbon, ROT90, "Signatron USA", "Agent Super Bond (Super Cobra conversion)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
-
diff --git a/src/mame/drivers/gba.cpp b/src/mame/drivers/gba.cpp
index 95e05f76493..6f81073cd05 100644
--- a/src/mame/drivers/gba.cpp
+++ b/src/mame/drivers/gba.cpp
@@ -1337,7 +1337,7 @@ void gba_state::machine_start()
m_maincpu->space(AS_PROGRAM).install_read_bank(0x0c000000, 0x0cffffff, "rom3");
std::string region_tag;
- memory_region *cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GBASLOT_ROM_REGION_TAG).c_str());
+ memory_region *cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GBASLOT_ROM_REGION_TAG));
// install ROM accesses
membank("rom1")->set_base(cart_rom->base());
@@ -1387,7 +1387,7 @@ void gba_state::machine_start()
if (m_cart->get_type() == GBA_3DMATRIX)
{
m_maincpu->space(AS_PROGRAM).install_write_handler(0x08800000, 0x088001ff, write32_delegate(*m_cart, FUNC(gba_cart_slot_device::write_mapper)));
- memory_region *cart_romhlp = memregion(region_tag.assign(m_cart->tag()).append(GBAHELP_ROM_REGION_TAG).c_str());
+ memory_region *cart_romhlp = memregion(region_tag.assign(m_cart->tag()).append(GBAHELP_ROM_REGION_TAG));
membank("rom1")->set_base(cart_romhlp->base());
}
diff --git a/src/mame/drivers/goldnpkr.cpp b/src/mame/drivers/goldnpkr.cpp
index 3352d7a5067..5a9516ca64b 100644
--- a/src/mame/drivers/goldnpkr.cpp
+++ b/src/mame/drivers/goldnpkr.cpp
@@ -1326,6 +1326,7 @@ public:
void genie(machine_config &config);
void pottnpkr(machine_config &config);
void goldnpkr(machine_config &config);
+ void witchcdj(machine_config &config);
void wcrdxtnd(machine_config &config);
void super21p(machine_config &config);
void caspoker(machine_config &config);
@@ -1407,6 +1408,7 @@ private:
void genie_map(address_map &map);
void goldnpkr_map(address_map &map);
void mondial_map(address_map &map);
+ void witchcdj_map(address_map &map);
void pottnpkr_map(address_map &map);
void wcrdxtnd_map(address_map &map);
void wildcard_map(address_map &map);
@@ -1954,6 +1956,13 @@ void goldnpkr_state::goldnpkr_map(address_map &map)
map(0x2000, 0x7fff).rom(); /* superdbl uses 0x2000..0x3fff address space */
}
+void goldnpkr_state::witchcdj_map(address_map &map)
+{
+ goldnpkr_map(map);
+ map(0x0801, 0x0801).unmaprw();
+ map(0x0802, 0x0802).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+}
+
void goldnpkr_state::pottnpkr_map(address_map &map)
{
map.global_mask(0x3fff);
@@ -4673,6 +4682,13 @@ void goldnpkr_state::witchcrd(machine_config &config)
DISCRETE(config, "discrete", goldnpkr_discrete).add_route(ALL_OUTPUTS, "mono", 1.0);
}
+void goldnpkr_state::witchcdj(machine_config &config)
+{
+ witchcrd(config);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &goldnpkr_state::witchcdj_map);
+}
+
void goldnpkr_state::wcfalcon(machine_config &config)
{
goldnpkr_base(config);
@@ -11185,7 +11201,7 @@ ROM_END
/****************************************************
- Unknown poker game, set 2.
+ Witch Card (ICP1 board)
198?.
This one is totally encrypted.
@@ -11195,11 +11211,11 @@ ROM_END
Char ROM is identical to the Witch Card one.
*****************************************************/
-ROM_START( pokerduc )
+ROM_START( witchcdj )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "b", 0x5000, 0x1000, CRC(8627fba5) SHA1(b94665f0bf425ff71f78c1258f910323c2a948f0) )
- ROM_LOAD( "c", 0x6000, 0x1000, CRC(b35b4108) SHA1(6504ba55511637334c65e88ee5c60b1503b854b3) )
- ROM_LOAD( "d", 0x7000, 0x1000, CRC(c48096ed) SHA1(279ba433369c7dc9cd902a19200e889eea45d115) )
+ ROM_LOAD( "c", 0x2000, 0x1000, CRC(b35b4108) SHA1(6504ba55511637334c65e88ee5c60b1503b854b3) )
+ ROM_LOAD( "d", 0x3000, 0x1000, CRC(c48096ed) SHA1(279ba433369c7dc9cd902a19200e889eea45d115) )
+ ROM_LOAD( "b", 0x7000, 0x1000, CRC(8627fba5) SHA1(b94665f0bf425ff71f78c1258f910323c2a948f0) )
ROM_REGION( 0x1800, "gfx1", 0 )
ROM_FILL( 0x0000, 0x1000, 0x0000 ) /* filling the R-G bitplanes */
@@ -11877,65 +11893,44 @@ void goldnpkr_state::init_vkdlswwv()
The PCB has a daughterboard coated with some plastic
or epoxy resin.
- pattern:
-
- 0000: FF FF FF FF FF FF FF FF | FB FB FB FB FB FB FB FB
- 0010: FD FD FD FD FD FD FD FD | F9 F9 F9 F9 F9 F9 F9 F9
- 0020: FF FF FF FF FF FF FF FF | FB FB FB FB FB FB FB FB
- 0030: FD FD FD FD FD FD FD FD | F9 F9 F9 F9 F9 F9 F9 F9
-
- 0040: FE FE FE FE FE FE FE FE | FA FA FA FA FA FA FA FA
- 0050: FC FC FC FC FC FC FC FC | F8 F8 F8 F8 F8 F8 F8 F8
- 0060: FE FE FE FE FE FE FE FE | FA FA FA FA FA FA FA FA
- 0070: FC FC FC FC FC FC FC FC | F8 F8 F8 F8 F8 F8 F8 F8
-
- 0080: BF BF BF BF BF BF BF BF | BB BB BB BB BB BB BB BB
- 0090: BD BD BD BD BD BD BD BD | B9 B9 B9 B9 B9 B9 B9 B9
- 00A0: BF BF BF BF BF BF BF BF | BB BB BB BB BB BB BB BB
- 00B0: BD BD BD BD BD BD BD BD | B9 B9 B9 B9 B9 B9 B9 B9
+***********************************************/
- 00C0: BE BE BE BE BE BE BE BE | BA BA BA BA BA BA BA BA
- 00D0: BC BC BC BC BC BC BC BC | B8 B8 B8 B8 B8 B8 B8 B8
- 00E0: BE BE BE BE BE BE BE BE | BA BA BA BA BA BA BA BA
- 00F0: BC BC BC BC BC BC BC BC | B8 B8 B8 B8 B8 B8 B8 B8
+void goldnpkr_state::init_icp1db()
+{
+ uint8_t *rom = memregion("maincpu")->base();
- And repeat for every 0x100 segments...
+ // apply XORs depending on address
+ for (int i = 0x00000; i < 0x10000; i++)
+ {
+ uint8_t x = rom[i];
+
+ switch (i & 0x58)
+ {
+ case 0x00: x ^= 0x00; break;
+ case 0x08: x ^= 0x04; break;
+ case 0x10: x ^= 0x02; break;
+ case 0x18: x ^= 0x06; break;
+ case 0x40: x ^= 0x01; break;
+ case 0x48: x ^= 0x05; break;
+ case 0x50: x ^= 0x03; break;
+ case 0x58: x ^= 0x07; break;
+ }
+
+ if (i & 0x80)
+ x ^= 0x40;
+
+ rom[i] = x;
+ }
- If you apply these XOR's to get 00's, the code has no sense,
- so something is missing. For now will comment out the partial
- decryption code...
+ std::vector<uint8_t> buffer(0x10000);
-***********************************************/
+ memcpy(&buffer[0], rom, 0x10000);
-void goldnpkr_state::init_icp1db()
-{
-/*
- uint8_t *ROM = memregion("maincpu")->base();
-
- unsigned char rawData[256] = {
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB,
- 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB,
- 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9,
- 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
- 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
- 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
- 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
- 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
- 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
- 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
- 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
- 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
- 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
- };
-
- for (int i = 0; i < 0x10000; i++)
- {
- ROM[i] = ROM[i] ^ rawData[i & 0xff];
- }
-*/
+ // descramble address
+ for (int i = 0; i < 0x10000; i++)
+ {
+ rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 9, 8, 11, 10, 0, 1, 2, 3, 4, 5, 6, 7)];
+ }
}
/**********************************************
@@ -12114,6 +12109,7 @@ GAMEL( 1985, witchcdf, witchcrd, witchcrd, witchcdf, goldnpkr_state, empty_init
GAMEL( 199?, witchcdg, witchcrd, wcfalcon, witchcrd, goldnpkr_state, empty_init, ROT0, "Falcon", "Witch Card (Falcon, enhanced sound)", 0, layout_goldnpkr )
GAMEL( 1994, witchcdh, witchcrd, witchcrd, witchcdd, goldnpkr_state, empty_init, ROT0, "Proma", "Witch Card (German, WC3050, set 2 )", 0, layout_goldnpkr )
GAMEL( 1994, witchcdi, witchcrd, witchcrd, witchcdd, goldnpkr_state, empty_init, ROT0, "Proma", "Witch Card (German, WC3050, 27-4-94)", 0, layout_goldnpkr )
+GAME( 199?, witchcdj, witchcrd, witchcdj, witchcrd, goldnpkr_state, init_icp1db, ROT0, "<unknown>", "Witch Card (ICP-1)", 0 )
GAMEL( 1991, witchgme, 0, witchcrd, witchcrd, goldnpkr_state, empty_init, ROT0, "Video Klein", "Witch Game (Video Klein, set 1)", 0, layout_goldnpkr )
GAMEL( 1997, witchcdk, witchgme, witchcrd, witchcrd, goldnpkr_state, empty_init, ROT0, "Video Klein", "Witch Game (Video Klein, set 2)", MACHINE_NOT_WORKING, layout_goldnpkr )
@@ -12192,7 +12188,6 @@ GAMEL( 1984, bonuspkr, 0, goldnpkr, bonuspkr, goldnpkr_state, init_bonus
GAMEL( 198?, superdbl, pottnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "Karateco", "Super Double (French)", 0, layout_goldnpkr )
GAME( 198?, pokerdub, 0, pottnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "<unknown>", "unknown French poker game", MACHINE_NOT_WORKING ) // lacks of 2nd program ROM.
-GAME( 198?, pokerduc, 0, goldnpkr, goldnpkr, goldnpkr_state, init_icp1db, ROT0, "<unknown>", "unknown encrypted poker game", MACHINE_NOT_WORKING ) // encrypted.
GAME( 198?, pokersis, 0, bchancep, goldnpkr, goldnpkr_state, empty_init, ROT0, "Sisteme France", "unknown Sisteme France Poker", MACHINE_NOT_WORKING ) // fix banking (4 prgs?)...
GAMEL( 198?, bchancep, 0, bchancep, goldnpkr, goldnpkr_state, init_bchancep, ROT0, "<unknown>", "Bonne Chance! (Golden Poker prequel HW, set 1)", MACHINE_NOT_WORKING, layout_goldnpkr )
diff --git a/src/mame/drivers/goldstar.cpp b/src/mame/drivers/goldstar.cpp
index 080f3c5e514..a971afb7dd3 100644
--- a/src/mame/drivers/goldstar.cpp
+++ b/src/mame/drivers/goldstar.cpp
@@ -862,6 +862,18 @@ void cmaster_state::cm97_portmap(address_map &map) // TODO: other reads/writes
map(0x12, 0x12).portr("IN2").w(FUNC(cmaster_state::outport0_w));
}
+void cmaster_state::ss2001_portmap(address_map &map) // TODO: everything but ay
+{
+ map.global_mask(0xff);
+ map(0x01, 0x01).r("aysnd", FUNC(ay8910_device::data_r));
+ map(0x02, 0x03).w("aysnd", FUNC(ay8910_device::data_address_w));
+ map(0x13, 0x13).portr("IN0");
+ map(0x14, 0x14).portr("IN1");
+ map(0x15, 0x15).portr("IN2");
+ map(0x16, 0x16).portr("DSW1");
+ map(0x17, 0x17).portr("DSW2");
+}
+
void cmaster_state::chryangl_decrypted_opcodes_map(address_map &map)
{
map(0x0000, 0xf7ff).rom().share("decrypted_opcodes");
@@ -8919,6 +8931,13 @@ void cmaster_state::cm97(machine_config &config)
config.device_remove("ppi8255_1");
}
+void cmaster_state::ss2001(machine_config &config)
+{
+ cm97(config);
+
+ m_maincpu->set_addrmap(AS_IO, &cmaster_state::ss2001_portmap);
+}
+
void cmaster_state::chryangl(machine_config &config)
{
cm(config);
@@ -11262,8 +11281,7 @@ ROM_START( war3cb ) // WANG QL-0B V1.00 in NVRAM, SANGHO in GFX ROMs
ROM_LOAD( "27c64 3.bin", 0x4000, 0x2000, CRC(7f2d9f4c) SHA1(f7f62cd09091bd8e713237c6ac4ee3b4c28350b2) )
ROM_LOAD( "27c64 4.bin", 0x6000, 0x2000, CRC(1d7f7f2a) SHA1(787f9d2cea1f0690445c65c0a4827b07d85571b7) )
- ROM_REGION( 0x10000, "user1", ROMREGION_ERASEFF )
- ROM_FILL( 0x0000, 0x10000, 0xff ) // (girl bitmaps, not present)
+ ROM_REGION( 0x10000, "user1", ROMREGION_ERASEFF ) // no girls bitmap ROM
ROM_REGION( 0x200, "proms", 0 ) // not yet dumped
ROM_LOAD( "prom1", 0x000, 0x100, BAD_DUMP CRC(0489b760) SHA1(78f8632b17a76335183c5c204cdec856988368b0) )
@@ -16853,6 +16871,34 @@ ROM_START( fl7_tw ) // Serial 00000050E9B7.
ROM_END
+// PCB pic is blurred, but main components appear to be: TMPZ84C00AP-8, Winbond WF19054, 5 8-dip banks (dip sheet available)
+// it's a 3-reel 5-liner with an extra reel. Puts PATRICK SHANGHAI in NVRAM, so some kind of hack / bootleg
+ROM_START( ss2001 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "9.u26", 0x00000, 0x10000, CRC(9ddb0239) SHA1(15733481996de9becccd5b920e40220c6101becf) )
+
+ ROM_REGION( 0x80000, "gfx", 0 ) // all 27c1001
+ ROM_LOAD( "1.u1", 0x00000, 0x10000, CRC(f4075f1c) SHA1(16513735e181e14a01fe24be6de0b22ef5a894eb) ) // 1ST AND 2ND HALF IDENTICAL
+ ROM_IGNORE(0x10000)
+ ROM_LOAD( "2.u2", 0x10000, 0x10000, CRC(7df72d1b) SHA1(ad61c3de89be547014ca123b72bb9775bad55cdd) ) // 1ST AND 2ND HALF IDENTICAL
+ ROM_IGNORE(0x10000)
+ ROM_LOAD( "3.u3", 0x20000, 0x10000, CRC(c8db92f7) SHA1(3a77d9a21125e47396b06dc8c54625aa8ad54386) ) // 1ST AND 2ND HALF IDENTICAL
+ ROM_IGNORE(0x10000)
+ ROM_LOAD( "4.u4", 0x30000, 0x10000, CRC(bdca2cd5) SHA1(6139a697321475ac6fefac5b5a9f76c8de30f2f8) ) // 1ST AND 2ND HALF IDENTICAL
+ ROM_IGNORE(0x10000)
+ ROM_LOAD( "5.u5", 0x40000, 0x10000, CRC(c01acca1) SHA1(f2caed0b8624fb224f41323f15eaa9ce3fadd886) ) // 1ST AND 2ND HALF IDENTICAL
+ ROM_IGNORE(0x10000)
+ ROM_LOAD( "6.u6", 0x50000, 0x10000, CRC(a6194545) SHA1(74ddda87ad55e8bce1e986dde8fd371ab8843ceb) ) // 1ST AND 2ND HALF IDENTICAL
+ ROM_IGNORE(0x10000)
+ ROM_LOAD( "7.u7", 0x60000, 0x10000, CRC(03375cf9) SHA1(d336c4dff53a7368c9264a02fbc53afd0776a9cd) ) // 1ST AND 2ND HALF IDENTICAL
+ ROM_IGNORE(0x10000)
+ ROM_LOAD( "8.u8", 0x70000, 0x10000, CRC(2ad9778b) SHA1(05d8e0be028060cbe78ff1ff927f15f8114f8508) ) // 1ST AND 2ND HALF IDENTICAL
+ ROM_IGNORE(0x10000)
+
+ ROM_REGION( 0x2000, "proms", 0 )
+ ROM_LOAD( "d27hc65d.bin", 0x0000, 0x02000, CRC(af8ce88d) SHA1(59d59b6b739aed4f6ee618db04af9ab9d2873bed) ) // colour data is at 0x1800-0x18ff
+ROM_END
+
/*********************************************************************************************************************/
void goldstar_state::init_goldstar()
@@ -18560,6 +18606,8 @@ GAMEL(1999, unkch4, scmaster, unkch, unkch4, unkch_state, init_unkch
GAME( 1996, cherry96, scmaster, unkch, unkch4, unkch_state, init_unkch4, ROT0, "bootleg", "New Cherry '96 (bootleg of New Fruit Bonus?)", MACHINE_NOT_WORKING ) // need to be moved to another machine...
+// this has a 4th reel
+GAME( 200?, ss2001, 0, ss2001, cmaster, cmaster_state, empty_init, ROT0, "bootleg", "Super Shanghai 2001", MACHINE_IS_SKELETON ) // TODO: everything
/* Stealth sets.
These have hidden games inside that can be switched to avoid inspections, police or whatever purposes)... */
diff --git a/src/mame/drivers/iphone2g.cpp b/src/mame/drivers/iphone2g.cpp
index 868f520884f..897bd09a767 100644
--- a/src/mame/drivers/iphone2g.cpp
+++ b/src/mame/drivers/iphone2g.cpp
@@ -10,14 +10,212 @@
#include "emu.h"
#include "cpu/arm7/arm7.h"
+#include "cpu/arm7/arm7core.h"
+#include "machine/bankdev.h"
+#include "machine/vic_pl192.h"
#include "screen.h"
+class iphone2g_spi_device : public device_t, public device_memory_interface
+{
+public:
+ iphone2g_spi_device(const machine_config &mconfig, const char* tag, device_t *owner, uint32_t clock = 0);
+
+ auto out_irq_cb() { return m_out_irq_func.bind(); }
+
+ void map(address_map &map);
+
+protected:
+ iphone2g_spi_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;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ virtual space_config_vector memory_space_config() const override;
+
+private:
+ static constexpr device_timer_id TIMER_SEND_IRQ = 0;
+
+ address_space_config m_mmio_config;
+
+ devcb_write_line m_out_irq_func;
+
+ u8 cmd, tx_data;
+ u32 ctrl;
+ u16 status;
+};
+
+DECLARE_DEVICE_TYPE(IPHONE2G_SPI, iphone2g_spi_device)
+
+void iphone2g_spi_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ m_out_irq_func(1);
+}
+
+void iphone2g_spi_device::map(address_map &map)
+{
+ map(0x00,0x03).lrw32(NAME([this](offs_t offset){ return ctrl; }), NAME([this](offs_t offset, u32 data){
+ if(data & 1)
+ {
+ status |= 0xfff2;
+ cmd = tx_data;
+ timer_set(attotime::from_hz(1'000), TIMER_SEND_IRQ);
+ }
+ ctrl = data;
+ }));
+ map(0x08, 0x09).lr16([this](offs_t offset){ return status; }, "status").umask32(0x0000ffff);
+ map(0x10, 0x10).lrw8(NAME([this](offs_t offset){ return tx_data; }), NAME([this](offs_t offset, u8 data){ tx_data = data; })).umask32(0x000000ff);
+ map(0x20, 0x20).lr8([this](offs_t offset){
+ // FIXME: make this less hacky
+ switch(cmd)
+ {
+ case 0x95: return 0x01;
+ case 0xda: return 0x71;
+ case 0xdb: return 0xc2;
+ case 0xdc: return 0x00;
+ }
+ return 0;
+ }, "rx_data");
+}
+
+device_memory_interface::space_config_vector iphone2g_spi_device::memory_space_config() const
+{
+ return space_config_vector{
+ std::make_pair(0, &m_mmio_config)
+ };
+}
+
+void iphone2g_spi_device::device_resolve_objects()
+{
+ // resolve callbacks
+ m_out_irq_func.resolve_safe();
+}
+
+void iphone2g_spi_device::device_start()
+{
+ save_item(NAME(cmd));
+ save_item(NAME(ctrl));
+ save_item(NAME(tx_data));
+ save_item(NAME(status));
+}
+
+void iphone2g_spi_device::device_reset()
+{
+ cmd = ctrl= status = tx_data = 0;
+}
+
+DEFINE_DEVICE_TYPE(IPHONE2G_SPI, iphone2g_spi_device, "iphone2g_spi", "iPhone 2G SPI controller")
+
+iphone2g_spi_device::iphone2g_spi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_memory_interface(mconfig, *this)
+ , m_mmio_config("mmio", ENDIANNESS_LITTLE, 32, 32, 0)
+ , m_out_irq_func(*this)
+{
+}
+
+iphone2g_spi_device::iphone2g_spi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : iphone2g_spi_device(mconfig, IPHONE2G_SPI, tag, owner, clock)
+{
+}
+
+class iphone2g_timer_device : public device_t, public device_memory_interface
+{
+public:
+ iphone2g_timer_device(const machine_config &mconfig, const char* tag, device_t *owner, uint32_t clock = 0);
+
+ auto out_irq_cb() { return m_out_irq_func.bind(); }
+
+ void map(address_map &map);
+ void timer_map(address_map &map);
+
+protected:
+ iphone2g_timer_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;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ virtual space_config_vector memory_space_config() const override;
+
+private:
+ static constexpr device_timer_id TIMER_TICK = 0;
+
+ address_space_config m_mmio_config;
+
+ devcb_write_line m_out_irq_func;
+
+ struct timer
+ {
+ u16 config;
+ u8 state;
+ u32 count_buffer[2], count;
+ } timers[7];
+
+ u64 ticks;
+};
+
+DECLARE_DEVICE_TYPE(IPHONE2G_TIMER, iphone2g_timer_device)
+
+void iphone2g_timer_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ m_out_irq_func(1);
+}
+
+void iphone2g_timer_device::map(address_map &map)
+{
+}
+
+device_memory_interface::space_config_vector iphone2g_timer_device::memory_space_config() const
+{
+ return space_config_vector{
+ std::make_pair(0, &m_mmio_config)
+ };
+}
+
+void iphone2g_timer_device::device_resolve_objects()
+{
+ // resolve callbacks
+ m_out_irq_func.resolve_safe();
+}
+
+void iphone2g_timer_device::device_start()
+{
+}
+
+void iphone2g_timer_device::device_reset()
+{
+}
+
+DEFINE_DEVICE_TYPE(IPHONE2G_TIMER, iphone2g_timer_device, "iphone2g_timer", "iPhone 2G timers")
+
+iphone2g_timer_device::iphone2g_timer_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_memory_interface(mconfig, *this)
+ , m_mmio_config("mmio", ENDIANNESS_LITTLE, 32, 32, 0)
+ , m_out_irq_func(*this)
+{
+}
+
+iphone2g_timer_device::iphone2g_timer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : iphone2g_timer_device(mconfig, IPHONE2G_TIMER, tag, owner, clock)
+{
+}
+
class iphone2g_state : public driver_device
{
public:
iphone2g_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
+ m_vic0(*this, "vic0"),
+ m_vic1(*this, "vic1"),
+ m_spi(*this, {"spi0", "spi1", "spi2"}),
+ m_timers(*this, "timers"),
m_ram(*this, "ram"),
m_bios(*this, "bios"),
m_screen(*this, "screen")
@@ -33,7 +231,11 @@ protected:
private:
required_device<cpu_device> m_maincpu;
- required_shared_ptr<uint32_t> m_ram;
+ required_device<vic_pl192_device> m_vic0;
+ required_device<vic_pl192_device> m_vic1;
+ required_device_array<iphone2g_spi_device, 3> m_spi;
+ required_device<iphone2g_timer_device> m_timers;
+ optional_shared_ptr<uint32_t> m_ram;
required_region_ptr<uint32_t> m_bios;
required_device<screen_device> m_screen;
@@ -62,15 +264,19 @@ READ32_MEMBER(iphone2g_state::clock1_r)
void iphone2g_state::mem_map(address_map &map)
{
- map(0x00000000, 0x07FFFFFF).mirror(0x18000000).ram().share("ram"); /* DRAM */
- map(0x20000000, 0x2000FFFF).rom().region("bios", 0); /* BIOS */
- map(0x22000000, 0x224FFFFF).ram(); /* SRAM */
- map(0x3C500000, 0x3C500FFF).r(FUNC(iphone2g_state::clock1_r)).nopw();
+ map(0x00000000, 0x0000ffff).mirror(0x20000000).rom().region("bios", 0); /* BIOS */
+ map(0x22000000, 0x224fffff).ram(); /* SRAM */
+ map(0x38e00000, 0x38e00fff).m(m_vic0, FUNC(vic_pl192_device::map));
+ map(0x38e01000, 0x38e01fff).m(m_vic1, FUNC(vic_pl192_device::map));
+ map(0x3c300000, 0x3c3000ff).m(m_spi[0], FUNC(iphone2g_spi_device::map));
+ map(0x3c500000, 0x3c500fff).r(FUNC(iphone2g_state::clock1_r)).nopw();
+ map(0x3ce00000, 0x3ce000ff).m(m_spi[1], FUNC(iphone2g_spi_device::map));
+ map(0x3d200000, 0x3d2000ff).m(m_spi[2], FUNC(iphone2g_spi_device::map));
}
void iphone2g_state::machine_start()
{
- std::copy_n(m_bios.target(), m_bios.length(), m_ram.target());
+ //std::copy_n(m_bios.target(), m_bios.length(), m_ram.target());
}
void iphone2g_state::machine_reset()
@@ -83,6 +289,24 @@ void iphone2g_state::iphone2g(machine_config &config)
ARM1176JZF_S(config, m_maincpu, XTAL(12'000'000) * 103 / 3); //412 MHz, downclocked from 600 MHz
m_maincpu->set_addrmap(AS_PROGRAM, &iphone2g_state::mem_map);
+ PL192_VIC(config, m_vic0);
+ m_vic0->out_irq_cb().set_inputline("maincpu", ARM7_IRQ_LINE);
+ m_vic0->out_fiq_cb().set_inputline("maincpu", ARM7_FIRQ_LINE);
+
+ IPHONE2G_SPI(config, m_spi[0], XTAL(12'000'000));
+ m_spi[0]->out_irq_cb().set(m_vic0, FUNC(vic_pl192_device::irq_w<0x09>));
+
+ IPHONE2G_SPI(config, m_spi[1], XTAL(12'000'000));
+ m_spi[1]->out_irq_cb().set(m_vic0, FUNC(vic_pl192_device::irq_w<0x0a>));
+
+ IPHONE2G_SPI(config, m_spi[2], XTAL(12'000'000));
+ m_spi[2]->out_irq_cb().set(m_vic0, FUNC(vic_pl192_device::irq_w<0x0b>));
+
+ IPHONE2G_TIMER(config, m_timers, XTAL(12'000'000));
+ m_timers->out_irq_cb().set(m_vic0, FUNC(vic_pl192_device::irq_w<0x07>));
+
+ PL192_VIC(config, m_vic1);
+
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(XTAL(12'000'000), 320, 0, 320, 480, 0, 480); //Complete guess
m_screen->set_screen_update(FUNC(iphone2g_state::screen_update));
diff --git a/src/mame/drivers/iris3130.cpp b/src/mame/drivers/iris3130.cpp
index 1fa805fae13..a8ad62f5175 100644
--- a/src/mame/drivers/iris3130.cpp
+++ b/src/mame/drivers/iris3130.cpp
@@ -2,21 +2,19 @@
// copyright-holders:Ryan Holtz
/****************************************************************************
- drivers/sgi_ip2.cpp
- SGI IRIS 3130 skeleton driver with some meat on its bones
-
- by Ryan Holtz
+ SGI IRIS 3130 skeleton driver
0x00000000 - ? RAM (?)
0x30000000 - 0x30017fff ROM (3x32k)
0x30800000 - 0x30800000 Mouse Buttons (1)
0x31000000 - 0x31000001 Mouse Quadrature (2)
+ 0x31800000 - 0x31800001 DIP Switches
0x32000000 - 0x3200000f DUART0 (serial console on channel B at 19200 baud 8N1, channel A set to 600 baud 8N1 (mouse?))
0x32800000 - 0x3280000f DUART1 (printer/modem?)
0x33000000 - 0x330007ff SRAM (2k)
0x34000000 - 0x34000000 Clock Control (1)
0x35000000 - 0x35000000 Clock Data (1)
- 0x36000000 - 0x36000000 OS Base (1)
+ 0x36000000 - 0x36000000 Kernel Base (1)
0x38000000 - 0x38000001 Status Register (2)
0x39000000 - 0x39000000 Parity control (1)
0x3a000000 - 0x3a000000 Multibus Protection (1)
@@ -27,10 +25,7 @@
0x3f000000 - 0x3f000001 Stack Limit (2)
TODO:
- Hook up keyboard
- Hook up mouse
- Hook up graphics
- Hook up mass storage
+ Most everything
Interrupts:
M68K:
@@ -39,376 +34,563 @@
****************************************************************************/
#include "emu.h"
+
+#include "imagedev/snapquik.h"
+
#include "bus/rs232/rs232.h"
#include "cpu/m68000/m68000.h"
-#include "machine/mc146818.h" /* TOD clock */
-#include "machine/mc68681.h" /* DUART0, DUART1 */
+#include "machine/bankdev.h"
+#include "machine/mc146818.h"
+#include "machine/mc68681.h"
+
+#include <vector>
+
+#define LOG_RTC (1 << 0)
+#define LOG_INVALID_SEGMENT (1 << 1)
+#define LOG_OTHER (1 << 2)
+
+#define VERBOSE (LOG_OTHER)
+#include "logmacro.h"
-class sgi_ip2_state : public driver_device
+class iris3000_state : public driver_device
{
public:
- sgi_ip2_state(const machine_config &mconfig, device_type type, const char *tag)
+ iris3000_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_mainram(*this, "mainram"),
m_duarta(*this, "duart68681a"),
m_duartb(*this, "duart68681b"),
- m_bss(*this, "bss"),
- m_ptmap(*this, "ptmap"),
- m_rtc(*this, "rtc")
+ m_text_data_space(*this, "text_data"),
+ m_stack_space(*this, "stack"),
+ m_kernel_space(*this, "kernel"),
+ m_system_space(*this, "system"),
+ m_multibus_mem_space(*this, "multibus_mem"),
+ m_multibus_io_space(*this, "multibus_io"),
+ m_geometry_pipe_space(*this, "geometry_pipe"),
+ m_fpa_space(*this, "fpa"),
+ m_page_table_map(*this, "ptmap"),
+ m_rtc(*this, "rtc"),
+ m_dips(*this, "DIPS")
{
}
- void sgi_ip2(machine_config &config);
+ void iris3130(machine_config &config);
- void init_sgi_ip2();
+ DECLARE_QUICKLOAD_LOAD_MEMBER(load_romboard);
private:
- DECLARE_READ8_MEMBER(sgi_ip2_m_but_r);
- DECLARE_WRITE8_MEMBER(sgi_ip2_m_but_w);
- DECLARE_READ16_MEMBER(sgi_ip2_m_quad_r);
- DECLARE_WRITE16_MEMBER(sgi_ip2_m_quad_w);
- DECLARE_READ16_MEMBER(sgi_ip2_swtch_r);
- DECLARE_READ8_MEMBER(sgi_ip2_clock_ctl_r);
- DECLARE_WRITE8_MEMBER(sgi_ip2_clock_ctl_w);
- DECLARE_READ8_MEMBER(sgi_ip2_clock_data_r);
- DECLARE_WRITE8_MEMBER(sgi_ip2_clock_data_w);
- DECLARE_READ8_MEMBER(sgi_ip2_os_base_r);
- DECLARE_WRITE8_MEMBER(sgi_ip2_os_base_w);
- DECLARE_READ16_MEMBER(sgi_ip2_status_r);
- DECLARE_WRITE16_MEMBER(sgi_ip2_status_w);
- DECLARE_READ8_MEMBER(sgi_ip2_parctl_r);
- DECLARE_WRITE8_MEMBER(sgi_ip2_parctl_w);
- DECLARE_READ8_MEMBER(sgi_ip2_mbp_r);
- DECLARE_WRITE8_MEMBER(sgi_ip2_mbp_w);
- DECLARE_READ32_MEMBER(sgi_ip2_ptmap_r);
- DECLARE_WRITE32_MEMBER(sgi_ip2_ptmap_w);
- DECLARE_READ16_MEMBER(sgi_ip2_tdbase_r);
- DECLARE_WRITE16_MEMBER(sgi_ip2_tdbase_w);
- DECLARE_READ16_MEMBER(sgi_ip2_tdlmt_r);
- DECLARE_WRITE16_MEMBER(sgi_ip2_tdlmt_w);
- DECLARE_READ16_MEMBER(sgi_ip2_stkbase_r);
- DECLARE_WRITE16_MEMBER(sgi_ip2_stkbase_w);
- DECLARE_READ16_MEMBER(sgi_ip2_stklmt_r);
- DECLARE_WRITE16_MEMBER(sgi_ip2_stklmt_w);
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ void text_data_map(address_map &map);
+ void stack_map(address_map &map);
+ void kernel_map(address_map &map);
+ void system_map(address_map &map);
+ void multibus_mem_map(address_map &map);
+ void multibus_io_map(address_map &map);
+ void geometry_pipe_map(address_map &map);
+ void fpa_map(address_map &map);
+
+ DECLARE_READ32_MEMBER(mmu_r);
+ DECLARE_WRITE32_MEMBER(mmu_w);
+
+ DECLARE_READ8_MEMBER(mouse_buttons_r);
+ DECLARE_WRITE8_MEMBER(mouse_buttons_w);
+ DECLARE_READ16_MEMBER(mouse_quad_r);
+ DECLARE_WRITE16_MEMBER(mouse_quad_w);
+ DECLARE_READ16_MEMBER(dips_r);
+ DECLARE_READ8_MEMBER(clock_ctrl_r);
+ DECLARE_WRITE8_MEMBER(clock_ctrl_w);
+ DECLARE_READ8_MEMBER(clock_data_r);
+ DECLARE_WRITE8_MEMBER(clock_data_w);
+ DECLARE_READ8_MEMBER(kernel_base_r);
+ DECLARE_WRITE8_MEMBER(kernel_base_w);
+ DECLARE_READ16_MEMBER(status_r);
+ DECLARE_WRITE16_MEMBER(status_w);
+ DECLARE_READ8_MEMBER(parity_ctrl_r);
+ DECLARE_WRITE8_MEMBER(parity_ctrl_w);
+ DECLARE_READ8_MEMBER(multibus_prot_r);
+ DECLARE_WRITE8_MEMBER(multibus_prot_w);
+ DECLARE_READ32_MEMBER(page_table_map_r);
+ DECLARE_WRITE32_MEMBER(page_table_map_w);
+ DECLARE_READ16_MEMBER(text_data_base_r);
+ DECLARE_WRITE16_MEMBER(text_data_base_w);
+ DECLARE_READ16_MEMBER(text_data_limit_r);
+ DECLARE_WRITE16_MEMBER(text_data_limit_w);
+ DECLARE_READ16_MEMBER(stack_base_r);
+ DECLARE_WRITE16_MEMBER(stack_base_w);
+ DECLARE_READ16_MEMBER(stack_limit_r);
+ DECLARE_WRITE16_MEMBER(stack_limit_w);
+ DECLARE_READ8_MEMBER(romboard_r);
+ DECLARE_WRITE8_MEMBER(romboard_w);
DECLARE_WRITE_LINE_MEMBER(duarta_irq_handler);
DECLARE_WRITE_LINE_MEMBER(duartb_irq_handler);
- required_device<cpu_device> m_maincpu;
- void sgi_ip2_map(address_map &map);
+ void mem_map(address_map &map);
+
+ required_device<m68020_device> m_maincpu;
required_shared_ptr<uint32_t> m_mainram;
required_device<mc68681_device> m_duarta;
required_device<mc68681_device> m_duartb;
- required_shared_ptr<uint32_t> m_bss;
- required_shared_ptr<uint32_t> m_ptmap;
- required_device<mc146818_device> m_rtc;
- uint8_t m_mbut;
- uint16_t m_mquad;
- uint16_t m_tdbase;
- uint16_t m_tdlmt;
- uint16_t m_stkbase;
- uint16_t m_stklmt;
- uint8_t m_parctl;
- uint8_t m_mbp;
- virtual void machine_start() override;
- virtual void machine_reset() override;
- inline void ATTR_PRINTF(3,4) verboselog( int n_level, const char *s_fmt, ... );
-};
+ required_device<address_map_bank_device> m_text_data_space;
+ required_device<address_map_bank_device> m_stack_space;
+ required_device<address_map_bank_device> m_kernel_space;
+ required_device<address_map_bank_device> m_system_space;
+ required_device<address_map_bank_device> m_multibus_mem_space;
+ required_device<address_map_bank_device> m_multibus_io_space;
+ required_device<address_map_bank_device> m_geometry_pipe_space;
+ required_device<address_map_bank_device> m_fpa_space;
+ required_shared_ptr<uint32_t> m_page_table_map;
+ required_device<mc146818_device> m_rtc;
+ required_ioport m_dips;
-#define VERBOSE_LEVEL ( 0 )
-
-#define ENABLE_VERBOSE_LOG (0)
+ enum
+ {
+ MOUSE_BUTTON_RIGHT = 0x01,
+ MOUSE_BUTTON_MIDDLE = 0x02,
+ MOUSE_BUTTON_LEFT = 0x04,
+ BOARD_REV1 = 0x60, /* Board revision - #1 */
+ BOARD_REV2 = 0x50, /* Board revision - #2 */
+
+ MOUSE_XFIRE = 0x01, /* X Quadrature Fired, active low */
+ MOUSE_XCHANGE = 0x02, /* MOUSE_XCHANGE ? x-- : x++ */
+ MOUSE_YFIRE = 0x04, /* Y Quadrature Fired, active low */
+ MOUSE_YCHANGE = 0x08, /* MOUSE_YCHANGE ? y-- : y++ */
+
+ PAR_UR = 0x01, /* Check parity on user-mode reads */
+ PAR_UW = 0x02, /* Check parity on user-mode writes */
+ PAR_KR = 0x04, /* Check parity on kernel-mode reads */
+ PAR_KW = 0x08, /* Check parity on kernel-mode writes */
+ PAR_DIS0 = 0x10, /* Disable access to DUART0 and LEDs */
+ PAR_DIS1 = 0x20, /* Disable access to DUART1 */
+ PAR_MBR = 0x40, /* Check parity on multibus reads */
+ PAR_MBW = 0x80, /* Check parity on multibus writes */
+
+ MBP_DCACC = 0x01, /* Display controller access (I/O page 4) */
+ MBP_UCACC = 0x02, /* Update controller access (I/O page 3) */
+ MBP_GFACC = 0x04, /* Allow GF access (I/O page 1) */
+ MBP_DMACC = 0x08, /* Allow GL2 DMA access (0x8nnnnn - x0bnnnnn) */
+ MBP_LIOACC = 0x10, /* Allow lower I/O access (0x0nnnnn - 0x7nnnnn) */
+ MBP_HIOACC = 0x20, /* Allow upper I/O access (0x8nnnnn - 0xfnnnnn) */
+ MBP_LMACC = 0x40, /* Allow lower memory access (0x0nnnnn - 0x7nnnnn) */
+ MBP_HMACC = 0x80, /* Allow upper memory access (0x8nnnnn - 0xfnnnnn) */
+
+ STATUS_DIAG0 = 0,
+ STATUS_DIAG1 = 1,
+ STATUS_DIAG2 = 2,
+ STATUS_DIAG3 = 3,
+ STATUS_ENABEXT = 4,
+ STATUS_ENABINT = 5,
+ STATUS_BINIT = 6,
+ STATUS_NOTBOOT = 7,
+ STATUS_USERFPA = 8,
+ STATUS_USERGE = 9,
+ STATUS_SLAVE = 10,
+ STATUS_ENABCBRQ = 11,
+ STATUS_NOTGEMASTER = 12,
+ STATUS_GENBAD = 13,
+ STATUS_ENABWDOG = 14,
+ STATUS_QUICK_TOUT = 15
+ };
+
+ std::vector<uint8_t> m_file_data;
+ uint8_t m_mouse_buttons;
+ uint16_t m_mouse_quadrature;
+ uint16_t m_text_data_base;
+ uint16_t m_text_data_limit;
+ uint16_t m_stack_base;
+ uint16_t m_stack_limit;
+ uint16_t m_status;
+ uint8_t m_parity_ctrl;
+ uint8_t m_multibus_prot;
+};
-inline void ATTR_PRINTF(3,4) sgi_ip2_state::verboselog( int n_level, const char *s_fmt, ... )
+QUICKLOAD_LOAD_MEMBER(iris3000_state::load_romboard)
{
-#if ENABLE_VERBOSE_LOG
- if( VERBOSE_LEVEL >= n_level )
+ m_file_data.resize(quickload_size);
+
+ if (!quickload_size || image.fread(&m_file_data[0], quickload_size) != quickload_size)
{
- va_list v;
- char buf[ 32768 ];
- va_start( v, s_fmt );
- vsprintf( buf, s_fmt, v );
- va_end( v );
- logerror("%s: %s", machine().describe_context(), buf);
+ m_file_data.clear();
+ return image_init_result::FAIL;
}
-#endif
+ return image_init_result::PASS;
}
/***************************************************************************
MACHINE FUNCTIONS
***************************************************************************/
-#define MBUT_RIGHT 0x01 /* Right button */
-#define MBUT_MIDDLE 0x02 /* Middle button */
-#define MBUT_LEFT 0x04 /* Left button */
-#define BOARD_REV1 0x60 /* Board revision - #1 */
-#define BOARD_REV2 0x50 /* Board revision - #2 */
+READ32_MEMBER(iris3000_state::mmu_r)
+{
+ const uint8_t type = (offset >> 26) & 0xf;
+ const uint32_t vaddr = offset & 0x03ffffff;
+ const uint32_t page_offset = vaddr & 0x000003ff;
+ const uint32_t page_index = (vaddr >> 10) & 0x3fff;
+ const uint32_t phys_page = m_page_table_map[page_index] & 0x1fff;
+ const uint32_t paddr = (phys_page << 10) | page_offset;
-READ8_MEMBER(sgi_ip2_state::sgi_ip2_m_but_r)
-{
- verboselog(0, "sgi_ip2_m_but_r: %02x\n", m_mbut | BOARD_REV1);
- return m_mbut | BOARD_REV1;
+ uint32_t ret;
+ switch (type)
+ {
+ case 0: // Text/Data Segment
+ ret = m_text_data_space->read32(paddr, mem_mask);
+ break;
+ case 1: // Stack Segment
+ ret = m_stack_space->read32(paddr, mem_mask);
+ break;
+ case 2: // Kernel Segment
+ ret = m_kernel_space->read32(paddr, mem_mask);
+ break;
+ case 3: // System Segment
+ ret = m_system_space->read32(vaddr, mem_mask);
+ break;
+ case 4: // Multibus Memory Segment
+ ret = m_multibus_mem_space->read32(vaddr, mem_mask);
+ break;
+ case 5: // Multibus I/O Segment
+ ret = m_multibus_io_space->read32(vaddr, mem_mask);
+ break;
+ case 6: // Geometry Pipe Segment
+ ret = m_geometry_pipe_space->read32(vaddr, mem_mask);
+ break;
+ case 15: // Floating-Point Accelerator Segment
+ ret = m_fpa_space->read32(vaddr, mem_mask);
+ break;
+ default: // Unused/Unknown Segment
+ LOGMASKED(LOG_INVALID_SEGMENT, "%s: Invalid segment read: %08x & %08x\n", machine().describe_context(), offset << 2, mem_mask);
+ ret = 0;
+ break;
+ }
+ return ret;
}
-WRITE8_MEMBER(sgi_ip2_state::sgi_ip2_m_but_w)
+WRITE32_MEMBER(iris3000_state::mmu_w)
{
- verboselog(0, "sgi_ip2_m_but_w: %02x\n", data);
- m_mbut = data;
+ const uint8_t type = (offset >> 26) & 0xf;
+ const uint32_t vaddr = offset & 0x03ffffff;
+
+ const uint32_t page_offset = vaddr & 0x000003ff;
+ const uint32_t page_index = (vaddr >> 10) & 0x3fff;
+ const uint32_t phys_page = m_page_table_map[page_index] & 0x1fff;
+ const uint32_t paddr = (phys_page << 10) | page_offset;
+
+ switch (type)
+ {
+ case 0: // Text/Data Segment
+ m_text_data_space->write32(paddr, data, mem_mask);
+ break;
+ case 1: // Stack Segment
+ m_stack_space->write32(paddr, data, mem_mask);
+ break;
+ case 2: // Kernel Segment
+ m_kernel_space->write32(paddr, data, mem_mask);
+ break;
+ case 3: // System Segment
+ m_system_space->write32(vaddr, data, mem_mask);
+ break;
+ case 4: // Multibus Memory Segment
+ m_multibus_mem_space->write32(vaddr, data, mem_mask);
+ break;
+ case 5: // Multibus I/O Segment
+ m_multibus_io_space->write32(vaddr, data, mem_mask);
+ break;
+ case 6: // Geometry Pipe Segment
+ m_geometry_pipe_space->write32(vaddr, data, mem_mask);
+ break;
+ case 15: // Floating-Point Accelerator Segment
+ m_fpa_space->write32(vaddr, data, mem_mask);
+ break;
+ default: // Unused/Unknown Segment
+ LOGMASKED(LOG_INVALID_SEGMENT, "%s: Invalid segment write: %08x = %08x & %08x\n", machine().describe_context(), offset << 2, data, mem_mask);
+ break;
+ }
}
-#define MOUSE_XFIRE 0x01 /* X Quadrature Fired, active low */
-#define MOUSE_XCHANGE 0x02 /* MOUSE_XCHANGE ? x-- : x++ */
-#define MOUSE_YFIRE 0x04 /* Y Quadrature Fired, active low */
-#define MOUSE_YCHANGE 0x08 /* MOUSE_YCHANGE ? y-- : y++ */
+READ8_MEMBER(iris3000_state::mouse_buttons_r)
+{
+ LOGMASKED(LOG_OTHER, "%s: mouse_buttons_r: %02x\n", machine().describe_context(), m_mouse_buttons | BOARD_REV1);
+ return m_mouse_buttons | BOARD_REV1;
+}
+WRITE8_MEMBER(iris3000_state::mouse_buttons_w)
+{
+ LOGMASKED(LOG_OTHER, "%s: mouse_buttons_w (ignored): %02x\n", machine().describe_context(), data);
+}
-READ16_MEMBER(sgi_ip2_state::sgi_ip2_m_quad_r)
+READ16_MEMBER(iris3000_state::mouse_quad_r)
{
- verboselog(0, "sgi_ip2_m_quad_r: %04x\n", m_mquad);
- return m_mquad;
+ LOGMASKED(LOG_OTHER, "%s: mouse_quad_r: %04x & %04x\n", machine().describe_context(), m_mouse_quadrature, mem_mask);
+ return m_mouse_quadrature;
}
-WRITE16_MEMBER(sgi_ip2_state::sgi_ip2_m_quad_w)
+WRITE16_MEMBER(iris3000_state::mouse_quad_w)
{
- verboselog(0, "sgi_ip2_m_quad_w = %04x & %04x\n", data, mem_mask);
- COMBINE_DATA(&m_mquad);
+ LOGMASKED(LOG_OTHER, "%s: mouse_quad_w (ignored): %04x & %04x\n", machine().describe_context(), data, mem_mask);
}
-READ16_MEMBER(sgi_ip2_state::sgi_ip2_swtch_r)
+READ16_MEMBER(iris3000_state::dips_r)
{
- verboselog(0, "sgi_ip2_swtch_r: %04x\n", ioport("SWTCH")->read());
- return ioport("SWTCH")->read();
+ const uint16_t data = m_dips->read();
+ LOGMASKED(LOG_OTHER, "%s: dips_r: %04x & %04x\n", machine().describe_context(), data, mem_mask);
+ return data;
}
-READ8_MEMBER(sgi_ip2_state::sgi_ip2_clock_ctl_r)
+READ8_MEMBER(iris3000_state::clock_ctrl_r)
{
- uint8_t ret = m_rtc->read(1);
- verboselog(1, "sgi_ip2_clock_ctl_r: %02x\n", ret);
- return ret;
+ const uint8_t data = m_rtc->read(1);
+ LOGMASKED(LOG_RTC, "%s: clock_ctrl_r: %02x\n", machine().describe_context(), data);
+ return data;
}
-WRITE8_MEMBER(sgi_ip2_state::sgi_ip2_clock_ctl_w)
+WRITE8_MEMBER(iris3000_state::clock_ctrl_w)
{
- verboselog(1, "sgi_ip2_clock_ctl_w: %02x\n", data);
+ LOGMASKED(LOG_RTC, "%s: clock_ctrl_w: %02x\n", machine().describe_context(), data);
m_rtc->write(1, data);
}
-READ8_MEMBER(sgi_ip2_state::sgi_ip2_clock_data_r)
+READ8_MEMBER(iris3000_state::clock_data_r)
{
- uint8_t ret = m_rtc->read(0);
- verboselog(1, "sgi_ip2_clock_data_r: %02x\n", ret);
- return ret;
+ uint8_t data = m_rtc->read(0);
+ LOGMASKED(LOG_RTC, "%s: clock_data_r: %02x\n", machine().describe_context(), data);
+ return data;
}
-WRITE8_MEMBER(sgi_ip2_state::sgi_ip2_clock_data_w)
+WRITE8_MEMBER(iris3000_state::clock_data_w)
{
- verboselog(1, "sgi_ip2_clock_data_w: %02x\n", data);
+ LOGMASKED(LOG_RTC, "%s: clock_data_w: %02x\n", machine().describe_context(), data);
m_rtc->write(0, data);
}
-
-READ8_MEMBER(sgi_ip2_state::sgi_ip2_os_base_r)
+READ8_MEMBER(iris3000_state::kernel_base_r)
{
switch(offset)
{
default:
- verboselog(0, "sgi_ip2_os_base_r: Unknown Register %08x\n", 0x36000000 + offset);
+ LOGMASKED(LOG_OTHER, "%s: kernel_base_r: Unknown Register %08x\n", machine().describe_context(), 0x36000000 + offset);
break;
}
return 0;
}
-WRITE8_MEMBER(sgi_ip2_state::sgi_ip2_os_base_w)
+WRITE8_MEMBER(iris3000_state::kernel_base_w)
{
switch(offset)
{
default:
- verboselog(0, "sgi_ip2_os_base_w: Unknown Register %08x = %02x\n", 0x36000000 + offset, data);
+ LOGMASKED(LOG_OTHER, "%s: kernel_base_w: Unknown Register %08x = %02x\n", machine().describe_context(), 0x36000000 + offset, data);
break;
}
}
-READ16_MEMBER(sgi_ip2_state::sgi_ip2_status_r)
+READ16_MEMBER(iris3000_state::status_r)
{
- switch(offset)
- {
- default:
- verboselog(0, "sgi_ip2_status_r: Unknown Register %08x & %04x\n", 0x38000000 + (offset << 1), mem_mask);
- break;
- }
- return 0;
+ LOGMASKED(LOG_OTHER, "%s: status_r: %04x & %04x\n", machine().describe_context(), m_status, mem_mask);
+ return m_status;
}
-WRITE16_MEMBER(sgi_ip2_state::sgi_ip2_status_w)
+WRITE16_MEMBER(iris3000_state::status_w)
{
- switch(offset)
- {
- default:
- verboselog(0, "sgi_ip2_status_w: Unknown Register %08x = %04x & %04x\n", 0x38000000 + (offset << 1), data, mem_mask);
- break;
- }
+ LOGMASKED(LOG_OTHER, "%s: status_w: %04x & %04x (DIAG:%x, ENABEXT:%d, ENABINT:%d, BINIT:%d, NOTBOOT:%d)\n", machine().describe_context(), data, mem_mask,
+ data & 0xf, BIT(data, STATUS_ENABEXT), BIT(data, STATUS_ENABINT), BIT(data, STATUS_BINIT), BIT(data, STATUS_NOTBOOT));
+ LOGMASKED(LOG_OTHER, "%s: (USERFPA:%d, USERGE:%d, SLAVE:%d, ENABCBRQ:%d)\n", machine().describe_context(),
+ BIT(data, STATUS_USERFPA), BIT(data, STATUS_USERGE), BIT(data, STATUS_SLAVE), BIT(data, STATUS_ENABCBRQ));
+ LOGMASKED(LOG_OTHER, "%s: (NOTGEMASTER:%d, GENBAD:%d, ENABWDOG:%d, QUICK_TOUT:%d)\n", machine().describe_context(),
+ BIT(data, STATUS_NOTGEMASTER), BIT(data, STATUS_GENBAD), BIT(data, STATUS_ENABWDOG), BIT(data, STATUS_QUICK_TOUT));
+ COMBINE_DATA(&m_status);
}
-#define PAR_UR 0x01 /* Check parity on user-mode reads */
-#define PAR_UW 0x02 /* Check parity on user-mode writes */
-#define PAR_KR 0x04 /* Check parity on kernel-mode reads */
-#define PAR_KW 0x08 /* Check parity on kernel-mode writes */
-#define PAR_DIS0 0x10 /* Disable access to DUART0 and LEDs */
-#define PAR_DIS1 0x20 /* Disable access to DUART1 */
-#define PAR_MBR 0x40 /* Check parity on multibus reads */
-#define PAR_MBW 0x80 /* Check parity on multibus writes */
+READ8_MEMBER(iris3000_state::parity_ctrl_r)
+{
+ LOGMASKED(LOG_OTHER, "%s: parity_ctrl_r: %02x\n", m_parity_ctrl);
+ return m_parity_ctrl;
+}
+WRITE8_MEMBER(iris3000_state::parity_ctrl_w)
+{
+ LOGMASKED(LOG_OTHER, "%s: parity_ctrl_w: %02x\n", machine().describe_context(), data);
+ m_parity_ctrl = data;
+}
-READ8_MEMBER(sgi_ip2_state::sgi_ip2_parctl_r)
+READ8_MEMBER(iris3000_state::multibus_prot_r)
{
- verboselog(0, "sgi_ip2_parctl_r: %02x\n", m_parctl);
- return m_parctl;
+ LOGMASKED(LOG_OTHER, "%s: multibus_prot_r: %02x\n", machine().describe_context(), m_multibus_prot);
+ return m_multibus_prot;
}
-WRITE8_MEMBER(sgi_ip2_state::sgi_ip2_parctl_w)
+WRITE8_MEMBER(iris3000_state::multibus_prot_w)
{
- verboselog(0, "sgi_ip2_parctl_w: %02x\n", data);
- m_parctl = data;
+ LOGMASKED(LOG_OTHER, "%s: multibus_prot_w: %02x\n", machine().describe_context(), data);
+ m_multibus_prot = data;
}
-#define MBP_DCACC 0x01 /* Display controller access (I/O page 4) */
-#define MBP_UCACC 0x02 /* Update controller access (I/O page 3) */
-#define MBP_GFACC 0x04 /* Allow GF access (I/O page 1) */
-#define MBP_DMACC 0x08 /* Allow GL2 DMA access (0x8nnnnn - x0bnnnnn) */
-#define MBP_LIOACC 0x10 /* Allow lower I/O access (0x0nnnnn - 0x7nnnnn) */
-#define MBP_HIOACC 0x20 /* Allow upper I/O access (0x8nnnnn - 0xfnnnnn) */
-#define MBP_LMACC 0x40 /* Allow lower memory access (0x0nnnnn - 0x7nnnnn) */
-#define MBP_HMACC 0x80 /* Allow upper memory access (0x8nnnnn - 0xfnnnnn) */
+READ32_MEMBER(iris3000_state::page_table_map_r)
+{
+ LOGMASKED(LOG_OTHER, "%s: page_table_map_r: %08x = %08x & %08x\n", machine().describe_context(), 0x3b000000 + (offset << 2), m_page_table_map[offset], mem_mask);
+ return m_page_table_map[offset];
+}
+WRITE32_MEMBER(iris3000_state::page_table_map_w)
+{
+ LOGMASKED(LOG_OTHER, "%s: page_table_map_w: %08x = %08x & %08x\n", machine().describe_context(), 0x3b000000 + (offset << 2), data, mem_mask);
+ COMBINE_DATA(&m_page_table_map[offset]);
+}
-READ8_MEMBER(sgi_ip2_state::sgi_ip2_mbp_r)
+READ16_MEMBER(iris3000_state::text_data_base_r)
{
- verboselog(0, "sgi_ip2_mbp_r: %02x\n", m_mbp);
- return m_mbp;
+ LOGMASKED(LOG_OTHER, "%s: text_data_base_r: %04x & %04x\n", machine().describe_context(), m_text_data_base, mem_mask);
+ return m_text_data_base;
}
-WRITE8_MEMBER(sgi_ip2_state::sgi_ip2_mbp_w)
+WRITE16_MEMBER(iris3000_state::text_data_base_w)
{
- verboselog(0, "sgi_ip2_mbp_w: %02x\n", data);
- m_mbp = data;
+ LOGMASKED(LOG_OTHER, "%s: text_data_base_w: %04x & %04x\n", machine().describe_context(), data, mem_mask);
+ COMBINE_DATA(&m_text_data_base);
}
-READ32_MEMBER(sgi_ip2_state::sgi_ip2_ptmap_r)
+READ16_MEMBER(iris3000_state::text_data_limit_r)
{
- verboselog(0, "sgi_ip2_ptmap_r: %08x = %08x & %08x\n", 0x3b000000 + (offset << 2), m_ptmap[offset], mem_mask);
- return m_ptmap[offset];
+ LOGMASKED(LOG_OTHER, "%s: text_data_limit_r: %04x & %04x\n", machine().describe_context(), m_text_data_limit, mem_mask);
+ return m_text_data_limit;
}
-WRITE32_MEMBER(sgi_ip2_state::sgi_ip2_ptmap_w)
+WRITE16_MEMBER(iris3000_state::text_data_limit_w)
{
- verboselog(0, "sgi_ip2_ptmap_w: %08x = %08x & %08x\n", 0x3b000000 + (offset << 2), data, mem_mask);
- COMBINE_DATA(&m_ptmap[offset]);
+ LOGMASKED(LOG_OTHER, "%s: text_data_limit_w: %04x & %04x\n", machine().describe_context(), data, mem_mask);
+ COMBINE_DATA(&m_text_data_limit);
}
-READ16_MEMBER(sgi_ip2_state::sgi_ip2_tdbase_r)
+READ16_MEMBER(iris3000_state::stack_base_r)
{
- verboselog(0, "sgi_ip2_tdbase_r: %04x\n", m_tdbase);
- return m_tdbase;
+ LOGMASKED(LOG_OTHER, "%s: stack_base_r: %04x & %04x\n", machine().describe_context(), m_stack_base, mem_mask);
+ return m_stack_base;
}
-WRITE16_MEMBER(sgi_ip2_state::sgi_ip2_tdbase_w)
+WRITE16_MEMBER(iris3000_state::stack_base_w)
{
- verboselog(0, "sgi_ip2_tdbase_w: %04x & %04x\n", data, mem_mask);
- COMBINE_DATA(&m_tdbase);
+ LOGMASKED(LOG_OTHER, "%s: stack_base_w: %04x & %04x\n", machine().describe_context(), data, mem_mask);
+ COMBINE_DATA(&m_stack_base);
}
-READ16_MEMBER(sgi_ip2_state::sgi_ip2_tdlmt_r)
+READ16_MEMBER(iris3000_state::stack_limit_r)
+{
+ LOGMASKED(LOG_OTHER, "%s: stack_limit_r: %04x & %04x\n", machine().describe_context(), m_stack_limit, mem_mask);
+ return m_stack_limit;
+}
+
+WRITE16_MEMBER(iris3000_state::stack_limit_w)
{
- verboselog(0, "sgi_ip2_tdlmt_r: %04x\n", m_tdlmt);
- return m_tdlmt;
+ LOGMASKED(LOG_OTHER, "%s: stack_limit_w: %04x & %04x\n", machine().describe_context(), data, mem_mask);
+ COMBINE_DATA(&m_stack_limit);
}
-WRITE16_MEMBER(sgi_ip2_state::sgi_ip2_tdlmt_w)
+READ8_MEMBER(iris3000_state::romboard_r)
{
- verboselog(0, "sgi_ip2_tdlmt_w: %04x & %04x\n", data, mem_mask);
- COMBINE_DATA(&m_tdlmt);
+ const uint8_t data = offset < m_file_data.size() ? m_file_data[offset] : 0;
+ LOGMASKED(LOG_OTHER, "%s: romboard_r: %08x = %02x\n", machine().describe_context(), 0x40000000 + offset, data);
+ return data;
}
+WRITE8_MEMBER(iris3000_state::romboard_w)
+{
+ if (offset > m_file_data.size())
+ m_file_data.resize(offset + 1);
+ m_file_data[offset] = data;
+ LOGMASKED(LOG_OTHER, "%s: romboard write: %08x = %02x\n", machine().describe_context(), 0x40000000 + offset, data);
+}
-READ16_MEMBER(sgi_ip2_state::sgi_ip2_stkbase_r)
+void iris3000_state::machine_start()
{
- verboselog(0, "sgi_ip2_stkbase_r: %04x\n", m_stkbase);
- return m_stkbase;
}
-WRITE16_MEMBER(sgi_ip2_state::sgi_ip2_stkbase_w)
+void iris3000_state::machine_reset()
{
- verboselog(0, "sgi_ip2_stkbase_w: %04x & %04x\n", data, mem_mask);
- COMBINE_DATA(&m_stkbase);
+ uint32_t *src = (uint32_t*)(memregion("maincpu")->base());
+ uint32_t *dst = m_mainram;
+ memcpy(dst, src, 8);
}
+/***************************************************************************
+ ADDRESS MAPS
+***************************************************************************/
-READ16_MEMBER(sgi_ip2_state::sgi_ip2_stklmt_r)
+void iris3000_state::text_data_map(address_map &map)
{
- verboselog(0, "sgi_ip2_stklmt_r: %04x\n", m_stklmt);
- return m_stklmt;
+ map(0x0000000, 0x03fffff).ram().share("mainram");
}
-WRITE16_MEMBER(sgi_ip2_state::sgi_ip2_stklmt_w)
+void iris3000_state::stack_map(address_map &map)
{
- verboselog(0, "sgi_ip2_stklmt_w: %04x & %04x\n", data, mem_mask);
- COMBINE_DATA(&m_stklmt);
+ map(0x0000000, 0x03fffff).ram().share("mainram");
}
-void sgi_ip2_state::machine_start()
+void iris3000_state::kernel_map(address_map &map)
{
+ map(0x0000000, 0x03fffff).ram().share("mainram");
}
-void sgi_ip2_state::machine_reset()
+void iris3000_state::system_map(address_map &map)
{
+ map(0x0000000, 0x0017fff).rom().region("maincpu", 0);
+ map(0x0800000, 0x0800003).rw(FUNC(iris3000_state::mouse_buttons_r), FUNC(iris3000_state::mouse_buttons_w));
+ map(0x1000000, 0x1000003).rw(FUNC(iris3000_state::mouse_quad_r), FUNC(iris3000_state::mouse_quad_w));
+ map(0x1800000, 0x1800003).r(FUNC(iris3000_state::dips_r));
+ map(0x2000000, 0x200000f).rw(m_duarta, FUNC(mc68681_device::read), FUNC(mc68681_device::write));
+ map(0x2800000, 0x280000f).rw(m_duartb, FUNC(mc68681_device::read), FUNC(mc68681_device::write));
+ map(0x3000000, 0x30007ff).ram();
+ map(0x4000000, 0x4000003).rw(FUNC(iris3000_state::clock_ctrl_r), FUNC(iris3000_state::clock_ctrl_w));
+ map(0x5000000, 0x5000003).rw(FUNC(iris3000_state::clock_data_r), FUNC(iris3000_state::clock_data_w));
+ map(0x6000000, 0x6000003).rw(FUNC(iris3000_state::kernel_base_r), FUNC(iris3000_state::kernel_base_w));
+ map(0x8000000, 0x8000003).rw(FUNC(iris3000_state::status_r), FUNC(iris3000_state::status_w));
+ map(0x9000000, 0x9000003).rw(FUNC(iris3000_state::parity_ctrl_r), FUNC(iris3000_state::parity_ctrl_w));
+ map(0xa000000, 0xa000003).rw(FUNC(iris3000_state::multibus_prot_r), FUNC(iris3000_state::multibus_prot_w));
+ map(0xb000000, 0xb00ffff).rw(FUNC(iris3000_state::page_table_map_r), FUNC(iris3000_state::page_table_map_w)).share("ptmap");
+ map(0xc000000, 0xc000003).rw(FUNC(iris3000_state::text_data_base_r), FUNC(iris3000_state::text_data_base_w));
+ map(0xd000000, 0xd000003).rw(FUNC(iris3000_state::text_data_limit_r), FUNC(iris3000_state::text_data_limit_w));
+ map(0xe000000, 0xe000003).rw(FUNC(iris3000_state::stack_base_r), FUNC(iris3000_state::stack_base_w));
+ map(0xf000000, 0xf000003).rw(FUNC(iris3000_state::stack_limit_r), FUNC(iris3000_state::stack_limit_w));
}
-/***************************************************************************
- ADDRESS MAPS
-***************************************************************************/
+void iris3000_state::multibus_mem_map(address_map &map)
+{
+ map(0x0200000, 0x03fffff).r(FUNC(iris3000_state::romboard_r));
+}
+void iris3000_state::multibus_io_map(address_map &map)
+{
+}
+
+void iris3000_state::geometry_pipe_map(address_map &map)
+{
+}
+
+void iris3000_state::fpa_map(address_map &map)
+{
+}
-void sgi_ip2_state::sgi_ip2_map(address_map &map)
-{
- map(0x00000000, 0x00ffffff).ram().share("mainram");
- map(0x02100000, 0x0210ffff).ram().share("bss"); // ??? I don't understand the need for this...
- map(0x30000000, 0x30017fff).rom().region("maincpu", 0);
- map(0x30800000, 0x30800003).rw(FUNC(sgi_ip2_state::sgi_ip2_m_but_r), FUNC(sgi_ip2_state::sgi_ip2_m_but_w));
- map(0x31000000, 0x31000003).rw(FUNC(sgi_ip2_state::sgi_ip2_m_quad_r), FUNC(sgi_ip2_state::sgi_ip2_m_quad_w));
- map(0x31800000, 0x31800003).r(FUNC(sgi_ip2_state::sgi_ip2_swtch_r));
- map(0x32000000, 0x3200000f).rw(m_duarta, FUNC(mc68681_device::read), FUNC(mc68681_device::write));
- map(0x32800000, 0x3280000f).rw(m_duartb, FUNC(mc68681_device::read), FUNC(mc68681_device::write));
- map(0x33000000, 0x330007ff).ram();
- map(0x34000000, 0x34000003).rw(FUNC(sgi_ip2_state::sgi_ip2_clock_ctl_r), FUNC(sgi_ip2_state::sgi_ip2_clock_ctl_w));
- map(0x35000000, 0x35000003).rw(FUNC(sgi_ip2_state::sgi_ip2_clock_data_r), FUNC(sgi_ip2_state::sgi_ip2_clock_data_w));
- map(0x36000000, 0x36000003).rw(FUNC(sgi_ip2_state::sgi_ip2_os_base_r), FUNC(sgi_ip2_state::sgi_ip2_os_base_w));
- map(0x38000000, 0x38000003).rw(FUNC(sgi_ip2_state::sgi_ip2_status_r), FUNC(sgi_ip2_state::sgi_ip2_status_w));
- map(0x39000000, 0x39000003).rw(FUNC(sgi_ip2_state::sgi_ip2_parctl_r), FUNC(sgi_ip2_state::sgi_ip2_parctl_w));
- map(0x3a000000, 0x3a000003).rw(FUNC(sgi_ip2_state::sgi_ip2_mbp_r), FUNC(sgi_ip2_state::sgi_ip2_mbp_w));
- map(0x3b000000, 0x3b003fff).rw(FUNC(sgi_ip2_state::sgi_ip2_ptmap_r), FUNC(sgi_ip2_state::sgi_ip2_ptmap_w)).share("ptmap");
- map(0x3c000000, 0x3c000003).rw(FUNC(sgi_ip2_state::sgi_ip2_tdbase_r), FUNC(sgi_ip2_state::sgi_ip2_tdbase_w));
- map(0x3d000000, 0x3d000003).rw(FUNC(sgi_ip2_state::sgi_ip2_tdlmt_r), FUNC(sgi_ip2_state::sgi_ip2_tdlmt_w));
- map(0x3e000000, 0x3e000003).rw(FUNC(sgi_ip2_state::sgi_ip2_stkbase_r), FUNC(sgi_ip2_state::sgi_ip2_stkbase_w));
- map(0x3f000000, 0x3f000003).rw(FUNC(sgi_ip2_state::sgi_ip2_stklmt_r), FUNC(sgi_ip2_state::sgi_ip2_stklmt_w));
+void iris3000_state::mem_map(address_map &map)
+{
+ map(0x00000000, 0xffffffff).rw(FUNC(iris3000_state::mmu_r), FUNC(iris3000_state::mmu_w));
}
/***************************************************************************
MACHINE DRIVERS
***************************************************************************/
-WRITE_LINE_MEMBER(sgi_ip2_state::duarta_irq_handler)
+WRITE_LINE_MEMBER(iris3000_state::duarta_irq_handler)
{
m_maincpu->set_input_line(M68K_IRQ_6, state);
}
-WRITE_LINE_MEMBER(sgi_ip2_state::duartb_irq_handler)
+WRITE_LINE_MEMBER(iris3000_state::duartb_irq_handler)
{
m_maincpu->set_input_line(M68K_IRQ_6, state);
}
@@ -422,28 +604,40 @@ static DEVICE_INPUT_DEFAULTS_START( ip2_terminal )
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 )
DEVICE_INPUT_DEFAULTS_END
-void sgi_ip2_state::sgi_ip2(machine_config &config)
+void iris3000_state::iris3130(machine_config &config)
{
/* basic machine hardware */
M68020(config, m_maincpu, 16000000);
- m_maincpu->set_addrmap(AS_PROGRAM, &sgi_ip2_state::sgi_ip2_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &iris3000_state::mem_map);
+
+ ADDRESS_MAP_BANK(config, "text_data").set_map(&iris3000_state::text_data_map).set_options(ENDIANNESS_BIG, 32, 32);
+ ADDRESS_MAP_BANK(config, "stack").set_map(&iris3000_state::stack_map).set_options(ENDIANNESS_BIG, 32, 32);
+ ADDRESS_MAP_BANK(config, "kernel").set_map(&iris3000_state::kernel_map).set_options(ENDIANNESS_BIG, 32, 32);
+ ADDRESS_MAP_BANK(config, "system").set_map(&iris3000_state::system_map).set_options(ENDIANNESS_BIG, 32, 32);
+ ADDRESS_MAP_BANK(config, "multibus_mem").set_map(&iris3000_state::multibus_mem_map).set_options(ENDIANNESS_BIG, 32, 32);
+ ADDRESS_MAP_BANK(config, "multibus_io").set_map(&iris3000_state::multibus_io_map).set_options(ENDIANNESS_BIG, 32, 32);
+ ADDRESS_MAP_BANK(config, "geometry_pipe").set_map(&iris3000_state::geometry_pipe_map).set_options(ENDIANNESS_BIG, 32, 32);
+ ADDRESS_MAP_BANK(config, "fpa").set_map(&iris3000_state::fpa_map).set_options(ENDIANNESS_BIG, 32, 32);
MC68681(config, m_duarta, 3.6864_MHz_XTAL); /* Y3 3.6864MHz Xtal ??? copy-over from dectalk */
- m_duarta->irq_cb().set(FUNC(sgi_ip2_state::duarta_irq_handler));
+ m_duarta->irq_cb().set(FUNC(iris3000_state::duarta_irq_handler));
m_duarta->b_tx_cb().set("rs232", FUNC(rs232_port_device::write_txd));
MC68681(config, m_duartb, 3.6864_MHz_XTAL); /* Y3 3.6864MHz Xtal ??? copy-over from dectalk */
- m_duartb->irq_cb().set(FUNC(sgi_ip2_state::duartb_irq_handler));
+ m_duartb->irq_cb().set(FUNC(iris3000_state::duartb_irq_handler));
MC146818(config, m_rtc, 4.194304_MHz_XTAL);
rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal"));
rs232.rxd_handler().set(m_duarta, FUNC(mc68681_device::rx_b_w));
rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(ip2_terminal));
+
+ quickload_image_device &quickload(QUICKLOAD(config, "quickload", ""));
+ quickload.set_load_callback(FUNC(iris3000_state::load_romboard));
}
-static INPUT_PORTS_START( sgi_ip2 )
- PORT_START("SWTCH")
+static INPUT_PORTS_START( iris3130 )
+ PORT_START("DIPS")
PORT_DIPNAME( 0x8000, 0x8000, "Master/Slave" )
PORT_DIPSETTING( 0x0000, "Slave" )
PORT_DIPSETTING( 0x8000, "Master" )
@@ -487,28 +681,20 @@ static INPUT_PORTS_START( sgi_ip2 )
PORT_DIPSETTING( 0x000d, "DSD Tape Boot (1)" )
PORT_DIPSETTING( 0x000e, "DSD Tape Boot (2)" )
PORT_DIPSETTING( 0x000f, "DSD Hard Disk Boot" )
-
INPUT_PORTS_END
-void sgi_ip2_state::init_sgi_ip2()
-{
- uint32_t *src = (uint32_t*)(memregion("maincpu")->base());
- uint32_t *dst = m_mainram;
- memcpy(dst, src, 8);
-}
-
/***************************************************************************
ROM definition(s)
***************************************************************************/
-ROM_START( sgi_ip2 )
+ROM_START( iris3130 )
ROM_REGION32_BE(0x18000, "maincpu", 0)
ROM_LOAD( "sgi-ip2-u91.nolabel.od", 0x00000, 0x8000, CRC(32e1f6b5) SHA1(2bd928c3fe2e364b9a38189158e9bad0e5271a59) )
ROM_LOAD( "sgi-ip2-u92.nolabel.od", 0x08000, 0x8000, CRC(13dbfdb3) SHA1(3361fb62f7a8c429653700bccfc3e937f7508182) )
ROM_LOAD( "sgi-ip2-u93.ip2.2-008.od", 0x10000, 0x8000, CRC(bf967590) SHA1(1aac48e4f5531a25c5482f64de5cd3c7a9931f11) )
ROM_END
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1985, sgi_ip2, 0, 0, sgi_ip2, sgi_ip2, sgi_ip2_state, init_sgi_ip2, "Silicon Graphics Inc", "IRIS 3130 (IP2)", MACHINE_NOT_WORKING )
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+COMP( 1985, iris3130, 0, 0, iris3130, iris3130, iris3000_state, empty_init, "Silicon Graphics Inc", "IRIS 3130 (IP2)", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/itech32.cpp b/src/mame/drivers/itech32.cpp
index a778619e127..6b4de103095 100644
--- a/src/mame/drivers/itech32.cpp
+++ b/src/mame/drivers/itech32.cpp
@@ -870,8 +870,8 @@ void itech32_state::timekill_map(address_map &map)
map(0x050000, 0x050001).portr("SYSTEM");
map(0x050001, 0x050001).w(FUNC(itech32_state::timekill_intensity_w));
map(0x058000, 0x058001).portr("DIPS").w("watchdog", FUNC(watchdog_timer_device::reset16_w));
- map(0x060001, 0x060001).w(FUNC(itech32_state::timekill_colora_w));
- map(0x068001, 0x068001).w(FUNC(itech32_state::timekill_colorbc_w));
+ map(0x060000, 0x060003).w(FUNC(itech32_state::timekill_colora_w));
+ map(0x068000, 0x068003).w(FUNC(itech32_state::timekill_colorbc_w));
map(0x070000, 0x070001).nopw(); /* noisy */
map(0x078001, 0x078001).w(FUNC(itech32_state::sound_data_w));
map(0x080000, 0x08007f).rw(FUNC(itech32_state::video_r), FUNC(itech32_state::video_w)).share("video");
@@ -1938,6 +1938,34 @@ ROM_START( timekill121a ) /* Version 1.21 (3-tier board set: P/N 1050 Rev 1, P/N
ROM_LOAD16_BYTE( "tksrom02_u26.u26", 0x200000, 0x80000, CRC(051ced3e) SHA1(6b63c4837e709806ffea9a37d93933635d356a6e) ) /* Labeled TKSROM02 (U26) */
ROM_END
+ROM_START( timekill100 ) /* Version 1.00? - actual version not shown (3-tier board set: P/N 1050 Rev 1, P/N 1051 Rev 0 & P/N 1052 Rev 2) */
+ ROM_REGION16_BE( 0x80000, "user1", 0 )
+ ROM_LOAD16_BYTE( "tk00.bim_u54.u54", 0x00000, 0x40000, CRC(2b379f30) SHA1(7034cb0e6ba49ba9147fdb7ff6cbe34451ed4465) ) /* Labeled TK00.BIM (U54) */
+ ROM_LOAD16_BYTE( "tk01.bim_u53.u53", 0x00001, 0x40000, CRC(e43e029c) SHA1(4bb069fffaa7482674f52eb4106409842f2c2a0e) ) /* Labeled TK01.BIM (U53) */
+
+ ROM_REGION( 0x28000, "soundcpu", 0 ) /* At 0x18002 in ROM: ITS Ver 4.0 OTTO Sound Board 6255 I/O 6/3/92 */
+ ROM_LOAD( "timekillsnd_u17.u17", 0x10000, 0x18000, CRC(ab1684c3) SHA1(cc7e591fd160b259f8aecddb2c5a3c36e4e37b2f) ) /* Labeled TIMEKILLSND (U17) */
+ ROM_CONTINUE( 0x08000, 0x08000 )
+
+ ROM_REGION( 0x880000, "gfx1", 0 ) /* ROM board P/N 1051 REV0 */
+ ROM_LOAD32_BYTE( "time_killers_0.rom0", 0x000000, 0x200000, CRC(94cbf6f8) SHA1(dac5c4d9c8e42336c236ecc3c72b3b1f8282dc2f) ) /* 42 pin mask ROM */
+ ROM_LOAD32_BYTE( "time_killers_1.rom1", 0x000001, 0x200000, CRC(c07dea98) SHA1(dd8b88beb9781579eb0a17231ad2a274b70ae1bc) ) /* 42 pin mask ROM */
+ ROM_LOAD32_BYTE( "time_killers_2.rom2", 0x000002, 0x200000, CRC(183eed2a) SHA1(3905268fe45ecc47cd4d349666b4d33efda2140b) ) /* 42 pin mask ROM */
+ ROM_LOAD32_BYTE( "time_killers_3.rom3", 0x000003, 0x200000, CRC(b1da1058) SHA1(a1d483701c661d69cecc9d073b23683b119f5ef1) ) /* 42 pin mask ROM */
+
+ /* NOTE: ROM boards are known to exist and have been verified to list (silkscreen) the above locations as ROM1, ROM2, ROM3 & ROM4 */
+
+ ROM_LOAD32_BYTE( "timekill_grom01.grom1", 0x800000, 0x020000, CRC(b030c3d9) SHA1(f5c21285ec8ff4f74205e0cf18da67e733e31183) )
+ ROM_LOAD32_BYTE( "timekill_grom02.grom2", 0x800001, 0x020000, CRC(e98492a4) SHA1(fe8fb4bd3900109f3872f2930e8ddc9d19f599fd) )
+ ROM_LOAD32_BYTE( "timekill_grom03.grom3", 0x800002, 0x020000, CRC(6088fa64) SHA1(a3eee10bdef48fefec3836f551172dbe0819acf6) )
+ ROM_LOAD32_BYTE( "timekill_grom04.grom4", 0x800003, 0x020000, CRC(95be2318) SHA1(60580c87d63a114df44e2580e138128388ff447b) )
+
+ ROM_REGION16_BE( 0x400000, "ensoniq.2", ROMREGION_ERASE00 ) /* Sound board P/N 1052 REV 4 */
+ ROM_LOAD16_BYTE( "tksrom00_u18.u18", 0x000000, 0x80000, CRC(79d8b83a) SHA1(78934b4d0ccca8fefcf8277e4296eb1d59cd575b) ) /* Labeled TKSROM00 (U18) */
+ ROM_LOAD16_BYTE( "tksrom01_u20.u20", 0x100000, 0x80000, CRC(ec01648c) SHA1(b83c66cf22db5d89b9ed79b79861b79429d8380c) ) /* Labeled TKSROM01 (U20) */
+ ROM_LOAD16_BYTE( "tksrom02_u26.u26", 0x200000, 0x80000, CRC(051ced3e) SHA1(6b63c4837e709806ffea9a37d93933635d356a6e) ) /* Labeled TKSROM02 (U26) */
+ROM_END
+
ROM_START( bloodstm )
ROM_REGION16_BE( 0x80000, "user1", 0 )
ROM_LOAD16_BYTE( "bld00_v222.u83", 0x00000, 0x40000, CRC(95f36db6) SHA1(72ec5ca93aed8fb12d5e5b7ff3d07c5cf1dab4bb) ) /* Labeled BLD00 V2.22 (U83) */
@@ -4694,6 +4722,7 @@ GAME( 1992, timekill132i, timekill, timekill, timekill, itech32_state, init_tim
GAME( 1992, timekill131, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.31)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, timekill121, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.21)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, timekill121a, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.21, alternate ROM board)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, timekill100, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.00)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, hardyard, 0, bloodstm, hardyard, itech32_state, init_hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.20)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, hardyard11, hardyard, bloodstm, hardyard, itech32_state, init_hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.10)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, hardyard10, hardyard, bloodstm, hardyard, itech32_state, init_hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.00)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/jaguar.cpp b/src/mame/drivers/jaguar.cpp
index e8ed3b94abb..cd8108a394b 100644
--- a/src/mame/drivers/jaguar.cpp
+++ b/src/mame/drivers/jaguar.cpp
@@ -298,6 +298,9 @@ Notes:
F1D000-F1DFFF R xxxxxxxx xxxxxxxx Wavetable ROM
------------------------------------------------------------
+ Jaguar console schematics include a ADC0844 at U16, selected by GPIOL5. This IC
+ may or may not be populated.
+
Jaguar System Notes:
Protection Check
diff --git a/src/mame/drivers/jazz.cpp b/src/mame/drivers/jazz.cpp
index e74aaee15f1..e2569b22d61 100644
--- a/src/mame/drivers/jazz.cpp
+++ b/src/mame/drivers/jazz.cpp
@@ -79,20 +79,35 @@ void jazz_state::machine_reset()
void jazz_state::init_common()
{
// map the configured ram and vram
- m_cpu->space(0).install_ram(0x00000000, 0x00000000 | m_ram->mask(), m_ram->pointer());
- // FIXME: video ram must be written in emulated cpu order
- m_cpu->space(0).install_ram(0x40000000, 0x40000000 | m_vram->mask(), m_vram->pointer());
+ m_mct_adr->space(0).install_ram(0x00000000, 0x00000000 | m_ram->mask(), m_ram->pointer());
+ m_mct_adr->space(0).install_ram(0x40000000, 0x40000000 | m_vram->mask(), m_vram->pointer());
}
-void jazz_state::jazz_common_map(address_map &map)
+void jazz_state::cpu_map(address_map &map)
+{
+ map(0x00000000, 0xffffffff).rw(m_mct_adr, FUNC(mct_adr_device::r4k_r), FUNC(mct_adr_device::r4k_w));
+}
+
+void jazz_state::mct_map(address_map &map)
{
map(0x1fc00000, 0x1fc3ffff).r(m_flash, FUNC(amd_28f020_device::read));
- // NOTE: defaults to console on serial1 if no video rom found
- map(0x60000000, 0x600001ff).rom().region("graphics", 0);
+ // VDR1
+ //map(0x60000000, 0x60001fff).m(m_cvc, FUNC(g364_device::map));
+ //map(0x60010000, 0x60010000); // id (r/w)
+ //map(0x60020000, 0x60020000); // reset
+ // VDR1F "Fission"
+ map(0x60000000, 0x6007ffff).rom().region("graphics", 0);
map(0x60080000, 0x60081fff).m(m_cvc, FUNC(g364_device::map));
- map(0x60180000, 0x60180007).lw32([this] (u32 data) { m_cvc->reset(); }, "g364_reset");
+ map(0x60100000, 0x60100000).lw8([this] (u8 data) { m_cvc->set_swapped(ENDIANNESS_NATIVE == ENDIANNESS_BIG); }, "little_endian");
+ map(0x60102000, 0x60102000).lw8([this] (u8 data) { m_cvc->set_swapped(ENDIANNESS_NATIVE == ENDIANNESS_LITTLE); }, "big_endian");
+ map(0x60180000, 0x60180000).lw8([this] (u8 data) { m_cvc->reset(); }, "g364_reset");
+ //map(0x60182000, 0x60182000); // TODO: monitor
+
+ // VDR2
+ //map(0x60000000, 0x60000fff).m(m_cvc, FUNC(g300_device::map));
+ //map(0x60008000, 0x60008fff).m(m_cursor, FUNC(bt431_device::map)).umask32(0x000000ff);
map(0x80000000, 0x80000fff).m(m_mct_adr, FUNC(mct_adr_device::map));
@@ -104,13 +119,13 @@ void jazz_state::jazz_common_map(address_map &map)
// BE: read 400d, write 400d, write 400c
map(0x80004000, 0x8000400f).lrw8(
NAME([this] (offs_t offset) { return m_rtc->read(1); }),
- NAME([this] (offs_t offset, u8 data) { m_rtc->write(1, data); })).umask64(0xff);
- map(0x80005000, 0x80005007).rw(m_kbdc, FUNC(ps2_keyboard_controller_device::data_r), FUNC(ps2_keyboard_controller_device::data_w)).umask64(0x00ff);
- map(0x80005000, 0x80005007).rw(m_kbdc, FUNC(ps2_keyboard_controller_device::status_r), FUNC(ps2_keyboard_controller_device::command_w)).umask64(0xff00);
+ NAME([this] (offs_t offset, u8 data) { m_rtc->write(1, data); }));
+ map(0x80005000, 0x80005000).rw(m_kbdc, FUNC(ps2_keyboard_controller_device::data_r), FUNC(ps2_keyboard_controller_device::data_w));
+ map(0x80005001, 0x80005001).rw(m_kbdc, FUNC(ps2_keyboard_controller_device::status_r), FUNC(ps2_keyboard_controller_device::command_w));
map(0x80006000, 0x80006007).rw(m_ace[0], FUNC(ns16550_device::ins8250_r), FUNC(ns16550_device::ins8250_w));
map(0x80007000, 0x80007007).rw(m_ace[1], FUNC(ns16550_device::ins8250_r), FUNC(ns16550_device::ins8250_w));
- map(0x80008000, 0x80008007).rw(m_lpt, FUNC(pc_lpt_device::read), FUNC(pc_lpt_device::write)).umask64(0xffffffff);
- map(0x80009000, 0x8000afff).ram().share("nvram"); // 9000-9fff unprotected/a000-afff protected?
+ map(0x80008000, 0x80008003).rw(m_lpt, FUNC(pc_lpt_device::read), FUNC(pc_lpt_device::write));
+ map(0x80009000, 0x8000afff).ram().share("nvram");
map(0x8000b000, 0x8000b007).lr8(
[] (offs_t offset)
{
@@ -120,14 +135,12 @@ void jazz_state::jazz_common_map(address_map &map)
return mac[offset];
},
"mac");
- // 3 4k pages of nvram: read/write, protected, read-only
- // last page holds ethernet mac and checksum in bytes 0-7
//map(0x8000c000, 0x8000cfff) // sound
//map(0x8000d000, 0x8000dfff).noprw(); // dummy dma device?
map(0x8000d600, 0x8000d607).nopw();
- map(0x8000f000, 0x8000f007).w(FUNC(jazz_state::led_w)).umask64(0xff);
+ map(0x8000f000, 0x8000f000).w(FUNC(jazz_state::led_w));
// lots of byte data written to 800
//map(0x800e0000, 0x800fffff).m() // dram config
@@ -144,8 +157,8 @@ void jazz_state::jazz_common_map(address_map &map)
//map(0x92000000, 0x92ffffff).m(); // EISA I/O ports?
//map(0x93000000, 0x93ffffff).m(); // EISA memory
- map(0xf0000000, 0xf0000007).r(m_mct_adr, FUNC(mct_adr_device::isr_r)).umask64(0xffff);
- map(0xf0000000, 0xf0000007).rw(m_mct_adr, FUNC(mct_adr_device::imr_r), FUNC(mct_adr_device::imr_w)).umask64(0xffff0000);
+ map(0xf0000000, 0xf0000001).r(m_mct_adr, FUNC(mct_adr_device::isr_r));
+ map(0xf0000002, 0xf0000003).rw(m_mct_adr, FUNC(mct_adr_device::imr_r), FUNC(mct_adr_device::imr_w));
map(0xfff00000, 0xfff3ffff).r(m_flash, FUNC(amd_28f020_device::read)); // mirror?
}
@@ -164,7 +177,7 @@ void jazz_state::jazz(machine_config &config)
{
// FIXME: slow the cpu clock to get past session manager bugcheck
R4000(config, m_cpu, 50_MHz_XTAL / 5);
- m_cpu->set_addrmap(0, &jazz_state::jazz_common_map);
+ m_cpu->set_addrmap(0, &jazz_state::cpu_map);
RAM(config, m_ram);
m_ram->set_default_size("16M");
@@ -177,7 +190,7 @@ void jazz_state::jazz(machine_config &config)
// local bus dma, timer and interrupt controller
MCT_ADR(config, m_mct_adr, 0);
- m_mct_adr->set_bus(m_cpu, 0);
+ m_mct_adr->set_addrmap(0, &jazz_state::mct_map);
m_mct_adr->out_int_dma_cb().set_inputline(m_cpu, INPUT_LINE_IRQ0);
m_mct_adr->out_int_device_cb().set_inputline(m_cpu, INPUT_LINE_IRQ1);
m_mct_adr->out_int_timer_cb().set_inputline(m_cpu, INPUT_LINE_IRQ4);
@@ -195,7 +208,7 @@ void jazz_state::jazz(machine_config &config)
// scsi host adapter
NSCSI_CONNECTOR(config, "scsi:7").option_set("ncr53c94", NCR53C94).clock(24_MHz_XTAL).machine_config(
- [this](device_t *device)
+ [this] (device_t *device)
{
ncr53c94_device &adapter = downcast<ncr53c94_device &>(*device);
@@ -242,7 +255,7 @@ void jazz_state::jazz(machine_config &config)
// keyboard controller
PS2_KEYBOARD_CONTROLLER(config, m_kbdc, 12_MHz_XTAL);
// FIXME: reset is probably routed through the MCT-ADR
- m_kbdc->hot_res().set([this](int state) { machine().schedule_soft_reset(); });
+ m_kbdc->hot_res().set([this] (int state) { machine().schedule_soft_reset(); });
m_kbdc->kbd_clk().set(kbd_con, FUNC(pc_kbdc_device::clock_write_from_mb));
m_kbdc->kbd_data().set(kbd_con, FUNC(pc_kbdc_device::data_write_from_mb));
m_kbdc->kbd_irq().set(m_mct_adr, FUNC(mct_adr_device::irq<6>));
@@ -300,7 +313,7 @@ void jazz_state::jazz(machine_config &config)
DP83932C(config, m_net, 20_MHz_XTAL);
m_net->out_int_cb().set(m_mct_adr, FUNC(mct_adr_device::irq<4>));
- m_net->set_bus(m_mct_adr, 0);
+ m_net->set_bus(m_mct_adr, 1);
I82357(config, m_isp, 14.318181_MHz_XTAL);
m_isp->out_rtc_cb().set(m_rtc, FUNC(mc146818_device::write));
@@ -355,20 +368,20 @@ void jazz_state::mmr4000le(machine_config &config)
}
ROM_START(mmr4000be)
- ROM_REGION64_BE(0x40000, "flash", 0)
+ ROM_REGION32_LE(0x40000, "flash", 0)
ROM_SYSTEM_BIOS(0, "riscos", "R4000 RISC/os PROM")
ROMX_LOAD("riscos.bin", 0x00000, 0x40000, CRC(cea6bc8f) SHA1(3e47b4ad5d1a0c7aac649e6aef3df1bf86fc938b), ROM_BIOS(0))
- ROM_REGION64_BE(0x200, "graphics", 0)
+ ROM_REGION32_LE(0x800000, "graphics", 0)
ROM_LOAD64_BYTE("mips_g364.bin", 0x00, 0x40, CRC(9265ccb6) SHA1(ef5c3a6bc5249274dd9c9a18d88a668cdd457370) BAD_DUMP)
ROM_END
ROM_START(mmr4000le)
- ROM_REGION64_LE(0x40000, "flash", 0)
+ ROM_REGION32_LE(0x40000, "flash", 0)
ROM_SYSTEM_BIOS(0, "ntprom", "R4000 Windows NT PROM")
ROMX_LOAD("ntprom.bin", 0x00000, 0x40000, CRC(d91018d7) SHA1(316de17820192c89b8ee6d9936ab8364a739ca53), ROM_BIOS(0))
- ROM_REGION64_LE(0x200, "graphics", 0)
+ ROM_REGION32_LE(0x800000, "graphics", 0)
// Jazz G300 (8.125MHz video clock)
//ROM_LOAD64_BYTE("jazz_g300.bin", 0x00, 0x40, CRC(258eb00a) SHA1(6e3fd0272957524de82e7042d6e36aca492c4d26) BAD_DUMP)
// Jazz G364 (8.125MHz video clock)
@@ -380,5 +393,5 @@ ROM_START(mmr4000le)
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP(1992, mmr4000be, 0, 0, mmr4000be, 0, jazz_state, init_common, "MIPS", "Magnum R4000 (be)", MACHINE_NOT_WORKING)
+COMP(1992, mmr4000be, 0, 0, mmr4000be, 0, jazz_state, init_common, "MIPS", "Magnum R4000 (be)", MACHINE_NO_SOUND)
COMP(1992, mmr4000le, 0, 0, mmr4000le, 0, jazz_state, init_common, "MIPS", "Magnum R4000 (le)", MACHINE_NO_SOUND)
diff --git a/src/mame/drivers/jvh.cpp b/src/mame/drivers/jvh.cpp
index 940102614fb..ca8311c20a5 100644
--- a/src/mame/drivers/jvh.cpp
+++ b/src/mame/drivers/jvh.cpp
@@ -8,7 +8,9 @@
********************************************************************************/
#include "emu.h"
#include "cpu/tms9900/tms9980a.h"
+#include "cpu/tms9900/tms9995.h"
#include "cpu/m6800/m6800.h"
+#include "cpu/m6809/m6809.h"
#include "machine/6522via.h"
//#include "machine/74259.h"
//#include "sound/ay8910.h"
@@ -24,6 +26,7 @@ public:
void common(machine_config &config);
void jvh(machine_config &config);
void jvh2(machine_config &config);
+ void jvh3(machine_config &config);
void init_jvh();
@@ -144,7 +147,28 @@ void jvh_state::jvh2(machine_config &config)
m_maincpu->set_addrmap(AS_IO, &jvh_state::movmastr_io);
}
+void jvh_state::jvh3(machine_config &config)
+{
+ TMS9995(config, m_maincpu, 12000000);
+
+ M6809(config, "soundcpu", 2000000);
+ M6809(config, "soundcpu2", 2000000);
+
+ // YM2203, YM3812, DAC
+}
+
+/*-------------------------------------------------------------------
+/ Ice Mania
+/-------------------------------------------------------------------*/
+ROM_START(icemania)
+ ROM_REGION(0x4000, "maincpu", 0)
+ ROM_LOAD("1c1_ic1.bin", 0x0000, 0x2000, CRC(eae16d52) SHA1(9151e0ccec938d268a157cea30b4a23b69e194b8))
+ ROM_LOAD("2b1_ic7.bin", 0x2000, 0x2000, CRC(7b5fc604) SHA1(22c1c1a030877df99c3db50e7dd41dffe6c21dec))
+
+ ROM_REGION(0x10000, "soundcpu", 0)
+ ROM_LOAD("im_snd.bin", 0xc000, 0x2000, CRC(0d861f65) SHA1(6c17d1f674c95a4c877b42100ab6e0ae8213264b))
+ROM_END
/*-------------------------------------------------------------------
/ Escape
@@ -170,6 +194,22 @@ ROM_START(movmastr)
ROM_LOAD("snd.bin", 0xc000, 0x2000, NO_DUMP)
ROM_END
+/*-------------------------------------------------------------------
+/ Formula 1
+/-------------------------------------------------------------------*/
+ROM_START(formula1)
+ ROM_REGION(0x4000, "maincpu", 0)
+ ROM_LOAD("f1_ic4.bin", 0x0000, 0x4000, CRC(6ca345da) SHA1(5532c5786d304744a69c7e892924edd03abe8209))
+
+ ROM_REGION(0x10000, "soundcpu", 0)
+ ROM_LOAD("f1_snd.bin", 0x8000, 0x8000, CRC(00562594) SHA1(3325ad4c0ec04457f4d5b78b9ac48218d6c7aef3))
+
+ ROM_REGION(0x10000, "soundcpu2", 0)
+ ROM_LOAD("f1_samples.bin", 0x0000, 0x10000, CRC(ecb7ff04) SHA1(1c11c8ce62ec2f0a4f7dae3b1661baddb04ad55a))
+ROM_END
+
+GAME( 1986, icemania, 0, jvh, jvh, jvh_state, init_jvh, ROT0, "Jac Van Ham (Royal)", "Ice Mania", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, escape, 0, jvh, jvh, jvh_state, init_jvh, ROT0, "Jac Van Ham (Royal)", "Escape", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 19??, movmastr, 0, jvh2, jvh, jvh_state, init_jvh, ROT0, "Jac Van Ham (Royal)", "Movie Masters", MACHINE_IS_SKELETON_MECHANICAL)
+GAME( 1988, formula1, 0, jvh3, jvh, jvh_state, init_jvh, ROT0, "Jac Van Ham (Royal)", "Formula 1", MACHINE_IS_SKELETON_MECHANICAL)
diff --git a/src/mame/drivers/konendev.cpp b/src/mame/drivers/konendev.cpp
index dcbbec2f980..9a37ff66770 100644
--- a/src/mame/drivers/konendev.cpp
+++ b/src/mame/drivers/konendev.cpp
@@ -36,6 +36,7 @@
#include "emu.h"
#include "cpu/powerpc/ppc.h"
+#include "cpu/h8/h83006.h"
#include "machine/eepromser.h"
#include "machine/nvram.h"
#include "machine/msm6242.h"
@@ -51,6 +52,7 @@ public:
konendev_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_ifu(*this, "ifu")
, m_gcu(*this, "gcu")
, m_eeprom(*this, "eeprom")
, m_rtc(*this, "rtc")
@@ -62,6 +64,11 @@ public:
void konendev(machine_config &config);
+ virtual void machine_start() override
+ {
+ m_dpram_base = (uint16_t *)m_dpram.target();
+ }
+
private:
DECLARE_READ32_MEMBER(mcu2_r);
DECLARE_READ32_MEMBER(ifu2_r);
@@ -72,6 +79,10 @@ private:
DECLARE_READ32_MEMBER(sound_data_r);
DECLARE_WRITE32_MEMBER(sound_data_w);
+ DECLARE_READ16_MEMBER(ifu_unk_r);
+ DECLARE_READ16_MEMBER(ifu_dpram_r);
+ DECLARE_WRITE16_MEMBER(ifu_dpram_w);
+
DECLARE_WRITE_LINE_MEMBER(gcu_interrupt);
INTERRUPT_GEN_MEMBER(vbl_interrupt);
@@ -80,13 +91,17 @@ private:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void konendev_map(address_map &map);
+ void ifu_map(address_map &map);
// devices
required_device<cpu_device> m_maincpu;
+ required_device<h83007_device> m_ifu;
required_device<k057714_device> m_gcu;
required_device<eeprom_serial_93cxx_device> m_eeprom;
required_device<rtc62423_device> m_rtc;
required_shared_ptr<uint32_t> m_dpram;
+
+ uint16_t *m_dpram_base;
};
uint32_t konendev_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@@ -194,6 +209,30 @@ void konendev_state::konendev_map(address_map &map)
map(0x7ff00000, 0x7fffffff).rom().region("program", 0);
}
+READ16_MEMBER(konendev_state::ifu_unk_r)
+{
+ return 0xc3c3; // H8 program crashes immediately if it doesn't see
+}
+
+READ16_MEMBER(konendev_state::ifu_dpram_r)
+{
+ return m_dpram_base[offset];
+}
+
+WRITE16_MEMBER(konendev_state::ifu_dpram_w)
+{
+ COMBINE_DATA(&m_dpram_base[offset]);
+}
+
+void konendev_state::ifu_map(address_map &map)
+{
+ map(0x000000, 0x07ffff).rom().region("ifu", 0);
+ map(0x200000, 0x20ffff).ram();
+ map(0x210000, 0x217fff).ram();
+ map(0x800000, 0x8003ff).rw(FUNC(konendev_state::ifu_dpram_r), FUNC(konendev_state::ifu_dpram_w));
+ map(0xa40000, 0xa40001).nopw();
+ map(0xfee010, 0xfee011).r(FUNC(konendev_state::ifu_unk_r));
+};
static INPUT_PORTS_START( konendev )
PORT_START("IN0")
@@ -272,6 +311,9 @@ void konendev_state::konendev(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &konendev_state::konendev_map);
m_maincpu->set_vblank_int("screen", FUNC(konendev_state::vbl_interrupt));
+ H83007(config, m_ifu, 8000000); // Clock unknown
+ m_ifu->set_addrmap(AS_PROGRAM, &konendev_state::ifu_map);
+
/* video hardware */
PALETTE(config, "palette", palette_device::RGB_555);
@@ -303,9 +345,23 @@ void konendev_state::konendev(machine_config &config)
}
+#define ENDEAVOUR_BIOS \
+ ROM_REGION( 0x200000, "ifu", 0 ) \
+ ROM_LOAD( "2v02s502_ifu.bin", 0x000000, 0x080000, CRC(36122a98) SHA1(3d2c40c9d504358d890364e26c9562e40314d8a4) )
+
+ROM_START( konendev )
+ ENDEAVOUR_BIOS
+
+ ROM_REGION32_BE( 0x200000, "program", ROMREGION_ERASE00 )
+ ROM_REGION32_BE( 0x1800000, "flash", ROMREGION_ERASE00 )
+ ROM_REGION16_BE( 0x100, "eeprom", ROMREGION_ERASE00 )
+ROM_END
+
/* Interesting sets */
ROM_START( enchlamp )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "enl5rg26_01h.bin", 0x00000, 0x100000, CRC(fed5b988) SHA1(49442decd9b40f0a382c4fc7b231958f526ddbd1) )
ROM_LOAD32_WORD_SWAP( "enl5rg26_02l.bin", 0x00002, 0x100000, CRC(d0e42c9f) SHA1(10ff944ec0a626d47ec12be291ff5fe001342ed4) )
@@ -319,20 +375,20 @@ ROM_END
ROM_START( whiterus )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "01h whr5ra26,c5df", 0x00000, 0x080000, CRC(d5a1ebb6) SHA1(14a8d1d8f8ae8919eaa878660c7e97e7ea7a02d8) )
ROM_LOAD32_WORD_SWAP( "02l whr5ra26,bc0a", 0x00002, 0x080000, CRC(48a2277c) SHA1(965d1da31e3bcde6fda4e15e8980a69e8bce5a84) )
- ROM_REGION( 0x200000, "others", 0 )
- ROM_LOAD( "u190.4 2v02s502.ifu_rus,95 7", 0x0000, 0x080000, CRC(36122a98) SHA1(3d2c40c9d504358d890364e26c9562e40314d8a4) )
- ROM_LOAD( "2v02s502_ifu.bin", 0x0000, 0x080000, CRC(36122a98) SHA1(3d2c40c9d504358d890364e26c9562e40314d8a4) ) // was in 2V02S502_IFU.zip looks similar to above tho
-
ROM_REGION32_BE( 0x1800000, "flash", ROMREGION_ERASE00 )
ROM_END
/* Partial sets */
ROM_START( aadvent )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "afa5re26_01h.bin", 0x00000, 0x100000, CRC(65ce6f7a) SHA1(018742f13fea4c52f822e7f12e8efd0aff61a713) )
ROM_LOAD32_WORD_SWAP( "afa5re26_02l.bin", 0x00002, 0x100000, CRC(73945b3a) SHA1(5ace9c439048f3555fe631917c15bee76362e784) )
@@ -341,6 +397,8 @@ ROM_START( aadvent )
ROM_END
ROM_START( dragnfly )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "drf5re26_01h.bin", 0x00000, 0x100000, CRC(ef6f1b69) SHA1(007a41cd1b08705184f69ce3e0e6c63bc2301e25) )
ROM_LOAD32_WORD_SWAP( "drf5re26_02l.bin", 0x00002, 0x100000, CRC(00e00c29) SHA1(a92d7220bf46655222ddc5d1c276dc469343f4c5) )
@@ -349,6 +407,8 @@ ROM_START( dragnfly )
ROM_END
ROM_START( gypmagic )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "gym5rc26_01h.bin", 0x00000, 0x080000, CRC(8643be94) SHA1(fc63872a55ac2229652566bd9795ce9bf8442fee) )
ROM_LOAD32_WORD_SWAP( "gym5rc26_02l.bin", 0x00002, 0x080000, CRC(4ee33c46) SHA1(9e0ef66e9d53a47827d04e6a89d13d37429e0c16) )
@@ -357,6 +417,8 @@ ROM_START( gypmagic )
ROM_END
ROM_START( incanp )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "inp5rg26_01h.bin", 0x00000, 0x100000, CRC(8434222e) SHA1(d03710e18f5b9e45db32685778a21a5dc598d043) )
ROM_LOAD32_WORD_SWAP( "inp5rg26_02l.bin", 0x00002, 0x100000, CRC(50c37109) SHA1(a638587f37f63b3f63ee51f541d991c3784c09f7) )
@@ -365,6 +427,8 @@ ROM_START( incanp )
ROM_END
ROM_START( jestmagi )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "jem5rc26_01h.bin", 0x00000, 0x080000, CRC(9145324c) SHA1(366baa22bde1b8da19dba756829305d0fd69b4ff) )
ROM_LOAD32_WORD_SWAP( "jem5rc26_02l.bin", 0x00002, 0x080000, CRC(cb49f466) SHA1(e3987de2e640fe8116d66d2c1755e6500dedf8a5) )
@@ -373,6 +437,8 @@ ROM_START( jestmagi )
ROM_END
ROM_START( luckfoun )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "luf5rd26_01h.bin", 0x00000, 0x080000, CRC(68b3d50a) SHA1(9b3d2a9f5d72db091e79b036017bd5d07f9fed00) )
ROM_LOAD32_WORD_SWAP( "luf5rd26_02l.bin", 0x00002, 0x080000, CRC(e7e9b8cd) SHA1(d8c421b0d58775f5a0ccae6395a604091b0acf1d) )
@@ -381,6 +447,8 @@ ROM_START( luckfoun )
ROM_END
ROM_START( mohicans )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "moh5rf26_01h.bin", 0x00000, 0x100000, CRC(527dda20) SHA1(0a71484421738517c17d76e9bf92943b57cc4cc8) )
ROM_LOAD32_WORD_SWAP( "moh5rf26_02l.bin", 0x00002, 0x100000, CRC(a9bd3846) SHA1(02d80ff6c20e3732ae582de5d4392d4d6d8ba955) )
@@ -389,6 +457,8 @@ ROM_START( mohicans )
ROM_END
ROM_START( monshow )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "tms5rc26_01h.bin", 0x00000, 0x100000, CRC(8209aafe) SHA1(e48a0524ad93a9b657d3efe67f7b5e1067b37e48) )
ROM_LOAD32_WORD_SWAP( "tms5rc26_02l.bin", 0x00002, 0x100000, CRC(78de8c59) SHA1(ad73bc926f5874d257171dfa6b727cb31e33bce9) )
@@ -397,6 +467,8 @@ ROM_START( monshow )
ROM_END
ROM_START( romanl )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "rol5rg26_01h.bin", 0x00000, 0x100000, CRC(d441d30c) SHA1(025111699a7e29781bbb4d0f4151c808e3d06235) )
ROM_LOAD32_WORD_SWAP( "rol5rg26_02l.bin", 0x00002, 0x100000, CRC(08bd72ca) SHA1(a082cffeb1bccc8ec468a618eaabba7dac89882c) )
@@ -405,6 +477,8 @@ ROM_START( romanl )
ROM_END
ROM_START( safemon )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "sam5rj26_01h.bin", 0x00000, 0x080000, CRC(7f82693f) SHA1(1c8540d209ab17f4fca5ff74bc687c83ec315208) )
ROM_LOAD32_WORD_SWAP( "sam5rj26_02l.bin", 0x00002, 0x080000, CRC(73bd981e) SHA1(f01b97201bd877c601cf3c742a6e0963de8e48dc) )
@@ -413,6 +487,8 @@ ROM_START( safemon )
ROM_END
ROM_START( showqn )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "shq_1h.bin", 0x00000, 0x080000, CRC(3fc44415) SHA1(f0be1b90a2a374f9fb9e059e834bbdbf714b6607) )
ROM_LOAD32_WORD_SWAP( "shq_2l.bin", 0x00002, 0x080000, CRC(38a03281) SHA1(1b4552b0ce347df4d87e398111bbf72f126a8ec1) )
@@ -421,6 +497,8 @@ ROM_START( showqn )
ROM_END
ROM_START( spiceup )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "siu5rc26_01h.bin", 0x00000, 0x100000, CRC(373bc2b1) SHA1(af3740fdcd028f162440701c952a3a87805bc65b) )
ROM_LOAD32_WORD_SWAP( "siu5rc26_02l.bin", 0x00002, 0x100000, CRC(2e584321) SHA1(ca98092dde76338117e989e774db2db672d87bfa) )
@@ -429,6 +507,8 @@ ROM_START( spiceup )
ROM_END
ROM_START( sultanw )
+ ENDEAVOUR_BIOS
+
ROM_REGION32_BE( 0x200000, "program", 0 )
ROM_LOAD32_WORD_SWAP( "suw5rc26_01h.bin", 0x00000, 0x100000, CRC(27760529) SHA1(b8970a706df52ee5792bbd7a4e719f2be87662ac) )
ROM_LOAD32_WORD_SWAP( "suw5rc26_02l.bin", 0x00002, 0x100000, CRC(1c98fd4d) SHA1(58ff948c0deba0bffb8866b15f46518524516501) )
@@ -443,6 +523,10 @@ ROM_START( konzero )
ROM_REGION32_BE( 0x1800000, "flash", ROMREGION_ERASE00 )
+ // Normal Endeavour games use a standard IFU BIOS; this clear chip set uses an undumped alternate version
+ ROM_REGION( 0x200000, "ifu", 0 )
+ ROM_LOAD( "konzero_ifu.bin", 0x000000, 0x080000, NO_DUMP )
+
ROM_REGION16_BE( 0x100, "eeprom", 0 )
ROM_LOAD( "93c56.u98", 0x00, 0x100, CRC(b2521a6a) SHA1(f44711545bee7e9c772a3dc23b79f0ea8059ec50) ) // empty eeprom with Konami header
ROM_END
@@ -465,23 +549,26 @@ void konendev_state::init_enchlamp()
rom[0] = 0x5782b930; // new checksum for program rom
}
+// BIOS
+GAME( 200?, konendev, 0, konendev, konendev, konendev_state, init_enchlamp, ROT0, "Konami", "Konami Endeavour BIOS", MACHINE_NOT_WORKING|MACHINE_IS_BIOS_ROOT )
+
// has a flash dump?
-GAME( 200?, enchlamp, 0, konendev, konendev, konendev_state, init_enchlamp, ROT0, "Konami", "Enchanted Lamp (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, enchlamp, konendev, konendev, konendev, konendev_state, init_enchlamp, ROT0, "Konami", "Enchanted Lamp (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
// missing flash but has other interesting files
-GAME( 200?, whiterus, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "White Russia (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-
-// partial sets
-GAME( 200?, aadvent, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "African Adventure (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, dragnfly, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Dragonfly (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, gypmagic, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Gypsy Magic (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, incanp, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Incan Pyramids (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, jestmagi, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Jester Magic (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, luckfoun, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Lucky Fountain (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, mohicans, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Mohican Sun (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, monshow, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "The Monster Show (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, romanl, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Roman Legions (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, safemon, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Safe Money (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, showqn, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Show Queen (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, spiceup, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Spice It Up (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, sultanw, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Sultan's Wish (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 200?, konzero, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Zero (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // doesn't seem to have a title string in it?
+GAME( 200?, whiterus, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "White Russia (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+
+// partial setk
+GAME( 200?, aadvent, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "African Adventure (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, dragnfly, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Dragonfly (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, gypmagic, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Gypsy Magic (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, incanp, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Incan Pyramids (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, jestmagi, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Jester Magic (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, luckfoun, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Lucky Fountain (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, mohicans, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Mohican Sun (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, monshow, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "The Monster Show (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, romanl, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Roman Legions (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, safemon, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Safe Money (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, showqn, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Show Queen (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, spiceup, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Spice It Up (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, sultanw, konendev, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Sultan's Wish (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 200?, konzero, 0, konendev, konendev, konendev_state, init_konendev, ROT0, "Konami", "Zero (Konami Endeavour)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // doesn't seem to have a title string in it?k
diff --git a/src/mame/drivers/konmedal.cpp b/src/mame/drivers/konmedal.cpp
index 10116a7df42..7d39c0c4900 100644
--- a/src/mame/drivers/konmedal.cpp
+++ b/src/mame/drivers/konmedal.cpp
@@ -42,8 +42,8 @@ Konami PWB 402218 boards
Notes and TODOs:
- Priorities not understood and wrong in places of GX-based games, apparently controlled by PROM
- - X/Y scroll effects not handled well by current K052109(TMNT tilemaps) emulation.
- Mario Roulette glitches "resolved" using hack, Fuusen Pentai still have issues with column scroll (not OK with -6 added to column index).
+ - X/Y scroll effects not 100% handled by current K052109(TMNT tilemaps) emulation.
+ Mario Roulette issues currently "resolved" using hack.
***************************************************************************/
@@ -1066,9 +1066,9 @@ ROM_START( mariorou )
ROM_END
// Konami PWB 452093A boards (TMNT tilemaps)
-GAME( 1991, mariorou, 0, mariorou, mario, konmedal_state, mario_init, ROT0, "Konami", "Mario Roulette", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE)
-GAME( 1993, shuriboy, 0, shuriboy, shuriboy, konmedal_state, shuri_init, ROT0, "Konami", "Shuriken Boy", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE)
-GAME( 1993, fuusenpn, 0, fuusenpn, fuusenpn, konmedal_state, fuusen_init, ROT0, "Konami", "Fuusen Pentai", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE)
+GAME( 1991, mariorou, 0, mariorou, mario, konmedal_state, mario_init, ROT0, "Konami", "Mario Roulette", MACHINE_SUPPORTS_SAVE)
+GAME( 1993, shuriboy, 0, shuriboy, shuriboy, konmedal_state, shuri_init, ROT0, "Konami", "Shuriken Boy", MACHINE_SUPPORTS_SAVE)
+GAME( 1993, fuusenpn, 0, fuusenpn, fuusenpn, konmedal_state, fuusen_init, ROT0, "Konami", "Fuusen Pentai", MACHINE_SUPPORTS_SAVE)
// Konami PWB 452574A boards (GX tilemaps)
GAME( 1994, buttobi, 0, ddboy, ddboy, konmedal_state, buttobi_init, ROT0, "Konami", "Buttobi Striker", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE)
@@ -1076,4 +1076,4 @@ GAME( 1994, ddboy, 0, ddboy, ddboy, konmedal_state, ddboy_init, R
// Konami PWB 402218 boards (GX tilemaps)
GAME( 1994, ddboya, ddboy, tsukande, ddboy, konmedal_state, ddboy_init, ROT0, "Konami", "Dam Dam Boy (on Tsukande Toru Chicchi PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE)
-GAME( 1995, tsukande, 0, tsukande, konmedal, konmedal_state, tsuka_init, ROT0, "Konami", "Tsukande Toru Chicchi", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE)
+GAME( 1995, tsukande, 0, tsukande, konmedal, konmedal_state, tsuka_init, ROT0, "Konami", "Tsukande Toru Chicchi", MACHINE_SUPPORTS_SAVE)
diff --git a/src/mame/drivers/megatech.cpp b/src/mame/drivers/megatech.cpp
index 424dc7a08c7..11077e1cacc 100644
--- a/src/mame/drivers/megatech.cpp
+++ b/src/mame/drivers/megatech.cpp
@@ -653,23 +653,23 @@ MACHINE_RESET_MEMBER(mtech_state, megatech)
std::string region_tag;
if (m_cart1->get_rom_size() > 0)
- m_cart_reg[0] = memregion(region_tag.assign(m_cart1->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[0] = memregion(region_tag.assign(m_cart1->tag()).append(GENERIC_ROM_REGION_TAG));
else
m_cart_reg[0] = memregion(":mt_slot1:cart");
if (m_cart2)
- m_cart_reg[1] = memregion(region_tag.assign(m_cart2->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[1] = memregion(region_tag.assign(m_cart2->tag()).append(GENERIC_ROM_REGION_TAG));
if (m_cart3)
- m_cart_reg[2] = memregion(region_tag.assign(m_cart3->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[2] = memregion(region_tag.assign(m_cart3->tag()).append(GENERIC_ROM_REGION_TAG));
if (m_cart4)
- m_cart_reg[3] = memregion(region_tag.assign(m_cart4->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[3] = memregion(region_tag.assign(m_cart4->tag()).append(GENERIC_ROM_REGION_TAG));
if (m_cart5)
- m_cart_reg[4] = memregion(region_tag.assign(m_cart5->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[4] = memregion(region_tag.assign(m_cart5->tag()).append(GENERIC_ROM_REGION_TAG));
if (m_cart6)
- m_cart_reg[5] = memregion(region_tag.assign(m_cart6->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[5] = memregion(region_tag.assign(m_cart6->tag()).append(GENERIC_ROM_REGION_TAG));
if (m_cart7)
- m_cart_reg[6] = memregion(region_tag.assign(m_cart7->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[6] = memregion(region_tag.assign(m_cart7->tag()).append(GENERIC_ROM_REGION_TAG));
if (m_cart8)
- m_cart_reg[7] = memregion(region_tag.assign(m_cart8->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[7] = memregion(region_tag.assign(m_cart8->tag()).append(GENERIC_ROM_REGION_TAG));
switch_cart(0);
}
diff --git a/src/mame/drivers/mephisto_brikett.cpp b/src/mame/drivers/mephisto_brikett.cpp
index 5fce26cd829..4917ecba1ab 100644
--- a/src/mame/drivers/mephisto_brikett.cpp
+++ b/src/mame/drivers/mephisto_brikett.cpp
@@ -495,11 +495,18 @@ ROM_START( mephisto )
ROM_END
-ROM_START( mephisto2 )
+ROM_START( mephisto2 ) // cartridge s/n 0302446
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("5619_03_351", 0x0000, 0x1000, CRC(5b13d7bf) SHA1(e1b7dee278a03f75e8a1554715fca4c7fbbc1cb8) ) // TC5334P
- ROM_LOAD("5620_03_352", 0x1000, 0x1000, CRC(e93bf521) SHA1(42f9adce0d5e25b1b9d10217f8e3e0994d7b70d5) ) // "
- ROM_LOAD("5621_03_353", 0x2000, 0x1000, CRC(430dac62) SHA1(a0e23fcb4cfa27778a9398bd4994a7792e4541d0) ) // "
+ ROM_LOAD("5619_03_351.1", 0x0000, 0x1000, CRC(5b13d7bf) SHA1(e1b7dee278a03f75e8a1554715fca4c7fbbc1cb8) ) // TC5334P
+ ROM_LOAD("5620_03_352.2", 0x1000, 0x1000, CRC(e93bf521) SHA1(42f9adce0d5e25b1b9d10217f8e3e0994d7b70d5) ) // "
+ ROM_LOAD("5621_03_353.3", 0x2000, 0x1000, CRC(430dac62) SHA1(a0e23fcb4cfa27778a9398bd4994a7792e4541d0) ) // "
+ROM_END
+
+ROM_START( mephisto2a ) // cartridge s/n 0037011
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("4005_02_351_01.1", 0x0000, 0x1000, CRC(5b13d7bf) SHA1(e1b7dee278a03f75e8a1554715fca4c7fbbc1cb8) ) // HN462532G
+ ROM_LOAD("4005_02_352_01.2", 0x1000, 0x1000, CRC(da88b62f) SHA1(f5e71521ba8ab0b481e4725ffa706b1c157424b5) ) // "
+ ROM_LOAD("4005_02_353_01.3", 0x2000, 0x1000, CRC(1f933d33) SHA1(5d5bfd40158354830c434f4c8b4ff1cac8ab4f5c) ) // "
ROM_END
ROM_START( mephisto2e )
@@ -533,7 +540,8 @@ ROM_END
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1980, mephisto, 0, 0, mephisto, mephisto, brikett_state, empty_init, "Hegener + Glaser", "Mephisto", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1981, mephisto2, 0, 0, mephisto2, mephisto, brikett_state, empty_init, "Hegener + Glaser", "Mephisto II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1981, mephisto2, 0, 0, mephisto2, mephisto, brikett_state, empty_init, "Hegener + Glaser", "Mephisto II (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1981, mephisto2a, mephisto2, 0, mephisto2, mephisto, brikett_state, empty_init, "Hegener + Glaser", "Mephisto II (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1981, mephisto2e, mephisto2, 0, mephisto2e, mephisto2e, brikett_state, empty_init, "Hegener + Glaser", "Mephisto ESB II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1983, mephisto3, 0, 0, mephisto3, mephisto3, brikett_state, empty_init, "Hegener + Glaser", "Mephisto III (ver. A)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/mephisto_montec.cpp b/src/mame/drivers/mephisto_montec.cpp
index 3bccddca35e..7f42c908b1d 100644
--- a/src/mame/drivers/mephisto_montec.cpp
+++ b/src/mame/drivers/mephisto_montec.cpp
@@ -520,7 +520,7 @@ INPUT_PORTS_END
void mephisto_montec_state::montec(machine_config &config)
{
- M65C02(config, m_maincpu, XTAL(8'000'000) / 2);
+ M65C02(config, m_maincpu, XTAL(8'000'000) / 2); // R65C02P4
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_montec_state::montec_mem);
m_maincpu->set_periodic_int(FUNC(mephisto_montec_state::nmi_line_assert), attotime::from_hz(XTAL(8'000'000) / (1 << 14)));
@@ -618,9 +618,9 @@ ROM_START( montec )
ROM_DEFAULT_BIOS("v2")
ROM_SYSTEM_BIOS( 0, "v1", "V1" )
- ROMX_LOAD("mc.bin", 0x8000, 0x8000, CRC(05524da9) SHA1(bee2ffe09a27095f733584e0fb1203b95c23e17e), ROM_BIOS(0) )
+ ROMX_LOAD("mc2_20.7.87", 0x8000, 0x8000, CRC(05524da9) SHA1(bee2ffe09a27095f733584e0fb1203b95c23e17e), ROM_BIOS(0) )
ROM_SYSTEM_BIOS( 1, "v2", "V2" )
- ROMX_LOAD("mc2.bin", 0x8000, 0x8000, CRC(8eb26043) SHA1(26454a37eea29283bbb2762a3a68e95e4be6aa1c), ROM_BIOS(1) )
+ ROMX_LOAD("mc3_12.11.87", 0x8000, 0x8000, CRC(8eb26043) SHA1(26454a37eea29283bbb2762a3a68e95e4be6aa1c), ROM_BIOS(1) )
ROM_END
ROM_START( smondial )
@@ -650,7 +650,7 @@ ROM_END
ROM_START( mondial2 )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("mondial ii 01 08 87 morsch.bin", 0x8000, 0x8000, CRC(e5945ce6) SHA1(e75bbf9d54087271d9d46fb1de7634eb957f8db0) )
+ ROM_LOAD("mondial_ii_01.08.87", 0x8000, 0x8000, CRC(e5945ce6) SHA1(e75bbf9d54087271d9d46fb1de7634eb957f8db0) )
ROM_END
diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp
index 1d814bde944..a08ce549c17 100644
--- a/src/mame/drivers/model3.cpp
+++ b/src/mame/drivers/model3.cpp
@@ -5590,9 +5590,9 @@ ROM_START( ecap ) /* Step 2.1 - Proto or Location test - No security dongle */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
// Hand written SEGA labels in this form: TITLE: QQ ROM NO: IC17 CHECK SUM: 551B 9/12-'99
- ROM_LOAD64_WORD_SWAP( "qq.ic17", 0x000006, 0x200000, BAD_DUMP CRC(1db889e0) SHA1(b9a5f344685e1d8b5711d8ab426bb886c1008e48) ) /* Check sum: 551B, dated "9/12-'99" */
- ROM_LOAD64_WORD_SWAP( "qq.ic18", 0x000004, 0x200000, BAD_DUMP CRC(e33da02f) SHA1(2adf9b65b2f56db7f050115d002f520159364983) ) /* Check sum: AC51, dated "9/12-'99" */
- ROM_LOAD64_WORD_SWAP( "qq.ic19", 0x000002, 0x200000, BAD_DUMP CRC(ca02f571) SHA1(cd797d750d4ef3534225ceb83ad2840421efd192) ) /* Check sum: 9DB5, dated "9/12-'99" */
+ ROM_LOAD64_WORD_SWAP( "qq.ic17", 0x000006, 0x200000, CRC(420b5eb8) SHA1(377afd200be441ceafa078c5a98d751b993e03d8) ) /* Check sum: 551B, dated "9/12-'99" */
+ ROM_LOAD64_WORD_SWAP( "qq.ic18", 0x000004, 0x200000, CRC(17b0bb2c) SHA1(cde18b4d5438103b91806a3c5eaeb184e5c5311b) ) /* Check sum: AC51, dated "9/12-'99" */
+ ROM_LOAD64_WORD_SWAP( "qq.ic19", 0x000002, 0x200000, CRC(a646c7e5) SHA1(3a420c05fad23dd5db0a49586c876ecdaa689c09) ) /* Check sum: 9DB5, dated "9/12-'99" */
ROM_LOAD64_WORD_SWAP( "qq.ic20", 0x000000, 0x200000, CRC(b12fe61c) SHA1(da8bb643a2b08857265f01a909f46bef98dab9cb) ) /* Check sum: C247, dated "9/12-'99" */
// CROM0
@@ -5609,9 +5609,9 @@ ROM_START( ecap ) /* Step 2.1 - Proto or Location test - No security dongle */
// CROM3
// Hand written SEGA labels in this form: TITLE: QQ ROM NO: IC13 CHECK SUM: 6B84 9/12-'99
- ROM_LOAD64_WORD_SWAP( "qq.ic13", 0x3800006, 0x400000, BAD_DUMP CRC(75413a76) SHA1(3c6d1c385938687f8c91c1f293e5e1e1874f5496) ) /* Check sum: 6B84, dated "9/12-'99" */
- ROM_LOAD64_WORD_SWAP( "qq.ic14", 0x3800004, 0x400000, BAD_DUMP CRC(678b9c2c) SHA1(04168df377850fd496cbd5eb2a3effa05c7c2e7b) ) /* Check sum: 3DC1, dated "9/12-'99" */
- ROM_LOAD64_WORD_SWAP( "qq.ic15", 0x3800002, 0x400000, BAD_DUMP CRC(6ee8af07) SHA1(1f7d01ad6094e9204d5e1e1674a0ea7b53832263) ) /* Check sum: 4988, dated "9/12-'99" */
+ ROM_LOAD64_WORD_SWAP( "qq.ic13", 0x3800006, 0x400000, CRC(bf3aca1b) SHA1(895473cfc59bcd3e0b2f377e6029348de92dc37f) ) /* Check sum: 6B84, dated "9/12-'99" */
+ ROM_LOAD64_WORD_SWAP( "qq.ic14", 0x3800004, 0x400000, CRC(b41db79b) SHA1(f3e50b5f85f7722188f21e2c71f5e827ad937ada) ) /* Check sum: 3DC1, dated "9/12-'99" */
+ ROM_LOAD64_WORD_SWAP( "qq.ic15", 0x3800002, 0x400000, CRC(91c5a2a1) SHA1(dafc89fc9ca70174651faaf34f528c90eaa24630) ) /* Check sum: 4988, dated "9/12-'99" */
ROM_LOAD64_WORD_SWAP( "qq.ic16", 0x3800000, 0x400000, CRC(3634f178) SHA1(ac32cfb47c8a33e5f62cc99a99d5c6bebbc6b601) ) /* Check sum: 0461, dated "9/12-'99" */
ROM_REGION( 0x2000000, "user3", 0 ) /* Video ROMs Part 1 */
@@ -5636,7 +5636,7 @@ ROM_START( ecap ) /* Step 2.1 - Proto or Location test - No security dongle */
ROM_REGION( 0x080000, "audiocpu", 0 ) /* 68000 code */
// Hand written SEGA labels in this form: TITLE: QQ ROM NO: IC21 CHECK SUM: 0994 9/12-'99
- ROM_LOAD16_WORD_SWAP( "qq.ic21", 0x000000, 0x080000, BAD_DUMP CRC(d8496bca) SHA1(3fa76e2210f04b75c048979f90055854311e306c) ) /* Check sum: 0994, dated "9/12-'99" */
+ ROM_LOAD16_WORD_SWAP( "qq.ic21", 0x000000, 0x080000, CRC(0c55ca5f) SHA1(74da1945714f8a512627124280d4302b1a7276cc) ) /* Check sum: 0994, dated "9/12-'99" */
ROM_REGION16_BE( 0x1000000, "samples", 0 ) /* SCSP samples */
ROM_LOAD16_WORD_SWAP( "mpr-22887.22", 0x000000, 0x400000, CRC(7d04a867) SHA1(053de98105880188b4daff183710d7932617547f) )
diff --git a/src/mame/drivers/mrdo.cpp b/src/mame/drivers/mrdo.cpp
index c157b6f9b05..6b31dac3cb1 100644
--- a/src/mame/drivers/mrdo.cpp
+++ b/src/mame/drivers/mrdo.cpp
@@ -384,6 +384,38 @@ ROM_START( mrdoy )
ROM_LOAD( "j2-u001.bin", 0x0000, 0x0117, CRC(badf5876) SHA1(b301cfc7f8e83408fdcb742f552a0414af6aa16e) ) // PAL16R6 converted to GAL16V8
ROM_END
+/* The white garbled graphics on the title screen should be the Fabremar logo (32px height), but it's drawn as
+ 16px height, like the original Taito logo. Since the F4 ROM had a different label than the others and it matches
+ with 'mrdot', someone probably replaced the original F4 Fabremar ROM with the one from Taito. */
+ROM_START( mrdofabr )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "md_fabre.a4", 0x0000, 0x2000, CRC(62593aed) SHA1(ac1cc4fa4ee3799e84938333a2a698d1ec0b527b) )
+ ROM_LOAD( "md_fabre.b4", 0x2000, 0x2000, CRC(710058d8) SHA1(168cc179f2266bbf9437445bef9ff7d3358a8e6b) )
+ ROM_LOAD( "md_fabre.c4", 0x4000, 0x2000, CRC(467d12d8) SHA1(7bb85e6a780de1c0c224229ee571cab39098f78d) )
+ ROM_LOAD( "md_fabre.f4", 0x6000, 0x2000, BAD_DUMP CRC(fce9afeb) SHA1(26236a42c1c620975d4480c4315d0c6f112429b6) )
+
+ ROM_REGION( 0x2000, "gfx1", 0 )
+ ROM_LOAD( "md_fabre.t8", 0x0000, 0x1000, CRC(f2dff901) SHA1(ddc3b38bfd8b822d7803ee51e2c13443b25e39ee) )
+ ROM_LOAD( "md_fabre.u8", 0x1000, 0x1000, CRC(f3e443bd) SHA1(10e134962b0c7500f57d4058cbd0475f5c5fa6ab) )
+
+ ROM_REGION( 0x2000, "gfx2", 0 )
+ ROM_LOAD( "md_fabre.r8", 0x0000, 0x1000, CRC(dbdc9ffa) SHA1(93f29fc106283eecbba3fd69cf3c4658aa38ab9f) )
+ ROM_LOAD( "md_fabre.n8", 0x1000, 0x1000, CRC(4b9973db) SHA1(8766c51a345a5e63446e65614c6f665ab5fbe0d7) )
+
+ ROM_REGION( 0x2000, "gfx3", 0 )
+ ROM_LOAD( "md_fabre.h5", 0x0000, 0x1000, CRC(e1218cc5) SHA1(d946613a1cf1c97f7533a4f8c2d0078d1b7daaa8) )
+ ROM_LOAD( "md_fabre.k5", 0x1000, 0x1000, CRC(b1f68b04) SHA1(25709cd81c03df51f27cd730fecf86a1daa9e27e) )
+
+ ROM_REGION( 0x0080, "proms", 0 )
+ ROM_LOAD( "82s123.u2", 0x0000, 0x0020, CRC(238a65d7) SHA1(a5b20184a1989db23544296331462ec4d7be7516) ) /* palette (high bits) */
+ ROM_LOAD( "82s123.t2", 0x0020, 0x0020, CRC(ae263dc0) SHA1(7072c100b9d692f5bb12b0c9e304425f534481e2) ) /* palette (low bits) */
+ ROM_LOAD( "82s123.f10n", 0x0040, 0x0020, CRC(16ee4ca2) SHA1(fcba4d103708b9711452009cd29c4f88d2f64cd3) ) /* sprite color lookup table */
+ ROM_LOAD( "82s123.j10", 0x0060, 0x0020, CRC(ff7fe284) SHA1(3ac8e30011c1fcba0ee8f4dc932f82296c3ba143) ) /* timing (not used) */
+
+ ROM_REGION( 0x0200, "pal16r6", 0 )
+ ROM_LOAD( "pal16r6.j2", 0x0000, 0x0117, BAD_DUMP CRC(badf5876) SHA1(b301cfc7f8e83408fdcb742f552a0414af6aa16e) ) // From parent, protected on this set
+ROM_END
+
ROM_START( yankeedo )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "a4-01.bin", 0x0000, 0x2000, CRC(03dcfba2) SHA1(c15e3d0c4225e0ca120bcd28aca39632575f8e11) )
@@ -414,11 +446,11 @@ ROM_START( yankeedo )
ROM_END
-
-GAME( 1982, mrdo, 0, mrdo, mrdo, mrdo_state, empty_init, ROT270, "Universal", "Mr. Do!", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, mrdoy, mrdo, mrdo, mrdo, mrdo_state, empty_init, ROT270, "Universal", "Mr. Do! (prototype)", MACHINE_SUPPORTS_SAVE ) /* aka "Yukidaruma" */
-GAME( 1982, mrdot, mrdo, mrdo, mrdo, mrdo_state, empty_init, ROT270, "Universal (Taito license)", "Mr. Do! (Taito)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, mrdofix, mrdo, mrdo, mrdo, mrdo_state, empty_init, ROT270, "Universal (Taito license)", "Mr. Do! (bugfixed)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, mrlo, mrdo, mrlo, mrdo, mrdo_state, empty_init, ROT270, "bootleg", "Mr. Lo!", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, mrdu, mrdo, mrdo, mrdo, mrdo_state, empty_init, ROT270, "bootleg", "Mr. Du!", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, yankeedo, mrdo, mrdo, mrdo, mrdo_state, empty_init, ROT270, "hack", "Yankee DO!", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, mrdo, 0, mrdo, mrdo, mrdo_state, empty_init, ROT270, "Universal", "Mr. Do!", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, mrdoy, mrdo, mrdo, mrdo, mrdo_state, empty_init, ROT270, "Universal", "Mr. Do! (prototype)", MACHINE_SUPPORTS_SAVE ) /* aka "Yukidaruma" */
+GAME( 1982, mrdot, mrdo, mrdo, mrdo, mrdo_state, empty_init, ROT270, "Universal (Taito license)", "Mr. Do! (Taito)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, mrdofix, mrdo, mrdo, mrdo, mrdo_state, empty_init, ROT270, "Universal (Taito license)", "Mr. Do! (bugfixed)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, mrlo, mrdo, mrlo, mrdo, mrdo_state, empty_init, ROT270, "bootleg", "Mr. Lo!", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, mrdu, mrdo, mrdo, mrdo, mrdo_state, empty_init, ROT270, "bootleg", "Mr. Du!", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, mrdofabr, mrdo, mrdo, mrdo, mrdo_state, empty_init, ROT270, "bootleg (Fabremar)", "Mr. Do! (Fabremar bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, yankeedo, mrdo, mrdo, mrdo, mrdo_state, empty_init, ROT270, "hack", "Yankee DO!", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp
index 2a463844f5d..bfb6eb4e1cd 100644
--- a/src/mame/drivers/naomi.cpp
+++ b/src/mame/drivers/naomi.cpp
@@ -320,9 +320,11 @@ Games known to use this PCB include....
Sticker EPROM FLASHROMs X76F100 EPM7064S 315-5881
Game on cart IC22# # of SOP56 IC37# IC41# IC42# Notes
----------------------------------------------------------------------------------------------------------------------------------
-Club Kart: European Session (2003, prototype) no cart * 21 (64Mb)** present 315-6206 not present * flash-PCB ** game data ROMs is not dumped
+Club Kart (2003, prototype, set 1) no cart * 21 (64Mb) present 315-6206 not present * flash-PCB
+Club Kart (2003, prototype, set 2) no cart * 21 (64Mb) present 315-6206 present * flash-PCB
Crackin' DJ part 2 840-0068C 23674 20 (64Mb) present 315-6206 317-0311-COM PCB have label 840-0068B-01 837-14124, requires regular 837-13551 and 837-13938 rotary JVS boards, and turntable simulation
Crazy Taxi 840-0002C ? 13 (64Mb) ? 315-6206 ? not dumped, likely same as regular 171-7919A cart
+Ferrari F355 Challenge (private show version) no cart ** 21*(64Mb) present 315-6206 317-0254-COM * only first 19 flash roms contain game data, ** flash-PCB
Ferrari F355 Challenge (twin/deluxe, preview) no cart 22848P* 21 (64Mb) present 315-6206 317-0267-COM * other ROM board we've seen had 2x flashroms PCB instead of IC22 EEPROM, contents is the same.
/Ferrari F355 Challenge 2 - International
\Course Edition (twin/deluxe, prototype) no cart 23399 21 (64Mb) present 315-6206 317-0287-COM content is the same as regular 171-7919A cart
@@ -4437,13 +4439,50 @@ ROM_START( f355 )
ROM_LOAD("mpr-21901.ic21s", 0xa800000, 0x0800000, CRC(266a3eea) SHA1(795ecc5589a0152b9cf1e03e454ed1ea01501942) )
ROM_REGION( 0x10000, "drivebd", 0 ) /* drive board ROM */
- ROM_LOAD( "epr-21867p.bin", 0x000000, 0x010000, CRC(6143b911) SHA1(360ebc53696da7a29e6404376c82947563274835) ) // prototype / prewiev
ROM_LOAD( "epr-21867.bin", 0x000000, 0x010000, CRC(4f93a2a0) SHA1(875907e7fcfc44850e2c60c12268ac61c742f217) )
// 834-13842 1999 317-0254-COM Naomi
ROM_PARAMETER( ":rom_board:segam2crypt:key", "280e8f84" )
ROM_END
+// This set show "PRIVATE SHOW VERSION" text if run with 21862P Japan BIOS or "LOCATION TEST VERSION" if run with 21864P Export BIOS.
+// Multi-board only function if use one of 2 mentioned above prototype BIOSes, will boot as regular single-board game with any other BIOS.
+ROM_START( f355p )
+ F355DLX_BIOS
+ ROM_DEFAULT_BIOS("bios4")
+ NAOMI_DEFAULT_EEPROM
+
+ ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
+ ROM_LOAD("rom0.ic22", 0x0000000, 0x0400000, CRC(298cbe94) SHA1(68b5e7f4b71ebdeceaaede2a33b6be9931cf862e) )
+
+ ROM_LOAD("rom1.ic1s", 0x0800000, 0x0800000, BAD_DUMP CRC(ba0ee343) SHA1(d8d8bbfd330c9b9c7fe5974cb2f5f9d6a4ef1477) ) // file: 7ACD 7D37 right sums: 803F 81A7
+ ROM_LOAD("rom2.ic2s", 0x1000000, 0x0800000, CRC(adf8fa95) SHA1(d91ca2a8b45d744c5a6b84099b12c553acc2a83c) )
+ ROM_LOAD("rom3.ic3s", 0x1800000, 0x0800000, BAD_DUMP CRC(90fc7b08) SHA1(ac9b49239f731a9ebfdf998c6d2253dea2f5741c) ) // file: BF7E 589C right sums: BF70 579C
+ ROM_LOAD("rom4.ic4s", 0x2000000, 0x0800000, CRC(9c18fe61) SHA1(acc0447e3aec6233d7211afe9578236e275330c7) )
+ ROM_LOAD("rom5.ic5s", 0x2800000, 0x0800000, CRC(ed3a6c95) SHA1(8545231342ebbf436551b73e17c91b59f53f47c1) )
+ ROM_LOAD("rom6.ic6s", 0x3000000, 0x0800000, CRC(a52d4b49) SHA1(9317da85a80d7a0bb8f9af19163724193088f3ab) )
+ ROM_LOAD("rom7.ic7s", 0x3800000, 0x0800000, BAD_DUMP CRC(e889e336) SHA1(c6cf3b2bf9d04315e78ffad8aad218adc86c7836) ) // file: 8DE7 F722 right sums: 8DD7 F712
+ ROM_LOAD("rom8.ic8s", 0x4000000, 0x0800000, CRC(1a16faef) SHA1(e216f96f1ae8e7af5d6b83ffd34a576e8548ddb2) )
+ ROM_LOAD("rom9.ic9s", 0x4800000, 0x0800000, CRC(5732d7ed) SHA1(1a536a08709ca5cf39fb28010be28eeb3b783ea3) )
+ ROM_LOAD("rom10.ic10s", 0x5000000, 0x0800000, BAD_DUMP CRC(99b5a926) SHA1(f3d7403df7873a3baf6ca73701353665d53e50f6) ) // file: 9ED5 D2B9 right sums: 9E95 92B9
+ ROM_LOAD("rom11.ic11s", 0x5800000, 0x0800000, BAD_DUMP CRC(280d23e8) SHA1(6afe1bbef2ece665113bc6de28d7349af433d16b) ) // file: 645B 525A right sums: 640B 421A
+ ROM_LOAD("rom12.ic12s", 0x6000000, 0x0800000, BAD_DUMP CRC(cacc562d) SHA1(a2e27f5d2872e24176e581453e1929f4132a7ed1) ) // file: 7AD0 2DC7 right sums: 66E6 2DD3
+ ROM_LOAD("rom13.ic13s", 0x6800000, 0x0800000, BAD_DUMP CRC(d706fa2f) SHA1(a7aebd7b220f0e780fe9340a8d10497afc177832) ) // file: B130 4E38 right sums: B12F 4D38
+ ROM_LOAD("rom14.ic14s", 0x7000000, 0x0800000, BAD_DUMP CRC(c1f9353c) SHA1(6d8c6df04b94499c798d0244e473127b45e51de4) ) // file: A24E 220C right sums: A24A 2208
+ ROM_LOAD("rom15.ic15s", 0x7800000, 0x0800000, CRC(1bff148f) SHA1(31d2a71191b2f4c4eaa325ff3a14def3b4cd778e) )
+ ROM_LOAD("rom16.ic16s", 0x8000000, 0x0800000, CRC(181eb548) SHA1(e1548d5f03aa2957e8049ad4c248b9681e46f30b) )
+ ROM_LOAD("rom17.ic17s", 0x8800000, 0x0800000, CRC(a326aac0) SHA1(31f17955c28e7e4e5155ef72b26dca43edb49e16) )
+ ROM_LOAD("rom18.ic18s", 0x9000000, 0x0800000, CRC(1c426bd4) SHA1(455d891d9d7f65abfbc39cfa14d949d3a43b6d77) )
+ ROM_LOAD("rom19.ic19s", 0x9800000, 0x0800000, CRC(e3a34c04) SHA1(4b2877311d7263f3f9c0f277f545fbecd4bf8209) )
+ // IC 20 and 21 populated, empty (FF)
+
+ ROM_REGION( 0x10000, "drivebd", 0 ) /* drive board ROM */
+ ROM_LOAD( "epr-21867p.bin", 0x000000, 0x010000, CRC(6143b911) SHA1(360ebc53696da7a29e6404376c82947563274835) ) // prototype / prewiev
+
+ // 1999 317-0254-COM Naomi
+ ROM_PARAMETER( ":rom_board:segam2crypt:key", "280e8f84" )
+ROM_END
+
ROM_START( f355twin )
F355_BIOS
NAOMI_DEFAULT_EEPROM
@@ -10043,32 +10082,63 @@ ROM_START( clubk2kp )
NAOMI_DEFAULT_EEPROM
ROM_REGION( 0xa000000, "rom_board", ROMREGION_ERASEFF)
- ROM_LOAD( "ic22.bin", 0x0000000, 0x400000, CRC(334fc561) SHA1(e8c8707b0d13216ec7071da05823e330deb810d4) ) // flash ROM module
- // game data ROMs not dumped, not the same as regular revision. technically, all below should be marked as NO_DUMP.
- ROM_LOAD32_WORD( "opr-24151.ic17s", 0x1000000, 0x800000, CRC(91594439) SHA1(a195bfe0c70a0c7048b547af0a92c98d126230c6) )
- ROM_LOAD32_WORD( "opr-24152.ic18", 0x1000002, 0x800000, CRC(fd131f88) SHA1(bc27b3ab5b41a3fe33b541b7cca28d6baed157b3) )
- ROM_LOAD32_WORD( "opr-24153.ic19s", 0x2000000, 0x800000, CRC(795df2a6) SHA1(80f740806dcaacc28752cea98b254cbee51972a4) )
- ROM_LOAD32_WORD( "opr-24154.ic20", 0x2000002, 0x800000, CRC(7bba9a33) SHA1(e50199ce5c893ea81668cbf2972500803265dc19) )
- ROM_LOAD32_WORD( "opr-24155.ic21s", 0x3000000, 0x800000, CRC(9e3b358d) SHA1(3dec18be49b2271f013e4f4a02f32fa515a4ca69) )
- ROM_LOAD32_WORD( "opr-24156.ic22", 0x3000002, 0x800000, CRC(dd5286f7) SHA1(37ea254997cef1c45b53786c8abb2521acf24b56) )
- ROM_LOAD32_WORD( "opr-24157.ic23s", 0x4000000, 0x800000, CRC(7edc4a7d) SHA1(f4ffa20c83226c0c0dccc3b1e9ec6601f145b01b) )
- ROM_LOAD32_WORD( "opr-24158.ic24", 0x4000002, 0x800000, CRC(4d546427) SHA1(74a399c40f56af76077d47f996629a7fb650c804) )
- ROM_LOAD32_WORD( "opr-24159.ic25s", 0x5000000, 0x800000, CRC(ae8d7de1) SHA1(15dadd9c5449d65310647e247a07da165c9e3d5e) )
- ROM_LOAD32_WORD( "opr-24160.ic26", 0x5000002, 0x800000, CRC(e75210c9) SHA1(315c077201023740f63eab5de1d81eb71613b06f) )
- ROM_LOAD32_WORD( "opr-24161.ic27s", 0x6000000, 0x800000, CRC(aeecf812) SHA1(d683f1c7f200481cf2342a387d7558d0d76f89f4) )
- ROM_LOAD32_WORD( "opr-24162.ic28", 0x6000002, 0x800000, CRC(0e349c02) SHA1(4d0b4efeb125e23b1e73db2febf99565969d71d2) )
- ROM_LOAD32_WORD( "opr-24163.ic29", 0x7000000, 0x800000, CRC(dab7f365) SHA1(9a707c8992ddfa58f81bb5278f66713e424b0f4f) )
- ROM_LOAD32_WORD( "opr-24164.ic30s", 0x7000002, 0x800000, CRC(03be6b1d) SHA1(40792314fada46648f4f98a3d5a14822e6b1cf36) )
- ROM_LOAD32_WORD( "opr-24165.ic31", 0x8000000, 0x800000, CRC(8fdb66a5) SHA1(32d2926328d9d804dcff781e2b758dd2a4b1a753) )
- ROM_LOAD32_WORD( "opr-24166.ic32s", 0x8000002, 0x800000, CRC(790a1b5e) SHA1(bb0ad6de62d758f6869b3bb62cce9947f8b08681) )
- ROM_LOAD32_WORD( "opr-24167.ic33", 0x9000000, 0x800000, CRC(15de1d97) SHA1(26a96644f183713a556a5ff2d491510589c9d7c8) )
- ROM_LOAD32_WORD( "opr-24168.ic34s", 0x9000002, 0x800000, CRC(90dfdd5a) SHA1(5c98bc84b310fa70e6bceee190508e9eaa60c82c) )
-
- ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 )
+ ROM_LOAD( "ic22.bin", 0x0000000, 0x400000, CRC(334fc561) SHA1(e8c8707b0d13216ec7071da05823e330deb810d4) ) // flash ROM module
+
+ ROM_LOAD( "rom1.ic1s", 0x0800000, 0x800000, CRC(63bd7915) SHA1(3483f82ff801803c5abd04a0c66a1cecdff59c26) )
+ ROM_LOAD( "rom2.ic2s", 0x1000000, 0x800000, CRC(9d0d5e68) SHA1(4b2535b968eff1fc1d3266194da54bb3c17b24ec) )
+ ROM_LOAD( "rom3.ic3s", 0x1800000, 0x800000, CRC(ead5f480) SHA1(defcedeb150a9307f6fa36b36a53a59ab5ee274a) )
+ ROM_LOAD( "rom4.ic4s", 0x2000000, 0x800000, CRC(c9b21961) SHA1(8c35378f65a14433965228cce26c7c8cebda8ece) )
+ ROM_LOAD( "rom5.ic5s", 0x2800000, 0x800000, CRC(b42b5bdf) SHA1(da8c235f6e76ad5b4305a8d9722da8523a701924) )
+ ROM_LOAD( "rom6.ic6s", 0x3000000, 0x800000, CRC(6e69792e) SHA1(25fa82e823ab12ba9a0aafe9cf09c16e74aff130) )
+ ROM_LOAD( "rom7.ic7s", 0x3800000, 0x800000, CRC(0956796e) SHA1(69ed59a1e7f00cbf85ff72a47aa3eee75bc358fc) )
+ ROM_LOAD( "rom8.ic8s", 0x4000000, 0x800000, CRC(9dba44f5) SHA1(8de0a836b1aa78e0babd4b186f991d44bc0f34b6) )
+ ROM_LOAD( "rom9.ic9s", 0x4800000, 0x800000, CRC(1307b6a1) SHA1(a7108483e69994835e54f771a1f2ee05afda289d) )
+ ROM_LOAD( "rom10.ic10s", 0x5000000, 0x800000, CRC(4ec15b61) SHA1(1484d00b780675df5178b0d686f152683b66e6df) )
+ ROM_LOAD( "rom11.ic11s", 0x5800000, 0x800000, CRC(3c4a2f34) SHA1(f4b14ec9df023843bbbfeca174344c3f65a041b7) )
+ ROM_LOAD( "rom12.ic12s", 0x6000000, 0x800000, CRC(55548b90) SHA1(3d791c13a142e78f0122a0ec0064023063255861) )
+ ROM_LOAD( "rom13.ic13s", 0x6800000, 0x800000, CRC(373097e5) SHA1(561bf3ea396484b20ebb9fe63527329c005d067f) )
+ ROM_LOAD( "rom14.ic14s", 0x7000000, 0x800000, CRC(7297efb8) SHA1(9c3acdbb01c178ff18f9fb21c62b982cad8775e3) )
+ ROM_LOAD( "rom15.ic15s", 0x7800000, 0x800000, CRC(42dd18db) SHA1(8a0cc64128f2b823c99bcd1f45530ce85af6c6fe) )
+ ROM_LOAD( "rom16.ic16s", 0x8000000, 0x800000, CRC(aaaa39cf) SHA1(8de90fefa81b3d5b8602335b18a86249deccc6a8) )
+ ROM_LOAD( "rom17.ic17s", 0x8800000, 0x800000, CRC(382fc4cb) SHA1(8f79306fac4911748c362a4038ac6592ba0477c9) )
+ ROM_LOAD( "rom18.ic18s", 0x9000000, 0x800000, CRC(cdd71385) SHA1(4b16d00b57b7fd96a7858e1b9146ee3f2ff0d200) )
+ ROM_LOAD( "rom19.ic19s", 0x9800000, 0x800000, CRC(7ee9743b) SHA1(119f632c3d10d032fd15159aa37f3bcfe0938b06) )
ROM_PARAMETER( ":rom_board:segam2crypt:key", "-1") // 315-5881 not populated
ROM_END
+ROM_START( clubk2kpa )
+ NAOMI2_BIOS
+ NAOMI_DEFAULT_EEPROM
+
+ ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
+ ROM_LOAD( "rom0.ic22", 0x0000000, 0x400000, BAD_DUMP CRC(8514f0bf) SHA1(84ad7b8ccd41db38a5be8b0619e275b56482a5be) ) // one of ROM header bytes was clearly bad, manually fixed, but there might be more
+ // game data ROMs confirmed good, despite the fact they shown as all BAD in BIOS ROM TEST
+ ROM_LOAD( "rom1.ic1s", 0x0800000, 0x800000, CRC(63bd7915) SHA1(3483f82ff801803c5abd04a0c66a1cecdff59c26) )
+ ROM_LOAD( "rom2.ic2s", 0x1000000, 0x800000, CRC(9d0d5e68) SHA1(4b2535b968eff1fc1d3266194da54bb3c17b24ec) )
+ ROM_LOAD( "rom3.ic3s", 0x1800000, 0x800000, CRC(ead5f480) SHA1(defcedeb150a9307f6fa36b36a53a59ab5ee274a) )
+ ROM_LOAD( "rom4.ic4s", 0x2000000, 0x800000, CRC(c9b21961) SHA1(8c35378f65a14433965228cce26c7c8cebda8ece) )
+ ROM_LOAD( "rom5.ic5s", 0x2800000, 0x800000, CRC(b42b5bdf) SHA1(da8c235f6e76ad5b4305a8d9722da8523a701924) )
+ ROM_LOAD( "rom6.ic6s", 0x3000000, 0x800000, CRC(6e69792e) SHA1(25fa82e823ab12ba9a0aafe9cf09c16e74aff130) )
+ ROM_LOAD( "rom7.ic7s", 0x3800000, 0x800000, CRC(0956796e) SHA1(69ed59a1e7f00cbf85ff72a47aa3eee75bc358fc) )
+ ROM_LOAD( "rom8.ic8s", 0x4000000, 0x800000, CRC(9dba44f5) SHA1(8de0a836b1aa78e0babd4b186f991d44bc0f34b6) )
+ ROM_LOAD( "rom9.ic9s", 0x4800000, 0x800000, CRC(1307b6a1) SHA1(a7108483e69994835e54f771a1f2ee05afda289d) )
+ ROM_LOAD( "rom10.ic10s", 0x5000000, 0x800000, CRC(4ec15b61) SHA1(1484d00b780675df5178b0d686f152683b66e6df) )
+ ROM_LOAD( "rom11.ic11s", 0x5800000, 0x800000, CRC(3c4a2f34) SHA1(f4b14ec9df023843bbbfeca174344c3f65a041b7) )
+ ROM_LOAD( "rom12.ic12s", 0x6000000, 0x800000, CRC(55548b90) SHA1(3d791c13a142e78f0122a0ec0064023063255861) )
+ ROM_LOAD( "rom13.ic13s", 0x6800000, 0x800000, CRC(373097e5) SHA1(561bf3ea396484b20ebb9fe63527329c005d067f) )
+ ROM_LOAD( "rom14.ic14s", 0x7000000, 0x800000, CRC(7297efb8) SHA1(9c3acdbb01c178ff18f9fb21c62b982cad8775e3) )
+ ROM_LOAD( "rom15.ic15s", 0x7800000, 0x800000, CRC(42dd18db) SHA1(8a0cc64128f2b823c99bcd1f45530ce85af6c6fe) )
+ ROM_LOAD( "rom16.ic16s", 0x8000000, 0x800000, CRC(aaaa39cf) SHA1(8de90fefa81b3d5b8602335b18a86249deccc6a8) )
+ ROM_LOAD( "rom17.ic17s", 0x8800000, 0x800000, CRC(382fc4cb) SHA1(8f79306fac4911748c362a4038ac6592ba0477c9) )
+ ROM_LOAD( "rom18.ic18s", 0x9000000, 0x800000, CRC(cdd71385) SHA1(4b16d00b57b7fd96a7858e1b9146ee3f2ff0d200) )
+ ROM_LOAD( "rom19.ic19s", 0x9800000, 0x800000, CRC(7ee9743b) SHA1(119f632c3d10d032fd15159aa37f3bcfe0938b06) )
+ ROM_LOAD( "rom20.ic20s", 0xa000000, 0x800000, CRC(99ef6bb7) SHA1(afcf187febe94035c989ca4a6e45bc0c3a806043) ) // not used by game, garbage
+ ROM_LOAD( "rom21.ic21s", 0xa800000, 0x800000, CRC(21bd0a9c) SHA1(b0709f627f2d2532f9cc10b5f89528f98336de61) ) // not used by game, garbage
+
+ ROM_PARAMETER( ":rom_board:segam2crypt:key", "-1") // 315-5881 populated, not used
+ROM_END
+
/**********************************************
*
@@ -11293,6 +11363,7 @@ ROM_END
/* ????? */ GAME( 1998, hotd2e, hotd2, naomim2, hotd2, naomi_state, init_hotd2, ROT0, "Sega", "The House of the Dead 2 (Export)", GAME_FLAGS ) /* specific BIOS "hod2bios" needed */
/* none */ GAME( 1998, hotd2p, hotd2, naomim2, hotd2, naomi_state, init_hotd2, ROT0, "Sega", "The House of the Dead 2 (prototype)", GAME_FLAGS ) /* specific BIOS "hod2bios" needed */
/* 13842 */ GAME( 1999, f355, f355dlx, naomim2, naomi, naomi_state, empty_init, ROT0, "Sega", "Ferrari F355 Challenge (deluxe, no link)", GAME_FLAGS ) /* specific BIOS "f355dlx" needed */
+/* none */ GAME( 1999, f355p, f355, naomim2, naomi, naomi_state, empty_init, ROT0, "Sega", "Ferrari F355 Challenge (private show version)", GAME_FLAGS ) /* specific BIOS epr-21862p or epr-21864p needed */
/* 13950 */ GAME( 1999, f355twin, f355bios, naomim2, naomi, naomi_state, empty_init, ROT0, "Sega", "Ferrari F355 Challenge (twin/deluxe)", GAME_FLAGS ) /* specific BIOS "f355bios" needed */
/* 13950P */ GAME( 1999, f355twinp,f355twin, naomim2, naomi, naomi_state, empty_init, ROT0, "Sega", "Ferrari F355 Challenge (twin/deluxe, preview)", GAME_FLAGS ) /* specific BIOS "f355bios" needed */
/* none */ GAME( 2001, f355twn2, f355bios, naomim2, naomi, naomi_state, empty_init, ROT0, "Sega", "Ferrari F355 Challenge 2 - International Course Edition (twin/deluxe)", GAME_FLAGS ) /* specific BIOS "f355bios" needed */
@@ -11428,7 +11499,8 @@ ROM_END
/* 0129 */ GAME( 2003, clubkprz, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart Prize (Export, Japan, Rev A)", GAME_FLAGS )
/* 0137 */ GAME( 2004, clubkpzb, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart Prize Version B (Export, Japan)", GAME_FLAGS )
/* 0139 */ GAME( 2003, clubk2k3, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, Rev A)", GAME_FLAGS )
-/* none */ GAME( 2003, clubk2kp, clubk2k3,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, prototype)", GAME_FLAGS )
+/* none */ GAME( 2003, clubk2kp, clubk2k3,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, prototype, set 1)", GAME_FLAGS )
+/* none */ GAME( 2003, clubk2kpa,clubk2k3,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, prototype, set 2)", GAME_FLAGS )
/* 841-xxxxx ("Licensed by Sega" Naomi cart games)*/
/* 0001 */ GAME( 1999, pstone, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Capcom", "Power Stone", GAME_FLAGS )
diff --git a/src/mame/drivers/nes.cpp b/src/mame/drivers/nes.cpp
index 59b38b9c1e7..4ad7f1966d4 100644
--- a/src/mame/drivers/nes.cpp
+++ b/src/mame/drivers/nes.cpp
@@ -27,11 +27,11 @@ WRITE8_MEMBER(nes_state::nes_vh_sprite_dma_w)
void nes_state::nes_map(address_map &map)
{
- map(0x0000, 0x07ff).ram().mirror(0x1800); /* RAM */
- map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); /* PPU registers */
- map(0x4014, 0x4014).w(FUNC(nes_state::nes_vh_sprite_dma_w)); /* stupid address space hole */
- map(0x4016, 0x4016).rw(FUNC(nes_state::nes_in0_r), FUNC(nes_state::nes_in0_w)); /* IN0 - input port 1 */
- map(0x4017, 0x4017).r(FUNC(nes_state::nes_in1_r)); /* IN1 - input port 2 */
+ map(0x0000, 0x07ff).ram().mirror(0x1800); // RAM
+ map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); // PPU registers
+ map(0x4014, 0x4014).w(FUNC(nes_state::nes_vh_sprite_dma_w)); // stupid address space hole
+ map(0x4016, 0x4016).rw(FUNC(nes_state::nes_in0_r), FUNC(nes_state::nes_in0_w)); // IN0 - input port 1
+ map(0x4017, 0x4017).r(FUNC(nes_state::nes_in1_r)); // IN1 - input port 2
// 0x4100-0x5fff -> LOW HANDLER defined on a pcb base
// 0x6000-0x7fff -> MID HANDLER defined on a pcb base
// 0x8000-0xffff -> HIGH HANDLER defined on a pcb base
@@ -91,6 +91,7 @@ void nes_state::nes(machine_config &config)
void nes_state::nespal(machine_config &config)
{
nes(config);
+
/* basic machine hardware */
m_maincpu->set_clock(PAL_APU_CLOCK);
@@ -111,6 +112,7 @@ void nes_state::nespal(machine_config &config)
void nes_state::famicom(machine_config &config)
{
nes(config);
+
NES_CONTROL_PORT(config.replace(), m_ctrl1, fc_control_port1_devices, "joypad");
NES_CONTROL_PORT(config.replace(), m_ctrl2, fc_control_port2_devices, "joypad");
NES_CONTROL_PORT(config, m_exp, fc_expansion_devices, nullptr);
@@ -125,6 +127,7 @@ void nes_state::famicom(machine_config &config)
void nes_state::nespalc(machine_config &config)
{
nespal(config);
+
m_maincpu->set_clock(PALC_APU_CLOCK);
m_maincpu->set_addrmap(AS_PROGRAM, &nes_state::nes_map);
@@ -144,6 +147,7 @@ void nes_state::nespalc(machine_config &config)
void nes_state::famipalc(machine_config &config)
{
nespalc(config);
+
NES_CONTROL_PORT(config.replace(), m_ctrl1, fc_control_port1_devices, "joypad");
NES_CONTROL_PORT(config.replace(), m_ctrl2, fc_control_port2_devices, "joypad");
NES_CONTROL_PORT(config, m_exp, fc_expansion_devices, nullptr);
@@ -157,6 +161,7 @@ void nes_state::famipalc(machine_config &config)
void nes_state::suborkbd(machine_config &config)
{
famipalc(config);
+
/* TODO: emulate the parallel port bus! */
m_exp->set_default_option("subor_keyboard");
m_exp->set_fixed(true);
diff --git a/src/mame/drivers/pong.cpp b/src/mame/drivers/pong.cpp
index 7699b460935..7d6980a9c9b 100644
--- a/src/mame/drivers/pong.cpp
+++ b/src/mame/drivers/pong.cpp
@@ -666,7 +666,7 @@ void rebound_state::rebound(machine_config &config)
ROM_START( pong ) /* dummy to satisfy game entry*/
ROM_REGION( 0x10000, "maincpu", 0 ) /* enough for netlist */
- ROM_LOAD( "pong.netlist", 0x000000, 0x00473b, CRC(eadaf087) SHA1(4cb9a79f5cb53502105974be61b99ff16ee930e9) )
+ ROM_LOAD( "pong.netlist", 0x000000, 18273, CRC(d249ce49) SHA1(e1d2cfca74b75f0520965639e6947a351650fc3e) )
ROM_END
ROM_START( breakout )
diff --git a/src/mame/drivers/rampart.cpp b/src/mame/drivers/rampart.cpp
index 4d414967a9a..eeaa3b0a3d8 100644
--- a/src/mame/drivers/rampart.cpp
+++ b/src/mame/drivers/rampart.cpp
@@ -7,7 +7,7 @@
driver by Aaron Giles
Games supported:
- * Rampart (1990) [3 sets]
+ * Rampart (1990) [4 sets]
Known bugs:
* P3 trackball doesn't work, maybe it needs some kind of fake input port
@@ -30,8 +30,6 @@
#include "cpu/m68000/m68000.h"
#include "machine/eeprompar.h"
#include "machine/watchdog.h"
-#include "sound/okim6295.h"
-#include "sound/ym2413.h"
#include "emupal.h"
#include "speaker.h"
@@ -436,6 +434,37 @@ ROM_START( rampart2p )
ROM_END
+ROM_START( rampart2pa ) // original Atari PCB but with mostly hand-written labels, uses smaller ROMs for the main CPU
+ ROM_REGION( 0x148000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "0h.13k-l", 0x00000, 0x20000, CRC(d4e26d0f) SHA1(5106549e6d003711bfd390aa2e19e6e5f33f2cf9) )
+ ROM_LOAD16_BYTE( "0l.13h", 0x00001, 0x20000, CRC(ed2a49bd) SHA1(b97ee41b7f930ba7b8b113c1b19c7729a5880b1f) )
+ ROM_LOAD16_BYTE( "1h.13l", 0x40000, 0x20000, CRC(b232b807) SHA1(1e405371595d97d44dec97387a0dedc6bc1ad1d2) )
+ ROM_LOAD16_BYTE( "1l.13h-j", 0x40001, 0x20000, CRC(a2db78b1) SHA1(586ee0b5901b685ac3c2bfad1d8ce1cd51def292) )
+ ROM_LOAD16_BYTE( "2h.13m", 0x80000, 0x20000, CRC(37b32b7e) SHA1(3f6c969829b5ca866e8e162ccecdf9ec7c17d808) )
+ ROM_LOAD16_BYTE( "2l.13j", 0x80001, 0x20000, CRC(00cd567b) SHA1(1d6ee16dd5af3328365dafb2fc771396f53dbc44) )
+ ROM_LOAD16_BYTE( "3h.13n", 0xc0000, 0x20000, CRC(c23b1c98) SHA1(abd8e2738bb945476dc9f848290880d7ece92081) )
+ ROM_LOAD16_BYTE( "3l.13k", 0xc0001, 0x20000, CRC(0a12ca83) SHA1(2f44420b94b981af1d65cb775e4799bc43898041) )
+
+ ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
+ ROM_LOAD( "atr.2n", 0x000000, 0x20000, CRC(efa38bef) SHA1(d38448138134e7a0be2a75c3cd6ab0729da5b83b) )
+
+ ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM data */
+ ROM_LOAD( "arom0_2_player_136082-1007.2d", 0x00000, 0x20000, CRC(c96a0fc3) SHA1(6e7e242d0afa4714ca31d77ccbf8ee487bbdb1e4) )
+ ROM_LOAD( "arom1_2_player_136082-1006.1d", 0x20000, 0x20000, CRC(518218d9) SHA1(edf1b11579dcfa9a872fa4bd866dc2f95fac767d) )
+
+ ROM_REGION( 0x800, "eeprom", 0 )
+ ROM_LOAD( "rampart-eeprom.bin", 0x0000, 0x800, CRC(0be57615) SHA1(bd1f9eef410c78c091d2c925d6275427c77c7ecd) )
+
+ ROM_REGION( 0x0c00, "plds", 0 )
+ ROM_LOAD( "gal16v8-136082-1000.1j", 0x0000, 0x0117, CRC(18f82b38) SHA1(2ffd43a143396617704ced51da78fec2cf12cced) ) // not dumped for this set but same part number as rampart2p
+ ROM_LOAD( "gal16v8-136082-1001.4l", 0x0200, 0x0117, CRC(74d75d68) SHA1(dc3ee765ec48a76af6433026243284437958a39a) ) // not dumped for this set but same part number as rampart2p
+ ROM_LOAD( "gal16v8-136082-1002.7k", 0x0400, 0x0117, CRC(f593401f) SHA1(fbc258cd389f397a005a522812d412f4ed9bf407) ) // not dumped for this set but same part number as rampart2p
+ ROM_LOAD( "gal20v8-136082-1003.8j", 0x0600, 0x0157, CRC(67bb9705) SHA1(65bb31421f1303fce546781a463cc76921e58b25) ) // not dumped for this set but same part number as rampart2p
+ ROM_LOAD( "gal20v8-136082-1004.8m", 0x0800, 0x0157, CRC(0001ed7d) SHA1(c16a695361ee17d7508f6fb46854a9189549e3a3) ) // not dumped for this set but same part number as rampart2p
+ ROM_LOAD( "gal16v8-136082-1005.12c", 0x0a00, 0x0117, CRC(42c05114) SHA1(869a7f07da2d096b5a62f694db0dc1ca62d62242) ) // dumped for this set, matches rampartj (same part number)
+ROM_END
+
+
ROM_START( rampartj )
ROM_REGION( 0x148000, "maincpu", 0 )
ROM_LOAD16_BYTE( "136082-3451.bin", 0x00000, 0x20000, CRC(c6596d32) SHA1(3e3e0cbb3b5fc6dd9685bbc4b18c22e0858d9282) )
@@ -490,6 +519,7 @@ void rampart_state::init_rampart()
*
*************************************/
-GAME( 1990, rampart, 0, rampart, rampart, rampart_state, init_rampart, ROT0, "Atari Games", "Rampart (Trackball)", MACHINE_SUPPORTS_SAVE )
-GAME( 1990, rampart2p,rampart, rampart, ramprt2p, rampart_state, init_rampart, ROT0, "Atari Games", "Rampart (Joystick)", MACHINE_SUPPORTS_SAVE )
-GAME( 1990, rampartj, rampart, rampart, rampartj, rampart_state, init_rampart, ROT0, "Atari Games", "Rampart (Japan, Joystick)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, rampart, 0, rampart, rampart, rampart_state, init_rampart, ROT0, "Atari Games", "Rampart (Trackball)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, rampart2p, rampart, rampart, ramprt2p, rampart_state, init_rampart, ROT0, "Atari Games", "Rampart (Joystick, bigger ROMs)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, rampart2pa, rampart, rampart, ramprt2p, rampart_state, init_rampart, ROT0, "Atari Games", "Rampart (Joystick, smaller ROMs)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, rampartj, rampart, rampart, rampartj, rampart_state, init_rampart, ROT0, "Atari Games", "Rampart (Japan, Joystick)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/sdk85.cpp b/src/mame/drivers/sdk85.cpp
index 2eeff6a9a4e..78bbad3e976 100644
--- a/src/mame/drivers/sdk85.cpp
+++ b/src/mame/drivers/sdk85.cpp
@@ -20,6 +20,12 @@ Download the User Manual to get the operating procedures.
An example is Press SUBST key, enter an address, press NEXT key, enter data,
then press NEXT to increment the address.
+Warning: the default cold start routine fails to initialize SP properly, which will cause the GO
+command to fail. SP can be set to point to the end of onboard RAM by the following sequence of
+button presses: EXAM REG, 4, 2, 0, EXEC, EXAM REG, 5, F, F, EXEC. In TTY mode, use the "XS"
+command to change SP. Another option is to push the RESET button again, which will leave SP
+wherever it was in the monitor's scratchpad area.
+
ToDo:
- Artwork
@@ -38,10 +44,13 @@ Press 0 to restart.
*************************************************************************************************************************************/
#include "emu.h"
+#include "bus/rs232/rs232.h"
+#include "bus/sdk85/memexp.h"
#include "cpu/i8085/i8085.h"
#include "machine/i8155.h"
#include "machine/i8355.h"
#include "machine/i8279.h"
+#include "softlist.h"
#include "sdk85.lh"
@@ -51,23 +60,42 @@ public:
sdk85_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_kdc(*this, "kdc")
+ , m_romio(*this, "romio")
+ , m_expromio(*this, "expromio")
+ , m_ramio(*this, "ramio")
+ , m_expramio(*this, "expramio")
+ , m_tty(*this, "tty")
, m_keyboard(*this, "X%u", 0)
, m_digits(*this, "digit%u", 0U)
{ }
void sdk85(machine_config &config);
+ DECLARE_WRITE_LINE_MEMBER(reset_w);
+ DECLARE_WRITE_LINE_MEMBER(vect_intr_w);
+
private:
- DECLARE_WRITE8_MEMBER(scanlines_w);
- DECLARE_WRITE8_MEMBER(digit_w);
- DECLARE_READ8_MEMBER(kbd_r);
+ DECLARE_READ_LINE_MEMBER(sid_r);
+
+ void scanlines_w(u8 data);
+ void digit_w(u8 data);
+ u8 kbd_r();
+
void sdk85_io(address_map &map);
void sdk85_mem(address_map &map);
u8 m_digit;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
- required_device<cpu_device> m_maincpu;
+
+ required_device<i8085a_cpu_device> m_maincpu;
+ required_device<i8279_device> m_kdc;
+ required_device<i8355_device> m_romio;
+ required_device<sdk85_romexp_device> m_expromio;
+ required_device<i8155_device> m_ramio;
+ required_device<i8155_device> m_expramio;
+ required_device<rs232_port_device> m_tty;
required_ioport_array<3> m_keyboard;
output_finder<6> m_digits;
};
@@ -78,103 +106,150 @@ void sdk85_state::machine_reset()
m_maincpu->reset();
}
+WRITE_LINE_MEMBER(sdk85_state::reset_w)
+{
+ m_maincpu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE);
+ if (!state)
+ {
+ m_kdc->reset();
+ m_romio->reset();
+ m_expromio->reset();
+ m_ramio->reset();
+ m_expramio->reset();
+ }
+}
+
+WRITE_LINE_MEMBER(sdk85_state::vect_intr_w)
+{
+ m_maincpu->set_input_line(I8085_RST75_LINE, state ? ASSERT_LINE : CLEAR_LINE);
+}
+
+READ_LINE_MEMBER(sdk85_state::sid_r)
+{
+ // Actual HW has S25 switch to ground SID when using keyboard input instead of TTY RX
+ if (m_tty->get_card_device() == nullptr)
+ return 0;
+ else
+ return m_tty->rxd_r();
+}
+
void sdk85_state::sdk85_mem(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0x07ff).r("romio", FUNC(i8355_device::memory_r));
- map(0x0800, 0x0fff).r("expromio", FUNC(i8355_device::memory_r));
- map(0x1800, 0x1800).mirror(0x06ff).rw("kdc", FUNC(i8279_device::data_r), FUNC(i8279_device::data_w));
- map(0x1900, 0x1900).mirror(0x06ff).rw("kdc", FUNC(i8279_device::status_r), FUNC(i8279_device::cmd_w));
- map(0x2000, 0x20ff).mirror(0x0700).rw("ramio", FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
- map(0x2800, 0x28ff).mirror(0x0700).rw("expramio", FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
+ map(0x0000, 0x07ff).r(m_romio, FUNC(i8355_device::memory_r));
+ map(0x0800, 0x0fff).rw(m_expromio, FUNC(sdk85_romexp_device::memory_r), FUNC(sdk85_romexp_device::memory_w));
+ map(0x1800, 0x1800).mirror(0x06ff).rw(m_kdc, FUNC(i8279_device::data_r), FUNC(i8279_device::data_w));
+ map(0x1900, 0x1900).mirror(0x06ff).rw(m_kdc, FUNC(i8279_device::status_r), FUNC(i8279_device::cmd_w));
+ map(0x2000, 0x20ff).mirror(0x0700).rw(m_ramio, FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
+ map(0x2800, 0x28ff).mirror(0x0700).rw(m_expramio, FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
}
void sdk85_state::sdk85_io(address_map &map)
{
map.unmap_value_high();
- map(0x00, 0x03).mirror(0x04).rw("romio", FUNC(i8355_device::io_r), FUNC(i8355_device::io_w));
- map(0x08, 0x0b).mirror(0x04).rw("expromio", FUNC(i8355_device::io_r), FUNC(i8355_device::io_w));
- map(0x20, 0x27).rw("ramio", FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
- map(0x28, 0x2f).rw("expramio", FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
+ map(0x00, 0x03).mirror(0x04).rw(m_romio, FUNC(i8355_device::io_r), FUNC(i8355_device::io_w));
+ map(0x08, 0x0b).mirror(0x04).rw(m_expromio, FUNC(sdk85_romexp_device::io_r), FUNC(sdk85_romexp_device::io_w));
+ map(0x20, 0x27).rw(m_ramio, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
+ map(0x28, 0x2f).rw(m_expramio, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
}
/* Input ports */
static INPUT_PORTS_START( sdk85 )
PORT_START("X0")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7')
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("3 I") PORT_CODE(KEYCODE_3) PORT_CHAR('3')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("4 SPH") PORT_CODE(KEYCODE_4) PORT_CHAR('4')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("5 SPL") PORT_CODE(KEYCODE_5) PORT_CHAR('5')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("6 PCH") PORT_CODE(KEYCODE_6) PORT_CHAR('6')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("7 PCL") PORT_CODE(KEYCODE_7) PORT_CHAR('7')
PORT_START("X1")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F')
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("8 H") PORT_CODE(KEYCODE_8) PORT_CHAR('8')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("9 L") PORT_CODE(KEYCODE_9) PORT_CHAR('9')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F')
PORT_START("X2")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("EXEC") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("NEXT") PORT_CODE(KEYCODE_UP) PORT_CHAR('^')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("GO") PORT_CODE(KEYCODE_R) PORT_CHAR('R')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SUBST") PORT_CODE(KEYCODE_T) PORT_CHAR('T')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("EXAM") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SINGLE") PORT_CODE(KEYCODE_U) PORT_CHAR('U')
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("EXEC .") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("NEXT ,") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("GO") PORT_CODE(KEYCODE_G) PORT_CHAR('G')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("SUBST MEM") PORT_CODE(KEYCODE_S) PORT_CHAR('S')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("EXAM REG") PORT_CODE(KEYCODE_X) PORT_CHAR('X')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("SINGLE STEP") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/')
PORT_BIT(0xC0, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("INTR") // buttons hardwired to 8085 inputs
+ PORT_BIT(1, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("VECT INTR") PORT_WRITE_LINE_MEMBER(sdk85_state, vect_intr_w) PORT_CODE(KEYCODE_F2)
+ PORT_BIT(2, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("RESET") PORT_WRITE_LINE_MEMBER(sdk85_state, reset_w) PORT_CODE(KEYCODE_F1)
INPUT_PORTS_END
-WRITE8_MEMBER( sdk85_state::scanlines_w )
+void sdk85_state::scanlines_w(u8 data)
{
m_digit = data;
}
-WRITE8_MEMBER( sdk85_state::digit_w )
+void sdk85_state::digit_w(u8 data)
{
if (m_digit < 6)
m_digits[m_digit] = bitswap<8>(~data, 3, 2, 1, 0, 7, 6, 5, 4);
}
-READ8_MEMBER( sdk85_state::kbd_r )
+u8 sdk85_state::kbd_r()
{
u8 data = (m_digit < 3) ? m_keyboard[m_digit]->read() : 0xff;
return data;
}
+static DEVICE_INPUT_DEFAULTS_START( terminal )
+ DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_110 )
+ DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_110 )
+ DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
+ DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_7 )
+ DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_EVEN )
+ DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 )
+DEVICE_INPUT_DEFAULTS_END
+
void sdk85_state::sdk85(machine_config &config)
{
/* basic machine hardware */
I8085A(config, m_maincpu, 6.144_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &sdk85_state::sdk85_mem);
m_maincpu->set_addrmap(AS_IO, &sdk85_state::sdk85_io);
+ m_maincpu->in_sid_func().set(FUNC(sdk85_state::sid_r));
+ m_maincpu->out_sod_func().set(m_tty, FUNC(rs232_port_device::write_txd)).invert();
- I8355(config, "romio", 6.144_MHz_XTAL / 2); // Monitor ROM (A14)
+ I8355(config, m_romio, 6.144_MHz_XTAL / 2); // Monitor ROM (A14)
- I8355(config, "expromio", 6.144_MHz_XTAL / 2); // Expansion ROM (A15)
+ SDK85_ROMEXP(config, m_expromio, 6.144_MHz_XTAL / 2, sdk85_romexp_device::rom_options, nullptr); // Expansion ROM (A15)
- i8155_device &i8155(I8155(config, "ramio", 6.144_MHz_XTAL / 2)); // Basic RAM (A16)
- i8155.out_to_callback().set_inputline(m_maincpu, I8085_TRAP_LINE);
+ I8155(config, m_ramio, 6.144_MHz_XTAL / 2); // Basic RAM (A16)
+ m_ramio->out_to_callback().set_inputline(m_maincpu, I8085_TRAP_LINE);
- I8155(config, "expramio", 6.144_MHz_XTAL / 2); // Expansion RAM (A17)
+ I8155(config, m_expramio, 6.144_MHz_XTAL / 2); // Expansion RAM (A17)
/* video hardware */
config.set_default_layout(layout_sdk85);
/* Devices */
- i8279_device &kdc(I8279(config, "kdc", 6.144_MHz_XTAL / 2)); // Keyboard/Display Controller (A13)
- kdc.out_irq_callback().set_inputline("maincpu", I8085_RST55_LINE); // irq
- kdc.out_sl_callback().set(FUNC(sdk85_state::scanlines_w)); // scan SL lines
- kdc.out_disp_callback().set(FUNC(sdk85_state::digit_w)); // display A&B
- kdc.in_rl_callback().set(FUNC(sdk85_state::kbd_r)); // kbd RL lines
- kdc.in_shift_callback().set_constant(1); // Shift key
- kdc.in_ctrl_callback().set_constant(1);
+ I8279(config, m_kdc, 6.144_MHz_XTAL / 2); // Keyboard/Display Controller (A13)
+ m_kdc->out_irq_callback().set_inputline(m_maincpu, I8085_RST55_LINE); // irq
+ m_kdc->out_sl_callback().set(FUNC(sdk85_state::scanlines_w)); // scan SL lines
+ m_kdc->out_disp_callback().set(FUNC(sdk85_state::digit_w)); // display A&B
+ m_kdc->in_rl_callback().set(FUNC(sdk85_state::kbd_r)); // kbd RL lines
+ m_kdc->in_shift_callback().set_constant(1); // Shift key
+ m_kdc->in_ctrl_callback().set_constant(1);
+
+ RS232_PORT(config, m_tty, default_rs232_devices, nullptr); // actually a 20 mA current loop
+ m_tty->set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal));
+
+ SOFTWARE_LIST(config, "rom_list").set_original("sdk85");
}
/* ROM definition */
@@ -184,8 +259,6 @@ ROM_START( sdk85 )
ROMX_LOAD( "sdk85.a14", 0x0000, 0x0800, CRC(9d5a983f) SHA1(54e218560fbec009ac3de5cfb64b920241ef2eeb), ROM_BIOS(0) )
ROM_SYSTEM_BIOS(1, "mastermind", "Mastermind")
ROMX_LOAD( "mastermind.a14", 0x0000, 0x0800, CRC(36b694ae) SHA1(4d8a5ae5d10e8f72a6e349c7eeaf1aa00c4e45e1), ROM_BIOS(1) )
-
- ROM_REGION( 0x800, "expromio", ROMREGION_ERASEFF )
ROM_END
/* Driver */
diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp
index 0331f240dc2..474d8f236fb 100644
--- a/src/mame/drivers/seta.cpp
+++ b/src/mame/drivers/seta.cpp
@@ -6344,6 +6344,9 @@ static INPUT_PORTS_START( twineagl )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ // default taken off original Japanese DIP sheet
+ // Cabinet is user choice
+ // We use Licensor Option 2 instead of 1 just to avoid the "For use in Japan"
PORT_START("DSW") //2 DSWs - $600001 & 3.b
PORT_DIPNAME( 0x0001, 0x0001, "Copyright / License" ) PORT_DIPLOCATION("SW1:1") /* Always "Seta" if sim. players = 1 */
PORT_DIPSETTING( 0x0000, "Taito America / Romstar" ) PORT_CONDITION("DSW",0x4000,NOTEQUALS,0x4000)
@@ -6375,12 +6378,12 @@ static INPUT_PORTS_START( twineagl )
PORT_DIPSETTING( 0x0080, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000)
PORT_DIPSETTING( 0x0040, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000)
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000)
- PORT_DIPNAME( 0x0300, 0x0100, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
+ PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0200, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0100, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
- PORT_DIPNAME( 0x0c00, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
+ PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0c00, "Never" )
PORT_DIPSETTING( 0x0800, "500K Only" )
PORT_DIPSETTING( 0x0400, "1000K Only" )
diff --git a/src/mame/drivers/snk.cpp b/src/mame/drivers/snk.cpp
index cf511f2d217..8b6e6380dba 100644
--- a/src/mame/drivers/snk.cpp
+++ b/src/mame/drivers/snk.cpp
@@ -4700,32 +4700,32 @@ ROM_END
ROM_START( fitegolfu ) /* Later US version containing enhancements to make the game a little easier */
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "np45.4p", 0x00000, 0x04000, CRC(16e8e763) SHA1(0b5296f2a91a7f3176b7461ca4958865ce998241) )
- ROM_LOAD( "mn45.4m", 0x04000, 0x08000, CRC(a4fa09d5) SHA1(ae7f0cb47de06006ae71252c4201a93a01a26887) )
+ ROM_LOAD( "gu2_ver2.4p", 0x00000, 0x04000, CRC(16e8e763) SHA1(0b5296f2a91a7f3176b7461ca4958865ce998241) )
+ ROM_LOAD( "gu1_ver2.4m", 0x04000, 0x08000, CRC(a4fa09d5) SHA1(ae7f0cb47de06006ae71252c4201a93a01a26887) )
ROM_REGION( 0x10000, "sub", 0 )
- ROM_LOAD( "gu6.8p", 0x00000, 0x04000, CRC(2b9978c5) SHA1(5490e9f796697318650fc5f70c0e64d6785ad7fc) ) // NP8.256
- ROM_LOAD( "gu5.8m", 0x04000, 0x08000, CRC(ea3d138c) SHA1(af0a0bfe2d266179946948cf42fe697505798a4f) ) // MN8.256
+ ROM_LOAD( "gu6.8p", 0x00000, 0x04000, CRC(2b9978c5) SHA1(5490e9f796697318650fc5f70c0e64d6785ad7fc) )
+ ROM_LOAD( "gu5.8m", 0x04000, 0x08000, CRC(ea3d138c) SHA1(af0a0bfe2d266179946948cf42fe697505798a4f) )
ROM_REGION( 0x10000, "audiocpu", 0 )
- ROM_LOAD( "gu3.6g", 0x00000, 0x04000, CRC(811b87d7) SHA1(fb387f42085d6e0e5a88729ca0e50656411ce037) ) // FG67.256
- ROM_LOAD( "gu4.6k", 0x04000, 0x08000, CRC(2d998e2b) SHA1(a471cfbb4dabc90fcc29c562620b9965eaff6861) ) // K67.256
+ ROM_LOAD( "gu3.6g", 0x00000, 0x04000, CRC(811b87d7) SHA1(fb387f42085d6e0e5a88729ca0e50656411ce037) )
+ ROM_LOAD( "gu4.6k", 0x04000, 0x08000, CRC(2d998e2b) SHA1(a471cfbb4dabc90fcc29c562620b9965eaff6861) )
ROM_REGION( 0x0c00, "proms", 0 )
- ROM_LOAD( "3.2c", 0x00000, 0x00400, CRC(6e4c7836) SHA1(3ab3c498939fac992e2bf1c33983ee821a9b6a18) ) /* 82s137 */
- ROM_LOAD( "1.1b", 0x00400, 0x00400, CRC(29e7986f) SHA1(85ba8d3443458c27728f633745857a1315dd183f) ) /* 82s137 */
- ROM_LOAD( "2.1c", 0x00800, 0x00400, CRC(27ba9ff9) SHA1(f021d10460f40de4447560df5ac47fa53bb57ff9) ) /* 82s137 */
+ ROM_LOAD( "3.2c", 0x00000, 0x00400, CRC(6e4c7836) SHA1(3ab3c498939fac992e2bf1c33983ee821a9b6a18) ) /* 82s137 */
+ ROM_LOAD( "1.1b", 0x00400, 0x00400, CRC(29e7986f) SHA1(85ba8d3443458c27728f633745857a1315dd183f) ) /* 82s137 */
+ ROM_LOAD( "2.1c", 0x00800, 0x00400, CRC(27ba9ff9) SHA1(f021d10460f40de4447560df5ac47fa53bb57ff9) ) /* 82s137 */
ROM_REGION( 0x4000, "tx_tiles", 0 )
- ROM_LOAD( "gu8.2d", 0x00000, 0x04000, CRC(f1628dcf) SHA1(efea343d3a9dd45ef74947c297e166e34afbb680) ) // D2.128
+ ROM_LOAD( "gu8.2d", 0x00000, 0x04000, CRC(f1628dcf) SHA1(efea343d3a9dd45ef74947c297e166e34afbb680) )
ROM_REGION( 0x8000, "bg_tiles", 0 )
- ROM_LOAD( "gu7.2b", 0x00000, 0x08000, CRC(4655f94e) SHA1(08526206d8e929bb01d61fff8de2ee99fd287c17) ) // BC2.256
+ ROM_LOAD( "gu7.2b", 0x00000, 0x08000, CRC(4655f94e) SHA1(08526206d8e929bb01d61fff8de2ee99fd287c17) )
ROM_REGION( 0x18000, "sp16_tiles", 0 )
- ROM_LOAD( "gu9.2p", 0x00000, 0x08000, CRC(d4957ec5) SHA1(8ead7866ba5ac66ead6b707aa868bcae30c486e1) ) // P2.256
- ROM_LOAD( "gu10.2rs", 0x08000, 0x08000, CRC(b3acdac2) SHA1(7377480d5e1b5ab2c49f5fee2927623ce8240e19) ) // R2.256
- ROM_LOAD( "gu11.2t", 0x10000, 0x08000, CRC(b99cf73b) SHA1(23989fc3914e77d364807a9eb96a4ddf75ad7cf1) ) // S2.256
+ ROM_LOAD( "gu9.2p", 0x00000, 0x08000, CRC(d4957ec5) SHA1(8ead7866ba5ac66ead6b707aa868bcae30c486e1) )
+ ROM_LOAD( "gu10.2rs", 0x08000, 0x08000, CRC(b3acdac2) SHA1(7377480d5e1b5ab2c49f5fee2927623ce8240e19) )
+ ROM_LOAD( "gu11.2t", 0x10000, 0x08000, CRC(b99cf73b) SHA1(23989fc3914e77d364807a9eb96a4ddf75ad7cf1) )
ROM_REGION( 0x0600, "plds", 0 )
ROM_LOAD( "a6001-1.6c", 0x00000, 0x00104, CRC(de291f4e) SHA1(b50294d30cb8eacc7a9bb8b46695a7463ef45ff1) ) /* PAL16R6A */
@@ -4741,7 +4741,7 @@ CPU/Sound Board: ?
Video Board: ?
*/
-ROM_START( fitegolf2 )
+ROM_START( fitegolfua )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "fg_ver2_6.4e", 0x0000, 0x4000, CRC(4cc9ef0c) SHA1(0ac6071725db3ec85659b170eecec91d22e76abd) )
ROM_LOAD( "fg_ver2_7.g4", 0x4000, 0x4000, CRC(144b0beb) SHA1(5b5e58ee93cabbdd560487b16d0cc7217d9cea7f) )
@@ -6369,8 +6369,8 @@ GAME( 1986, athena, 0, athena, athena, snk_state, empty_init, RO
GAME( 1986, athenab, athena, athena, athena, snk_state, empty_init, ROT0, "SNK", "Athena (bootleg)", 0 ) // is this really a bootleg?
GAME( 1987, sathena, athena, athena, athena, snk_state, empty_init, ROT0, "bootleg", "Super Athena (bootleg)", 0 )
GAME( 1988, fitegolf, 0, fitegolf, fitegolf, snk_state, empty_init, ROT0, "SNK", "Lee Trevino's Fighting Golf (World?)", 0 )
-GAME( 1988, fitegolfu, fitegolf, fitegolf, fitegolfu, snk_state, empty_init, ROT0, "SNK", "Lee Trevino's Fighting Golf (US)", 0 )
-GAME( 1988, fitegolf2, fitegolf, fitegolf2, fitegolfu, snk_state, empty_init, ROT0, "SNK", "Lee Trevino's Fighting Golf (US, Ver 2)", 0 )
+GAME( 1988, fitegolfu, fitegolf, fitegolf, fitegolfu, snk_state, empty_init, ROT0, "SNK", "Lee Trevino's Fighting Golf (US, Ver 2, set 1)", 0 )
+GAME( 1988, fitegolfua,fitegolf, fitegolf2, fitegolfu, snk_state, empty_init, ROT0, "SNK", "Lee Trevino's Fighting Golf (US, Ver 2, set 2)", 0 )
GAME( 1988, countryc, 0, countryc, countryc, snk_state, empty_init, ROT0, "SNK", "Country Club", 0 )
GAME( 1986, ikari, 0, ikari, ikari, snk_state, empty_init, ROT270, "SNK", "Ikari Warriors (US JAMMA)", 0 ) // distributed by Tradewest(?)
diff --git a/src/mame/drivers/spg2xx_pdc.cpp b/src/mame/drivers/spg2xx_pdc.cpp
index 1c0b97a3303..a42d798c1ca 100644
--- a/src/mame/drivers/spg2xx_pdc.cpp
+++ b/src/mame/drivers/spg2xx_pdc.cpp
@@ -9,16 +9,20 @@ class spg2xx_pdc100_game_state : public spg2xx_game_state
{
public:
spg2xx_pdc100_game_state(const machine_config &mconfig, device_type type, const char *tag) :
- spg2xx_game_state(mconfig, type, tag)
+ spg2xx_game_state(mconfig, type, tag),
+ m_numbanks(-1)
{ }
void pdc100(machine_config& config);
protected:
- //virtual void machine_start() override;
+ virtual void machine_start() override;
virtual void machine_reset() override;
virtual DECLARE_WRITE16_MEMBER(porta_w) override;
+
+private:
+ int m_numbanks;
};
@@ -45,20 +49,25 @@ static INPUT_PORTS_START( pdc100 )
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
+
+void spg2xx_pdc100_game_state::machine_start()
+{
+ spg2xx_game_state::machine_start();
+ m_numbanks = memregion("maincpu")->bytes() / 0x800000;
+}
+
void spg2xx_pdc100_game_state::machine_reset()
{
m_current_bank = -1;
- switch_bank(7); // must boot from upper bank
+ switch_bank(m_numbanks - 1); // pdc100 must boot from upper bank
m_maincpu->reset();
}
WRITE16_MEMBER(spg2xx_pdc100_game_state::porta_w)
{
- //logerror("%s: porta_w %04x\n", machine().describe_context(), data);
-
- // simply writes 0000 at times during bootup while initializing stuff, which causes an invalid bankswitch mid-code execution
+ // pdc100 simply writes 0000 at times during bootup while initializing stuff, which causes an invalid bankswitch mid-code execution
if (data & 0xff00)
- switch_bank(data & 0x0007);
+ switch_bank(data & (m_numbanks - 1));
}
@@ -72,10 +81,16 @@ void spg2xx_pdc100_game_state::pdc100(machine_config &config)
}
ROM_START( pdc100 )
- ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 )
+ ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 )
// only 1st half of this is used "Jumper resistor (0 ohm) that short A25 to ground"
// 2nd half just contains what seems to be random garbage
- ROM_LOAD16_WORD_SWAP( "pdc100.bin", 0x000000, 0x8000000, CRC(57285b49) SHA1(cfb4be7877ec263d24063a004c56985db5c0f4e2) )
+ ROM_LOAD16_WORD_SWAP( "pdc100.bin", 0x000000, 0x4000000, CRC(57285b49) SHA1(cfb4be7877ec263d24063a004c56985db5c0f4e2) )
+ ROM_IGNORE(0x4000000)
+ROM_END
+
+ROM_START( tmntpdc )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "pdc_turtles.bin", 0x000000, 0x800000, CRC(ee9e70a3) SHA1(7620f1b7aeaec8032faa8eb7552f775e8d6d14ba) )
ROM_END
@@ -83,11 +98,12 @@ ROM_END
// "Jo Ma 2" shows "Licensed by Mitchell Corporation" (Mitchell made the original Puzzloop on which this style of game is based) Videos of the original Jo Ma show it lacking this text.
// Other known units
-// PDC Teenage Mutant Ninja Turtles
// PDC Dora the Explorer
// PDC 30
// PDC 40
// PDC 200
// This was dumped from an Anncia branded unit, although there's no ingame branding, so ROM is probably the same for all PDC100 units
-CONS( 2008, pdc100, 0, 0, pdc100, pdc100, spg2xx_pdc100_game_state, empty_init, "Conny", "PDC100 - Pocket Dream Console", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2008, pdc100, 0, 0, pdc100, pdc100, spg2xx_pdc100_game_state, empty_init, "Conny", "PDC100 - Pocket Dream Console", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+
+CONS( 2013, tmntpdc, 0, 0, pdc100, pdc100, spg2xx_pdc100_game_state, empty_init, "Conny / VideoJet", "Teenage Mutant Ninja Turtles - Pocket Dream Console (France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/spg2xx_zone.cpp b/src/mame/drivers/spg2xx_zone.cpp
index f8e7fe075a3..0f74d332205 100644
--- a/src/mame/drivers/spg2xx_zone.cpp
+++ b/src/mame/drivers/spg2xx_zone.cpp
@@ -46,8 +46,10 @@ public:
{ }
void zone40(machine_config &config);
+ void zone40p(machine_config &config);
void init_zone40();
+ void init_reactmd();
protected:
@@ -60,7 +62,9 @@ private:
DECLARE_READ16_MEMBER(zone40_porta_r);
DECLARE_WRITE16_MEMBER(zone40_porta_w);
required_region_ptr<uint16_t> m_romregion;
- uint8_t m_z40_rombase;
+ uint16_t m_z40_rombase;
+ uint16_t m_porta_dat;
+ int m_romsize;
};
@@ -105,17 +109,24 @@ WRITE16_MEMBER(zone40_state::zone40_porta_w)
{
wireless60_porta_w(space, offset, data);
- if ((data & 0x00ff) != m_z40_rombase)
- {
- m_z40_rombase = data & 0x00ff;
- m_maincpu->invalidate_cache();
- }
+ m_z40_rombase = (m_z40_rombase & 0xff00) | (data & 0x0ff);
+
+ // toggled twice before games in the same 64MB bank, toggled once before games in a different 64MB bank
+ if ((data & 0x2000) && (!(m_porta_dat & 0x2000)))
+ m_z40_rombase ^= 0x0100;
+
+ m_porta_dat = data;
+
+ //logerror("%s: zone40_porta_w %04x z80 bank is now %04x \n", machine().describe_context(), data, m_z40_rombase);
+
+ m_maincpu->invalidate_cache();
+
}
READ16_MEMBER(zone40_state::zone40_porta_r)
{
uint16_t ret = wireless60_porta_r(space, offset) & (0x0300 | m_w60_p1_ctrl_mask | m_w60_p2_ctrl_mask);
- ret = (ret & 0xff00) | m_z40_rombase;
+ ret = (ret & 0xdf00) | (m_porta_dat & 0x20ff);
return ret;
}
@@ -123,7 +134,7 @@ READ16_MEMBER(zone40_state::zone40_porta_r)
READ16_MEMBER(zone40_state::z40_rom_r)
{
// due to granularity of rom bank this manual method is safer
- return m_romregion[(offset + (m_z40_rombase * 0x20000)) & 0x1ffffff];
+ return m_romregion[(offset + (m_z40_rombase * 0x20000)) & (m_romsize-1)];
}
void zone40_state::mem_map_z40(address_map &map)
@@ -147,10 +158,14 @@ void zone40_state::machine_start()
wireless60_state::machine_start();
save_item(NAME(m_z40_rombase));
+ save_item(NAME(m_porta_dat));
m_z40_rombase = 0xe0;
+ m_porta_dat = 0x20e0;
m_w60_p1_ctrl_mask = 0x0400;
m_w60_p2_ctrl_mask = 0x1000;
+
+ m_romsize = (memregion("maincpu")->bytes()/2);
}
void wireless60_state::machine_reset()
@@ -163,7 +178,7 @@ void wireless60_state::machine_reset()
void zone40_state::machine_reset()
{
wireless60_state::machine_reset();
- m_z40_rombase = 0xe0;
+ m_z40_rombase = 0x1e0;
m_maincpu->invalidate_cache();
m_maincpu->reset();
}
@@ -214,6 +229,13 @@ void zone40_state::zone40(machine_config &config)
m_maincpu->porta_in().set(FUNC(zone40_state::zone40_porta_r));
}
+void zone40_state::zone40p(machine_config &config)
+{
+ zone40(config);
+ m_maincpu->set_pal(true);
+ m_screen->set_refresh_hz(50);
+}
+
void wireless60_state::init_lx_jg7415()
{
@@ -259,11 +281,44 @@ void zone40_state::init_zone40()
}
}
+
+void zone40_state::init_reactmd()
+{
+ uint16_t *ROM = (uint16_t*)memregion("maincpu")->base();
+ int size = memregion("maincpu")->bytes();
+
+ for (int i = 0; i < size/2; i++)
+ {
+ ROM[i] = ROM[i] ^ 0xca53;
+
+ ROM[i] = bitswap<16>(ROM[i], 15, 13, 14, 12, 7, 6, 5, 4,
+ 11, 10, 9, 8, 3, 1, 2, 0);
+
+ }
+}
+
+
+
ROM_START( zone40 )
ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "zone40.bin", 0x0000, 0x4000000, CRC(4ba1444f) SHA1(de83046ab93421486668a247972ad6d3cda19440) )
ROM_END
+ROM_START( reactmd )
+ ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 ) // this contains the SunPlus games
+ ROM_LOAD16_WORD_SWAP( "reactor_md_sunplus-full.bin", 0x0000, 0x4000000, CRC(843aa58c) SHA1(07cdc6d4aa0057939c145ece01a9aca73c7f1f2b) )
+ ROM_IGNORE(0x4000000) // the 2nd half of the ROM can't be accessed by the PCB (address line tied low) (contains garbage? data)
+
+ ROM_REGION( 0x2000000, "mdrom", ROMREGION_ERASE00 ) // this contains the MD games and main boot menu
+ ROM_LOAD16_WORD_SWAP( "reactormd.bin", 0x0000, 0x2000000, CRC(fe9664a4) SHA1(d475b524f576c9d1d90aed20c7467cc652396baf) )
+ROM_END
+
+ROM_START( itvg49 )
+ ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "49in1sports.bin", 0x0000, 0x8000000, CRC(bb8a1c4e) SHA1(a493177de7365037b67ead0155a902313722a61c) )
+ROM_END
+
+
ROM_START( zone60 )
ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "zone60.bin", 0x0000, 0x4000000, CRC(4cb637d1) SHA1(1f97cbdb4299ac0fbafc2a3aa592066cb0727066))
@@ -287,12 +342,17 @@ ROM_START( lx_jg7415 )
ROM_LOAD16_WORD_SWAP( "rom.bin", 0x0000, 0x10000000, CRC(59442e00) SHA1(7e91cf6b19c37f9b4fa4dc21e241c6634d6a6f95) )
ROM_END
-// these don't have real motion controls
-CONS( 2009, zone40, 0, 0, zone40, wirels60, zone40_state, init_zone40, "Jungle Soft / Ultimate Products (HK) Ltd", "Zone 40", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
-CONS( 2010, zone60, 0, 0, wireless60, wirels60, wireless60_state, empty_init, "Jungle's Soft / Ultimate Products (HK) Ltd", "Zone 60", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
-CONS( 200?, zone100, 0, 0, wireless60, wirels60, wireless60_state, init_zone100, "Jungle's Soft / Ultimate Products (HK) Ltd", "Zone 100", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // unit was black, menus still show white controllers, unlike wireless 60
-CONS( 2010, wirels60, 0, 0, wireless60, wirels60, wireless60_state, empty_init, "Jungle Soft / Kids Station Toys Inc", "Wireless 60", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
-CONS( 2011, lx_jg7415,0, 0, wireless60, wirels60, wireless60_state, init_lx_jg7415, "Lexibook", "Lexibook JG7415 120-in-1", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2009, zone40, 0, 0, zone40, wirels60, zone40_state, init_zone40, "Jungle Soft / Ultimate Products (HK) Ltd", "Zone 40", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2009, itvg49, 0, 0, zone40p, wirels60, zone40_state, init_reactmd, "TaiKee", "Interactive TV Games 49-in-1 (PAL)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // Badminton hangs, otherwise everything runs
+
+CONS( 2010, zone60, 0, 0, wireless60, wirels60, wireless60_state, empty_init, "Jungle's Soft / Ultimate Products (HK) Ltd", "Zone 60", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 200?, zone100, 0, 0, wireless60, wirels60, wireless60_state, init_zone100, "Jungle's Soft / Ultimate Products (HK) Ltd", "Zone 100", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // unit was black, menus still show white controllers, unlike wireless 60
+CONS( 2010, wirels60, 0, 0, wireless60, wirels60, wireless60_state, empty_init, "Jungle Soft / Kids Station Toys Inc", "Wireless 60", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2011, lx_jg7415,0, 0, wireless60, wirels60, wireless60_state, init_lx_jg7415, "Lexibook", "Lexibook JG7415 120-in-1", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+// Two systems in one unit - Genesis on a Chip and SunPlus, only the SunPlus part is currently emulated. Genesis on a chip is a very poor implementation with many issues on real hardware.
+// This should actually boot to a menu on the MD size, with the SunPlus only being enabled if selected from that menu. MD side menu runs in some enhanced / custom MD mode tho.
+// Badminton hangs, as it does in the 49-in-1 above
+CONS( 2009, reactmd, 0, 0, zone40p, wirels60, zone40_state, init_reactmd, "AtGames / Sega", "Reactor MD (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) \ No newline at end of file
diff --git a/src/mame/drivers/stadhero.cpp b/src/mame/drivers/stadhero.cpp
index de0bc01baa3..0c9bca18345 100644
--- a/src/mame/drivers/stadhero.cpp
+++ b/src/mame/drivers/stadhero.cpp
@@ -6,21 +6,87 @@
Emulation by Bryan McPhail, mish@tendril.co.uk
-=== PCB Info ===
-
- The OSC on the CPU board(DE-0303-3) is 20MHz
- The OSC on the video board(DE-0304-3) is 24MHz
- 68000 = 20 / 2 (10)
- 6502 = 24 / 16 (1.5)
- YM3812 = 24 / 8 (3)
- YM2203 = 24 / 16 (1.5)
- M6295 is driven by a 1.056MHz resonator, pin 7 is high
- HSync = 15.6246kHz
- VSync = 57.4434Hz
-
-TODO : RNG issue? Some behavior isn't correct (ex: BGM randomizer).
+ PCB Layout and Hardware Info by Guru
+
+
+ PCB Layouts
+ -----------
+
+ DE-0303-3 |-----------| |------------|
+ |------------|-----------|-----|------------|-------------|
+ | |
+ | 20MHz 6264 |
+ | PV-2A |
+ | (PAL) X |
+ | |----| |
+ | SW2 | | |
+ | | 6 | X |
+ |J | 8 | |
+ |A | 0 | |
+ |M EF18.7F 65C02 | 0 | EF15.9A|
+ |M | 0 | |
+ |A 5814 | | |
+ | |----| X |
+ | SW1 |
+ | PV-1 |
+ | YM2203 YM3812 (PAL) PV-0 X |
+ | (PAL) |
+ | YM3014 YM3014 M6295 EF13.4A|
+ | UPC3403 UPC3403 1.056MHz |
+ | 6264 |
+ | MB3730 EF17.1E |
+ |---------------------------------------------------------|
+ Notes:
+ 68000 - Clock 10.000MHz [20/2]
+ 65C02 - Clock 1.500MHz [24/16]
+ YM3812 - Clock 3.000MHz [24/8]
+ YM2203 - Clock 1.500MHz [24/16]
+ M6295 - Clock 1.056MHz (via resonator), pin 7 HIGH
+ YM3014 - Yamaha YM3014B Serial Input Floating D/A Converter
+ 6264 - 8kx8 SRAM
+ 5814 - 2kx8 SRAM
+ X - unpopulated DIP28 socket
+ SW1/2 - 8-position DIP Switch
+ MB3730 - Fujitsu MB3730 Audio Power AMP
+ uPC3403- NEC uPC3403 High Performance Quad Operational Amplifier
+ HSync - 15.6246kHz
+ VSync - 57.4434Hz
+
+
+ DE-0304-3 |-----------| |------------|
+ |------------|-----------|-----|------------|-------------|
+ |EF12.14J |
+ | HM3-65728 |
+ |EF11.13J |
+ | |--------| HM3-65728 EF07.12A|
+ |EF10.11J |DATAEAST| PV-3 |
+ | |L7B0072 | (PAL) EF06.11A|
+ | 2063 |BAC 06 | |
+ | |--------| EF05.9A |
+ | 2063 5814 |
+ | 5814 EF04.8A |
+ | |
+ | 5814 |
+ | 5814 |--------| EF03.6A |
+ | |DATAEAST| |
+ | |L7B0073 | EF02.5A |
+ | |MXC 06 | |
+ | |--------| |--------| EF01.4A |
+ |EF09.4J |DATAEAST| |
+ | |TC17G042| EF-19.3D EF00.2A |
+ |EF08.2J | | |
+ | |--------| 24MHz |
+ |---------------------------------------------------------|
+ Notes:
+ HM3-65728 - 2kx8 SRAM
+ 2063 - 8kx8 SRAM
+ 5814 - 2kx8 SRAM
+
+ TODO : RNG issue? Some behavior isn't correct (ex: BGM randomizer).
reference: https://youtu.be/6azneK6uUnA
+
+
***************************************************************************/
#include "emu.h"
diff --git a/src/mame/drivers/stv.cpp b/src/mame/drivers/stv.cpp
index f82a5470c29..f62a0d6bfc8 100644
--- a/src/mame/drivers/stv.cpp
+++ b/src/mame/drivers/stv.cpp
@@ -1191,19 +1191,19 @@ MACHINE_RESET_MEMBER(stv_state,stv)
std::string region_tag;
if (m_cart1)
- m_cart_reg[0] = memregion(region_tag.assign(m_cart1->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[0] = memregion(region_tag.assign(m_cart1->tag()).append(GENERIC_ROM_REGION_TAG));
else
m_cart_reg[0] = memregion("cart");
if (m_cart2)
- m_cart_reg[1] = memregion(region_tag.assign(m_cart2->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[1] = memregion(region_tag.assign(m_cart2->tag()).append(GENERIC_ROM_REGION_TAG));
else
m_cart_reg[1] = nullptr;
if (m_cart3)
- m_cart_reg[2] = memregion(region_tag.assign(m_cart3->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[2] = memregion(region_tag.assign(m_cart3->tag()).append(GENERIC_ROM_REGION_TAG));
else
m_cart_reg[2] = nullptr;
if (m_cart4)
- m_cart_reg[3] = memregion(region_tag.assign(m_cart4->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_reg[3] = memregion(region_tag.assign(m_cart4->tag()).append(GENERIC_ROM_REGION_TAG));
else
m_cart_reg[3] = nullptr;
diff --git a/src/mame/drivers/superga2.cpp b/src/mame/drivers/superga2.cpp
index f0dedfa29ea..a60a1af2390 100644
--- a/src/mame/drivers/superga2.cpp
+++ b/src/mame/drivers/superga2.cpp
@@ -13,7 +13,6 @@
To do
- verify palette, pixel and cpu clocks
- - two player mode
************************************************************************/
@@ -200,16 +199,14 @@ void superga2_state::kuzmich_map(address_map &map)
static INPUT_PORTS_START( kuzmich )
PORT_START("P1")
- // verified
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
- // unverified
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
INPUT_PORTS_END
void superga2_state::kuzmich(machine_config &config)
diff --git a/src/mame/drivers/timeplt.cpp b/src/mame/drivers/timeplt.cpp
index a1f559f6113..b9396469635 100644
--- a/src/mame/drivers/timeplt.cpp
+++ b/src/mame/drivers/timeplt.cpp
@@ -599,6 +599,28 @@ ROM_START( spaceplt )
ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) /* char lookup table */
ROM_END
+ROM_START( spaceplta )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1", 0x0000, 0x2000, CRC(c6672087) SHA1(1efaaf83dd11af18e947b428c3d9e70b075faf30) )
+ ROM_LOAD( "2", 0x2000, 0x2000, CRC(5b246c47) SHA1(a5e49eea9ac21b7a498ce5b2c2c30e0a45ce582e) )
+ ROM_LOAD( "3", 0x4000, 0x2000, CRC(cc9e745e) SHA1(387c748667399573f20d00467f2f6693e10588d3) )
+
+ ROM_REGION( 0x10000, "timeplt_audio:tpsound", 0 )
+ ROM_LOAD( "4", 0x0000, 0x1000, CRC(d66da813) SHA1(408fca4515e8af84211df3e204c8776b2f8adb23) )
+
+ ROM_REGION( 0x2000, "gfx1", 0 )
+ ROM_LOAD( "5", 0x0000, 0x2000, CRC(76caa8af) SHA1(f81bb73877d415a6587a32bddaad6db8a8fd4941) )
+
+ ROM_REGION( 0x4000, "gfx2", 0 )
+ ROM_LOAD( "6", 0x0000, 0x2000, CRC(86ab1ae7) SHA1(8e3f84aa6b2c21e7e1383ea1811fd99a4d940a23) ) // difference to spaceplt: erased Konami
+ ROM_LOAD( "7", 0x2000, 0x2000, CRC(e8ca87b9) SHA1(5dd30d3fb9fd8cf9e6a8e37e7ea858c7fd038a7e) )
+
+ ROM_REGION( 0x0240, "proms", 0 )
+ ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) /* palette */
+ ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) /* palette */
+ ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) /* sprite lookup table */
+ ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) /* char lookup table */
+ROM_END
ROM_START( psurge )
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -686,12 +708,13 @@ ROM_END
*
*************************************/
-GAME( 1982, timeplt, 0, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami", "Time Pilot", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, timepltc, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami (Centuri license)", "Time Pilot (Centuri)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, timeplta, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami (Atari license)", "Time Pilot (Atari)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, spaceplt, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "bootleg", "Space Pilot", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, timeplt, 0, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami", "Time Pilot", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, timepltc, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami (Centuri license)", "Time Pilot (Centuri)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, timeplta, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami (Atari license)", "Time Pilot (Atari)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, spaceplt, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "bootleg", "Space Pilot (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, spaceplta, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "bootleg", "Space Pilot (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, psurge, 0, psurge, psurge, timeplt_state, empty_init, ROT270, "Vision Electronics", "Power Surge", MACHINE_SUPPORTS_SAVE )
+GAME( 1988, psurge, 0, psurge, psurge, timeplt_state, empty_init, ROT270, "Vision Electronics", "Power Surge", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, chkun, 0, chkun, chkun, timeplt_state, empty_init, ROT90, "Peni", "Chance Kun (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
-GAME( 1987, bikkuric, 0, bikkuric, bikkuric, timeplt_state, empty_init, ROT90, "Peni", "Bikkuri Card (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1988, chkun, 0, chkun, chkun, timeplt_state, empty_init, ROT90, "Peni", "Chance Kun (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
+GAME( 1987, bikkuric, 0, bikkuric, bikkuric, timeplt_state, empty_init, ROT90, "Peni", "Bikkuri Card (Japan)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/tsamurai.cpp b/src/mame/drivers/tsamurai.cpp
index 0182fd37168..2e1438a8a70 100644
--- a/src/mame/drivers/tsamurai.cpp
+++ b/src/mame/drivers/tsamurai.cpp
@@ -1340,56 +1340,56 @@ ROM_END
ROM_START( ringfgt )
ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 code - main CPU */
- ROM_LOAD( "rft04-1", 0x0000, 0x2000, CRC(11030866) SHA1(b95b231c241e5bdc002de3f6a732cd627c7dc145) )
- ROM_LOAD( "rft03-1", 0x2000, 0x2000, CRC(357a2085) SHA1(0534f6c1a876dacfcff09a547290354eeddb3126) )
+ ROM_LOAD( "rft_04-1.5a", 0x0000, 0x2000, CRC(11030866) SHA1(b95b231c241e5bdc002de3f6a732cd627c7dc145) )
+ ROM_LOAD( "rft_03-1.5c", 0x2000, 0x2000, CRC(357a2085) SHA1(0534f6c1a876dacfcff09a547290354eeddb3126) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code - sound CPU */
- ROM_LOAD( "6.5n", 0x0000, 0x2000, CRC(785b9000) SHA1(9eb32724b0611a93959485a7f9c806eb6d7ab013) )
- ROM_LOAD( "5.5l", 0x2000, 0x2000, CRC(76dbfde9) SHA1(fe6e02f4b5a0a5baa59506636226c8ea7b551ef6) )
+ ROM_LOAD( "rft_01.5n", 0x0000, 0x2000, CRC(785b9000) SHA1(9eb32724b0611a93959485a7f9c806eb6d7ab013) )
+ ROM_LOAD( "rft_02.5l", 0x2000, 0x2000, CRC(76dbfde9) SHA1(fe6e02f4b5a0a5baa59506636226c8ea7b551ef6) )
ROM_REGION( 0xc000, "gfx1", ROMREGION_ERASEFF ) /* tiles (N/A) */
ROM_REGION( 0x6000, "gfx2", 0 ) /* characters */
- ROM_LOAD( "rft05", 0x0000, 0x1000, CRC(a7b732fd) SHA1(2abe4b422a7cd32cd12c6d6acba1872afe4a2ecc) )
- ROM_LOAD( "rft06", 0x2000, 0x1000, CRC(ff2721f7) SHA1(ae75103a7663a190da36e0bb2d46a333f830eba5) )
- ROM_LOAD( "rft07", 0x4000, 0x1000, CRC(ec1d7ba4) SHA1(047aa3c6c92126ac623fddbe0adc50a450910d6e) )
+ ROM_LOAD( "rft_05.6f", 0x0000, 0x1000, CRC(a7b732fd) SHA1(2abe4b422a7cd32cd12c6d6acba1872afe4a2ecc) )
+ ROM_LOAD( "rft_06.7f", 0x2000, 0x1000, CRC(ff2721f7) SHA1(ae75103a7663a190da36e0bb2d46a333f830eba5) )
+ ROM_LOAD( "rft_07.8f", 0x4000, 0x1000, CRC(ec1d7ba4) SHA1(047aa3c6c92126ac623fddbe0adc50a450910d6e) )
ROM_REGION( 0xc000, "gfx3", 0 ) /* sprites */
- ROM_LOAD( "rft08", 0x0000, 0x2000, CRC(80d67d28) SHA1(f4016159201abdfe0c0441f78ed6a1a12b7ba34b) )
- ROM_LOAD( "rft09", 0x4000, 0x2000, CRC(ea8f0656) SHA1(c4d2302d046c41bae9946a5ddc0087349a421b35) )
- ROM_LOAD( "rft10", 0x8000, 0x2000, CRC(833ca89f) SHA1(b43416e783e6109d19de81a124fae84f1afb8440) )
+ ROM_LOAD( "rft_08.15j", 0x0000, 0x2000, CRC(80d67d28) SHA1(f4016159201abdfe0c0441f78ed6a1a12b7ba34b) )
+ ROM_LOAD( "rft_09.15h", 0x4000, 0x2000, CRC(ea8f0656) SHA1(c4d2302d046c41bae9946a5ddc0087349a421b35) )
+ ROM_LOAD( "rft_10.15f", 0x8000, 0x2000, CRC(833ca89f) SHA1(b43416e783e6109d19de81a124fae84f1afb8440) )
ROM_REGION( 0x300, "proms", 0 )
- ROM_LOAD( "clr.6s", 0x000, 0x0100, CRC(578bfbea) SHA1(12a97de0f8012ccce75e14abf743bcec6857684c) )
- ROM_LOAD( "clr.6r", 0x100, 0x0100, CRC(3ec00739) SHA1(614d1799fe197df389f6155f86fe113e1b0b018a) )
- ROM_LOAD( "clr.6p", 0x200, 0x0100, CRC(0e4fd17a) SHA1(d4e32bd9dd903177af61f77976a25c5db1467bba) )
+ ROM_LOAD( "rft-11.6s", 0x000, 0x0100, CRC(578bfbea) SHA1(12a97de0f8012ccce75e14abf743bcec6857684c) )
+ ROM_LOAD( "rft-12.6r", 0x100, 0x0100, CRC(3ec00739) SHA1(614d1799fe197df389f6155f86fe113e1b0b018a) )
+ ROM_LOAD( "rft-13.6p", 0x200, 0x0100, CRC(0e4fd17a) SHA1(d4e32bd9dd903177af61f77976a25c5db1467bba) )
ROM_END
ROM_START( ringfgt2 )
ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 code - main CPU */
- ROM_LOAD( "rft.04", 0x0000, 0x2000, CRC(6b9b3f3d) SHA1(ea75e77e0e3379a22381b1d0aae7f96b53cd7562) )
- ROM_LOAD( "rft.03", 0x2000, 0x2000, CRC(1821974b) SHA1(1ce52f20bf49c111000f870bbe3416d27673b91d) )
+ ROM_LOAD( "rft_04.5a", 0x0000, 0x2000, CRC(6b9b3f3d) SHA1(ea75e77e0e3379a22381b1d0aae7f96b53cd7562) )
+ ROM_LOAD( "rft_03.5c", 0x2000, 0x2000, CRC(1821974b) SHA1(1ce52f20bf49c111000f870bbe3416d27673b91d) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code - sound CPU */
- ROM_LOAD( "6.5n", 0x0000, 0x2000, CRC(785b9000) SHA1(9eb32724b0611a93959485a7f9c806eb6d7ab013) )
- ROM_LOAD( "5.5l", 0x2000, 0x2000, CRC(76dbfde9) SHA1(fe6e02f4b5a0a5baa59506636226c8ea7b551ef6) )
+ ROM_LOAD( "rft_01.5n", 0x0000, 0x2000, CRC(785b9000) SHA1(9eb32724b0611a93959485a7f9c806eb6d7ab013) )
+ ROM_LOAD( "rft_02.5l", 0x2000, 0x2000, CRC(76dbfde9) SHA1(fe6e02f4b5a0a5baa59506636226c8ea7b551ef6) )
ROM_REGION( 0xc000, "gfx1", ROMREGION_ERASEFF ) /* tiles (N/A) */
ROM_REGION( 0x6000, "gfx2", 0 ) /* characters */
- ROM_LOAD( "rft05", 0x0000, 0x1000, CRC(a7b732fd) SHA1(2abe4b422a7cd32cd12c6d6acba1872afe4a2ecc) )
- ROM_LOAD( "rft06", 0x2000, 0x1000, CRC(ff2721f7) SHA1(ae75103a7663a190da36e0bb2d46a333f830eba5) )
- ROM_LOAD( "rft07", 0x4000, 0x1000, CRC(ec1d7ba4) SHA1(047aa3c6c92126ac623fddbe0adc50a450910d6e) )
+ ROM_LOAD( "rft_05.6f", 0x0000, 0x1000, CRC(a7b732fd) SHA1(2abe4b422a7cd32cd12c6d6acba1872afe4a2ecc) )
+ ROM_LOAD( "rft_06.7f", 0x2000, 0x1000, CRC(ff2721f7) SHA1(ae75103a7663a190da36e0bb2d46a333f830eba5) )
+ ROM_LOAD( "rft_07.8f", 0x4000, 0x1000, CRC(ec1d7ba4) SHA1(047aa3c6c92126ac623fddbe0adc50a450910d6e) )
ROM_REGION( 0xc000, "gfx3", 0 ) /* sprites */
- ROM_LOAD( "rft08", 0x0000, 0x2000, CRC(80d67d28) SHA1(f4016159201abdfe0c0441f78ed6a1a12b7ba34b) )
- ROM_LOAD( "rft09", 0x4000, 0x2000, CRC(ea8f0656) SHA1(c4d2302d046c41bae9946a5ddc0087349a421b35) )
- ROM_LOAD( "rft10", 0x8000, 0x2000, CRC(833ca89f) SHA1(b43416e783e6109d19de81a124fae84f1afb8440) )
+ ROM_LOAD( "rft_08.15j", 0x0000, 0x2000, CRC(80d67d28) SHA1(f4016159201abdfe0c0441f78ed6a1a12b7ba34b) )
+ ROM_LOAD( "rft_09.15h", 0x4000, 0x2000, CRC(ea8f0656) SHA1(c4d2302d046c41bae9946a5ddc0087349a421b35) )
+ ROM_LOAD( "rft_10.15f", 0x8000, 0x2000, CRC(833ca89f) SHA1(b43416e783e6109d19de81a124fae84f1afb8440) )
ROM_REGION( 0x300, "proms", 0 )
- ROM_LOAD( "clr.6s", 0x000, 0x0100, CRC(578bfbea) SHA1(12a97de0f8012ccce75e14abf743bcec6857684c) )
- ROM_LOAD( "clr.6r", 0x100, 0x0100, CRC(3ec00739) SHA1(614d1799fe197df389f6155f86fe113e1b0b018a) )
- ROM_LOAD( "clr.6p", 0x200, 0x0100, CRC(0e4fd17a) SHA1(d4e32bd9dd903177af61f77976a25c5db1467bba) )
+ ROM_LOAD( "rft-11.6s", 0x000, 0x0100, CRC(578bfbea) SHA1(12a97de0f8012ccce75e14abf743bcec6857684c) )
+ ROM_LOAD( "rft-12.6r", 0x100, 0x0100, CRC(3ec00739) SHA1(614d1799fe197df389f6155f86fe113e1b0b018a) )
+ ROM_LOAD( "rft-13.6p", 0x200, 0x0100, CRC(0e4fd17a) SHA1(d4e32bd9dd903177af61f77976a25c5db1467bba) )
ROM_END
void tsamurai_state::init_the26thz()
diff --git a/src/mame/drivers/tti.cpp b/src/mame/drivers/tti.cpp
index 82eb421f8e0..f1fdd6590f5 100644
--- a/src/mame/drivers/tti.cpp
+++ b/src/mame/drivers/tti.cpp
@@ -116,11 +116,11 @@ void tti_state::channel_w(u8 data)
void tti_state::prg_map(address_map &map)
{
- map(0x00000, 0x07fff).rom().region("maincpu", 0);
+ map(0x00000, 0x07fff).rom().region("firmware", 0);
map(0x7e000, 0x7ffff).ram();
map(0x80000, 0x80017).rw(m_mfp, FUNC(mc68901_device::read), FUNC(mc68901_device::write));
map(0x80018, 0x8001f).ram();
- map(0x80020, 0x8002b).rw(FUNC(tti_state::asc_r), FUNC(tti_state::asc_w));
+ map(0x80020, 0x80029).rw(FUNC(tti_state::asc_r), FUNC(tti_state::asc_w));
map(0x80070, 0x80077).w("bitlatch", FUNC(ls259_device::write_d0));
map(0x80078, 0x8007b).w(FUNC(tti_state::dma_address_w));
map(0x8007c, 0x8007c).r(FUNC(tti_state::io_status_r));
@@ -157,9 +157,9 @@ void tti_state::tti(machine_config &config)
m_maincpu->set_addrmap(m68008_device::AS_CPU_SPACE, &tti_state::fc7_map);
MC68901(config, m_mfp, 20_MHz_XTAL / 2); // guess
- m_mfp->set_timer_clock(2'457'600); // guess
+ m_mfp->set_timer_clock(20_MHz_XTAL / 8); // guess
m_mfp->out_tco_cb().set(m_mfp, FUNC(mc68901_device::rc_w));
- m_mfp->out_tdo_cb().set(m_mfp, FUNC(mc68901_device::tc_w));
+ m_mfp->out_tco_cb().append(m_mfp, FUNC(mc68901_device::tc_w));
m_mfp->out_so_cb().set("rs232", FUNC(rs232_port_device::write_txd));
m_mfp->out_irq_cb().set_inputline("maincpu", M68K_IRQ_2); // probably
@@ -185,9 +185,11 @@ void tti_state::tti(machine_config &config)
}
ROM_START( tti )
- ROM_REGION( 0x8000, "maincpu", 0 )
- ROM_LOAD( "tti_10012000_rev2.3.bin", 0x0000, 0x8000, CRC(95a5bce8) SHA1(46d7c99e37ca5598aec2062dfd9759853a237c14) )
- ROM_LOAD( "tti_10012000_rev1.7.bin", 0x0000, 0x8000, CRC(6660c059) SHA1(05d97009b5b8034dda520f655c73c474da97f822) )
+ ROM_REGION(0x8000, "firmware", 0)
+ ROM_SYSTEM_BIOS(0, "v2.3", "Firmware Version 2.3")
+ ROMX_LOAD("tti_10012000_rev2.3.bin", 0x0000, 0x8000, CRC(95a5bce8) SHA1(46d7c99e37ca5598aec2062dfd9759853a237c14), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v1.7", "Firmware Version 1.7")
+ ROMX_LOAD("tti_10012000_rev1.7.bin", 0x0000, 0x8000, CRC(6660c059) SHA1(05d97009b5b8034dda520f655c73c474da97f822), ROM_BIOS(1))
ROM_END
COMP( 1989, tti, 0, 0, tti, tti, tti_state, empty_init, "Transitional Technology Inc", "unknown TTI SCSI host adapter", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/tutor.cpp b/src/mame/drivers/tutor.cpp
index 8226690a247..6f0b572e615 100644
--- a/src/mame/drivers/tutor.cpp
+++ b/src/mame/drivers/tutor.cpp
@@ -239,7 +239,7 @@ private:
void tutor_state::machine_start()
{
std::string region_tag;
- m_cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG));
m_tape_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tutor_state::tape_interrupt_handler),this));
diff --git a/src/mame/includes/armedf.h b/src/mame/includes/armedf.h
index 143acd6a944..f75ba45cbac 100644
--- a/src/mame/includes/armedf.h
+++ b/src/mame/includes/armedf.h
@@ -15,8 +15,8 @@
class armedf_state : public driver_device
{
public:
- armedf_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag)
+ armedf_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_extra(*this, "extra")
, m_nb1414m4(*this, "nb1414m4")
@@ -25,6 +25,7 @@ public:
, m_palette(*this, "palette")
, m_spriteram(*this, "spriteram")
, m_soundlatch(*this, "soundlatch")
+ , m_text_videoram(*this, "text_videoram", 0)
, m_spr_pal_clut(*this, "spr_pal_clut")
, m_fg_videoram(*this, "fg_videoram")
, m_bg_videoram(*this, "bg_videoram")
@@ -33,11 +34,9 @@ public:
void init_cclimbr2();
void init_armedf();
void init_legion();
- void init_terrafu();
+ void init_terraf();
void init_legionjb();
void init_kozure();
- void init_terraf();
- void init_terrafjb();
void terraf(machine_config &config);
void terrafb(machine_config &config);
@@ -50,9 +49,6 @@ public:
void armedf(machine_config &config);
void kozure(machine_config &config);
- uint32_t screen_update_armedf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- DECLARE_VIDEO_START(armedf);
-
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -70,65 +66,72 @@ protected:
required_device<generic_latch_8_device> m_soundlatch;
// memory pointers
- std::unique_ptr<uint8_t[]> m_text_videoram;
- required_shared_ptr<uint16_t> m_spr_pal_clut;
- required_shared_ptr<uint16_t> m_fg_videoram;
- required_shared_ptr<uint16_t> m_bg_videoram;
- uint16_t m_legion_cmd[4]; // legionjb only!
+ required_shared_ptr<u8> m_text_videoram;
+ required_shared_ptr<u16> m_spr_pal_clut;
+ required_shared_ptr<u16> m_fg_videoram;
+ required_shared_ptr<u16> m_bg_videoram;
+ u16 m_legion_cmd[4]; // legionjb only!
// video-related
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
tilemap_t *m_tx_tilemap;
- uint16_t m_scroll_msb;
- uint16_t m_vreg;
- uint16_t m_fg_scrollx;
- uint16_t m_fg_scrolly;
- uint16_t m_bg_scrollx;
- uint16_t m_bg_scrolly;
- int m_scroll_type;
- int m_sprite_offy;
- int m_old_mcu_mode;
- int m_waiting_msb;
-
- DECLARE_WRITE16_MEMBER(terraf_io_w);
- DECLARE_WRITE16_MEMBER(terrafjb_io_w);
- DECLARE_WRITE16_MEMBER(bootleg_io_w);
- DECLARE_WRITE16_MEMBER(sound_command_w);
- DECLARE_READ8_MEMBER(soundlatch_clear_r);
- DECLARE_WRITE16_MEMBER(irq_lv1_ack_w);
- DECLARE_WRITE16_MEMBER(irq_lv2_ack_w);
- DECLARE_WRITE8_MEMBER(legionjb_fg_scroll_w);
- DECLARE_READ8_MEMBER(blitter_txram_r);
- DECLARE_WRITE8_MEMBER(blitter_txram_w);
- DECLARE_WRITE8_MEMBER(fg_scrollx_w);
- DECLARE_WRITE8_MEMBER(fg_scrolly_w);
- DECLARE_WRITE8_MEMBER(fg_scroll_msb_w);
- DECLARE_READ8_MEMBER(nb1414m4_text_videoram_r);
- DECLARE_WRITE8_MEMBER(nb1414m4_text_videoram_w);
- DECLARE_READ8_MEMBER(armedf_text_videoram_r);
- DECLARE_WRITE8_MEMBER(armedf_text_videoram_w);
- DECLARE_WRITE16_MEMBER(armedf_fg_videoram_w);
- DECLARE_WRITE16_MEMBER(armedf_bg_videoram_w);
- DECLARE_WRITE16_MEMBER(terraf_fg_scrolly_w);
- DECLARE_WRITE16_MEMBER(terraf_fg_scrollx_w);
- DECLARE_WRITE16_MEMBER(terraf_fg_scroll_msb_arm_w);
- DECLARE_WRITE16_MEMBER(armedf_fg_scrollx_w);
- DECLARE_WRITE16_MEMBER(armedf_fg_scrolly_w);
- DECLARE_WRITE16_MEMBER(armedf_bg_scrollx_w);
- DECLARE_WRITE16_MEMBER(armedf_bg_scrolly_w);
+ u16 m_scroll_msb;
+ u16 m_vreg;
+ u16 m_fg_scrollx;
+ u16 m_fg_scrolly;
+ u16 m_bg_scrollx;
+ u16 m_bg_scrolly;
+ int m_scroll_type;
+ int m_sprite_offy;
+ int m_old_mcu_mode;
+ int m_waiting_msb;
+
+ // read/write handlers
+ void terraf_io_w(offs_t offset, u16 data, u16 mem_mask);
+ void terrafjb_io_w(offs_t offset, u16 data, u16 mem_mask);
+ void armedf_io_w(offs_t offset, u16 data, u16 mem_mask);
+ void sound_command_w(u8 data);
+ u8 soundlatch_clear_r();
+ void irq_lv1_ack_w(u16 data);
+ void irq_lv2_ack_w(u16 data);
+
+ // video handlers
+ void legionjb_fg_scroll_w(offs_t offset, u8 data);
+ void blitter_txram_w(offs_t offset, u8 data);
+ void terrafjb_fg_scrollx_w(u8 data);
+ void terrafjb_fg_scrolly_w(u8 data);
+ void terrafjb_fg_scroll_msb_w(u8 data);
+ u8 text_videoram_r(offs_t offset);
+ void text_videoram_w(offs_t offset, u8 data);
+ void fg_videoram_w(offs_t offset, u16 data, u16 mem_mask);
+ void bg_videoram_w(offs_t offset, u16 data, u16 mem_mask);
+ void terrafb_fg_scrolly_w(u8 data);
+ void terrafb_fg_scrollx_w(u8 data);
+ void terrafb_fg_scroll_msb_arm_w(u8 data);
+ void fg_scrollx_w(offs_t offset, u16 data, u16 mem_mask);
+ void fg_scrolly_w(offs_t offset, u16 data, u16 mem_mask);
+ void bg_scrollx_w(offs_t offset, u16 data, u16 mem_mask);
+ void bg_scrolly_w(offs_t offset, u16 data, u16 mem_mask);
+
TILEMAP_MAPPER_MEMBER(armedf_scan_type1);
TILEMAP_MAPPER_MEMBER(armedf_scan_type2);
TILEMAP_MAPPER_MEMBER(armedf_scan_type3);
+
TILE_GET_INFO_MEMBER(get_nb1414m4_tx_tile_info);
TILE_GET_INFO_MEMBER(get_armedf_tx_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
+
DECLARE_VIDEO_START(terraf);
- void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int priority );
- void armedf_drawgfx(bitmap_ind16 &dest_bmp,const rectangle &clip,gfx_element *gfx,
- uint32_t code,uint32_t color, uint32_t clut,int flipx,int flipy,int offsx,int offsy,
- int transparent_color);
+ DECLARE_VIDEO_START(armedf);
+
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, bitmap_ind8 &primap);
+ void armedf_drawgfx(bitmap_ind16 &dest_bmp, const rectangle &clip, gfx_element *gfx,
+ u32 code, u32 color, u32 clut, int flipx, int flipy, int offsx, int offsy,
+ bitmap_ind8 &primap, u32 pmask, int transparent_color);
void common_map(address_map &map);
void armedf_map(address_map &map);
void cclimbr2_map(address_map &map);
@@ -141,7 +144,10 @@ protected:
void sound_3526_portmap(address_map &map);
void sound_map(address_map &map);
void sound_portmap(address_map &map);
+ void terraf_common_map(address_map &map);
void terraf_map(address_map &map);
+ void terrafb_map(address_map &map);
+ void terrafjb_map(address_map &map);
void terrafjb_extraz80_map(address_map &map);
void terrafjb_extraz80_portmap(address_map &map);
};
@@ -149,22 +155,24 @@ protected:
class bigfghtr_state : public armedf_state
{
public:
- bigfghtr_state(const machine_config &mconfig, device_type type, const char *tag) :
- armedf_state(mconfig, type, tag),
- m_mcu(*this, "mcu"),
- m_sharedram(*this, "sharedram")
+ bigfghtr_state(const machine_config &mconfig, device_type type, const char *tag)
+ : armedf_state(mconfig, type, tag)
+ , m_mcu(*this, "mcu")
+ , m_sharedram(*this, "sharedram")
{ }
void bigfghtr(machine_config &config);
private:
required_device<cpu_device> m_mcu;
- required_shared_ptr<uint8_t> m_sharedram;
+ required_shared_ptr<u8> m_sharedram;
+
+ // mcu interfaces
+ u16 latch_r();
+ void main_sharedram_w(offs_t offset, u8 data);
+ u8 main_sharedram_r(offs_t offset);
+ void mcu_spritelist_w(offs_t offset, u8 data);
- DECLARE_READ16_MEMBER(latch_r);
- DECLARE_WRITE8_MEMBER(main_sharedram_w);
- DECLARE_READ8_MEMBER(main_sharedram_r);
- DECLARE_WRITE8_MEMBER(mcu_spritelist_w);
void bigfghtr_map(address_map &map);
void bigfghtr_mcu_io_map(address_map &map);
void bigfghtr_mcu_map(address_map &map);
diff --git a/src/mame/includes/goldstar.h b/src/mame/includes/goldstar.h
index 8ac8ad05269..f406f31b0d8 100644
--- a/src/mame/includes/goldstar.h
+++ b/src/mame/includes/goldstar.h
@@ -199,11 +199,13 @@ public:
void amcoe2(machine_config &config);
void amcoe1(machine_config &config);
void chryangl(machine_config &config);
+ void ss2001(machine_config &config);
void amcoe1_portmap(address_map &map);
void amcoe2_portmap(address_map &map);
void cm_portmap(address_map &map);
void cm97_portmap(address_map &map);
void chryangl_decrypted_opcodes_map(address_map &map);
+ void ss2001_portmap(address_map &map);
protected:
// installed by various driver init handlers to get stuff to work
diff --git a/src/mame/includes/jazz.h b/src/mame/includes/jazz.h
index 449035a4293..7b8135899e5 100644
--- a/src/mame/includes/jazz.h
+++ b/src/mame/includes/jazz.h
@@ -76,7 +76,8 @@ protected:
virtual void machine_reset() override;
// address maps
- void jazz_common_map(address_map &map);
+ void cpu_map(address_map &map);
+ void mct_map(address_map &map);
// machine config
void jazz(machine_config &config);
diff --git a/src/mame/includes/nes.h b/src/mame/includes/nes.h
index ee722e92b36..b0717a6ad19 100644
--- a/src/mame/includes/nes.h
+++ b/src/mame/includes/nes.h
@@ -52,8 +52,8 @@
class nes_base_state : public driver_device
{
public:
- nes_base_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ nes_base_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_ctrl1(*this, "ctrl1"),
m_ctrl2(*this, "ctrl2")
@@ -71,8 +71,8 @@ public:
class nes_state : public nes_base_state
{
public:
- nes_state(const machine_config &mconfig, device_type type, const char *tag)
- : nes_base_state(mconfig, type, tag),
+ nes_state(const machine_config &mconfig, device_type type, const char *tag) :
+ nes_base_state(mconfig, type, tag),
m_ppu(*this, "ppu"),
m_screen(*this, "screen"),
m_exp(*this, "exp"),
diff --git a/src/mame/machine/3dom2.cpp b/src/mame/machine/3dom2.cpp
index b984da8b1ab..01dc23c1e1c 100644
--- a/src/mame/machine/3dom2.cpp
+++ b/src/mame/machine/3dom2.cpp
@@ -1514,9 +1514,9 @@ void m2_cde_device::device_start()
{
// Find our friend the BDA
m_bda = downcast<m2_bda_device *>(machine().device("bda"));
- assert(m_bda != NULL);
+ assert(m_bda != nullptr);
- if (m_bda == NULL)
+ if (m_bda == nullptr)
throw device_missing_dependencies();
// Resolve callbacks
diff --git a/src/mame/machine/atarifdc.cpp b/src/mame/machine/atarifdc.cpp
index 2aae1dd0402..b7f21c9ee58 100644
--- a/src/mame/machine/atarifdc.cpp
+++ b/src/mame/machine/atarifdc.cpp
@@ -301,7 +301,6 @@ void atari_fdc_device::atari_load_proc(device_image_interface &image, bool is_cr
(m_drv[id].heads == 1) ? "SS" : "DS",
(m_drv[id].density == 0) ? "SD" : (m_drv[id].density == 1) ? "MD" : "DD",
m_drv[id].seclen);
- return;
}
diff --git a/src/mame/machine/atarixga.cpp b/src/mame/machine/atarixga.cpp
index 968abee4048..119d8c42acd 100644
--- a/src/mame/machine/atarixga.cpp
+++ b/src/mame/machine/atarixga.cpp
@@ -396,7 +396,6 @@ WRITE32_MEMBER(atari_136095_0072_device::polylsb_write)
{
m_update.addr = offset;
m_update.data[offset] = data;
- return;
}
READ32_MEMBER(atari_136095_0072_device::polylsb_read)
@@ -470,8 +469,6 @@ WRITE32_MEMBER(atari_136095_0072_device::write)
default:
break;
}
-
- return;
}
READ32_MEMBER(atari_136095_0072_device::read)
diff --git a/src/mame/machine/cuda.cpp b/src/mame/machine/cuda.cpp
index cd7de260827..2cc123d5a8a 100644
--- a/src/mame/machine/cuda.cpp
+++ b/src/mame/machine/cuda.cpp
@@ -421,7 +421,7 @@ void cuda_device::device_start()
save_item(NAME(pram));
save_item(NAME(disk_pram));
- uint8_t *rom = device().machine().root_device().memregion(device().subtag(CUDA_CPU_TAG).c_str())->base();
+ uint8_t *rom = device().machine().root_device().memregion(device().subtag(CUDA_CPU_TAG))->base();
if (rom)
{
diff --git a/src/mame/machine/dc305.cpp b/src/mame/machine/dc305.cpp
new file mode 100644
index 00000000000..d98480fb7ea
--- /dev/null
+++ b/src/mame/machine/dc305.cpp
@@ -0,0 +1,101 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ DEC DC305 Printer Controller
+
+ This device normally operates at 2 MHz with one wait state. It
+ generates two vectored interrupts.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "dc305.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+// device type definition
+DEFINE_DEVICE_TYPE(DC305, dc305_device, "dc305", "DC305 Printer Controller")
+
+
+//**************************************************************************
+// DEVICE IMPLEMENTATION
+//**************************************************************************
+
+//-------------------------------------------------
+// dc305_device - constructor
+//-------------------------------------------------
+
+dc305_device::dc305_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, DC305, tag, owner, clock)
+ , m_int_callback(*this)
+ , m_rxc_callback(*this)
+ , m_txc_callback(*this)
+{
+}
+
+
+//-------------------------------------------------
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
+//-------------------------------------------------
+
+void dc305_device::device_resolve_objects()
+{
+ m_int_callback.resolve_safe();
+ m_rxc_callback.resolve_safe();
+ m_txc_callback.resolve_safe();
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dc305_device::device_start()
+{
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void dc305_device::device_reset()
+{
+}
+
+
+//-------------------------------------------------
+// read - read from internal register
+//-------------------------------------------------
+
+u8 dc305_device::read(offs_t offset)
+{
+ // TODO
+ return 0;
+}
+
+
+//-------------------------------------------------
+// write - write to internal register
+//-------------------------------------------------
+
+void dc305_device::write(offs_t offset, u8 data)
+{
+ // TODO
+}
+
+
+//-------------------------------------------------
+// inta - acknowledge and vector interrupt
+//-------------------------------------------------
+
+u8 dc305_device::inta()
+{
+ // TODO: generate RST 5, RST 3 or RST 1 if both requested
+ return 0xff;
+}
diff --git a/src/mame/machine/dc305.h b/src/mame/machine/dc305.h
new file mode 100644
index 00000000000..c2dbd0672d8
--- /dev/null
+++ b/src/mame/machine/dc305.h
@@ -0,0 +1,75 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ DEC DC305 Printer Controller
+
+****************************************************************************
+ _____ _____
+ VSS 1 |* \_/ | 40 A0
+ INT 2 | | 39 A1
+ RESET 3 | | 38 WR
+ CLK 4 | | 37 RD
+ VCC 5 | | 36 INTA
+ CH1 6 | | 35 CS
+ CH2 7 | | 34 D0
+ MINUS 8 | | 33 D1
+ PLUS 9 | | 32 D2
+ BELL 10 | | 31 D3
+ RUN 11 | DC305 | 30 D4
+ LF2 12 | | 29 D5
+ LF1 13 | | 28 D6
+ RXC 14 | | 27 D7
+ TXC 15 | | 26 S2
+ S11 16 | | 25 S4
+ S9 17 | | 24 S6
+ S7 18 | | 23 S8
+ S5 19 | | 22 S10
+ S3 20 |_____________| 21 S1
+
+***************************************************************************/
+
+#ifndef MAME_MACHINE_DC305_H
+#define MAME_MACHINE_DC305_H
+
+#pragma once
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> dc305_device
+
+class dc305_device : public device_t
+{
+public:
+ // construction/destruction
+ dc305_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ // configuration
+ auto int_callback() { return m_int_callback.bind(); }
+ auto rxc_callback() { return m_rxc_callback.bind(); }
+ auto txc_callback() { return m_txc_callback.bind(); }
+
+ // CPU read/write handlers
+ u8 read(offs_t offset);
+ void write(offs_t offset, u8 data);
+ u8 inta();
+
+protected:
+ // device-specific overrides
+ virtual void device_resolve_objects() override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ // callback objects
+ devcb_write_line m_int_callback;
+ devcb_write_line m_rxc_callback;
+ devcb_write_line m_txc_callback;
+};
+
+// device type declaration
+DECLARE_DEVICE_TYPE(DC305, dc305_device)
+
+#endif // MAME_MACHINE_DC305_H
diff --git a/src/mame/machine/egret.cpp b/src/mame/machine/egret.cpp
index 0959485bfad..f909f8f5e1c 100644
--- a/src/mame/machine/egret.cpp
+++ b/src/mame/machine/egret.cpp
@@ -370,7 +370,7 @@ void egret_device::device_start()
save_item(NAME(pram));
save_item(NAME(disk_pram));
- uint8_t *rom = device().machine().root_device().memregion(device().subtag(EGRET_CPU_TAG).c_str())->base();
+ uint8_t *rom = device().machine().root_device().memregion(device().subtag(EGRET_CPU_TAG))->base();
if (rom)
{
diff --git a/src/mame/machine/elan_eu3a05gpio.cpp b/src/mame/machine/elan_eu3a05gpio.cpp
index fe24d423dcb..5a1ede0e960 100644
--- a/src/mame/machine/elan_eu3a05gpio.cpp
+++ b/src/mame/machine/elan_eu3a05gpio.cpp
@@ -6,19 +6,25 @@
DEFINE_DEVICE_TYPE(ELAN_EU3A05_GPIO, elan_eu3a05gpio_device, "elan_eu3a05gpio", "Elan EU3A05 GPIO")
-elan_eu3a05gpio_device::elan_eu3a05gpio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, ELAN_EU3A05_GPIO, tag, owner, clock)
- , m_space_read0_cb(*this)
- , m_space_read1_cb(*this)
- , m_space_read2_cb(*this)
+elan_eu3a05gpio_device::elan_eu3a05gpio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, ELAN_EU3A05_GPIO, tag, owner, clock),
+ m_write_0_callback(*this),
+ m_write_1_callback(*this),
+ m_write_2_callback(*this),
+ m_read_0_callback(*this),
+ m_read_1_callback(*this),
+ m_read_2_callback(*this)
{
}
void elan_eu3a05gpio_device::device_start()
{
- m_space_read0_cb.resolve_safe(0xff);
- m_space_read1_cb.resolve_safe(0xff);
- m_space_read2_cb.resolve_safe(0xff);
+ m_write_0_callback.resolve_safe();
+ m_write_1_callback.resolve_safe();
+ m_write_2_callback.resolve_safe();
+ m_read_0_callback.resolve_safe(0xff);
+ m_read_1_callback.resolve_safe(0xff);
+ m_read_2_callback.resolve_safe(0xff);
}
void elan_eu3a05gpio_device::device_reset()
@@ -35,9 +41,9 @@ uint8_t elan_eu3a05gpio_device::read_port_data(int which)
//todo, actually use the direction registers
switch (which)
{
- case 0: return m_space_read0_cb();
- case 1: return m_space_read1_cb();
- case 2: return m_space_read2_cb();
+ case 0: return m_read_0_callback();
+ case 1: return m_read_1_callback();
+ case 2: return m_read_2_callback();
}
return 0xff;
@@ -60,6 +66,13 @@ void elan_eu3a05gpio_device::write_port_data(int which, uint8_t data)
{
//todo, actually use the direction registers
logerror("%s: write_port_data (port %d) %02x (direction register %02x)\n", machine().describe_context(), which, data, m_ddr[which]);
+
+ switch (which)
+ {
+ case 0: return m_write_0_callback(data); break;
+ case 1: return m_write_1_callback(data); break;
+ case 2: return m_write_2_callback(data); break;
+ }
}
void elan_eu3a05gpio_device::write_direction(int which, uint8_t data)
@@ -70,7 +83,6 @@ void elan_eu3a05gpio_device::write_direction(int which, uint8_t data)
WRITE8_MEMBER(elan_eu3a05gpio_device::gpio_w)
{
-
int port = offset/2;
if (!(offset&1)) return write_direction(port, data);
else return write_port_data(port, data);
diff --git a/src/mame/machine/elan_eu3a05gpio.h b/src/mame/machine/elan_eu3a05gpio.h
index f06d2eb14b0..c476a303641 100644
--- a/src/mame/machine/elan_eu3a05gpio.h
+++ b/src/mame/machine/elan_eu3a05gpio.h
@@ -10,10 +10,13 @@ class elan_eu3a05gpio_device : public device_t
public:
elan_eu3a05gpio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- auto read_0_callback() { return m_space_read0_cb.bind(); }
- auto read_1_callback() { return m_space_read1_cb.bind(); }
- auto read_2_callback() { return m_space_read2_cb.bind(); }
-
+ auto write_0_callback() { return m_write_0_callback.bind(); }
+ auto write_1_callback() { return m_write_1_callback.bind(); }
+ auto write_2_callback() { return m_write_2_callback.bind(); }
+ auto read_0_callback() { return m_read_0_callback.bind(); }
+ auto read_1_callback() { return m_read_1_callback.bind(); }
+ auto read_2_callback() { return m_read_2_callback.bind(); }
+
DECLARE_READ8_MEMBER(gpio_r);
DECLARE_WRITE8_MEMBER(gpio_w);
@@ -25,9 +28,12 @@ protected:
virtual void device_reset() override;
private:
- devcb_read8 m_space_read0_cb;
- devcb_read8 m_space_read1_cb;
- devcb_read8 m_space_read2_cb;
+ devcb_write8 m_write_0_callback;
+ devcb_write8 m_write_1_callback;
+ devcb_write8 m_write_2_callback;
+ devcb_read8 m_read_0_callback;
+ devcb_read8 m_read_1_callback;
+ devcb_read8 m_read_2_callback;
uint8_t read_port_data(int which);
uint8_t read_direction(int which);
diff --git a/src/mame/machine/esqpanel.cpp b/src/mame/machine/esqpanel.cpp
index 9fb5b1c9d38..f5df1b55e87 100644
--- a/src/mame/machine/esqpanel.cpp
+++ b/src/mame/machine/esqpanel.cpp
@@ -154,7 +154,7 @@ namespace esqpanel {
m_to_send.put(c);
const std::string &s = m_to_send.str();
- for (auto iter: m_panels)
+ for (const auto &iter: m_panels)
{
external_panel_ptr panel = iter.second;
if (panel->send_display_data())
@@ -215,7 +215,7 @@ namespace esqpanel {
}
// Echo the non-command message to any other connected panels that want it
- for (auto iter: m_panels)
+ for (const auto &iter: m_panels)
{
external_panel_ptr other_panel = iter.second;
if (other_panel != panel && (t & other_panel->send_message_types()) != 0)
diff --git a/src/mame/machine/mac.cpp b/src/mame/machine/mac.cpp
index 9bfb19f07e4..4f42dd272b5 100644
--- a/src/mame/machine/mac.cpp
+++ b/src/mame/machine/mac.cpp
@@ -1482,7 +1482,6 @@ WRITE8_MEMBER(mac_state::mac_via_out_a_pmu)
// printf("%02x to PM\n", data);
#endif
m_pm_data_send = data;
- return;
}
WRITE8_MEMBER(mac_state::mac_via_out_b)
diff --git a/src/mame/machine/mct_adr.cpp b/src/mame/machine/mct_adr.cpp
index 2882bcca339..168b43ed7d2 100644
--- a/src/mame/machine/mct_adr.cpp
+++ b/src/mame/machine/mct_adr.cpp
@@ -40,8 +40,8 @@ DEFINE_DEVICE_TYPE(MCT_ADR, mct_adr_device, "mct_adr", "MCT-ADR Address Path Con
mct_adr_device::mct_adr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, MCT_ADR, tag, owner, clock)
, device_memory_interface(mconfig, *this)
+ , m_io_config("io", ENDIANNESS_LITTLE, 32, 32, 0)
, m_dma_config("dma", ENDIANNESS_LITTLE, 32, 32, 0, address_map_constructor(FUNC(mct_adr_device::dma), this))
- , m_bus(*this, finder_base::DUMMY_TAG, -1, 64)
, m_out_int_dma(*this)
, m_out_int_device(*this)
, m_out_int_timer(*this)
@@ -83,7 +83,7 @@ void mct_adr_device::map(address_map &map)
{
u32 const address = (m_ioc_physical_tag & ~0x1) + ((m_ioc_maint & 0x3) << 3);
- m_bus->write_dword(address, data);
+ space(0).write_dword(address, data);
}
}, "io_cache_buffer_window_lo");
// io_cache_buffer_window_hi
@@ -128,15 +128,14 @@ void mct_adr_device::map(address_map &map)
device_memory_interface::space_config_vector mct_adr_device::memory_space_config() const
{
return space_config_vector{
- std::make_pair(0, &m_dma_config)
+ std::make_pair(0, &m_io_config),
+ std::make_pair(1, &m_dma_config)
};
}
void mct_adr_device::dma(address_map &map)
{
- map(0x00000000U, 0xffffffffU).lrw32(
- [this](offs_t offset) { return m_bus->read_dword(translate_address(offset << 2)); }, "dma_r",
- [this](offs_t offset, u32 data, u32 mem_mask) { m_bus->write_dword(translate_address(offset << 2), data, mem_mask); }, "dma_w");
+ map(0x00000000U, 0xffffffffU).rw(FUNC(mct_adr_device::dma_r), FUNC(mct_adr_device::dma_w));
}
void mct_adr_device::device_start()
@@ -278,7 +277,7 @@ TIMER_CALLBACK_MEMBER(mct_adr_device::dma_check)
// perform dma transfer
if (m_dma_reg[(channel << 2) + REG_ENABLE] & DMA_DIRECTION)
{
- u8 const data = m_bus->read_byte(address);
+ u8 const data = space(0).read_byte(address);
//LOG("dma_w data 0x%02x address 0x%08x\n", data, address);
@@ -290,7 +289,7 @@ TIMER_CALLBACK_MEMBER(mct_adr_device::dma_check)
//LOG("dma_r data 0x%02x address 0x%08x\n", data, address);
- m_bus->write_byte(address, data);
+ space(0).write_byte(address, data);
}
// increment address, decrement count
@@ -322,7 +321,7 @@ u32 mct_adr_device::translate_address(u32 logical_address)
{
u32 entry_address = (m_trans_tbl_base & 0x7fffffff) + page * 8;
- return m_bus->read_dword(entry_address) | (logical_address & 0xfff);
+ return space(0).read_dword(entry_address) | (logical_address & 0xfff);
}
else
{
@@ -331,3 +330,17 @@ u32 mct_adr_device::translate_address(u32 logical_address)
return 0; // FIXME: address error
}
}
+
+u32 mct_adr_device::dma_r(offs_t offset, u32 mem_mask)
+{
+ u32 const address = translate_address(offset << 2);
+
+ return space(0).read_dword(address, mem_mask);
+}
+
+void mct_adr_device::dma_w(offs_t offset, u32 data, u32 mem_mask)
+{
+ u32 const address = translate_address(offset << 2);
+
+ space(0).write_dword(address, data, mem_mask);
+}
diff --git a/src/mame/machine/mct_adr.h b/src/mame/machine/mct_adr.h
index 6adfa508be1..b515274ad90 100644
--- a/src/mame/machine/mct_adr.h
+++ b/src/mame/machine/mct_adr.h
@@ -14,8 +14,6 @@ public:
mct_adr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// configuration
- template <typename T> void set_bus(T &&tag, int spacenum) { m_bus.set_tag(std::forward<T>(tag), spacenum); }
-
auto out_int_dma_cb() { return m_out_int_dma.bind(); }
auto out_int_device_cb() { return m_out_int_device.bind(); }
auto out_int_timer_cb() { return m_out_int_timer.bind(); }
@@ -29,6 +27,9 @@ public:
void map(address_map &map);
+ u64 r4k_r(offs_t offset, u64 mem_mask) { return space(0).read_qword(offset << 3, mem_mask); }
+ void r4k_w(offs_t offset, u64 data, u64 mem_mask) { space(0).write_qword(offset << 3, data, mem_mask); }
+
u16 isr_r();
u16 imr_r() { return m_imr; }
void imr_w(u16 data);
@@ -42,6 +43,9 @@ protected:
virtual space_config_vector memory_space_config() const override;
//virtual bool memory_translate(int spacenum, int intention, offs_t &address) override;
+ u32 dma_r(offs_t offset, u32 mem_mask);
+ void dma_w(offs_t offset, u32 data, u32 mem_mask);
+
private:
void dma(address_map &map);
@@ -54,8 +58,8 @@ private:
u32 translate_address(u32 logical_address);
+ address_space_config m_io_config;
address_space_config m_dma_config;
- required_address_space m_bus;
devcb_write_line m_out_int_dma;
devcb_write_line m_out_int_device;
diff --git a/src/mame/machine/megadriv.cpp b/src/mame/machine/megadriv.cpp
index 7dedd2caa90..285d64b44f9 100644
--- a/src/mame/machine/megadriv.cpp
+++ b/src/mame/machine/megadriv.cpp
@@ -1023,7 +1023,7 @@ void md_base_state::md2_pal(machine_config &config)
WRITE8_MEMBER(md_base_state::megadriv_tas_callback)
{
- return; // writeback not allowed
+ // writeback not allowed
}
void md_base_state::megadriv_init_common()
diff --git a/src/mame/machine/nl_pongf.cpp b/src/mame/machine/nl_pongf.cpp
index 534791142c1..e0da08fab29 100644
--- a/src/mame/machine/nl_pongf.cpp
+++ b/src/mame/machine/nl_pongf.cpp
@@ -7,10 +7,10 @@
***************************************************************************/
-#ifndef __PLIB_PREPROCESSOR__
+//#ifndef __PLIB_PREPROCESSOR__
#define NL_PROHIBIT_BASEH_INCLUDE 1
#include "netlist/devices/net_lib.h"
-#endif
+//#endif
#define FAST_CLOCK (1)
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 94c0e0256f3..55bd29c2d43 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -12886,6 +12886,7 @@ rad_baskp
rad_sinv
rad_tetr
airblsjs
+buzztime
sudoelan
carlecfg
@@ -14102,6 +14103,7 @@ tenspot // (c) 1982 Thomas Automatics
theend // (c) 1980 Konami
takeoff // (c) 1980 Sidam (bootleg)
theends // (c) 1980 Stern
+theendss // bootleg (SegaSA / Sonic)
thepitm // bootleg
timefgtr // (c) Taito (Brazil) - rewrite of Time Pilot
tst_galx // Galaxian Test ROM
@@ -14816,7 +14818,6 @@ ngoldb // 198? Unknown
pmpoker // (c) 1981 PlayMan
poker91 // 1991, Unknown
pokerdub // 198?, Unknown
-pokerduc // 198?, Unknown
pokermon // 1987, Unknown
pokersis // 198?, Sisteme France.
potnpkra // Bootleg in Coinmaster H/W
@@ -14851,6 +14852,7 @@ witchcdf // (c) 1991, PlayMan
witchcdg // (c) 199?, Falcon
witchcdh // (c) 1994, TV Game Elektronik - Proma
witchcdi // (c) 1994, TV Game Elektronik - Proma
+witchcdj // 199?, Unknown
witchcdk // (c) 1991, Video Klein
witchcrd // (c) 1991, Video Klein
witchgme // (c) 1991 Video Klein
@@ -15030,6 +15032,7 @@ schery97 // (c) 1998 Amcoe
schery97a // (c) 1998 Amcoe
scmaster // 1994, unknown
skill98 // (c) 1998 Amcoe
+ss2001 // bootleg / hack
star100 // (c) 199? Sang Ho
super7 // bootleg (New Impeuropex?)
super9 // (c) 2001 Playmark
@@ -16466,7 +16469,7 @@ iqblock // (c) 1993
iqunlim // 199? IQ Unlimited (680x0)
@source:iris3130.cpp
-sgi_ip2 // IP2: IRIS 3xx0, 68020, 16MHz
+iris3130 // IP2: IRIS 3xx0, 68020, 16MHz
@source:irisha.cpp
irisha //
@@ -16601,6 +16604,7 @@ shufshot // (c) Strata/Incredible Technologies
shufshot137 // (c) Strata/Incredible Technologies
shufshot139 // (c) Strata/Incredible Technologies
timekill // (c) 1992 Strata/Incredible Technologies
+timekill100 // (c) 1992 Strata/Incredible Technologies
timekill121 // (c) 1992 Strata/Incredible Technologies
timekill121a // (c) 1992 Strata/Incredible Technologies
timekill131 // (c) 1992 Strata/Incredible Technologies
@@ -18331,6 +18335,8 @@ jupiter3 //
@source:jvh.cpp
escape //
+formula1 //
+icemania //
movmastr //
@source:k1003.cpp
@@ -18576,6 +18582,7 @@ kbadlands // GX455 (c) 1984
kbadlandsh // GX455 (c) 1984
@source:konendev.cpp
+konendev // Konami Endeavour BIOS
aadvent // African Adventure
dragnfly // Dragonfly
enchlamp // Enchanted Lamp
@@ -21899,6 +21906,7 @@ berlinpl // 1996 Mephisto Berlin Pro London Upgrade
@source:mephisto_brikett.cpp
mephisto
mephisto2
+mephisto2a
mephisto2e
mephisto3
mephisto3b
@@ -29252,6 +29260,7 @@ mrdot // 8201 (c) 1982 + Taito license
mrdoy // 8201 (c) 1982
mrdu // bootleg
mrlo // bootleg
+mrdofabr // bootleg (Fabremar)
yankeedo // bootleg
@source:mrflea.cpp
@@ -30440,7 +30449,8 @@ chocomk // 2002.06 Musapey's Choco Marker (Rev A)
claychal // 2008.11 Sega Clay Challenge
cleoftp // 2002.05 Cleopatra Fortune Plus
clubk2k3 // 2003.?? Club Kart: European Session (2003, Rev A)
-clubk2kp // 2003.?? Club Kart: European Session (2003, prototype)
+clubk2kp // 2003.?? Club Kart: European Session (2003, prototype, set 1)
+clubk2kpa // 2003.?? Club Kart: European Session (2003, prototype, set 2)
clubkcyc // 2003.?? Club Kart Cycraft Edition (Rev A)
clubkcyco // 2003.?? Club Kart Cycraft Edition
clubkprz // 2003.?? Club Kart Prize
@@ -30482,6 +30492,7 @@ dybb99 // 1999.11 Dynamite Baseball '99 (Rev B)
dybbnao // 1998.12 Dynamite Baseball NAOMI
dygolf // 2001.04.27 Dynamic Golf / Virtua Golf (Rev A)
f355 // 1999.07 Ferrari F355 Challenge (deluxe, no link)
+f355p // 1999.05 Ferrari F355 Challenge (private show version)
f355bios // 1999.08 F355 Challenge Twin/Deluxe (BIOS)
f355dlx // 1999.07 F355 Challenge Deluxe (BIOS)
f355twin // 1999.07 Ferrari F355 Challenge (twin/deluxe)
@@ -34214,6 +34225,7 @@ metamaq2 // Metamaquina 2 desktop 3d printer
@source:rampart.cpp
rampart // 136082 (c) 1990
rampart2p // 136082 (c) 1990
+rampart2pa // 136082 (c) 1990
rampartj // 136082 (c) 1990 (Japan)
@source:ramtek.cpp
@@ -36637,8 +36649,8 @@ countryc // A7004 'CC' (c) 1988
dogosokb // bootleg
dogosoke // A6002 (c) 1986
fitegolf // 'GU' (c) 1988
-fitegolf2 //
fitegolfu // 'GU' (c) 1988
+fitegolfua //
fsoccer // A6006 'FS' (c) 1988
fsoccerb // (c) 1988
fsoccerba // (c) 1988
@@ -36971,6 +36983,7 @@ lexiseal //
@source:spg2xx_pdc.cpp
pdc100
+tmntpdc
@source:spg2xx_playvision.cpp
pvmil //
@@ -37003,6 +37016,8 @@ vii // KenSingTon / Jungle Soft / Siatronics Vii
@source:spg2xx_zone.cpp
wirels60 // Wireless 60
zone40 // Zone 40
+reactmd
+itvg49
zone60 // Zone 60
zone100 //
lx_jg7415 //
@@ -38820,6 +38835,7 @@ bikkuric // Peni Soft (NOT Konami)
chkun // Peni Soft (NOT Konami)
psurge // (c) 1988 unknown (NOT Konami)
spaceplt // bootleg
+spaceplta // bootleg
timeplt // GX393 (c) 1982
timeplta // GX393 (c) 1982 + Atari license
timepltc // GX393 (c) 1982 + Centuri license
diff --git a/src/mame/video/3dom2_te.cpp b/src/mame/video/3dom2_te.cpp
index c41f7496e89..5b6d6b633e5 100644
--- a/src/mame/video/3dom2_te.cpp
+++ b/src/mame/video/3dom2_te.cpp
@@ -1224,9 +1224,9 @@ void m2_te_device::setup_triangle(uint32_t flags)
if ((vb.y - vc.y) < 0.0f) a |= 2;
if ((vc.y - va.y) < 0.0f) a |= 1;
- const se_vtx *v1 = NULL;
- const se_vtx *v2 = NULL;
- const se_vtx *v3 = NULL;
+ const se_vtx *v1 = nullptr;
+ const se_vtx *v2 = nullptr;
+ const se_vtx *v3 = nullptr;
switch (a)
{
diff --git a/src/mame/video/armedf.cpp b/src/mame/video/armedf.cpp
index d89789a9d31..868014e9eb4 100644
--- a/src/mame/video/armedf.cpp
+++ b/src/mame/video/armedf.cpp
@@ -35,8 +35,8 @@ TILEMAP_MAPPER_MEMBER(armedf_state::armedf_scan_type3)
TILE_GET_INFO_MEMBER(armedf_state::get_nb1414m4_tx_tile_info)
{
- int tile_number = m_text_videoram[tile_index] & 0xff;
- int attributes;
+ u8 tile_number = m_text_videoram[tile_index] & 0xff;
+ u8 attributes;
/* TODO: Armed F doesn't seem to use the NB1414M4! */
//if (m_scroll_type == 1)
@@ -46,7 +46,7 @@ TILE_GET_INFO_MEMBER(armedf_state::get_nb1414m4_tx_tile_info)
attributes = m_text_videoram[tile_index + 0x400] & 0xff;
// TODO: skip drawing the NB1414M4 params, how the HW actually handles this?
- if(tile_index < 0x12)
+ if (tile_index < 0x12)
tile_number = attributes = 0x00;
}
@@ -61,8 +61,8 @@ TILE_GET_INFO_MEMBER(armedf_state::get_nb1414m4_tx_tile_info)
TILE_GET_INFO_MEMBER(armedf_state::get_armedf_tx_tile_info)
{
- int tile_number = m_text_videoram[tile_index] & 0xff;
- int attributes;
+ u8 tile_number = m_text_videoram[tile_index] & 0xff;
+ u8 attributes;
/* TODO: Armed F doesn't seem to use the NB1414M4! */
//if (m_scroll_type == 1)
@@ -71,7 +71,7 @@ TILE_GET_INFO_MEMBER(armedf_state::get_armedf_tx_tile_info)
//{
// attributes = m_text_videoram[tile_index + 0x400] & 0xff;
//
- // if(tile_index < 0x12) /* don't draw the NB1414M4 params! TODO: could be a better fix */
+ // if (tile_index < 0x12) /* don't draw the NB1414M4 params! TODO: could be a better fix */
// tile_number = attributes = 0x00;
//}
@@ -87,7 +87,7 @@ TILE_GET_INFO_MEMBER(armedf_state::get_armedf_tx_tile_info)
TILE_GET_INFO_MEMBER(armedf_state::get_fg_tile_info)
{
- int data = m_fg_videoram[tile_index];
+ const u16 data = m_fg_videoram[tile_index];
SET_TILE_INFO_MEMBER(1,
data&0x7ff,
data>>11,
@@ -97,7 +97,7 @@ TILE_GET_INFO_MEMBER(armedf_state::get_fg_tile_info)
TILE_GET_INFO_MEMBER(armedf_state::get_bg_tile_info)
{
- int data = m_bg_videoram[tile_index];
+ const u16 data = m_bg_videoram[tile_index];
SET_TILE_INFO_MEMBER(2,
data & 0x3ff,
data >> 11,
@@ -128,11 +128,6 @@ VIDEO_START_MEMBER(armedf_state,terraf)
if (m_scroll_type != 1)
m_tx_tilemap->set_scrollx(0, -128);
-
- m_text_videoram = std::make_unique<uint8_t[]>(0x1000);
- memset(m_text_videoram.get(), 0x00, 0x1000);
-
- save_pointer(NAME(m_text_videoram), 0x1000);
}
VIDEO_START_MEMBER(armedf_state,armedf)
@@ -150,11 +145,6 @@ VIDEO_START_MEMBER(armedf_state,armedf)
if (m_scroll_type != 1)
m_tx_tilemap->set_scrollx(0, -128);
-
- m_text_videoram = std::make_unique<uint8_t[]>(0x1000);
- memset(m_text_videoram.get(), 0x00, 0x1000);
-
- save_pointer(NAME(m_text_videoram), 0x1000);
}
/***************************************************************************
@@ -163,88 +153,70 @@ VIDEO_START_MEMBER(armedf_state,armedf)
***************************************************************************/
-READ8_MEMBER(armedf_state::nb1414m4_text_videoram_r)
-{
- return m_text_videoram[offset];
-}
-
-WRITE8_MEMBER(armedf_state::nb1414m4_text_videoram_w)
-{
- m_text_videoram[offset] = data;
- m_tx_tilemap->mark_tile_dirty(offset & 0x7ff);
-}
-
-READ8_MEMBER(armedf_state::armedf_text_videoram_r)
+u8 armedf_state::text_videoram_r(offs_t offset)
{
return m_text_videoram[offset];
}
-WRITE8_MEMBER(armedf_state::armedf_text_videoram_w)
+void armedf_state::text_videoram_w(offs_t offset, u8 data)
{
m_text_videoram[offset] = data;
m_tx_tilemap->mark_tile_dirty(offset & 0x7ff);
}
-WRITE16_MEMBER(armedf_state::armedf_fg_videoram_w)
+void armedf_state::fg_videoram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_fg_videoram[offset]);
m_fg_tilemap->mark_tile_dirty(offset);
}
-WRITE16_MEMBER(armedf_state::armedf_bg_videoram_w)
+void armedf_state::bg_videoram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_bg_videoram[offset]);
m_bg_tilemap->mark_tile_dirty(offset);
}
-WRITE16_MEMBER(armedf_state::terraf_fg_scrolly_w)
+void armedf_state::terrafb_fg_scrolly_w(u8 data)
{
- if (ACCESSING_BITS_8_15)
- {
- m_fg_scrolly = ((data >> 8) & 0xff) | (m_fg_scrolly & 0x300);
- m_waiting_msb = 1;
- }
+ m_fg_scrolly = (data & 0xff) | (m_fg_scrolly & 0x300);
+ m_waiting_msb = 1;
}
-WRITE16_MEMBER(armedf_state::terraf_fg_scrollx_w)
+void armedf_state::terrafb_fg_scrollx_w(u8 data)
{
- if (ACCESSING_BITS_8_15)
+ if (m_waiting_msb)
{
- if (m_waiting_msb)
- {
- m_scroll_msb = data >> 8;
- m_fg_scrollx = (m_fg_scrollx & 0xff) | (((m_scroll_msb >> 4) & 3) << 8);
- m_fg_scrolly = (m_fg_scrolly & 0xff) | (((m_scroll_msb >> 0) & 3) << 8);
- //popmessage("%04X %04X %04X",data,m_fg_scrollx,m_fg_scrolly);
- }
- else
- m_fg_scrollx = ((data >> 8) & 0xff) | (m_fg_scrollx & 0x300);
+ m_scroll_msb = data;
+ m_fg_scrollx = (m_fg_scrollx & 0xff) | (((m_scroll_msb >> 4) & 3) << 8);
+ m_fg_scrolly = (m_fg_scrolly & 0xff) | (((m_scroll_msb >> 0) & 3) << 8);
+ //popmessage("%04X %04X %04X",data,m_fg_scrollx,m_fg_scrolly);
}
+ else
+ m_fg_scrollx = (data & 0xff) | (m_fg_scrollx & 0x300);
}
-WRITE16_MEMBER(armedf_state::terraf_fg_scroll_msb_arm_w)
+void armedf_state::terrafb_fg_scroll_msb_arm_w(u8 data)
{
- if (ACCESSING_BITS_8_15)
- m_waiting_msb = 0;
+ m_waiting_msb = 0;
}
-WRITE16_MEMBER(armedf_state::armedf_fg_scrollx_w)
+void armedf_state::fg_scrollx_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_fg_scrollx);
}
-WRITE16_MEMBER(armedf_state::armedf_fg_scrolly_w)
+void armedf_state::fg_scrolly_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_fg_scrolly);
}
-WRITE16_MEMBER(armedf_state::armedf_bg_scrollx_w)
+void armedf_state::bg_scrollx_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_bg_scrollx);
m_bg_tilemap->set_scrollx(0, m_bg_scrollx);
}
-WRITE16_MEMBER(armedf_state::armedf_bg_scrolly_w)
+void armedf_state::bg_scrolly_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_bg_scrolly);
m_bg_tilemap->set_scrolly(0, m_bg_scrolly);
@@ -260,11 +232,14 @@ WRITE16_MEMBER(armedf_state::armedf_bg_scrolly_w)
/* custom code to handle color cycling effect, handled by m_spr_pal_clut */
void armedf_state::armedf_drawgfx(bitmap_ind16 &dest_bmp,const rectangle &clip,gfx_element *gfx,
- uint32_t code,uint32_t color, uint32_t clut,int flipx,int flipy,int offsx,int offsy,
- int transparent_color)
+ u32 code,u32 color, u32 clut,int flipx,int flipy,int offsx,int offsy,
+ bitmap_ind8 &primap, u32 pmask, int transparent_color)
{
+ // high bit of the mask is implicitly on
+ pmask |= 1 << 31;
+
const pen_t *pal = &m_palette->pen(gfx->colorbase() + gfx->granularity() * (color % gfx->colors()));
- const uint8_t *source_base = gfx->get_data(code % gfx->elements());
+ const u8 *source_base = gfx->get_data(code % gfx->elements());
int x_index_base, y_index, sx, sy, ex, ey;
int xinc, yinc;
@@ -311,15 +286,19 @@ void armedf_state::armedf_drawgfx(bitmap_ind16 &dest_bmp,const rectangle &clip,g
{
for (y = sy; y < ey; y++)
{
- const uint8_t *source = source_base + y_index*gfx->rowbytes();
- uint16_t *dest = &dest_bmp.pix16(y);
+ const u8 *source = source_base + y_index*gfx->rowbytes();
+ u16 *dest = &dest_bmp.pix16(y);
+ u8 *destpri = &primap.pix8(y);
int x_index = x_index_base;
for (x = sx; x < ex; x++)
{
int c = (source[x_index] & ~0xf) | ((m_spr_pal_clut[clut*0x10+(source[x_index] & 0xf)]) & 0xf);
if (c != transparent_color)
- dest[x] = pal[c];
-
+ {
+ if (((1 << (destpri[x] & 0x1f)) & pmask) == 0)
+ dest[x] = pal[c];
+ destpri[x] = 0x1f;
+ }
x_index += xinc;
}
y_index += yinc;
@@ -329,13 +308,13 @@ void armedf_state::armedf_drawgfx(bitmap_ind16 &dest_bmp,const rectangle &clip,g
}
-void armedf_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int priority )
+void armedf_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, bitmap_ind8 &primap )
{
- uint16_t *buffered_spriteram = m_spriteram->buffer();
- int offs;
+ u16 *buffered_spriteram = m_spriteram->buffer();
- for (offs = 0; offs < m_spriteram->bytes() / 2; offs += 4)
+ for (int offs = (m_spriteram->bytes() / 2) - 4; offs >= 0; offs -= 4)
{
+ u32 pmask = 0;
int code = buffered_spriteram[offs + 1]; /* ??YX?TTTTTTTTTTT */
int flipx = code & 0x2000;
int flipy = code & 0x1000;
@@ -343,6 +322,18 @@ void armedf_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect
int clut = (buffered_spriteram[offs + 2]) & 0x7f;
int sx = buffered_spriteram[offs + 3];
int sy = m_sprite_offy + 240 - (buffered_spriteram[offs + 0] & 0x1ff);
+ int pri = ((buffered_spriteram[offs + 0] & 0x3000) >> 12);
+ if (pri == 3) // mimic previous driver behavior, correct?
+ continue;
+
+ if (pri >= 1)
+ pmask |= GFX_PMASK_4;
+ if (pri >= 2)
+ pmask |= GFX_PMASK_2;
+ /*
+ if (pri >= 3)
+ pmask |= GFX_PMASK_1;
+ */
if (flip_screen())
{
@@ -352,18 +343,15 @@ void armedf_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect
flipy = !flipy; /* in all the games supported by this driver */
}
- if (((buffered_spriteram[offs + 0] & 0x3000) >> 12) == priority)
- {
- armedf_drawgfx(bitmap,cliprect,m_gfxdecode->gfx(3),
- code & 0xfff,
- color,clut,
- flipx,flipy,
- sx,sy,15);
- }
+ armedf_drawgfx(bitmap,cliprect,m_gfxdecode->gfx(3),
+ code & 0xfff,
+ color,clut,
+ flipx,flipy,
+ sx,sy,primap,pmask,15);
}
}
-uint32_t armedf_state::screen_update_armedf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 armedf_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int sprite_enable = m_vreg & 0x200;
@@ -375,7 +363,7 @@ uint32_t armedf_state::screen_update_armedf(screen_device &screen, bitmap_ind16
{
case 0: /* terra force, kozure ookami */
case 2: /* legion */
- case 3: /* crazy climber */
+ case 3: /* crazy climber 2 */
m_fg_tilemap->set_scrollx(0, (m_fg_scrollx & 0x3ff));
m_fg_tilemap->set_scrolly(0, (m_fg_scrolly & 0x3ff));
break;
@@ -387,24 +375,16 @@ uint32_t armedf_state::screen_update_armedf(screen_device &screen, bitmap_ind16
}
- bitmap.fill(0xff, cliprect );
-
- m_tx_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_CATEGORY(1), 0);
-
- m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
-
- if (sprite_enable)
- draw_sprites(bitmap, cliprect, 2);
-
- m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
-
- if (sprite_enable)
- draw_sprites(bitmap, cliprect, 1);
+ screen.priority().fill(0, cliprect);
+ bitmap.fill(0xff, cliprect);
- m_tx_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_CATEGORY(0), 0);
+ m_tx_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_CATEGORY(1), 1);
+ m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 1);
+ m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2);
+ m_tx_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_CATEGORY(0), 4);
if (sprite_enable)
- draw_sprites(bitmap, cliprect, 0);
+ draw_sprites(bitmap, cliprect, screen.priority());
return 0;
}
diff --git a/src/mame/video/jagblit.hxx b/src/mame/video/jagblit.hxx
index 61027802607..86c3bc9d8d7 100644
--- a/src/mame/video/jagblit.hxx
+++ b/src/mame/video/jagblit.hxx
@@ -35,43 +35,43 @@
#ifndef PIXEL_SHIFT_1
#define PIXEL_SHIFT_1(a) ((~a##_x >> 16) & 7)
-#define PIXEL_OFFSET_1(a) BYTE4_XOR_BE(((uint32_t)a##_y >> 16) * a##_width / 8 + (((uint32_t)a##_x >> 19) & ~7) * (1 + a##_pitch) + (((uint32_t)a##_x >> 19) & 7))
+#define PIXEL_OFFSET_1(a) (((uint32_t)a##_y >> 16) * a##_width / 8 + (((uint32_t)a##_x >> 19) & ~7) * (1 + a##_pitch) + (((uint32_t)a##_x >> 19) & 7))
#define ZDATA_OFFSET_1(a) 0 /* huh? */
#define READ_RDATA_1(r,a,p) ((p) ? (((((uint8_t *)&m_blitter_regs[r])[BYTE4_XOR_BE(((uint32_t)a##_x >> 19) & 7)]) >> PIXEL_SHIFT_1(a)) & 0x01) : (m_blitter_regs[r] & 0x01))
-#define READ_PIXEL_1(a) (((((uint8_t *)a##_base_mem)[PIXEL_OFFSET_1(a)]) >> PIXEL_SHIFT_1(a)) & 0x01)
+#define READ_PIXEL_1(a) ((m_gpu->space(AS_PROGRAM).read_byte(a##_base + PIXEL_OFFSET_1(a)) >> PIXEL_SHIFT_1(a)) & 0x01)
#define READ_ZDATA_1(a) 0 /* huh? */
#define PIXEL_SHIFT_2(a) ((~a##_x >> 15) & 6)
-#define PIXEL_OFFSET_2(a) BYTE4_XOR_BE(((uint32_t)a##_y >> 16) * a##_width / 4 + (((uint32_t)a##_x >> 18) & ~7) * (1 + a##_pitch) + (((uint32_t)a##_x >> 18) & 7))
+#define PIXEL_OFFSET_2(a) (((uint32_t)a##_y >> 16) * a##_width / 4 + (((uint32_t)a##_x >> 18) & ~7) * (1 + a##_pitch) + (((uint32_t)a##_x >> 18) & 7))
#define ZDATA_OFFSET_2(a) 0 /* huh? */
#define READ_RDATA_2(r,a,p) ((p) ? (((((uint8_t *)&m_blitter_regs[r])[BYTE4_XOR_BE(((uint32_t)a##_x >> 18) & 7)]) >> PIXEL_SHIFT_2(a)) & 0x03) : (m_blitter_regs[r] & 0x03))
-#define READ_PIXEL_2(a) (((((uint8_t *)a##_base_mem)[PIXEL_OFFSET_2(a)]) >> PIXEL_SHIFT_2(a)) & 0x03)
+#define READ_PIXEL_2(a) ((m_gpu->space(AS_PROGRAM).read_byte(a##_base + PIXEL_OFFSET_2(a)) >> PIXEL_SHIFT_2(a)) & 0x03)
#define READ_ZDATA_2(a) 0 /* huh? */
#define PIXEL_SHIFT_4(a) ((~a##_x >> 14) & 4)
-#define PIXEL_OFFSET_4(a) BYTE4_XOR_BE(((uint32_t)a##_y >> 16) * a##_width / 2 + (((uint32_t)a##_x >> 17) & ~7) * (1 + a##_pitch) + (((uint32_t)a##_x >> 17) & 7))
+#define PIXEL_OFFSET_4(a) (((uint32_t)a##_y >> 16) * a##_width / 2 + (((uint32_t)a##_x >> 17) & ~7) * (1 + a##_pitch) + (((uint32_t)a##_x >> 17) & 7))
#define ZDATA_OFFSET_4(a) 0 /* huh? */
#define READ_RDATA_4(r,a,p) ((p) ? (((((uint8_t *)&m_blitter_regs[r])[BYTE4_XOR_BE(((uint32_t)a##_x >> 17) & 7)]) >> PIXEL_SHIFT_4(a)) & 0x0f) : (m_blitter_regs[r] & 0x0f))
-#define READ_PIXEL_4(a) (((((uint8_t *)a##_base_mem)[PIXEL_OFFSET_4(a)]) >> PIXEL_SHIFT_4(a)) & 0x0f)
+#define READ_PIXEL_4(a) ((m_gpu->space(AS_PROGRAM).read_byte(a##_base + PIXEL_OFFSET_4(a)) >> PIXEL_SHIFT_4(a)) & 0x0f)
#define READ_ZDATA_4(a) 0 /* huh? */
-#define PIXEL_OFFSET_8(a) BYTE4_XOR_BE(((uint32_t)a##_y >> 16) * a##_width + (((uint32_t)a##_x >> 16) & ~7) * (1 + a##_pitch) + (((uint32_t)a##_x >> 16) & 7))
+#define PIXEL_OFFSET_8(a) (((uint32_t)a##_y >> 16) * a##_width + (((uint32_t)a##_x >> 16) & ~7) * (1 + a##_pitch) + (((uint32_t)a##_x >> 16) & 7))
#define ZDATA_OFFSET_8(a) (PIXEL_OFFSET_8(a) + a##_zoffs * 8)
#define READ_RDATA_8(r,a,p) ((p) ? (((uint8_t *)&m_blitter_regs[r])[BYTE4_XOR_BE(((uint32_t)a##_x >> 16) & 7)]) : (m_blitter_regs[r] & 0xff))
-#define READ_PIXEL_8(a) (((uint8_t *)a##_base_mem)[PIXEL_OFFSET_8(a)])
-#define READ_ZDATA_8(a) (((uint8_t *)a##_base_mem)[ZDATA_OFFSET_8(a)])
+#define READ_PIXEL_8(a) (m_gpu->space(AS_PROGRAM).read_byte(a##_base + PIXEL_OFFSET_8(a)))
+#define READ_ZDATA_8(a) (m_gpu->space(AS_PROGRAM).read_byte(a##_base + ZDATA_OFFSET_8(a)))
-#define PIXEL_OFFSET_16(a) BYTE_XOR_BE(((uint32_t)a##_y >> 16) * a##_width + (((uint32_t)a##_x >> 16) & ~3) * (1 + a##_pitch) + (((uint32_t)a##_x >> 16) & 3))
+#define PIXEL_OFFSET_16(a) (((uint32_t)a##_y >> 16) * a##_width + (((uint32_t)a##_x >> 16) & ~3) * (1 + a##_pitch) + (((uint32_t)a##_x >> 16) & 3))
#define ZDATA_OFFSET_16(a) (PIXEL_OFFSET_16(a) + a##_zoffs * 4)
#define READ_RDATA_16(r,a,p) ((p) ? (((uint16_t *)&m_blitter_regs[r])[BYTE_XOR_BE(((uint32_t)a##_x >> 16) & 3)]) : (m_blitter_regs[r] & 0xffff))
-#define READ_PIXEL_16(a) (((uint16_t *)a##_base_mem)[PIXEL_OFFSET_16(a)])
-#define READ_ZDATA_16(a) (((uint16_t *)a##_base_mem)[ZDATA_OFFSET_16(a)])
+#define READ_PIXEL_16(a) (m_gpu->space(AS_PROGRAM).read_word(a##_base + (PIXEL_OFFSET_16(a)<<1)))
+#define READ_ZDATA_16(a) (m_gpu->space(AS_PROGRAM).read_word(a##_base + (ZDATA_OFFSET_16(a)<<1)))
#define PIXEL_OFFSET_32(a) (((uint32_t)a##_y >> 16) * a##_width + (((uint32_t)a##_x >> 16) & ~1) * (1 + a##_pitch) + (((uint32_t)a##_x >> 16) & 1))
#define ZDATA_OFFSET_32(a) (PIXEL_OFFSET_32(a) + a##_zoffs * 2)
#define READ_RDATA_32(r,a,p) ((p) ? (m_blitter_regs[r + (((uint32_t)a##_x >> 16) & 1)]) : m_blitter_regs[r])
-#define READ_PIXEL_32(a) (((uint32_t *)a##_base_mem)[PIXEL_OFFSET_32(a)])
-#define READ_ZDATA_32(a) (((uint32_t *)a##_base_mem)[ZDATA_OFFSET_32(a)])
+#define READ_PIXEL_32(a) (m_gpu->space(AS_PROGRAM).read_dword(a##_base + (PIXEL_OFFSET_32(a)<<2)))
+#define READ_ZDATA_32(a) (m_gpu->space(AS_PROGRAM).read_dword(a##_base + (ZDATA_OFFSET_32(a)<<2)))
#define READ_RDATA(r,a,f,p) \
((((f) & 0x38) == (0 << 3)) ? (READ_RDATA_1(r,a,p)) : \
@@ -189,11 +189,7 @@ void jaguar_state::FUNCNAME(uint32_t command, uint32_t a1flags, uint32_t a2flags
uint8_t a1_phrase_mode = 0;
uint8_t a2_phrase_mode = 0;
- void *a1_base_mem = memory_base(a1_base);
- void *a2_base_mem = memory_base(a2_base);
-
- void *asrc_base_mem = (COMMAND & 0x00000800) ? a1_base_mem : a2_base_mem;
- void *adest_base_mem = (COMMAND & 0x00000800) ? a2_base_mem : a1_base_mem;
+ uint32_t asrc_base = (COMMAND & 0x00000800) ? a1_base : a2_base;
uint32_t asrcflags = (COMMAND & 0x00000800) ? A1FIXED : A2FIXED;
int32_t asrc_x = (COMMAND & 0x00000800) ? a1_x : a2_x;
int32_t asrc_y = (COMMAND & 0x00000800) ? a1_y : a2_y;
@@ -215,18 +211,6 @@ void jaguar_state::FUNCNAME(uint32_t command, uint32_t a1flags, uint32_t a2flags
int32_t adest_xadd, adest_xstep, adest_yadd, adest_ystep;
uint32_t adest_xmask, adest_ymask;
- /* don't blit if pointer bad */
- if (!a1_base_mem || !a2_base_mem)
- {
- if (LOG_BAD_BLITS)
- {
- logerror("%s:Blit!\n", machine().describe_context());
- logerror(" a1_base = %08X\n", a1_base);
- logerror(" a2_base = %08X\n", a2_base);
- }
- return;
- }
-
/* determine actual xadd/yadd for A1 */
a1_yadd <<= 16;
if (A1FIXED & 0x00100000)
diff --git a/src/mame/video/k052109.cpp b/src/mame/video/k052109.cpp
index a14cde4e2c0..b4cac11c2b2 100644
--- a/src/mame/video/k052109.cpp
+++ b/src/mame/video/k052109.cpp
@@ -86,12 +86,11 @@ address lines), and then reading it from the 051962.
1 = 64 (actually 40) columns
---xx--- layer B row scroll
--x----- layer B column scroll
- surpratk sets this register to 70 during the second boss. There is
- nothing obviously wrong so it's not clear what should happen.
+ suratk sets this register to 70 during the second boss to produce rotating star field, using X and Y scroll in the same time.
+ not emulated due to MAME's tilemaps restrictions, currently handled in hacky way.
glfgreat sets it to 30 when showing the leader board
mariorou sets it to 36 when ingame, while actually does per-row scroll for layer A and per-collumn scroll for layer B.
such usage not supported by current implementation, hacked in game driver instead.
- fuusenpn sets this to 20 but not happy with -6 added to column index, apparently current logic is not entirely correct.
1d00 : bits 0 & 1 might enable NMI and FIRQ, not sure
: bit 2 = IRQ enable
1d80 : ROM bank selector bits 0-3 = bank 0 bits 4-7 = bank 1
@@ -249,6 +248,9 @@ void k052109_device::device_start()
m_tilemap[1]->set_transparent_pen(0);
m_tilemap[2]->set_transparent_pen(0);
+ m_tilemap[1]->set_scrolldx(6, 6);
+ m_tilemap[2]->set_scrolldx(6, 6);
+
save_pointer(NAME(m_ram), 0x6000);
save_item(NAME(m_rmrd_line));
save_item(NAME(m_romsubbank));
@@ -519,19 +521,21 @@ popmessage("%x %x %x %x",
}
#endif
+// note: this chip can do both per-column and per-row scroll in the same time, currently not emulated.
+
if ((m_scrollctrl & 0x03) == 0x02)
{
uint8_t *scrollram = &m_ram[0x1a00];
- m_tilemap[1]->set_scroll_rows(256);
+ m_tilemap[1]->set_scroll_rows(32);
m_tilemap[1]->set_scroll_cols(1);
yscroll = m_ram[0x180c];
m_tilemap[1]->set_scrolly(0, yscroll);
- for (offs = 0; offs < 256; offs++)
+ yscroll /= 8;
+ for (offs = 0; offs < 32; offs++)
{
- xscroll = scrollram[2 * (offs & 0xfff8) + 0] + 256 * scrollram[2 * (offs & 0xfff8) + 1];
- xscroll -= 6;
- m_tilemap[1]->set_scrollx((offs + yscroll) & 0xff, xscroll);
+ xscroll = scrollram[16 * offs + 0] + 256 * scrollram[16 * offs + 1];
+ m_tilemap[1]->set_scrollx((offs + yscroll) & 31, xscroll);
}
}
else if ((m_scrollctrl & 0x03) == 0x03)
@@ -545,7 +549,6 @@ popmessage("%x %x %x %x",
for (offs = 0; offs < 256; offs++)
{
xscroll = scrollram[2 * offs + 0] + 256 * scrollram[2 * offs + 1];
- xscroll -= 6;
m_tilemap[1]->set_scrollx((offs + yscroll) & 0xff, xscroll);
}
}
@@ -554,14 +557,14 @@ popmessage("%x %x %x %x",
uint8_t *scrollram = &m_ram[0x1800];
m_tilemap[1]->set_scroll_rows(1);
- m_tilemap[1]->set_scroll_cols(512);
+ m_tilemap[1]->set_scroll_cols(64);
xscroll = m_ram[0x1a00] + 256 * m_ram[0x1a01];
- xscroll -= 6;
m_tilemap[1]->set_scrollx(0, xscroll);
- for (offs = 0; offs < 512; offs++)
+ xscroll /= 8;
+ for (offs = 0; offs < 64; offs++)
{
- yscroll = scrollram[offs / 8];
- m_tilemap[1]->set_scrolly((offs + xscroll) & 0x1ff, yscroll);
+ yscroll = scrollram[offs];
+ m_tilemap[1]->set_scrolly((offs + xscroll) & 63, yscroll);
}
}
else
@@ -571,7 +574,6 @@ popmessage("%x %x %x %x",
m_tilemap[1]->set_scroll_rows(1);
m_tilemap[1]->set_scroll_cols(1);
xscroll = scrollram[0] + 256 * scrollram[1];
- xscroll -= 6;
yscroll = m_ram[0x180c];
m_tilemap[1]->set_scrollx(0, xscroll);
m_tilemap[1]->set_scrolly(0, yscroll);
@@ -581,15 +583,18 @@ popmessage("%x %x %x %x",
{
uint8_t *scrollram = &m_ram[0x3a00];
- m_tilemap[2]->set_scroll_rows(256);
+ m_tilemap[2]->set_scroll_rows(32);
m_tilemap[2]->set_scroll_cols(1);
yscroll = m_ram[0x380c];
+ //
+ if (m_scrollctrl == 0x70) yscroll = m_ram[0x3823]; // hack for suratk 2nd boss rotating star field
+ //
m_tilemap[2]->set_scrolly(0, yscroll);
- for (offs = 0; offs < 256; offs++)
+ yscroll /= 8;
+ for (offs = 0; offs < 32; offs++)
{
- xscroll = scrollram[2 * (offs & 0xfff8) + 0] + 256 * scrollram[2 * (offs & 0xfff8) + 1];
- xscroll -= 6;
- m_tilemap[2]->set_scrollx((offs + yscroll) & 0xff, xscroll);
+ xscroll = scrollram[16 * offs + 0] + 256 * scrollram[16 * offs + 1];
+ m_tilemap[2]->set_scrollx((offs + yscroll) & 31, xscroll);
}
}
else if ((m_scrollctrl & 0x18) == 0x18)
@@ -603,7 +608,6 @@ popmessage("%x %x %x %x",
for (offs = 0; offs < 256; offs++)
{
xscroll = scrollram[2 * offs + 0] + 256 * scrollram[2 * offs + 1];
- xscroll -= 6;
m_tilemap[2]->set_scrollx((offs + yscroll) & 0xff, xscroll);
}
}
@@ -612,14 +616,14 @@ popmessage("%x %x %x %x",
uint8_t *scrollram = &m_ram[0x3800];
m_tilemap[2]->set_scroll_rows(1);
- m_tilemap[2]->set_scroll_cols(512);
+ m_tilemap[2]->set_scroll_cols(64);
xscroll = m_ram[0x3a00] + 256 * m_ram[0x3a01];
- xscroll -= 6;
m_tilemap[2]->set_scrollx(0, xscroll);
- for (offs = 0; offs < 512; offs++)
+ xscroll /= 8;
+ for (offs = 0; offs < 64; offs++)
{
- yscroll = scrollram[offs / 8];
- m_tilemap[2]->set_scrolly((offs + xscroll) & 0x1ff, yscroll);
+ yscroll = scrollram[offs];
+ m_tilemap[2]->set_scrolly((offs + xscroll) & 63, yscroll);
}
}
else
@@ -629,7 +633,6 @@ popmessage("%x %x %x %x",
m_tilemap[2]->set_scroll_rows(1);
m_tilemap[2]->set_scroll_cols(1);
xscroll = scrollram[0] + 256 * scrollram[1];
- xscroll -= 6;
yscroll = m_ram[0x380c];
m_tilemap[2]->set_scrollx(0, xscroll);
m_tilemap[2]->set_scrolly(0, yscroll);
diff --git a/src/mame/video/powervr2.cpp b/src/mame/video/powervr2.cpp
index a97299b6fcb..bd10a122f15 100644
--- a/src/mame/video/powervr2.cpp
+++ b/src/mame/video/powervr2.cpp
@@ -730,7 +730,7 @@ void powervr2_device::tex_get_info(texinfo *t)
// fprintf(stderr, "tex %d %d %d %d\n", t->pf, t->mode, pal_ram_ctrl, t->mipmapped);
if(!t->textured)
{
- t->r = NULL;
+ t->r = nullptr;
}
else
{
diff --git a/src/osd/modules/debugger/debuggdbstub.cpp b/src/osd/modules/debugger/debuggdbstub.cpp
index 713e79e1ed7..c993eaa5c66 100644
--- a/src/osd/modules/debugger/debuggdbstub.cpp
+++ b/src/osd/modules/debugger/debuggdbstub.cpp
@@ -327,7 +327,7 @@ public:
{
}
- virtual ~debug_gdbstub() { }
+ virtual ~debug_gdbstub() = default;
virtual int init(const osd_options &options) override;
virtual void exit() override;
@@ -346,9 +346,9 @@ public:
bool is_thread_id_ok(const char *buf);
void handle_character(char ch);
- void send_nack(void);
- void send_ack(void);
- void handle_packet(void);
+ void send_nack();
+ void send_ack();
+ void handle_packet();
enum cmd_reply
{
@@ -387,12 +387,12 @@ public:
readbuf_state m_readbuf_state;
- void generate_target_xml(void);
+ void generate_target_xml();
- int readchar(void);
+ int readchar();
void send_reply(const char *str);
- void send_stop_packet(void);
+ void send_stop_packet();
private:
running_machine *m_machine;
@@ -449,7 +449,7 @@ int debug_gdbstub::init(const osd_options &options)
}
//-------------------------------------------------------------------------
-void debug_gdbstub::exit(void)
+void debug_gdbstub::exit()
{
}
@@ -460,7 +460,7 @@ void debug_gdbstub::init_debugger(running_machine &machine)
}
//-------------------------------------------------------------------------
-int debug_gdbstub::readchar(void)
+int debug_gdbstub::readchar()
{
// NOTE: we don't use m_socket.getc() because it does not work with
// sockets (it assumes seeking is possible).
@@ -497,7 +497,7 @@ static std::string escape_packet(const std::string src)
}
//-------------------------------------------------------------------------
-void debug_gdbstub::generate_target_xml(void)
+void debug_gdbstub::generate_target_xml()
{
// Note: we do not attempt to replicate the regnum values from old
// GDB clients that did not support target.xml.
@@ -622,7 +622,7 @@ void debug_gdbstub::wait_for_debugger(device_t &device, bool firststop)
}
//-------------------------------------------------------------------------
-void debug_gdbstub::debugger_update(void)
+void debug_gdbstub::debugger_update()
{
while ( true )
{
@@ -634,13 +634,13 @@ void debug_gdbstub::debugger_update(void)
}
//-------------------------------------------------------------------------
-void debug_gdbstub::send_nack(void)
+void debug_gdbstub::send_nack()
{
m_socket.puts("-");
}
//-------------------------------------------------------------------------
-void debug_gdbstub::send_ack(void)
+void debug_gdbstub::send_ack()
{
m_socket.puts("+");
}
@@ -1090,7 +1090,7 @@ debug_gdbstub::cmd_reply debug_gdbstub::handle_Z(const char *buf)
//-------------------------------------------------------------------------
-void debug_gdbstub::send_stop_packet(void)
+void debug_gdbstub::send_stop_packet()
{
int signal = 5; // GDB_SIGNAL_TRAP
std::string reply = string_format("T%02x", signal);
@@ -1119,7 +1119,7 @@ void debug_gdbstub::send_stop_packet(void)
}
//-------------------------------------------------------------------------
-void debug_gdbstub::handle_packet(void)
+void debug_gdbstub::handle_packet()
{
// For any command not supported by the stub, an empty response
// (‘$#00’) should be returned. That way it is possible to extend
diff --git a/src/osd/modules/debugger/debugimgui.cpp b/src/osd/modules/debugger/debugimgui.cpp
index fde6882a69b..d34f256de8e 100644
--- a/src/osd/modules/debugger/debugimgui.cpp
+++ b/src/osd/modules/debugger/debugimgui.cpp
@@ -116,7 +116,7 @@ public:
{
}
- virtual ~debug_imgui() { }
+ virtual ~debug_imgui() = default;
virtual int init(const osd_options &options) override { return 0; }
virtual void exit() override {};
@@ -261,7 +261,7 @@ static inline void map_attr_to_fg_bg(unsigned char attr, rgb_t *fg, rgb_t *bg)
bool debug_imgui::get_view_source(void* data, int idx, const char** out_text)
{
- debug_view* vw = static_cast<debug_view*>(data);
+ auto* vw = static_cast<debug_view*>(data);
*out_text = vw->source(idx)->name();
return true;
}
@@ -295,7 +295,7 @@ void debug_imgui::handle_mouse_views()
view_main_disasm->view->set_cursor_position(newpos);
view_main_disasm->view->set_cursor_visible(true);
}
- for(std::vector<debug_area*>::iterator it = view_list.begin();it != view_list.end();++it)
+ for(auto it = view_list.begin();it != view_list.end();++it)
{
rect.min_x = (*it)->ofs_x;
rect.min_y = (*it)->ofs_y;
@@ -323,7 +323,7 @@ void debug_imgui::handle_keys()
debug_area* focus_view = nullptr;
// find view that has focus (should only be one at a time)
- for(std::vector<debug_area*>::iterator view_ptr = view_list.begin();view_ptr != view_list.end();++view_ptr)
+ for(auto view_ptr = view_list.begin();view_ptr != view_list.end();++view_ptr)
if((*view_ptr)->has_focus)
focus_view = *view_ptr;
@@ -425,7 +425,7 @@ void debug_imgui::handle_keys_views()
{
debug_area* focus_view = nullptr;
// find view that has focus (should only be one at a time)
- for(std::vector<debug_area*>::iterator view_ptr = view_list.begin();view_ptr != view_list.end();++view_ptr)
+ for(auto view_ptr = view_list.begin();view_ptr != view_list.end();++view_ptr)
if((*view_ptr)->has_focus)
focus_view = *view_ptr;
@@ -522,7 +522,7 @@ void debug_imgui::handle_console(running_machine* machine)
// don't bother adding to history if the current command matches the previous one
if(view_main_console->console_prev != view_main_console->console_input)
{
- view_main_console->console_history.push_back(std::string(view_main_console->console_input));
+ view_main_console->console_history.emplace_back(std::string(view_main_console->console_input));
view_main_console->console_prev = view_main_console->console_input;
}
history_pos = view_main_console->console_history.size();
@@ -764,7 +764,7 @@ void debug_imgui::draw_disasm(debug_area* view_ptr, bool* opened)
{
if(ImGui::BeginMenu("Options"))
{
- debug_view_disasm* disasm = downcast<debug_view_disasm*>(view_ptr->view);
+ auto* disasm = downcast<debug_view_disasm*>(view_ptr->view);
int rightcol = disasm->right_column();
if(ImGui::MenuItem("Raw opcodes", nullptr,(rightcol == DASM_RIGHTCOL_RAW) ? true : false))
@@ -845,7 +845,7 @@ void debug_imgui::draw_memory(debug_area* view_ptr, bool* opened)
{
if(ImGui::BeginMenu("Options"))
{
- debug_view_memory* mem = downcast<debug_view_memory*>(view_ptr->view);
+ auto* mem = downcast<debug_view_memory*>(view_ptr->view);
bool physical = mem->physical();
bool rev = mem->reverse();
int format = mem->get_data_format();
@@ -971,7 +971,7 @@ void debug_imgui::create_image()
if(m_dialog_image->image_type() == IO_FLOPPY)
{
- floppy_image_device *fd = static_cast<floppy_image_device *>(m_dialog_image);
+ auto *fd = static_cast<floppy_image_device *>(m_dialog_image);
res = fd->create(m_path,nullptr,nullptr);
if(res == image_init_result::PASS)
fd->setup_write(m_typelist.at(m_format_sel).format);
@@ -1036,7 +1036,7 @@ void debug_imgui::refresh_filelist()
void debug_imgui::refresh_typelist()
{
- floppy_image_device *fd = static_cast<floppy_image_device *>(m_dialog_image);
+ auto *fd = static_cast<floppy_image_device *>(m_dialog_image);
m_typelist.clear();
if(m_dialog_image->formatlist().empty())
@@ -1115,7 +1115,7 @@ void debug_imgui::draw_mount_dialog(const char* label)
ImGui::Separator();
{
ImGui::ListBoxHeader("##filelist",m_filelist.size(),15);
- for(std::vector<file_entry>::iterator f = m_filelist.begin();f != m_filelist.end();++f)
+ for(auto f = m_filelist.begin();f != m_filelist.end();++f)
{
std::string txt_name;
bool sel = false;
@@ -1177,7 +1177,7 @@ void debug_imgui::draw_create_dialog(const char* label)
{
std::string combo_str;
combo_str.clear();
- for(std::vector<image_type_entry>::iterator f = m_typelist.begin();f != m_typelist.end();++f)
+ for(auto f = m_typelist.begin();f != m_typelist.end();++f)
{
// TODO: perhaps do this at the time the format list is generated, rather than every frame
combo_str.append((*f).longname);
@@ -1282,12 +1282,12 @@ void debug_imgui::draw_console()
{
if(ImGui::MenuItem("Show all"))
{
- for(std::vector<debug_area*>::iterator view_ptr = view_list.begin();view_ptr != view_list.end();++view_ptr)
+ for(auto view_ptr = view_list.begin();view_ptr != view_list.end();++view_ptr)
ImGui::SetWindowCollapsed((*view_ptr)->title.c_str(),false);
}
ImGui::Separator();
// list all extra windows, so we can un-collapse the windows if necessary
- for(std::vector<debug_area*>::iterator view_ptr = view_list.begin();view_ptr != view_list.end();++view_ptr)
+ for(auto view_ptr = view_list.begin();view_ptr != view_list.end();++view_ptr)
{
bool collapsed = false;
if((*view_ptr)->is_collapsed)
diff --git a/src/osd/modules/debugger/debugwin.cpp b/src/osd/modules/debugger/debugwin.cpp
index 975e7ba6bc6..2b1fb212ef0 100644
--- a/src/osd/modules/debugger/debugwin.cpp
+++ b/src/osd/modules/debugger/debugwin.cpp
@@ -44,7 +44,7 @@ public:
{
}
- virtual ~debugger_windows() { }
+ virtual ~debugger_windows() = default;
virtual int init(const osd_options &options) override { return 0; }
virtual void exit() override;
diff --git a/src/osd/modules/debugger/none.cpp b/src/osd/modules/debugger/none.cpp
index 3ce8d6572bc..1ef02c98fa7 100644
--- a/src/osd/modules/debugger/none.cpp
+++ b/src/osd/modules/debugger/none.cpp
@@ -22,7 +22,7 @@ public:
{
}
- virtual ~debug_none() { }
+ virtual ~debug_none() = default;
virtual int init(const osd_options &options) override { return 0; }
virtual void exit() override { }
diff --git a/src/osd/modules/debugger/win/consolewininfo.cpp b/src/osd/modules/debugger/win/consolewininfo.cpp
index 9610cf68e78..6ca18743945 100644
--- a/src/osd/modules/debugger/win/consolewininfo.cpp
+++ b/src/osd/modules/debugger/win/consolewininfo.cpp
@@ -95,6 +95,7 @@ consolewin_info::~consolewin_info()
{
}
+
void consolewin_info::set_cpu(device_t &device)
{
// exit if this cpu is already selected
@@ -443,7 +444,7 @@ bool consolewin_info::handle_command(WPARAM wparam, LPARAM lparam)
}
if (img->device().type() == CASSETTE)
{
- cassette_image_device *const cassette = downcast<cassette_image_device *>(&img->device());
+ auto *const cassette = downcast<cassette_image_device *>(&img->device());
bool s;
switch ((LOWORD(wparam) - ID_DEVICE_OPTIONS) % DEVOPTION_MAX)
{
diff --git a/src/osd/modules/debugger/win/debugviewinfo.cpp b/src/osd/modules/debugger/win/debugviewinfo.cpp
index 782489924f2..ff46d13c7fe 100644
--- a/src/osd/modules/debugger/win/debugviewinfo.cpp
+++ b/src/osd/modules/debugger/win/debugviewinfo.cpp
@@ -758,7 +758,7 @@ LRESULT debugview_info::view_proc(UINT message, WPARAM wparam, LPARAM lparam)
void debugview_info::static_update(debug_view &view, void *osdprivate)
{
- debugview_info *const info = (debugview_info *)osdprivate;
+ auto *const info = (debugview_info *)osdprivate;
assert(info->m_view == &view);
info->update();
}
@@ -774,7 +774,7 @@ LRESULT CALLBACK debugview_info::static_view_proc(HWND wnd, UINT message, WPARAM
return 0;
}
- debugview_info *const info = (debugview_info *)(uintptr_t)GetWindowLongPtr(wnd, GWLP_USERDATA);
+ auto *const info = (debugview_info *)(uintptr_t)GetWindowLongPtr(wnd, GWLP_USERDATA);
if (info == nullptr)
return DefWindowProc(wnd, message, wparam, lparam);
diff --git a/src/osd/modules/debugger/win/debugwininfo.cpp b/src/osd/modules/debugger/win/debugwininfo.cpp
index ac60b980439..1645582038c 100644
--- a/src/osd/modules/debugger/win/debugwininfo.cpp
+++ b/src/osd/modules/debugger/win/debugwininfo.cpp
@@ -437,7 +437,7 @@ LRESULT debugwin_info::window_proc(UINT message, WPARAM wparam, LPARAM lparam)
// get min/max info: set the minimum window size
case WM_GETMINMAXINFO:
{
- MINMAXINFO *minmax = (MINMAXINFO *)lparam;
+ auto *minmax = (MINMAXINFO *)lparam;
minmax->ptMinTrackSize.x = m_minwidth;
minmax->ptMinTrackSize.y = m_minheight;
minmax->ptMaxSize.x = minmax->ptMaxTrackSize.x = m_maxwidth;
@@ -575,14 +575,14 @@ LRESULT CALLBACK debugwin_info::static_window_proc(HWND wnd, UINT message, WPARA
{
// set the info pointer
CREATESTRUCT const *const createinfo = (CREATESTRUCT *)lparam;
- debugwin_info *const info = (debugwin_info *)createinfo->lpCreateParams;
+ auto *const info = (debugwin_info *)createinfo->lpCreateParams;
SetWindowLongPtr(wnd, GWLP_USERDATA, (LONG_PTR)createinfo->lpCreateParams);
if (info->m_handler)
SetWindowLongPtr(wnd, GWLP_WNDPROC, (LONG_PTR)info->m_handler);
return 0;
}
- debugwin_info *const info = (debugwin_info *)(uintptr_t)GetWindowLongPtr(wnd, GWLP_USERDATA);
+ auto *const info = (debugwin_info *)(uintptr_t)GetWindowLongPtr(wnd, GWLP_USERDATA);
if (info == nullptr)
return DefWindowProc(wnd, message, wparam, lparam);
diff --git a/src/osd/modules/debugger/win/disasmbasewininfo.cpp b/src/osd/modules/debugger/win/disasmbasewininfo.cpp
index cfd9683ae9c..0d22b7b8d39 100644
--- a/src/osd/modules/debugger/win/disasmbasewininfo.cpp
+++ b/src/osd/modules/debugger/win/disasmbasewininfo.cpp
@@ -105,7 +105,7 @@ void disasmbasewin_info::update_menu()
{
editwin_info::update_menu();
- disasmview_info *const dasmview = downcast<disasmview_info *>(m_views[0].get());
+ auto *const dasmview = downcast<disasmview_info *>(m_views[0].get());
HMENU const menu = GetMenu(window());
bool const disasm_cursor_visible = dasmview->cursor_visible();
@@ -151,7 +151,7 @@ void disasmbasewin_info::update_menu()
bool disasmbasewin_info::handle_command(WPARAM wparam, LPARAM lparam)
{
- disasmview_info *const dasmview = downcast<disasmview_info *>(m_views[0].get());
+ auto *const dasmview = downcast<disasmview_info *>(m_views[0].get());
switch (HIWORD(wparam))
{
diff --git a/src/osd/modules/debugger/win/disasmviewinfo.h b/src/osd/modules/debugger/win/disasmviewinfo.h
index a032475af7f..0685d762346 100644
--- a/src/osd/modules/debugger/win/disasmviewinfo.h
+++ b/src/osd/modules/debugger/win/disasmviewinfo.h
@@ -30,4 +30,4 @@ public:
void set_right_column(disasm_right_column contents);
};
-#endif
+#endif // MAME_DEBUGGER_WIN_DISASMVIEWINFO_H
diff --git a/src/osd/modules/debugger/win/editwininfo.cpp b/src/osd/modules/debugger/win/editwininfo.cpp
index 1b9f88c6d68..61717439c25 100644
--- a/src/osd/modules/debugger/win/editwininfo.cpp
+++ b/src/osd/modules/debugger/win/editwininfo.cpp
@@ -237,7 +237,7 @@ LRESULT editwin_info::edit_proc(UINT message, WPARAM wparam, LPARAM lparam)
LRESULT CALLBACK editwin_info::static_edit_proc(HWND wnd, UINT message, WPARAM wparam, LPARAM lparam)
{
- editwin_info *const info = (editwin_info *)uintptr_t(GetWindowLongPtr(wnd, GWLP_USERDATA));
+ auto *const info = (editwin_info *)uintptr_t(GetWindowLongPtr(wnd, GWLP_USERDATA));
assert(info->m_editwnd == wnd);
return info->edit_proc(message, wparam, lparam);
}
diff --git a/src/osd/modules/debugger/win/logviewinfo.h b/src/osd/modules/debugger/win/logviewinfo.h
index e2fa9d31643..d7ca0df8c9e 100644
--- a/src/osd/modules/debugger/win/logviewinfo.h
+++ b/src/osd/modules/debugger/win/logviewinfo.h
@@ -24,4 +24,4 @@ public:
void clear();
};
-#endif
+#endif // MAME_DEBUGGER_WIN_LOGVIEWINFO_H
diff --git a/src/osd/modules/debugger/win/logwininfo.cpp b/src/osd/modules/debugger/win/logwininfo.cpp
index 6d2cd59b554..6ed0f63a1c3 100644
--- a/src/osd/modules/debugger/win/logwininfo.cpp
+++ b/src/osd/modules/debugger/win/logwininfo.cpp
@@ -53,6 +53,7 @@ logwin_info::~logwin_info()
{
}
+
bool logwin_info::handle_command(WPARAM wparam, LPARAM lparam)
{
if ((HIWORD(wparam) == 0) && (LOWORD(wparam) == ID_CLEAR_LOG))
diff --git a/src/osd/modules/debugger/win/memoryviewinfo.h b/src/osd/modules/debugger/win/memoryviewinfo.h
index a897698f0bd..d2c5d719abe 100644
--- a/src/osd/modules/debugger/win/memoryviewinfo.h
+++ b/src/osd/modules/debugger/win/memoryviewinfo.h
@@ -33,4 +33,4 @@ public:
void set_physical(bool physical);
};
-#endif
+#endif // MAME_DEBUGGER_WIN_MEMORYVIEWINFO_H
diff --git a/src/osd/modules/debugger/win/memorywininfo.cpp b/src/osd/modules/debugger/win/memorywininfo.cpp
index 6f461295ec2..93151cc018d 100644
--- a/src/osd/modules/debugger/win/memorywininfo.cpp
+++ b/src/osd/modules/debugger/win/memorywininfo.cpp
@@ -178,7 +178,7 @@ void memorywin_info::update_menu()
{
editwin_info::update_menu();
- memoryview_info *const memview = downcast<memoryview_info *>(m_views[0].get());
+ auto *const memview = downcast<memoryview_info *>(m_views[0].get());
HMENU const menu = GetMenu(window());
CheckMenuItem(menu, ID_1_BYTE_CHUNKS, MF_BYCOMMAND | (memview->data_format() == 1 ? MF_CHECKED : MF_UNCHECKED));
CheckMenuItem(menu, ID_2_BYTE_CHUNKS, MF_BYCOMMAND | (memview->data_format() == 2 ? MF_CHECKED : MF_UNCHECKED));
@@ -196,7 +196,7 @@ void memorywin_info::update_menu()
bool memorywin_info::handle_command(WPARAM wparam, LPARAM lparam)
{
- memoryview_info *const memview = downcast<memoryview_info *>(m_views[0].get());
+ auto *const memview = downcast<memoryview_info *>(m_views[0].get());
switch (HIWORD(wparam))
{
// combo box selection changed
diff --git a/src/osd/modules/diagnostics/diagnostics_win32.cpp b/src/osd/modules/diagnostics/diagnostics_win32.cpp
index 677cd93bff7..e76f3ca6d70 100644
--- a/src/osd/modules/diagnostics/diagnostics_win32.cpp
+++ b/src/osd/modules/diagnostics/diagnostics_win32.cpp
@@ -610,7 +610,7 @@ uintptr_t symbol_manager::get_text_section_base()
ImageNtHeader_fn image_nt_header = m_dbghelp_dll->bind<ImageNtHeader_fn>("ImageNtHeader");
// start with the image base
- PVOID base = reinterpret_cast<PVOID>(GetModuleHandleUni());
+ auto base = reinterpret_cast<PVOID>(GetModuleHandleUni());
assert(base != nullptr);
// make sure we have the functions we need
@@ -663,7 +663,7 @@ sampling_profiler::~sampling_profiler()
}
-//-------------------------------------------------
+////-------------------------------------------------
// start - begin gathering profiling information
//-------------------------------------------------
@@ -712,8 +712,8 @@ void sampling_profiler::stop()
int CLIB_DECL sampling_profiler::compare_address(const void *item1, const void *item2)
{
- const uintptr_t *entry1 = reinterpret_cast<const uintptr_t *>(item1);
- const uintptr_t *entry2 = reinterpret_cast<const uintptr_t *>(item2);
+ const auto *entry1 = reinterpret_cast<const uintptr_t *>(item1);
+ const auto *entry2 = reinterpret_cast<const uintptr_t *>(item2);
int mincount = std::min(entry1[0], entry2[0]);
// sort in order of: bucket, caller, caller's caller, etc.
@@ -733,8 +733,8 @@ int CLIB_DECL sampling_profiler::compare_address(const void *item1, const void *
int CLIB_DECL sampling_profiler::compare_frequency(const void *item1, const void *item2)
{
- const uintptr_t *entry1 = reinterpret_cast<const uintptr_t *>(item1);
- const uintptr_t *entry2 = reinterpret_cast<const uintptr_t *>(item2);
+ const auto *entry1 = reinterpret_cast<const uintptr_t *>(item1);
+ const auto *entry2 = reinterpret_cast<const uintptr_t *>(item2);
// sort by frequency, then by address
if (entry1[0] != entry2[0])
diff --git a/src/osd/modules/diagnostics/none.cpp b/src/osd/modules/diagnostics/none.cpp
index 8a731fe9009..e4028124514 100644
--- a/src/osd/modules/diagnostics/none.cpp
+++ b/src/osd/modules/diagnostics/none.cpp
@@ -11,9 +11,7 @@
class diagnostics_none : public diagnostics_module
{
public:
- diagnostics_none()
- {
- }
+ diagnostics_none() = default;
int init_crash_diagnostics() override
{
diff --git a/src/osd/modules/font/font_none.cpp b/src/osd/modules/font/font_none.cpp
index dc6116625a8..a36514899a2 100644
--- a/src/osd/modules/font/font_none.cpp
+++ b/src/osd/modules/font/font_none.cpp
@@ -11,7 +11,7 @@
class osd_font_none : public osd_font
{
public:
- virtual ~osd_font_none() { }
+ virtual ~osd_font_none() = default;
virtual bool open(std::string const &font_path, std::string const &name, int &height) override { return false; }
virtual void close() override { }
diff --git a/src/osd/modules/input/input_dinput.cpp b/src/osd/modules/input/input_dinput.cpp
index 0b5eb348dc0..e694cd8c63c 100644
--- a/src/osd/modules/input/input_dinput.cpp
+++ b/src/osd/modules/input/input_dinput.cpp
@@ -403,7 +403,7 @@ public:
// populate the buttons
for (butnum = 0; butnum < devinfo->dinput.caps.dwButtons; butnum++)
{
- uintptr_t offset = reinterpret_cast<uintptr_t>(&static_cast<DIMOUSESTATE *>(nullptr)->rgbButtons[butnum]);
+ auto offset = reinterpret_cast<uintptr_t>(&static_cast<DIMOUSESTATE *>(nullptr)->rgbButtons[butnum]);
// add to the mouse device
std::string name = device_item_name(devinfo, offset, default_button_name(butnum), nullptr);
@@ -535,7 +535,7 @@ int dinput_joystick_device::configure()
// populate the buttons
for (uint32_t butnum = 0; butnum < dinput.caps.dwButtons; butnum++)
{
- uintptr_t offset = reinterpret_cast<uintptr_t>(&static_cast<DIJOYSTATE2 *>(nullptr)->rgbButtons[butnum]);
+ auto offset = reinterpret_cast<uintptr_t>(&static_cast<DIJOYSTATE2 *>(nullptr)->rgbButtons[butnum]);
std::string name = dinput_module::device_item_name(this, offset, default_button_name(butnum), nullptr);
input_item_id itemid;
@@ -602,7 +602,7 @@ public:
static int32_t dinput_joystick_pov_get_state(void *device_internal, void *item_internal)
{
- dinput_joystick_device *devinfo = static_cast<dinput_joystick_device *>(device_internal);
+ auto *devinfo = static_cast<dinput_joystick_device *>(device_internal);
int povnum = reinterpret_cast<uintptr_t>(item_internal) / 4;
int povdir = reinterpret_cast<uintptr_t>(item_internal) % 4;
int32_t result = 0;
diff --git a/src/osd/modules/input/input_rawinput.cpp b/src/osd/modules/input/input_rawinput.cpp
index 9243ec4a0f4..7876b297867 100644
--- a/src/osd/modules/input/input_rawinput.cpp
+++ b/src/osd/modules/input/input_rawinput.cpp
@@ -619,7 +619,7 @@ protected:
{
std::lock_guard<std::mutex> scope_lock(m_module_lock);
- RAWINPUT *input = reinterpret_cast<RAWINPUT*>(data);
+ auto *input = reinterpret_cast<RAWINPUT*>(data);
// find the device in the list and update
auto target_device = std::find_if(devicelist()->begin(), devicelist()->end(), [input](auto &device)
@@ -661,7 +661,7 @@ protected:
return;
// allocate and link in a new device
- rawinput_keyboard_device *devinfo = create_rawinput_device<rawinput_keyboard_device>(machine, device);
+ auto *devinfo = create_rawinput_device<rawinput_keyboard_device>(machine, device);
if (devinfo == nullptr)
return;
@@ -706,7 +706,7 @@ protected:
return;
// allocate and link in a new device
- rawinput_mouse_device *devinfo = create_rawinput_device<rawinput_mouse_device>(machine, device);
+ auto *devinfo = create_rawinput_device<rawinput_mouse_device>(machine, device);
if (devinfo == nullptr)
return;
@@ -755,7 +755,7 @@ protected:
return;
// allocate and link in a new device
- rawinput_lightgun_device *devinfo = create_rawinput_device<rawinput_lightgun_device>(machine, device);
+ auto *devinfo = create_rawinput_device<rawinput_lightgun_device>(machine, device);
if (devinfo == nullptr)
return;
diff --git a/src/osd/modules/input/input_win32.cpp b/src/osd/modules/input/input_win32.cpp
index c07a1c681d8..a28fb08ebed 100644
--- a/src/osd/modules/input/input_win32.cpp
+++ b/src/osd/modules/input/input_win32.cpp
@@ -72,7 +72,7 @@ public:
virtual void input_init(running_machine &machine) override
{
// Add a single win32 keyboard device that we'll monitor using Win32
- win32_keyboard_device *devinfo = devicelist()->create_device<win32_keyboard_device>(machine, "Win32 Keyboard 1", "Win32 Keyboard 1", *this);
+ auto *devinfo = devicelist()->create_device<win32_keyboard_device>(machine, "Win32 Keyboard 1", "Win32 Keyboard 1", *this);
keyboard_trans_table &table = keyboard_trans_table::instance();
diff --git a/src/osd/modules/lib/osdlib_win32.cpp b/src/osd/modules/lib/osdlib_win32.cpp
index 018161c6c0c..b1051dad7a6 100644
--- a/src/osd/modules/lib/osdlib_win32.cpp
+++ b/src/osd/modules/lib/osdlib_win32.cpp
@@ -192,7 +192,7 @@ static std::string convert_ansi(LPCVOID data)
// osd_get_clipboard_text
//============================================================
-std::string osd_get_clipboard_text(void)
+std::string osd_get_clipboard_text()
{
std::string result;
@@ -210,7 +210,7 @@ std::string osd_get_clipboard_text(void)
// osd_getpid
//============================================================
-int osd_getpid(void)
+int osd_getpid()
{
return GetCurrentProcessId();
}
@@ -262,7 +262,7 @@ protected:
if (module != nullptr)
{
- generic_fptr_t function = reinterpret_cast<generic_fptr_t>(GetProcAddress(module, symbol));
+ auto function = reinterpret_cast<generic_fptr_t>(GetProcAddress(module, symbol));
if (function != nullptr)
{
diff --git a/src/osd/modules/lib/osdobj_common.cpp b/src/osd/modules/lib/osdobj_common.cpp
index e807740da5e..25d4b979e87 100644
--- a/src/osd/modules/lib/osdobj_common.cpp
+++ b/src/osd/modules/lib/osdobj_common.cpp
@@ -445,7 +445,7 @@ void osd_common_t::init(running_machine &machine)
m_machine = &machine;
- osd_options &options = downcast<osd_options &>(machine.options());
+ auto &options = downcast<osd_options &>(machine.options());
// extract the verbose printing option
if (options.verbose())
set_verbose(true);
@@ -624,7 +624,7 @@ bool osd_common_t::execute_command(const char *command)
else if (strcmp(command, OSDCOMMAND_LIST_MIDI_DEVICES) == 0)
{
osd_module *om = select_module_options(options(), OSD_MIDI_PROVIDER);
- midi_module *pm = select_module_options<midi_module *>(options(), OSD_MIDI_PROVIDER);
+ auto *pm = select_module_options<midi_module *>(options(), OSD_MIDI_PROVIDER);
if (om->probe())
{
diff --git a/src/osd/modules/midi/none.cpp b/src/osd/modules/midi/none.cpp
index adacee7d634..72fc07fb4e2 100644
--- a/src/osd/modules/midi/none.cpp
+++ b/src/osd/modules/midi/none.cpp
@@ -21,20 +21,20 @@ public:
: osd_module(OSD_MIDI_PROVIDER, "pm"), midi_module()
{
}
- virtual ~none_module() { }
+ virtual ~none_module() = default;
virtual int init(const osd_options &options) override;
virtual void exit() override;
virtual osd_midi_device *create_midi_device() override;
- virtual void list_midi_devices(void) override;
+ virtual void list_midi_devices() override;
};
class osd_midi_device_none : public osd_midi_device
{
public:
- virtual ~osd_midi_device_none() { }
+ virtual ~osd_midi_device_none() = default;
virtual bool open_input(const char *devname) override;
virtual bool open_output(const char *devname) override;
virtual void close() override;
@@ -58,7 +58,7 @@ void none_module::exit()
{
}
-void none_module::list_midi_devices(void)
+void none_module::list_midi_devices()
{
osd_printf_warning("\nMIDI is not supported in this build\n");
}
diff --git a/src/osd/modules/midi/portmidi.cpp b/src/osd/modules/midi/portmidi.cpp
index 418295a7a5c..e5c35c91162 100644
--- a/src/osd/modules/midi/portmidi.cpp
+++ b/src/osd/modules/midi/portmidi.cpp
@@ -24,13 +24,13 @@ public:
: osd_module(OSD_MIDI_PROVIDER, "pm"), midi_module()
{
}
- virtual ~pm_module() { }
+ virtual ~pm_module() = default;
virtual int init(const osd_options &options)override;
virtual void exit()override;
virtual osd_midi_device *create_midi_device() override;
- virtual void list_midi_devices(void) override;
+ virtual void list_midi_devices() override;
};
@@ -43,7 +43,7 @@ class osd_midi_device_pm : public osd_midi_device
{
public:
osd_midi_device_pm(): pmStream(nullptr), xmit_cnt(0), last_status(0), rx_sysex(false) { }
- virtual ~osd_midi_device_pm() { }
+ virtual ~osd_midi_device_pm() = default;
virtual bool open_input(const char *devname) override;
virtual bool open_output(const char *devname) override;
virtual void close() override;
@@ -77,7 +77,7 @@ void pm_module::exit()
Pm_Terminate();
}
-void pm_module::list_midi_devices(void)
+void pm_module::list_midi_devices()
{
int num_devs = Pm_CountDevices();
const PmDeviceInfo *pmInfo;
diff --git a/src/osd/modules/monitor/monitor_win32.cpp b/src/osd/modules/monitor/monitor_win32.cpp
index 42e51595915..5780a9590c2 100644
--- a/src/osd/modules/monitor/monitor_win32.cpp
+++ b/src/osd/modules/monitor/monitor_win32.cpp
@@ -106,7 +106,7 @@ protected:
private:
static BOOL CALLBACK monitor_enum_callback(HMONITOR handle, HDC dc, LPRECT rect, LPARAM data)
{
- win32_monitor_module* self = reinterpret_cast<win32_monitor_module*>(data);
+ auto* self = reinterpret_cast<win32_monitor_module*>(data);
MONITORINFOEX info;
BOOL result;
diff --git a/src/osd/modules/netdev/none.cpp b/src/osd/modules/netdev/none.cpp
index a5b520f26a5..97bc3d435da 100644
--- a/src/osd/modules/netdev/none.cpp
+++ b/src/osd/modules/netdev/none.cpp
@@ -16,7 +16,7 @@ public:
{
}
- virtual ~netdev_none() { }
+ virtual ~netdev_none() = default;
virtual int init(const osd_options &options) override { return 0; }
};
diff --git a/src/osd/modules/netdev/pcap.cpp b/src/osd/modules/netdev/pcap.cpp
index 68e9512b14a..4e4ed81b1ae 100644
--- a/src/osd/modules/netdev/pcap.cpp
+++ b/src/osd/modules/netdev/pcap.cpp
@@ -46,7 +46,7 @@ public:
{
}
- virtual ~pcap_module() { }
+ virtual ~pcap_module() = default;
virtual int init(const osd_options &options) override;
virtual void exit() override;
@@ -250,7 +250,7 @@ netdev_pcap::~netdev_pcap()
static CREATE_NETDEV(create_pcap)
{
- class netdev_pcap *dev = global_alloc(netdev_pcap(ifname, ifdev, rate));
+ auto *dev = global_alloc(netdev_pcap(ifname, ifdev, rate));
return dynamic_cast<osd_netdev *>(dev);
}
diff --git a/src/osd/modules/netdev/taptun.cpp b/src/osd/modules/netdev/taptun.cpp
index df3ab7bf38d..b6012224081 100644
--- a/src/osd/modules/netdev/taptun.cpp
+++ b/src/osd/modules/netdev/taptun.cpp
@@ -40,7 +40,7 @@ public:
taptun_module() : osd_module(OSD_NETDEV_PROVIDER, "taptun"), netdev_module()
{
}
- virtual ~taptun_module() { }
+ virtual ~taptun_module() = default;
virtual int init(const osd_options &options);
virtual void exit();
@@ -337,7 +337,7 @@ int netdev_tap::recv_dev(uint8_t **buf)
static CREATE_NETDEV(create_tap)
{
- class netdev_tap *dev = global_alloc(netdev_tap(ifname, ifdev, rate));
+ auto *dev = global_alloc(netdev_tap(ifname, ifdev, rate));
return dynamic_cast<osd_netdev *>(dev);
}
diff --git a/src/osd/modules/opengl/gl_shader_tool.cpp b/src/osd/modules/opengl/gl_shader_tool.cpp
index dedb59fbb7c..5696d14f834 100644
--- a/src/osd/modules/opengl/gl_shader_tool.cpp
+++ b/src/osd/modules/opengl/gl_shader_tool.cpp
@@ -395,7 +395,7 @@ int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shade
int const buffer_len = (int)ftell(file);
fseek(file, 0, SEEK_SET);
- GLcharARB *const buffer = (GLcharARB *)malloc(buffer_len + 1);
+ auto *const buffer = (GLcharARB *)malloc(buffer_len + 1);
memset(buffer, 0, buffer_len + 1);
/* Load Shader Sources */
diff --git a/src/osd/modules/output/console.cpp b/src/osd/modules/output/console.cpp
index c9983736fb0..58896737829 100644
--- a/src/osd/modules/output/console.cpp
+++ b/src/osd/modules/output/console.cpp
@@ -18,7 +18,7 @@ public:
: osd_module(OSD_OUTPUT_PROVIDER, "console"), output_module()
{
}
- virtual ~output_console() { }
+ virtual ~output_console() = default;
virtual int init(const osd_options &options) override { return 0; }
virtual void exit() override { }
diff --git a/src/osd/modules/output/network.cpp b/src/osd/modules/output/network.cpp
index 4fc4b382da6..eafbf7b95e2 100644
--- a/src/osd/modules/output/network.cpp
+++ b/src/osd/modules/output/network.cpp
@@ -26,7 +26,7 @@
class output_client
{
public:
- virtual ~output_client() {}
+ virtual ~output_client() = default;
virtual void deliver(std::string &msg) = 0;
};
@@ -197,9 +197,7 @@ public:
{
}
- virtual ~output_network()
- {
- }
+ virtual ~output_network() = default;
virtual int init(const osd_options &options) override
{
diff --git a/src/osd/modules/output/none.cpp b/src/osd/modules/output/none.cpp
index a4a613ef29f..a5f142c9766 100644
--- a/src/osd/modules/output/none.cpp
+++ b/src/osd/modules/output/none.cpp
@@ -18,7 +18,7 @@ public:
: osd_module(OSD_OUTPUT_PROVIDER, "none"), output_module()
{
}
- virtual ~output_none() { }
+ virtual ~output_none() = default;
virtual int init(const osd_options &options) override { return 0; }
virtual void exit() override { }
diff --git a/src/osd/modules/output/win32_output.cpp b/src/osd/modules/output/win32_output.cpp
index 199219ac5ef..8d7c0f7ba67 100644
--- a/src/osd/modules/output/win32_output.cpp
+++ b/src/osd/modules/output/win32_output.cpp
@@ -69,7 +69,7 @@ public:
: osd_module(OSD_OUTPUT_PROVIDER, "windows"), output_module(), m_output_hwnd(nullptr), m_clientlist(nullptr)
{
}
- virtual ~output_win32() { }
+ virtual ~output_win32() = default;
virtual int init(const osd_options &options) override;
virtual void exit() override;
@@ -326,7 +326,7 @@ LRESULT output_win32::send_id_string(HWND hwnd, LPARAM id)
// allocate memory for the message
datalen = sizeof(copydata_id_string) + strlen(name) + 1;
std::vector<uint8_t> buffer(datalen);
- copydata_id_string *temp = (copydata_id_string *)&buffer[0];
+ auto *temp = (copydata_id_string *)&buffer[0];
temp->id = id;
strcpy(temp->string, name);
diff --git a/src/osd/modules/render/bgfx/chain.cpp b/src/osd/modules/render/bgfx/chain.cpp
index 58b7956e6bf..924bc6ab67f 100644
--- a/src/osd/modules/render/bgfx/chain.cpp
+++ b/src/osd/modules/render/bgfx/chain.cpp
@@ -119,7 +119,7 @@ void bgfx_chain::process(chain_manager::screen_prim &prim, int view, int screen,
static int64_t last = m_current_time;
const int64_t frameTime = m_current_time - last;
last = m_current_time;
- const double freq = double(bx::getHPFrequency());
+ const auto freq = double(bx::getHPFrequency());
const double toMs = 1000.0 / freq;
const double frameTimeInSeconds = (double)frameTime / 1000000.0;
@@ -145,7 +145,7 @@ uint32_t bgfx_chain::applicable_passes()
void bgfx_chain::insert_effect(uint32_t index, bgfx_effect *effect, std::string name, std::string source, chain_manager &chains)
{
- clear_state *clear = new clear_state(BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL, 0, 1.0f, 0);
+ auto *clear = new clear_state(BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL, 0, 1.0f, 0);
std::vector<bgfx_suppressor*> suppressors;
std::vector<bgfx_input_pair*> inputs;
diff --git a/src/osd/modules/render/bgfx/chainentry.cpp b/src/osd/modules/render/bgfx/chainentry.cpp
index 29150696590..ca3354ee6b3 100644
--- a/src/osd/modules/render/bgfx/chainentry.cpp
+++ b/src/osd/modules/render/bgfx/chainentry.cpp
@@ -73,10 +73,10 @@ void bgfx_chain_entry::submit(int view, chain_manager::screen_prim &prim, textur
uint32_t tint = 0xffffffff;
if (m_apply_tint)
{
- const uint8_t a = (uint8_t)std::round(prim.m_prim->color.a * 255);
- const uint8_t r = (uint8_t)std::round(prim.m_prim->color.r * 255);
- const uint8_t g = (uint8_t)std::round(prim.m_prim->color.g * 255);
- const uint8_t b = (uint8_t)std::round(prim.m_prim->color.b * 255);
+ const auto a = (uint8_t)std::round(prim.m_prim->color.a * 255);
+ const auto r = (uint8_t)std::round(prim.m_prim->color.r * 255);
+ const auto g = (uint8_t)std::round(prim.m_prim->color.g * 255);
+ const auto b = (uint8_t)std::round(prim.m_prim->color.b * 255);
tint = (a << 24) | (b << 16) | (g << 8) | r;
}
@@ -291,7 +291,7 @@ void bgfx_chain_entry::put_screen_buffer(uint16_t screen_width, uint16_t screen_
return;
}
- ScreenVertex* vertex = reinterpret_cast<ScreenVertex*>(buffer->data);
+ auto* vertex = reinterpret_cast<ScreenVertex*>(buffer->data);
float x[4] = { 0, 1, 0, 1 };
float y[4] = { 0, 0, 1, 1 };
diff --git a/src/osd/modules/render/bgfx/chainentryreader.cpp b/src/osd/modules/render/bgfx/chainentryreader.cpp
index f14d9d76f64..e04e0a11751 100644
--- a/src/osd/modules/render/bgfx/chainentryreader.cpp
+++ b/src/osd/modules/render/bgfx/chainentryreader.cpp
@@ -178,7 +178,7 @@ bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, std::s
}
std::string sampler = input["sampler"].GetString();
- bgfx_input_pair* input_pair = new bgfx_input_pair(i, sampler, texture_name, texture_names, selection, chains, screen_index);
+ auto* input_pair = new bgfx_input_pair(i, sampler, texture_name, texture_names, selection, chains, screen_index);
inputs.push_back(input_pair);
}
}
diff --git a/src/osd/modules/render/bgfx/clearreader.cpp b/src/osd/modules/render/bgfx/clearreader.cpp
index 3cbd714463c..948d96a7393 100644
--- a/src/osd/modules/render/bgfx/clearreader.cpp
+++ b/src/osd/modules/render/bgfx/clearreader.cpp
@@ -30,7 +30,7 @@ clear_state* clear_reader::read_from_value(const Value& value, std::string prefi
for (int i = 0; i < colors.Size(); i++)
{
if (!READER_CHECK(colors[i].IsNumber(), (prefix + "clearcolor[" + std::to_string(i) + "] must be a numeric value\n").c_str())) return nullptr;
- int32_t val = int32_t(float(colors[i].GetDouble()) * 255.0f);
+ auto val = int32_t(float(colors[i].GetDouble()) * 255.0f);
if (val > 255) val = 255;
if (val < 0) val = 0;
clear_color |= val << (24 - (i * 3));
diff --git a/src/osd/modules/render/bgfx/effect.cpp b/src/osd/modules/render/bgfx/effect.cpp
index 9359faeb494..6707b5cfc43 100644
--- a/src/osd/modules/render/bgfx/effect.cpp
+++ b/src/osd/modules/render/bgfx/effect.cpp
@@ -51,6 +51,6 @@ void bgfx_effect::submit(int view, uint64_t blend)
bgfx_uniform* bgfx_effect::uniform(std::string name)
{
- std::map<std::string, bgfx_uniform*>::iterator iter = m_uniforms.find(name);
+ auto iter = m_uniforms.find(name);
return iter != m_uniforms.end() ? iter->second : nullptr;
}
diff --git a/src/osd/modules/render/bgfx/inputpair.h b/src/osd/modules/render/bgfx/inputpair.h
index fb3fc58e1f7..8060ce8c4dd 100644
--- a/src/osd/modules/render/bgfx/inputpair.h
+++ b/src/osd/modules/render/bgfx/inputpair.h
@@ -27,7 +27,7 @@ class bgfx_input_pair : public slider_changed_notifier
{
public:
bgfx_input_pair(int index, std::string sampler, std::string texture, std::vector<std::string> available_textures, std::string selection, chain_manager& chains, uint32_t screen_index);
- ~bgfx_input_pair();
+ virtual ~bgfx_input_pair();
void bind(bgfx_effect *effect, const int32_t screen) const;
int32_t texture_changed(int32_t index, std::string *str, int32_t newval);
diff --git a/src/osd/modules/render/bgfx/paramreader.cpp b/src/osd/modules/render/bgfx/paramreader.cpp
index f24bb6a475b..1b14b2aa56a 100644
--- a/src/osd/modules/render/bgfx/paramreader.cpp
+++ b/src/osd/modules/render/bgfx/paramreader.cpp
@@ -43,7 +43,7 @@ bgfx_parameter* parameter_reader::read_from_value(const Value& value, std::strin
}
else if (type == bgfx_parameter::parameter_type::PARAM_TIME)
{
- float limit = float(value["limit"].GetDouble());
+ auto limit = float(value["limit"].GetDouble());
return new bgfx_time_parameter(name, type, limit);
}
else
diff --git a/src/osd/modules/render/bgfx/slider.cpp b/src/osd/modules/render/bgfx/slider.cpp
index d5f5e6e5c52..4d51edfc0c4 100644
--- a/src/osd/modules/render/bgfx/slider.cpp
+++ b/src/osd/modules/render/bgfx/slider.cpp
@@ -103,7 +103,7 @@ int32_t bgfx_slider::update(std::string *str, int32_t newval)
default:
{
- float *val_ptr = reinterpret_cast<float *>(&m_value);
+ auto *val_ptr = reinterpret_cast<float *>(&m_value);
if (newval != SLIDER_NOCHANGE)
{
*val_ptr = float(newval) * m_step;
diff --git a/src/osd/modules/render/bgfx/sliderreader.cpp b/src/osd/modules/render/bgfx/sliderreader.cpp
index 6d55c9b4db5..e74f10adcc9 100644
--- a/src/osd/modules/render/bgfx/sliderreader.cpp
+++ b/src/osd/modules/render/bgfx/sliderreader.cpp
@@ -60,7 +60,7 @@ std::vector<bgfx_slider*> slider_reader::read_from_value(const Value& value, std
{
return sliders;
}
- strings.push_back(std::string(string_array[i].GetString()));
+ strings.emplace_back(std::string(string_array[i].GetString()));
}
}
diff --git a/src/osd/modules/render/bgfx/targetmanager.cpp b/src/osd/modules/render/bgfx/targetmanager.cpp
index 35973ee584f..adc2ca5acee 100644
--- a/src/osd/modules/render/bgfx/targetmanager.cpp
+++ b/src/osd/modules/render/bgfx/targetmanager.cpp
@@ -47,7 +47,7 @@ target_manager::~target_manager()
bgfx_target* target_manager::create_target(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint32_t style, bool double_buffer, bool filter, uint16_t scale, uint32_t screen)
{
- bgfx_target* target = new bgfx_target(name, format, width, height, style, double_buffer, filter, scale, screen);
+ auto* target = new bgfx_target(name, format, width, height, style, double_buffer, filter, scale, screen);
std::string full_name = name + std::to_string(screen);
m_targets[full_name] = target;
@@ -70,7 +70,7 @@ void target_manager::destroy_target(std::string name, uint32_t screen)
bgfx_target* target_manager::create_backbuffer(void *handle, uint16_t width, uint16_t height)
{
- bgfx_target* target = new bgfx_target(handle, width, height);
+ auto* target = new bgfx_target(handle, width, height);
m_targets["backbuffer"] = target;
return target;
}
@@ -95,7 +95,7 @@ bool target_manager::update_target_sizes(uint32_t screen, uint16_t width, uint16
// Ensure that there's an entry to fill
while (sizes.size() <= screen)
{
- sizes.push_back(osd_dim(0, 0));
+ sizes.emplace_back(osd_dim(0, 0));
}
if (width != sizes[screen].width() || height != sizes[screen].height())
@@ -144,7 +144,7 @@ void target_manager::update_screen_count(uint32_t count)
// Ensure that there's an entry to fill
while (count > m_native_dims.size())
{
- m_native_dims.push_back(osd_dim(0, 0));
+ m_native_dims.emplace_back(osd_dim(0, 0));
}
if (count != m_screen_count)
diff --git a/src/osd/modules/render/bgfx/texturemanager.cpp b/src/osd/modules/render/bgfx/texturemanager.cpp
index e2614133205..861c6e5b617 100644
--- a/src/osd/modules/render/bgfx/texturemanager.cpp
+++ b/src/osd/modules/render/bgfx/texturemanager.cpp
@@ -37,7 +37,7 @@ texture_manager::~texture_manager()
void texture_manager::add_provider(std::string name, bgfx_texture_handle_provider* provider)
{
- std::map<std::string, bgfx_texture_handle_provider*>::iterator iter = m_textures.find(name);
+ auto iter = m_textures.find(name);
if (iter != m_textures.end())
{
iter->second = provider;
@@ -50,7 +50,7 @@ void texture_manager::add_provider(std::string name, bgfx_texture_handle_provide
bgfx_texture* texture_manager::create_texture(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t height, void* data, uint32_t flags)
{
- bgfx_texture* texture = new bgfx_texture(name, format, width, height, flags, data);
+ auto* texture = new bgfx_texture(name, format, width, height, flags, data);
m_textures[name] = texture;
return texture;
}
@@ -67,13 +67,13 @@ bgfx_texture* texture_manager::create_png_texture(std::string path, std::string
return nullptr;
}
- uint8_t *data = new uint8_t[bitmap.width() * bitmap.height() * 4];
- uint32_t *data32 = reinterpret_cast<uint32_t *>(data);
+ auto *data = new uint8_t[bitmap.width() * bitmap.height() * 4];
+ auto *data32 = reinterpret_cast<uint32_t *>(data);
const uint32_t width = bitmap.width();
const uint32_t height = bitmap.height();
const uint32_t rowpixels = bitmap.rowpixels();
- uint32_t* base = reinterpret_cast<uint32_t *>(bitmap.raw_pixptr(0));
+ auto* base = reinterpret_cast<uint32_t *>(bitmap.raw_pixptr(0));
for (int y = 0; y < height; y++)
{
copy_util::copyline_argb32(data32 + y * width, base + y * rowpixels, width, nullptr);
@@ -96,7 +96,7 @@ bgfx::TextureHandle texture_manager::create_or_update_mame_texture(uint32_t form
bgfx::TextureHandle handle = BGFX_INVALID_HANDLE;
if (old_key != ~0ULL)
{
- std::map<uint64_t, sequenced_handle>::iterator iter = m_mame_textures.find(old_key);
+ auto iter = m_mame_textures.find(old_key);
if (iter != m_mame_textures.end())
{
handle = iter->second.handle;
@@ -129,7 +129,7 @@ bgfx::TextureHandle texture_manager::create_or_update_mame_texture(uint32_t form
}
else
{
- std::map<uint64_t, sequenced_handle>::iterator iter = m_mame_textures.find(key);
+ auto iter = m_mame_textures.find(key);
if (iter != m_mame_textures.end())
{
handle = iter->second.handle;
@@ -168,7 +168,7 @@ bgfx::TextureHandle texture_manager::create_or_update_mame_texture(uint32_t form
bgfx::TextureHandle texture_manager::handle(std::string name)
{
bgfx::TextureHandle handle = BGFX_INVALID_HANDLE;
- std::map<std::string, bgfx_texture_handle_provider*>::iterator iter = m_textures.find(name);
+ auto iter = m_textures.find(name);
if (iter != m_textures.end())
{
handle = (iter->second)->texture();
@@ -180,7 +180,7 @@ bgfx::TextureHandle texture_manager::handle(std::string name)
bgfx_texture_handle_provider* texture_manager::provider(std::string name)
{
- std::map<std::string, bgfx_texture_handle_provider*>::iterator iter = m_textures.find(name);
+ auto iter = m_textures.find(name);
if (iter != m_textures.end())
{
return iter->second;
diff --git a/src/osd/modules/render/bgfx/uniformreader.cpp b/src/osd/modules/render/bgfx/uniformreader.cpp
index c97ca484e48..f2bf1114ec6 100644
--- a/src/osd/modules/render/bgfx/uniformreader.cpp
+++ b/src/osd/modules/render/bgfx/uniformreader.cpp
@@ -32,7 +32,7 @@ bgfx_uniform* uniform_reader::read_from_value(const Value& value, std::string pr
const size_t array_size = value_array.Size() * sizeof(float);
const size_t alloc_size = (type_size > array_size) ? type_size : array_size;
- float* data = reinterpret_cast<float*>(new char[alloc_size]);
+ auto* data = reinterpret_cast<float*>(new char[alloc_size]);
unsigned int index = 0;
for (; index < type_size / 4 && index < value_array.Size(); index++)
@@ -45,7 +45,7 @@ bgfx_uniform* uniform_reader::read_from_value(const Value& value, std::string pr
data[index] = 0.0f;
}
- bgfx_uniform* uniform = new bgfx_uniform(name, type);
+ auto* uniform = new bgfx_uniform(name, type);
uniform->set((void*)data, type_size);
delete [] data;
diff --git a/src/osd/modules/render/bgfxutil.cpp b/src/osd/modules/render/bgfxutil.cpp
index 1ce3c244ba4..de3e3fe30d0 100644
--- a/src/osd/modules/render/bgfxutil.cpp
+++ b/src/osd/modules/render/bgfxutil.cpp
@@ -39,9 +39,9 @@ const bgfx::Memory* bgfx_util::mame_texture_data_to_bgfx_texture_data(bgfx::Text
const bgfx::Memory* bgfx_util::mame_texture_data_to_argb32(uint32_t src_format, int width, int height, int rowpixels, const rgb_t *palette, void *base)
{
const bgfx::Memory* mem = bgfx::alloc(width * height * 4);
- uint32_t* dst = reinterpret_cast<uint32_t*>(mem->data);
- uint16_t* src16 = reinterpret_cast<uint16_t*>(base);
- uint32_t* src32 = reinterpret_cast<uint32_t*>(base);
+ auto* dst = reinterpret_cast<uint32_t*>(mem->data);
+ auto* src16 = reinterpret_cast<uint16_t*>(base);
+ auto* src32 = reinterpret_cast<uint32_t*>(base);
for (int y = 0; y < height; y++)
{
diff --git a/src/osd/modules/render/binpacker.cpp b/src/osd/modules/render/binpacker.cpp
index aa80f600e2a..c213b99e1e8 100644
--- a/src/osd/modules/render/binpacker.cpp
+++ b/src/osd/modules/render/binpacker.cpp
@@ -19,7 +19,7 @@ bool rectangle_packer::pack(const std::vector<packable_rectangle>& rects, std::v
// Add rects to member array, and check to make sure none is too big
for (size_t rect = 0; rect < rects.size(); rect++)
{
- m_rects.push_back(rectangle(0, 0, rects[rect].width(), rects[rect].height(), rects[rect].hash(), rects[rect].format(), rects[rect].rowpixels(), rects[rect].palette(), rects[rect].base()));
+ m_rects.emplace_back(rectangle(0, 0, rects[rect].width(), rects[rect].height(), rects[rect].hash(), rects[rect].format(), rects[rect].rowpixels(), rects[rect].palette(), rects[rect].base()));
}
// Sort from greatest to least area
@@ -29,7 +29,7 @@ bool rectangle_packer::pack(const std::vector<packable_rectangle>& rects, std::v
while (m_num_packed < (int)m_rects.size())
{
int i = m_packs.size();
- m_packs.push_back(rectangle(m_pack_size));
+ m_packs.emplace_back(rectangle(m_pack_size));
m_roots.push_back(i);
if (!fill(i))
{
@@ -179,7 +179,7 @@ void rectangle_packer::add_pack_to_array(int pack, std::vector<packed_rectangle>
{
if (m_packs[pack].hash != 0)
{
- array.push_back(packed_rectangle(m_packs[pack].hash, m_packs[pack].format,
+ array.emplace_back(packed_rectangle(m_packs[pack].hash, m_packs[pack].format,
m_packs[pack].w, m_packs[pack].h, m_packs[pack].x, m_packs[pack].y,
m_packs[pack].rowpixels, m_packs[pack].palette, m_packs[pack].base));
diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp
index b0ce9983f54..9233aabc002 100644
--- a/src/osd/modules/render/d3d/d3dhlsl.cpp
+++ b/src/osd/modules/render/d3d/d3dhlsl.cpp
@@ -114,7 +114,7 @@ public:
for (int y = 0; y < m_height; y++)
{
- DWORD *src = (DWORD *)((BYTE *)rect.pBits + y * rect.Pitch);
+ auto *src = (DWORD *)((BYTE *)rect.pBits + y * rect.Pitch);
uint32_t *dst = &m_frame.pix32(y);
for (int x = 0; x < m_width; x++)
@@ -342,7 +342,7 @@ void shaders::render_snapshot(IDirect3DSurface9 *surface)
for (int y = 0; y < height; y++)
{
- DWORD *src = (DWORD *)((BYTE *)rect.pBits + y * rect.Pitch);
+ auto *src = (DWORD *)((BYTE *)rect.pBits + y * rect.Pitch);
uint32_t *dst = &snapshot.pix32(y);
for (int x = 0; x < width; x++)
@@ -492,7 +492,7 @@ bool shaders::init(d3d_base *d3dintf, running_machine *machine, renderer_d3d9 *r
enumerate_screens();
- windows_options &winoptions = downcast<windows_options &>(machine->options());
+ auto &winoptions = downcast<windows_options &>(machine->options());
post_fx_enable = winoptions.d3d_hlsl_enable();
oversampling_enable = winoptions.d3d_hlsl_oversampling();
@@ -2013,7 +2013,7 @@ int32_t slider::update(std::string *str, int32_t newval)
{
case SLIDER_INT_ENUM:
{
- int32_t *val_ptr = reinterpret_cast<int32_t *>(m_value);
+ auto *val_ptr = reinterpret_cast<int32_t *>(m_value);
if (newval != SLIDER_NOCHANGE)
{
*val_ptr = newval;
@@ -2041,7 +2041,7 @@ int32_t slider::update(std::string *str, int32_t newval)
default:
{
- float *val_ptr = reinterpret_cast<float *>(m_value);
+ auto *val_ptr = reinterpret_cast<float *>(m_value);
if (newval != SLIDER_NOCHANGE)
{
*val_ptr = (float)newval * m_desc->scale;
@@ -2354,7 +2354,7 @@ void shaders::init_slider_list()
for (int j = 0; j < count; j++)
{
- slider* slider_arg = new slider(desc, get_slider_option(desc->id, j), &options->params_dirty);
+ auto* slider_arg = new slider(desc, get_slider_option(desc->id, j), &options->params_dirty);
internal_sliders.push_back(slider_arg);
std::string name = desc->name;
switch (desc->slider_type)
diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp
index 54b113ac146..e9ca64ef392 100644
--- a/src/osd/modules/render/drawbgfx.cpp
+++ b/src/osd/modules/render/drawbgfx.cpp
@@ -454,7 +454,7 @@ bgfx::VertexLayout ScreenVertex::ms_decl;
void renderer_bgfx::put_packed_quad(render_primitive *prim, uint32_t hash, ScreenVertex* vertices)
{
rectangle_packer::packed_rectangle& rect = m_hash_to_entry[hash];
- float size = float(CACHE_SIZE);
+ auto size = float(CACHE_SIZE);
float u0 = (float(rect.x()) + 0.5f) / size;
float v0 = (float(rect.y()) + 0.5f) / size;
float u1 = u0 + (float(rect.width()) - 1.0f) / size;
@@ -517,7 +517,7 @@ void renderer_bgfx::vertex(ScreenVertex* vertex, float x, float y, float z, uint
void renderer_bgfx::render_post_screen_quad(int view, render_primitive* prim, bgfx::TransientVertexBuffer* buffer, int32_t screen)
{
- ScreenVertex* vertices = reinterpret_cast<ScreenVertex*>(buffer->data);
+ auto* vertices = reinterpret_cast<ScreenVertex*>(buffer->data);
float x[4] = { prim->bounds.x0, prim->bounds.x1, prim->bounds.x0, prim->bounds.x1 };
float y[4] = { prim->bounds.y0, prim->bounds.y0, prim->bounds.y1, prim->bounds.y1 };
@@ -553,7 +553,7 @@ void renderer_bgfx::render_avi_quad()
bgfx::TransientVertexBuffer buffer;
bgfx::allocTransientVertexBuffer(&buffer, 6, ScreenVertex::ms_decl);
- ScreenVertex* vertices = reinterpret_cast<ScreenVertex*>(buffer.data);
+ auto* vertices = reinterpret_cast<ScreenVertex*>(buffer.data);
float x[4] = { 0.0f, float(m_width[0]), 0.0f, float(m_width[0]) };
float y[4] = { 0.0f, 0.0f, float(m_height[0]), float(m_height[0]) };
@@ -576,7 +576,7 @@ void renderer_bgfx::render_avi_quad()
void renderer_bgfx::render_textured_quad(render_primitive* prim, bgfx::TransientVertexBuffer* buffer)
{
- ScreenVertex* vertices = reinterpret_cast<ScreenVertex*>(buffer->data);
+ auto* vertices = reinterpret_cast<ScreenVertex*>(buffer->data);
uint32_t rgba = u32Color(prim->color.r * 255, prim->color.g * 255, prim->color.b * 255, prim->color.a * 255);
float x[4] = { prim->bounds.x0, prim->bounds.x1, prim->bounds.x0, prim->bounds.x1 };
diff --git a/src/osd/modules/render/drawd3d.cpp b/src/osd/modules/render/drawd3d.cpp
index ee6eca3eec9..56c905636a4 100644
--- a/src/osd/modules/render/drawd3d.cpp
+++ b/src/osd/modules/render/drawd3d.cpp
@@ -489,9 +489,9 @@ texture_info *d3d_texture_manager::find_texinfo(const render_texinfo *texinfo, u
// find a match
for (auto it = m_texture_list.begin(); it != m_texture_list.end(); it++)
{
- uint32_t test_screen = (uint32_t)((*it)->get_texinfo().unique_id >> 57);
+ auto test_screen = (uint32_t)((*it)->get_texinfo().unique_id >> 57);
uint32_t test_page = (uint32_t)((*it)->get_texinfo().unique_id >> 56) & 1;
- uint32_t prim_screen = (uint32_t)(texinfo->unique_id >> 57);
+ auto prim_screen = (uint32_t)(texinfo->unique_id >> 57);
uint32_t prim_page = (uint32_t)(texinfo->unique_id >> 56) & 1;
if (test_screen != prim_screen || test_page != prim_page)
continue;
@@ -778,7 +778,7 @@ void renderer_d3d9::update_gamma_ramp()
if (win->fullscreen())
{
// only set the gamma if it's not 1.0
- windows_options &options = downcast<windows_options &>(win->machine().options());
+ auto &options = downcast<windows_options &>(win->machine().options());
float brightness = options.full_screen_brightness();
float contrast = options.full_screen_contrast();
float gamma = options.full_screen_gamma();
@@ -1484,8 +1484,8 @@ void renderer_d3d9::batch_vectors(int vector_count)
((rotation_0 || rotation_90) && orientation_swap_xy) ||
((rotation_180 || rotation_90) && !orientation_swap_xy);
- float screen_width = float(this->get_width());
- float screen_height = float(this->get_height());
+ auto screen_width = float(this->get_width());
+ auto screen_height = float(this->get_height());
float half_screen_width = screen_width * 0.5f;
float half_screen_height = screen_height * 0.5f;
float screen_swap_x_factor = 1.0f / screen_width * screen_height;
@@ -1614,10 +1614,10 @@ void renderer_d3d9::batch_vector(const render_primitive &prim)
}
// determine the color of the line
- int32_t r = (int32_t)(prim.color.r * 255.0f);
- int32_t g = (int32_t)(prim.color.g * 255.0f);
- int32_t b = (int32_t)(prim.color.b * 255.0f);
- int32_t a = (int32_t)(prim.color.a * 255.0f);
+ auto r = (int32_t)(prim.color.r * 255.0f);
+ auto g = (int32_t)(prim.color.g * 255.0f);
+ auto b = (int32_t)(prim.color.b * 255.0f);
+ auto a = (int32_t)(prim.color.a * 255.0f);
DWORD color = D3DCOLOR_ARGB(a, r, g, b);
// set the color, Z parameters to standard values
@@ -1684,10 +1684,10 @@ void renderer_d3d9::draw_line(const render_primitive &prim)
vertex[3].v0 = stop.c.y;
// determine the color of the line
- int32_t r = (int32_t)(prim.color.r * 255.0f);
- int32_t g = (int32_t)(prim.color.g * 255.0f);
- int32_t b = (int32_t)(prim.color.b * 255.0f);
- int32_t a = (int32_t)(prim.color.a * 255.0f);
+ auto r = (int32_t)(prim.color.r * 255.0f);
+ auto g = (int32_t)(prim.color.g * 255.0f);
+ auto b = (int32_t)(prim.color.b * 255.0f);
+ auto a = (int32_t)(prim.color.a * 255.0f);
DWORD color = D3DCOLOR_ARGB(a, r, g, b);
// set the color, Z parameters to standard values
@@ -1753,10 +1753,10 @@ void renderer_d3d9::draw_quad(const render_primitive &prim)
}
// determine the color, allowing for over modulation
- int32_t r = (int32_t)(prim.color.r * 255.0f);
- int32_t g = (int32_t)(prim.color.g * 255.0f);
- int32_t b = (int32_t)(prim.color.b * 255.0f);
- int32_t a = (int32_t)(prim.color.a * 255.0f);
+ auto r = (int32_t)(prim.color.r * 255.0f);
+ auto g = (int32_t)(prim.color.g * 255.0f);
+ auto b = (int32_t)(prim.color.b * 255.0f);
+ auto a = (int32_t)(prim.color.a * 255.0f);
DWORD color = D3DCOLOR_ARGB(a, r, g, b);
// adjust half pixel X/Y offset, set the color, Z parameters to standard values
@@ -2706,8 +2706,8 @@ bool d3d_render_target::init(renderer_d3d9 *d3d, int source_width, int source_he
float scale_factor = 0.75f;
int scale_count = vector_screen ? MAX_BLOOM_COUNT : HALF_BLOOM_COUNT;
- float bloom_width = (float)source_width;
- float bloom_height = (float)source_height;
+ auto bloom_width = (float)source_width;
+ auto bloom_height = (float)source_height;
float bloom_size = bloom_width < bloom_height ? bloom_width : bloom_height;
for (int bloom_index = 0; bloom_index < scale_count && bloom_size >= 2.0f; bloom_size *= scale_factor)
{
diff --git a/src/osd/modules/render/drawogl.cpp b/src/osd/modules/render/drawogl.cpp
index 6ee43cd57b7..ae030224e74 100644
--- a/src/osd/modules/render/drawogl.cpp
+++ b/src/osd/modules/render/drawogl.cpp
@@ -1649,7 +1649,7 @@ void renderer_ogl::texture_compute_size_type(const render_texinfo *texsource, og
// texture_create
//============================================================
-static int gl_checkFramebufferStatus(void)
+static int gl_checkFramebufferStatus()
{
GLenum status;
status=(GLenum)pfn_glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT);
diff --git a/src/osd/modules/sound/direct_sound.cpp b/src/osd/modules/sound/direct_sound.cpp
index 4d6c8c26c50..c7943362e61 100644
--- a/src/osd/modules/sound/direct_sound.cpp
+++ b/src/osd/modules/sound/direct_sound.cpp
@@ -60,7 +60,7 @@ public:
m_buffer_overflows(0)
{
}
- virtual ~sound_direct_sound() { }
+ virtual ~sound_direct_sound() = default;
virtual int init(osd_options const &options) override;
virtual void exit() override;
@@ -541,7 +541,7 @@ error:
// destroy_buffers
//============================================================
-void sound_direct_sound::destroy_buffers(void)
+void sound_direct_sound::destroy_buffers()
{
// stop any playback
if (m_stream_buffer)
diff --git a/src/osd/modules/sound/none.cpp b/src/osd/modules/sound/none.cpp
index 685cdc884c2..c13a1951e27 100644
--- a/src/osd/modules/sound/none.cpp
+++ b/src/osd/modules/sound/none.cpp
@@ -18,7 +18,7 @@ public:
: osd_module(OSD_SOUND_PROVIDER, "none"), sound_module()
{
}
- virtual ~sound_none() { }
+ virtual ~sound_none() = default;
virtual int init(const osd_options &options) override { return 0; }
virtual void exit() override { }
diff --git a/src/osd/modules/sound/pa_sound.cpp b/src/osd/modules/sound/pa_sound.cpp
index 41645318672..0f67d86d828 100644
--- a/src/osd/modules/sound/pa_sound.cpp
+++ b/src/osd/modules/sound/pa_sound.cpp
@@ -38,7 +38,7 @@ public:
: osd_module(OSD_SOUND_PROVIDER, "portaudio"), sound_module()
{
}
- virtual ~sound_pa() { }
+ virtual ~sound_pa() = default;
virtual int init(osd_options const &options) override;
virtual void exit() override;
diff --git a/src/osd/modules/sound/xaudio2_sound.cpp b/src/osd/modules/sound/xaudio2_sound.cpp
index 1d9e1036f9a..da78dfb3aa7 100644
--- a/src/osd/modules/sound/xaudio2_sound.cpp
+++ b/src/osd/modules/sound/xaudio2_sound.cpp
@@ -226,7 +226,7 @@ public:
{
}
- virtual ~sound_xaudio2() { }
+ virtual ~sound_xaudio2() = default;
bool probe() override;
int init(osd_options const &options) override;
diff --git a/src/osd/osdcore.cpp b/src/osd/osdcore.cpp
index 0b0a0185837..fd696706e6b 100644
--- a/src/osd/osdcore.cpp
+++ b/src/osd/osdcore.cpp
@@ -137,7 +137,7 @@ void osd_vprintf_debug(util::format_argument_pack<std::ostream> const &args)
// osd_ticks
//============================================================
-osd_ticks_t osd_ticks(void)
+osd_ticks_t osd_ticks()
{
return std::chrono::high_resolution_clock::now().time_since_epoch().count();
}
@@ -147,7 +147,7 @@ osd_ticks_t osd_ticks(void)
// osd_ticks_per_second
//============================================================
-osd_ticks_t osd_ticks_per_second(void)
+osd_ticks_t osd_ticks_per_second()
{
return std::chrono::high_resolution_clock::period::den / std::chrono::high_resolution_clock::period::num;
}
diff --git a/src/osd/osdnet.cpp b/src/osd/osdnet.cpp
index 3e1cb3596e1..070b4e96a2d 100644
--- a/src/osd/osdnet.cpp
+++ b/src/osd/osdnet.cpp
@@ -116,7 +116,7 @@ int netdev_count()
return netdev_list.size();
}
-void osd_list_network_adapters(void)
+void osd_list_network_adapters()
{
#ifdef USE_NETWORK
int num_devs = netdev_list.size();
diff --git a/src/osd/osdsync.cpp b/src/osd/osdsync.cpp
index 6e368eeb366..85950b33093 100644
--- a/src/osd/osdsync.cpp
+++ b/src/osd/osdsync.cpp
@@ -85,7 +85,7 @@ static void spin_while_not(const volatile _AtomType * volatile atom, const _Main
// osd_num_processors
//============================================================
-int osd_get_num_processors(void)
+int osd_get_num_processors()
{
#if defined(SDLMAME_EMSCRIPTEN)
// multithreading is not supported at this time
@@ -211,7 +211,7 @@ int osd_num_processors = 0;
// FUNCTION PROTOTYPES
//============================================================
-static int effective_num_processors(void);
+static int effective_num_processors();
static void * worker_thread_entry(void *param);
static void worker_thread_process(osd_work_queue *queue, work_thread_info *thread);
static bool queue_has_list_items(osd_work_queue *queue);
@@ -445,7 +445,7 @@ void osd_work_queue_free(osd_work_queue *queue)
// free all items in the free list
while (queue->free.load() != nullptr)
{
- osd_work_item *item = (osd_work_item *)queue->free;
+ auto *item = (osd_work_item *)queue->free;
queue->free = item->next;
delete item->event;
delete item;
@@ -454,7 +454,7 @@ void osd_work_queue_free(osd_work_queue *queue)
// free all items in the active list
while (queue->list.load() != nullptr)
{
- osd_work_item *item = (osd_work_item *)queue->list;
+ auto *item = (osd_work_item *)queue->list;
queue->list = item->next;
delete item->event;
delete item;
@@ -639,7 +639,7 @@ void osd_work_item_release(osd_work_item *item)
// effective_num_processors
//============================================================
-static int effective_num_processors(void)
+static int effective_num_processors()
{
int physprocs = osd_get_num_processors();
@@ -670,7 +670,7 @@ static int effective_num_processors(void)
static void *worker_thread_entry(void *param)
{
- work_thread_info *thread = (work_thread_info *)param;
+ auto *thread = (work_thread_info *)param;
osd_work_queue &queue = thread->queue;
// loop until we exit
diff --git a/src/osd/watchdog.cpp b/src/osd/watchdog.cpp
index 09f720b7fcc..4e5177cd300 100644
--- a/src/osd/watchdog.cpp
+++ b/src/osd/watchdog.cpp
@@ -43,7 +43,7 @@ void osd_watchdog::setTimeout(int timeout)
void *osd_watchdog::watchdog_thread(void *param)
{
- osd_watchdog *const thiz(reinterpret_cast<osd_watchdog *>(param));
+ auto *const thiz(reinterpret_cast<osd_watchdog *>(param));
while (true)
{
diff --git a/src/osd/windows/video.cpp b/src/osd/windows/video.cpp
index 87041eb9657..c6f4d3a0a89 100644
--- a/src/osd/windows/video.cpp
+++ b/src/osd/windows/video.cpp
@@ -57,7 +57,7 @@ bool windows_osd_interface::video_init()
window_init();
// create the windows
- windows_options &options = downcast<windows_options &>(machine().options());
+ auto &options = downcast<windows_options &>(machine().options());
for (int index = 0; index < video_config.numscreens; index++)
{
win_window_info::create(machine(), index, m_monitor_module->pick_monitor(options, index), &windows[index]);
diff --git a/src/osd/windows/window.cpp b/src/osd/windows/window.cpp
index ce63d28eba6..2d4bdb55880 100644
--- a/src/osd/windows/window.cpp
+++ b/src/osd/windows/window.cpp
@@ -116,7 +116,7 @@ static bool s_aggressive_focus;
//============================================================
-static void create_window_class(void);
+static void create_window_class();
//============================================================
// window_init
@@ -577,7 +577,7 @@ void winwindow_dispatch_message(running_machine &machine, MSG *message)
// (main thread)
//============================================================
-void winwindow_take_snap(void)
+void winwindow_take_snap()
{
assert(GetCurrentThreadId() == main_threadid);
@@ -595,7 +595,7 @@ void winwindow_take_snap(void)
// (main thread)
//============================================================
-void winwindow_toggle_fsfx(void)
+void winwindow_toggle_fsfx()
{
assert(GetCurrentThreadId() == main_threadid);
@@ -613,7 +613,7 @@ void winwindow_toggle_fsfx(void)
// (main thread)
//============================================================
-void winwindow_take_video(void)
+void winwindow_take_video()
{
assert(GetCurrentThreadId() == main_threadid);
@@ -631,7 +631,7 @@ void winwindow_take_video(void)
// (main thread)
//============================================================
-void winwindow_toggle_full_screen(void)
+void winwindow_toggle_full_screen()
{
assert(GetCurrentThreadId() == main_threadid);
@@ -658,7 +658,7 @@ void winwindow_toggle_full_screen(void)
// (main or window thread)
//============================================================
-bool winwindow_has_focus(void)
+bool winwindow_has_focus()
{
// see if one of the video windows has focus
for (const auto &window : osd_common_t::s_window_list)
@@ -780,7 +780,7 @@ void win_window_info::create(running_machine &machine, int index, std::shared_pt
window->m_target = machine.render().target_alloc();
// set the specific view
- windows_options &options = downcast<windows_options &>(machine.options());
+ auto &options = downcast<windows_options &>(machine.options());
const char *defview = options.view();
window->set_starting_view(index, defview, options.view(index));
@@ -930,7 +930,7 @@ void win_window_info::update()
// (main thread)
//============================================================
-static void create_window_class(void)
+static void create_window_class()
{
static int classes_created = FALSE;
@@ -1180,7 +1180,7 @@ int win_window_info::complete_create()
LRESULT CALLBACK win_window_info::video_window_proc(HWND wnd, UINT message, WPARAM wparam, LPARAM lparam)
{
LONG_PTR ptr = GetWindowLongPtr(wnd, GWLP_USERDATA);
- win_window_info *window = (win_window_info *)ptr;
+ auto *window = (win_window_info *)ptr;
// we may get called before SetWindowLongPtr is called
if (window != nullptr)
@@ -1293,7 +1293,7 @@ LRESULT CALLBACK win_window_info::video_window_proc(HWND wnd, UINT message, WPAR
// get min/max info: set the minimum window size
case WM_GETMINMAXINFO:
{
- MINMAXINFO *minmax = (MINMAXINFO *)lparam;
+ auto *minmax = (MINMAXINFO *)lparam;
minmax->ptMinTrackSize.x = MIN_WINDOW_DIM;
minmax->ptMinTrackSize.y = MIN_WINDOW_DIM;
break;
diff --git a/src/osd/windows/winmain.cpp b/src/osd/windows/winmain.cpp
index 45d3486a2af..05888769c0d 100644
--- a/src/osd/windows/winmain.cpp
+++ b/src/osd/windows/winmain.cpp
@@ -523,7 +523,7 @@ void windows_osd_interface::init(running_machine &machine)
osd_common_t::init(machine);
const char *stemp;
- windows_options &options = downcast<windows_options &>(machine.options());
+ auto &options = downcast<windows_options &>(machine.options());
// determine if we are benchmarking, and adjust options appropriately
int bench = options.bench();
diff --git a/src/osd/windows/winutf8.cpp b/src/osd/windows/winutf8.cpp
index bfc1d86ad38..dcaa99ce7bc 100644
--- a/src/osd/windows/winutf8.cpp
+++ b/src/osd/windows/winutf8.cpp
@@ -100,7 +100,7 @@ std::string win_get_window_text_utf8(HWND window)
if (length <= 0)
return std::string();
- TCHAR *buffer = (TCHAR *) alloca((length + 1) * sizeof(TCHAR));
+ auto *buffer = (TCHAR *) alloca((length + 1) * sizeof(TCHAR));
GetWindowText(window, buffer, length + 1);
return osd::text::from_tstring(buffer);
}
diff --git a/src/osd/windows/winutil.cpp b/src/osd/windows/winutil.cpp
index c06b4d2eee2..b662974cfd1 100644
--- a/src/osd/windows/winutil.cpp
+++ b/src/osd/windows/winutil.cpp
@@ -51,7 +51,7 @@ std::chrono::system_clock::time_point win_time_point_from_filetime(LPFILETIME fi
// win_is_gui_application
//============================================================
-BOOL win_is_gui_application(void)
+BOOL win_is_gui_application()
{
static BOOL is_gui_frontend;
static BOOL is_first_time = TRUE;