summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2016-07-27 19:22:36 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2016-07-27 19:22:36 +1000
commit1c2ea023367ddbd15adeecefa7f425eb1eb5ef4a (patch)
tree546d084fbaf1c21457ba408706a5b74d886f766c
parent437eeecc020c81384491dc193bf85a8ed5994b56 (diff)
0.176 Release Fileshbmame176
-rw-r--r--docs/release/hbmame176s.rar (renamed from docs/release/hbmame175s.rar)bin21485331 -> 21495623 bytes
-rw-r--r--docs/release/scripts/genie.lua12
-rw-r--r--docs/release/scripts/src/3rdparty.lua3
-rw-r--r--docs/release/scripts/src/bus.lua72
-rw-r--r--docs/release/scripts/src/cpu.lua2
-rw-r--r--docs/release/scripts/src/emu.lua2
-rw-r--r--docs/release/scripts/src/lib.lua2
-rw-r--r--docs/release/scripts/src/machine.lua23
-rw-r--r--docs/release/scripts/src/mame/frontend.lua12
-rw-r--r--docs/release/scripts/src/osd/modules.lua33
-rw-r--r--docs/release/scripts/src/osd/sdl.lua6
-rw-r--r--docs/release/scripts/src/osd/sdl_cfg.lua8
-rw-r--r--docs/release/scripts/src/sound.lua8
-rw-r--r--docs/release/scripts/target/mame/arcade.lua10
-rw-r--r--docs/release/scripts/target/mame/mess.lua22
-rw-r--r--docs/release/scripts/toolchain.lua17
-rw-r--r--docs/release/src/devices/cpu/m68000/m68kcpu.cpp35
-rw-r--r--docs/release/src/emu/validity.cpp926
-rw-r--r--docs/release/src/frontend/mame/audit.cpp573
-rw-r--r--docs/release/src/frontend/mame/audit.h191
-rw-r--r--docs/release/src/hbmame/bus/neogeo/neogeo_slot.cpp10
-rw-r--r--docs/release/src/hbmame/bus/neogeo/neogeo_slot.h2
-rw-r--r--docs/release/src/hbmame/drivers/cps1.cpp2
-rw-r--r--docs/release/src/hbmame/drivers/fcrash.cpp2
-rw-r--r--docs/release/src/hbmame/drivers/kof2002.cpp111
-rw-r--r--docs/release/src/hbmame/drivers/kof96.cpp30
-rw-r--r--docs/release/src/hbmame/drivers/kof97.cpp373
-rw-r--r--docs/release/src/hbmame/drivers/kof98.cpp114
-rw-r--r--docs/release/src/hbmame/drivers/kof99.cpp29
-rw-r--r--docs/release/src/hbmame/drivers/mslug.cpp238
-rw-r--r--docs/release/src/hbmame/drivers/nggaroup.cpp27
-rw-r--r--docs/release/src/hbmame/drivers/ngkofmisc.cpp138
-rw-r--r--docs/release/src/hbmame/drivers/ngrotd.cpp44
-rw-r--r--docs/release/src/hbmame/drivers/ngsengoku.cpp39
-rw-r--r--docs/release/src/hbmame/drivers/ngsvc.cpp98
-rw-r--r--docs/release/src/hbmame/drivers/spacmiss.cpp2
-rw-r--r--docs/release/src/hbmame/hbmame.lst52
-rw-r--r--docs/release/src/hbmame/machine/ng_memcard.cpp2
-rw-r--r--docs/release/src/hbmame/machine/ng_memcard.h5
-rw-r--r--docs/release/src/osd/winui/datafile.cpp5
-rw-r--r--docs/release/src/osd/winui/directories.cpp8
-rw-r--r--docs/release/src/osd/winui/dirwatch.cpp2
-rw-r--r--docs/release/src/osd/winui/mui_audit.cpp17
-rw-r--r--docs/release/src/osd/winui/mui_opts.cpp4
-rw-r--r--docs/release/src/osd/winui/mui_util.cpp13
-rw-r--r--docs/release/src/osd/winui/mui_util.h31
-rw-r--r--docs/release/src/osd/winui/newui.cpp1079
-rw-r--r--docs/release/src/osd/winui/newui.h3
-rw-r--r--docs/release/src/osd/winui/properties.cpp32
-rw-r--r--docs/release/src/osd/winui/tabview.cpp2
-rw-r--r--docs/release/src/osd/winui/treeview.cpp12
-rw-r--r--docs/release/src/osd/winui/winui.cpp32
-rw-r--r--docs/release/src/version.cpp2
53 files changed, 3012 insertions, 1505 deletions
diff --git a/docs/release/hbmame175s.rar b/docs/release/hbmame176s.rar
index 718d4d9d842..b21e523ea09 100644
--- a/docs/release/hbmame175s.rar
+++ b/docs/release/hbmame176s.rar
Binary files differ
diff --git a/docs/release/scripts/genie.lua b/docs/release/scripts/genie.lua
index 903d77ce3ed..d07ff394ce2 100644
--- a/docs/release/scripts/genie.lua
+++ b/docs/release/scripts/genie.lua
@@ -982,6 +982,12 @@ end
end
end
+if (_OPTIONS["PLATFORM"]=="alpha") then
+ defines {
+ "PTR64=1",
+ }
+end
+
if (_OPTIONS["PLATFORM"]=="arm") then
buildoptions {
"-Wno-cast-align",
@@ -997,6 +1003,12 @@ if (_OPTIONS["PLATFORM"]=="arm64") then
}
end
+if (_OPTIONS["PLATFORM"]=="mips64") then
+ defines {
+ "PTR64=1",
+ }
+end
+
local subdir
if (_OPTIONS["target"] == _OPTIONS["subtarget"]) then
subdir = _OPTIONS["osd"] .. "/" .. _OPTIONS["target"]
diff --git a/docs/release/scripts/src/3rdparty.lua b/docs/release/scripts/src/3rdparty.lua
index d8e6c9e2fff..e3c29933220 100644
--- a/docs/release/scripts/src/3rdparty.lua
+++ b/docs/release/scripts/src/3rdparty.lua
@@ -722,6 +722,7 @@ end
"-Wno-uninitialized",
"-Wno-unused-function",
"-Wno-unused-but-set-variable",
+ "-Wno-format-extra-args", -- temp for mingw 6.1 till update bgfx code
}
configuration { "rpi" }
buildoptions {
@@ -1209,6 +1210,8 @@ if _OPTIONS["targetos"]=="android" then
targetdir(MAME_DIR .. "android-project/app/src/main/libs/x86_64")
end
end
+
+ strip()
else
kind "StaticLib"
end
diff --git a/docs/release/scripts/src/bus.lua b/docs/release/scripts/src/bus.lua
index 5fdd355a955..fa5f6dabd15 100644
--- a/docs/release/scripts/src/bus.lua
+++ b/docs/release/scripts/src/bus.lua
@@ -204,6 +204,58 @@ end
---------------------------------------------------
--
+--@src/devices/bus/bbc/analogue/analogue.h,BUSES["BBC_ANALOGUE"] = true
+---------------------------------------------------
+
+if (BUSES["BBC_ANALOGUE"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/bus/bbc/analogue/analogue.cpp",
+ MAME_DIR .. "src/devices/bus/bbc/analogue/analogue.h",
+ }
+end
+
+
+---------------------------------------------------
+--
+--@src/devices/bus/bbc/1mhzbus/1mhzbus.h,BUSES["BBC_1MHZBUS"] = true
+---------------------------------------------------
+
+if (BUSES["BBC_1MHZBUS"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/bus/bbc/1mhzbus/1mhzbus.cpp",
+ MAME_DIR .. "src/devices/bus/bbc/1mhzbus/1mhzbus.h",
+ }
+end
+
+
+---------------------------------------------------
+--
+--@src/devices/bus/bbc/tube/tube.h,BUSES["BBC_TUBE"] = true
+---------------------------------------------------
+
+if (BUSES["BBC_TUBE"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/bus/bbc/tube/tube.cpp",
+ MAME_DIR .. "src/devices/bus/bbc/tube/tube.h",
+ }
+end
+
+
+---------------------------------------------------
+--
+--@src/devices/bus/bbc/userport/userport.h,BUSES["BBC_USERPORT"] = true
+---------------------------------------------------
+
+if (BUSES["BBC_USERPORT"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/bus/bbc/userport/userport.cpp",
+ MAME_DIR .. "src/devices/bus/bbc/userport/userport.h",
+ }
+end
+
+
+---------------------------------------------------
+--
--@src/devices/bus/bw2/exp.h,BUSES["BW2"] = true
---------------------------------------------------
@@ -583,6 +635,8 @@ if (BUSES["ELECTRON"]~=null) then
files {
MAME_DIR .. "src/devices/bus/electron/exp.cpp",
MAME_DIR .. "src/devices/bus/electron/exp.h",
+ MAME_DIR .. "src/devices/bus/electron/m2105.cpp",
+ MAME_DIR .. "src/devices/bus/electron/m2105.h",
}
end
@@ -831,6 +885,8 @@ if (BUSES["ISA"]~=null) then
MAME_DIR .. "src/devices/bus/isa/p1_hdc.h",
MAME_DIR .. "src/devices/bus/isa/p1_rom.cpp",
MAME_DIR .. "src/devices/bus/isa/p1_rom.h",
+ MAME_DIR .. "src/devices/bus/isa/p1_sound.cpp",
+ MAME_DIR .. "src/devices/bus/isa/p1_sound.h",
MAME_DIR .. "src/devices/bus/isa/mc1502_fdc.cpp",
MAME_DIR .. "src/devices/bus/isa/mc1502_fdc.h",
MAME_DIR .. "src/devices/bus/isa/mc1502_rom.cpp",
@@ -1606,6 +1662,8 @@ if (BUSES["RS232"]~=null) then
MAME_DIR .. "src/devices/bus/rs232/pty.h",
MAME_DIR .. "src/devices/bus/rs232/ser_mouse.cpp",
MAME_DIR .. "src/devices/bus/rs232/ser_mouse.h",
+ MAME_DIR .. "src/devices/bus/rs232/sun_kbd.cpp",
+ MAME_DIR .. "src/devices/bus/rs232/sun_kbd.h",
MAME_DIR .. "src/devices/bus/rs232/terminal.cpp",
MAME_DIR .. "src/devices/bus/rs232/terminal.h",
MAME_DIR .. "src/devices/bus/rs232/xvd701.cpp",
@@ -2519,6 +2577,20 @@ end
---------------------------------------------------
--
+--@src/devices/bus/sunkbd/sunkbd.h,BUSES["SUNKBD"] = true
+---------------------------------------------------
+
+if (BUSES["SUNKBD"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/bus/sunkbd/hlekbd.cpp",
+ MAME_DIR .. "src/devices/bus/sunkbd/hlekbd.h",
+ MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.cpp",
+ MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.h",
+ }
+end
+
+---------------------------------------------------
+--
--@src/devices/bus/ql/exp.h,BUSES["QL"] = true
---------------------------------------------------
diff --git a/docs/release/scripts/src/cpu.lua b/docs/release/scripts/src/cpu.lua
index ef9263c6485..a9dfe0ecd70 100644
--- a/docs/release/scripts/src/cpu.lua
+++ b/docs/release/scripts/src/cpu.lua
@@ -13,7 +13,7 @@
-- Dynamic recompiler objects
--------------------------------------------------
-if (CPUS["SH2"]~=null or CPUS["MIPS"]~=null or CPUS["POWERPC"]~=null or CPUS["RSP"]~=null or CPUS["ARM7"]~=null) then
+if (CPUS["SH2"]~=null or CPUS["MIPS"]~=null or CPUS["POWERPC"]~=null or CPUS["RSP"]~=null or CPUS["ARM7"]~=null or CPUS["ADSP21062"]~=null) then
files {
MAME_DIR .. "src/devices/cpu/drcbec.cpp",
MAME_DIR .. "src/devices/cpu/drcbec.h",
diff --git a/docs/release/scripts/src/emu.lua b/docs/release/scripts/src/emu.lua
index a446a6ccaae..1f96f3b4e22 100644
--- a/docs/release/scripts/src/emu.lua
+++ b/docs/release/scripts/src/emu.lua
@@ -118,8 +118,6 @@ files {
MAME_DIR .. "src/emu/emupal.h",
MAME_DIR .. "src/emu/fileio.cpp",
MAME_DIR .. "src/emu/fileio.h",
- MAME_DIR .. "src/emu/hash.cpp",
- MAME_DIR .. "src/emu/hash.h",
MAME_DIR .. "src/emu/image.cpp",
MAME_DIR .. "src/emu/image.h",
MAME_DIR .. "src/emu/input.cpp",
diff --git a/docs/release/scripts/src/lib.lua b/docs/release/scripts/src/lib.lua
index 8c3536b144d..f554d56ab7c 100644
--- a/docs/release/scripts/src/lib.lua
+++ b/docs/release/scripts/src/lib.lua
@@ -56,6 +56,8 @@ project "utils"
MAME_DIR .. "src/lib/util/flac.h",
MAME_DIR .. "src/lib/util/harddisk.cpp",
MAME_DIR .. "src/lib/util/harddisk.h",
+ MAME_DIR .. "src/lib/util/hash.cpp",
+ MAME_DIR .. "src/lib/util/hash.h",
MAME_DIR .. "src/lib/util/hashing.cpp",
MAME_DIR .. "src/lib/util/hashing.h",
MAME_DIR .. "src/lib/util/huffman.cpp",
diff --git a/docs/release/scripts/src/machine.lua b/docs/release/scripts/src/machine.lua
index aab2cb0b8e3..2afe2638ae6 100644
--- a/docs/release/scripts/src/machine.lua
+++ b/docs/release/scripts/src/machine.lua
@@ -796,6 +796,18 @@ end
---------------------------------------------------
--
+--@src/devices/machine/fga002.h,MACHINES["FGA002"] = true
+---------------------------------------------------
+
+if (MACHINES["FGA002"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/machine/fga002.cpp",
+ MAME_DIR .. "src/devices/machine/fga002.h",
+ }
+end
+
+---------------------------------------------------
+--
--@src/devices/machine/hd63450.h,MACHINES["HD63450"] = true
---------------------------------------------------
@@ -2902,3 +2914,14 @@ if (MACHINES["SCNXX562"]~=null) then
MAME_DIR .. "src/devices/machine/scnxx562.h",
}
end
+
+---------------------------------------------------
+--
+--@src/devices/machine/input_merger.h,MACHINES["INPUT_MERGER"] = true
+---------------------------------------------------
+if (MACHINES["INPUT_MERGER"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/machine/input_merger.cpp",
+ MAME_DIR .. "src/devices/machine/input_merger.h",
+ }
+end
diff --git a/docs/release/scripts/src/mame/frontend.lua b/docs/release/scripts/src/mame/frontend.lua
index e35bed2da07..d1660dc0f22 100644
--- a/docs/release/scripts/src/mame/frontend.lua
+++ b/docs/release/scripts/src/mame/frontend.lua
@@ -98,6 +98,8 @@ files {
MAME_DIR .. "src/frontend/mame/ui/filemngr.h",
MAME_DIR .. "src/frontend/mame/ui/filesel.cpp",
MAME_DIR .. "src/frontend/mame/ui/filesel.h",
+ MAME_DIR .. "src/frontend/mame/ui/filecreate.cpp",
+ MAME_DIR .. "src/frontend/mame/ui/filecreate.h",
MAME_DIR .. "src/frontend/mame/ui/floppycntrl.cpp",
MAME_DIR .. "src/frontend/mame/ui/floppycntrl.h",
MAME_DIR .. "src/frontend/mame/ui/imgcntrl.cpp",
@@ -108,6 +110,8 @@ files {
MAME_DIR .. "src/frontend/mame/ui/info_pty.h",
MAME_DIR .. "src/frontend/mame/ui/inputmap.cpp",
MAME_DIR .. "src/frontend/mame/ui/inputmap.h",
+ MAME_DIR .. "src/frontend/mame/ui/selmenu.cpp",
+ MAME_DIR .. "src/frontend/mame/ui/selmenu.h",
MAME_DIR .. "src/frontend/mame/ui/sliders.cpp",
MAME_DIR .. "src/frontend/mame/ui/sliders.h",
MAME_DIR .. "src/frontend/mame/ui/slotopt.cpp",
@@ -130,7 +134,7 @@ files {
MAME_DIR .. "src/frontend/mame/ui/datfile.h",
MAME_DIR .. "src/frontend/mame/ui/datmenu.cpp",
MAME_DIR .. "src/frontend/mame/ui/datmenu.h",
- MAME_DIR .. "src/frontend/mame/ui/defimg.h",
+ MAME_DIR .. "src/frontend/mame/ui/defimg.ipp",
MAME_DIR .. "src/frontend/mame/ui/dirmenu.cpp",
MAME_DIR .. "src/frontend/mame/ui/dirmenu.h",
MAME_DIR .. "src/frontend/mame/ui/icorender.h",
@@ -152,8 +156,10 @@ files {
MAME_DIR .. "src/frontend/mame/ui/selsoft.h",
MAME_DIR .. "src/frontend/mame/ui/sndmenu.cpp",
MAME_DIR .. "src/frontend/mame/ui/sndmenu.h",
- MAME_DIR .. "src/frontend/mame/ui/starimg.h",
- MAME_DIR .. "src/frontend/mame/ui/toolbar.h",
+ MAME_DIR .. "src/frontend/mame/ui/starimg.ipp",
+ MAME_DIR .. "src/frontend/mame/ui/toolbar.ipp",
MAME_DIR .. "src/frontend/mame/ui/utils.cpp",
MAME_DIR .. "src/frontend/mame/ui/utils.h",
+ MAME_DIR .. "src/frontend/mame/ui/widgets.cpp",
+ MAME_DIR .. "src/frontend/mame/ui/widgets.h",
}
diff --git a/docs/release/scripts/src/osd/modules.lua b/docs/release/scripts/src/osd/modules.lua
index b8e5bb61b83..25a7aca2c0e 100644
--- a/docs/release/scripts/src/osd/modules.lua
+++ b/docs/release/scripts/src/osd/modules.lua
@@ -35,6 +35,14 @@ function addoptionsfromstring(str)
end
end
+function pkgconfigcmd()
+ local pkgconfig = os.getenv("PKG_CONFIG")
+ if pkgconfig == nil then
+ return "pkg-config"
+ end
+ return pkgconfig
+end
+
function osdmodulesbuild()
removeflags {
@@ -121,11 +129,9 @@ function osdmodulesbuild()
MAME_DIR .. "3rdparty/compat/mingw",
}
- if _OPTIONS["MODERN_WIN_API"]~="1" then
- includedirs {
- MAME_DIR .. "3rdparty/compat/winsdk-override",
- }
- end
+ includedirs {
+ MAME_DIR .. "3rdparty/compat/winsdk-override",
+ }
end
if _OPTIONS["NO_OPENGL"]=="1" then
@@ -245,11 +251,12 @@ function qtdebuggerbuild()
local version = str_to_version(_OPTIONS["gcc_version"])
if _OPTIONS["gcc"]~=nil and (string.find(_OPTIONS["gcc"], "clang") or string.find(_OPTIONS["gcc"], "asmjs")) then
configuration { "gmake or ninja" }
- if (version >= 30600) then
- buildoptions {
- "-Wno-inconsistent-missing-override",
- }
- end
+ if (version >= 30600) then
+ buildoptions {
+ "-Wno-inconsistent-missing-override",
+ }
+ end
+ configuration { }
end
files {
@@ -345,7 +352,7 @@ function qtdebuggerbuild()
}
else
buildoptions {
- backtick("pkg-config --cflags Qt5Widgets"),
+ backtick(pkgconfigcmd() .. " --cflags Qt5Widgets"),
}
end
end
@@ -380,7 +387,7 @@ function osdmodulestargetconf()
if _OPTIONS["NO_USE_MIDI"]~="1" then
if _OPTIONS["targetos"]=="linux" then
- local str = backtick("pkg-config --libs alsa")
+ local str = backtick(pkgconfigcmd() .. " --libs alsa")
addlibfromstring(str)
addoptionsfromstring(str)
elseif _OPTIONS["targetos"]=="macosx" then
@@ -421,7 +428,7 @@ function osdmodulestargetconf()
"Qt5Widgets",
}
else
- local str = backtick("pkg-config --libs Qt5Widgets")
+ local str = backtick(pkgconfigcmd() .. " --libs Qt5Widgets")
addlibfromstring(str)
addoptionsfromstring(str)
end
diff --git a/docs/release/scripts/src/osd/sdl.lua b/docs/release/scripts/src/osd/sdl.lua
index 4094e48c6be..44b957d8dde 100644
--- a/docs/release/scripts/src/osd/sdl.lua
+++ b/docs/release/scripts/src/osd/sdl.lua
@@ -42,7 +42,7 @@ function maintargetosdoptions(_target,_subtarget)
links {
"SDL2_ttf",
}
- local str = backtick("pkg-config --libs fontconfig")
+ local str = backtick(pkgconfigcmd() .. " --libs fontconfig")
addlibfromstring(str)
addoptionsfromstring(str)
end
@@ -132,7 +132,7 @@ function sdlconfigcmd()
if _OPTIONS["targetos"]=="asmjs" then
return "sdl2-config"
elseif not _OPTIONS["SDL_INSTALL_ROOT"] then
- return _OPTIONS['TOOLCHAIN'] .. "pkg-config sdl2"
+ return pkgconfigcmd() .. " sdl2"
else
return path.join(_OPTIONS["SDL_INSTALL_ROOT"],"bin","sdl2") .. "-config"
end
@@ -340,7 +340,7 @@ project ("qtdbg_" .. _OPTIONS["osd"])
MAME_DIR .. "src/osd/modules/render",
MAME_DIR .. "3rdparty",
}
- configuration { "linux-*" }
+ configuration { "linux-* or freebsd" }
buildoptions {
"-fPIC",
}
diff --git a/docs/release/scripts/src/osd/sdl_cfg.lua b/docs/release/scripts/src/osd/sdl_cfg.lua
index 0fd15e5ca27..b73c9253819 100644
--- a/docs/release/scripts/src/osd/sdl_cfg.lua
+++ b/docs/release/scripts/src/osd/sdl_cfg.lua
@@ -1,6 +1,8 @@
-- license:BSD-3-Clause
-- copyright-holders:MAMEdev Team
+dofile('modules.lua')
+
forcedincludes {
MAME_DIR .. "src/osd/sdl/sdlprefix.h"
}
@@ -52,7 +54,7 @@ end
if _OPTIONS["NO_USE_MIDI"]~="1" and _OPTIONS["targetos"]=="linux" then
buildoptions {
- backtick("pkg-config --cflags alsa"),
+ backtick(pkgconfigcmd() .. " --cflags alsa"),
}
end
@@ -94,7 +96,7 @@ if BASE_TARGETOS=="unix" then
}
if _OPTIONS["targetos"]~="asmjs" then
buildoptions {
- backtick("pkg-config --cflags fontconfig"),
+ backtick(pkgconfigcmd() .. " --cflags fontconfig"),
}
end
end
@@ -121,7 +123,7 @@ elseif _OPTIONS["targetos"]=="linux" then
}
else
buildoptions {
- backtick("pkg-config --cflags Qt5Widgets"),
+ backtick(pkgconfigcmd() .. " --cflags Qt5Widgets"),
}
end
elseif _OPTIONS["targetos"]=="macosx" then
diff --git a/docs/release/scripts/src/sound.lua b/docs/release/scripts/src/sound.lua
index 2c54bf7f0f6..bf1e87ebc7e 100644
--- a/docs/release/scripts/src/sound.lua
+++ b/docs/release/scripts/src/sound.lua
@@ -1130,9 +1130,9 @@ end
---------------------------------------------------
-- Yamaha FM synthesizers
---@src/devices/sound/2151intf.h,SOUNDS["YM2151"] = true
+--@src/devices/sound/ym2151.h,SOUNDS["YM2151"] = true
--@src/devices/sound/2203intf.h,SOUNDS["YM2203"] = true
---@src/devices/sound/2413intf.h,SOUNDS["YM2413"] = true
+--@src/devices/sound/ym2413.h,SOUNDS["YM2413"] = true
--@src/devices/sound/2608intf.h,SOUNDS["YM2608"] = true
--@src/devices/sound/2610intf.h,SOUNDS["YM2610"] = true
--@src/devices/sound/2612intf.h,SOUNDS["YM2612"] = true
@@ -1147,8 +1147,6 @@ end
if (SOUNDS["YM2151"]~=null) then
files {
- MAME_DIR .. "src/devices/sound/2151intf.cpp",
- MAME_DIR .. "src/devices/sound/2151intf.h",
MAME_DIR .. "src/devices/sound/ym2151.cpp",
MAME_DIR .. "src/devices/sound/ym2151.h",
}
@@ -1156,8 +1154,6 @@ end
if (SOUNDS["YM2413"]~=null) then
files {
- MAME_DIR .. "src/devices/sound/2413intf.cpp",
- MAME_DIR .. "src/devices/sound/2413intf.h",
MAME_DIR .. "src/devices/sound/ym2413.cpp",
MAME_DIR .. "src/devices/sound/ym2413.h",
}
diff --git a/docs/release/scripts/target/mame/arcade.lua b/docs/release/scripts/target/mame/arcade.lua
index df58452777d..27a224055b2 100644
--- a/docs/release/scripts/target/mame/arcade.lua
+++ b/docs/release/scripts/target/mame/arcade.lua
@@ -572,6 +572,7 @@ MACHINES["PCI9050"] = true
MACHINES["GENPC"] = true
MACHINES["GEN_LATCH"] = true
MACHINES["WATCHDOG"] = true
+MACHINES["INPUT_MERGER"] = true
--------------------------------------------------
-- specify available bus cores
@@ -647,6 +648,7 @@ BUSES["SMS_CTRL"] = true
BUSES["SMS_EXP"] = true
--BUSES["SNES"] = true
--BUSES["SPC1000"] = true
+BUSES["SUNKBD"] = true
--BUSES["TI99PEB"] = true
--BUSES["TVC"] = true
--BUSES["VBOY"] = true
@@ -3227,6 +3229,7 @@ files {
MAME_DIR .. "src/mame/machine/gdrom.cpp",
MAME_DIR .. "src/mame/machine/gdrom.h",
MAME_DIR .. "src/mame/machine/xbox.cpp",
+ MAME_DIR .. "src/mame/machine/xbox_usb.cpp",
}
createMAMEProjects(_target, _subtarget, "seibu")
@@ -3258,6 +3261,7 @@ files {
MAME_DIR .. "src/mame/drivers/legionna.cpp",
MAME_DIR .. "src/mame/includes/legionna.h",
MAME_DIR .. "src/mame/video/legionna.cpp",
+ MAME_DIR .. "src/mame/drivers/seicupbl.cpp",
MAME_DIR .. "src/mame/drivers/metlfrzr.cpp",
MAME_DIR .. "src/mame/drivers/mustache.cpp",
MAME_DIR .. "src/mame/includes/mustache.h",
@@ -3277,8 +3281,6 @@ files {
MAME_DIR .. "src/mame/drivers/r2dx_v33.cpp",
MAME_DIR .. "src/mame/drivers/seibuspi.cpp",
MAME_DIR .. "src/mame/includes/seibuspi.h",
- MAME_DIR .. "src/mame/machine/seibuspi.cpp",
- MAME_DIR .. "src/mame/machine/seibuspi.h",
MAME_DIR .. "src/mame/video/seibuspi.cpp",
MAME_DIR .. "src/mame/drivers/sengokmj.cpp",
MAME_DIR .. "src/mame/drivers/stfight.cpp",
@@ -3293,8 +3295,8 @@ files {
MAME_DIR .. "src/mame/video/wiz.cpp",
MAME_DIR .. "src/mame/machine/seicop.cpp",
MAME_DIR .. "src/mame/machine/seicop.h",
- MAME_DIR .. "src/mame/machine/spisprit.cpp",
- MAME_DIR .. "src/mame/machine/spisprit.h",
+ MAME_DIR .. "src/mame/machine/seibuspi.cpp",
+ MAME_DIR .. "src/mame/machine/seibuspi.h",
MAME_DIR .. "src/mame/audio/seibu.cpp",
MAME_DIR .. "src/mame/audio/seibu.h",
MAME_DIR .. "src/mame/video/seibu_crtc.cpp",
diff --git a/docs/release/scripts/target/mame/mess.lua b/docs/release/scripts/target/mame/mess.lua
index 1063bd71a93..2695224e692 100644
--- a/docs/release/scripts/target/mame/mess.lua
+++ b/docs/release/scripts/target/mame/mess.lua
@@ -585,6 +585,8 @@ MACHINES["APPLE_DRIVE"] = true
MACHINES["APPLE_FDC"] = true
MACHINES["SONY_DRIVE"] = true
MACHINES["SCNXX562"] = true
+MACHINES["FGA002"] = true
+MACHINES["INPUT_MERGER"] = true
--------------------------------------------------
-- specify available bus cores
@@ -602,6 +604,10 @@ BUSES["APF"] = true
BUSES["APRICOT_EXPANSION"] = true
BUSES["ARCADIA"] = true
BUSES["ASTROCADE"] = true
+BUSES["BBC_ANALOGUE"] = true
+BUSES["BBC_1MHZBUS"] = true
+BUSES["BBC_TUBE"] = true
+BUSES["BBC_USERPORT"] = true
BUSES["BML3"] = true
BUSES["BW2"] = true
BUSES["C64"] = true
@@ -672,6 +678,7 @@ BUSES["SMS_EXP"] = true
BUSES["SNES"] = true
BUSES["SNES_CTRL"] = true
BUSES["SPC1000"] = true
+BUSES["SUNKBD"] = true
BUSES["SVI_EXPANDER"] = true
BUSES["SVI_SLOT"] = true
BUSES["TI99PEB"] = true
@@ -883,6 +890,7 @@ function linkProjects_mame_mess(_target, _subtarget)
"trs",
"ultimachine",
"ultratec",
+ "unicard",
"unisonic",
"unisys",
"usp",
@@ -1070,6 +1078,7 @@ files {
MAME_DIR .. "src/mame/video/cps1.cpp",
MAME_DIR .. "src/mame/video/chihiro.cpp",
MAME_DIR .. "src/mame/machine/xbox.cpp",
+ MAME_DIR .. "src/mame/machine/xbox_usb.cpp",
MAME_DIR .. "src/mame/includes/saturn.h",
MAME_DIR .. "src/mame/drivers/saturn.cpp",
MAME_DIR .. "src/mame/machine/saturn.cpp",
@@ -1105,7 +1114,6 @@ files {
MAME_DIR .. "src/mame/includes/bbc.h",
MAME_DIR .. "src/mame/machine/bbc.cpp",
MAME_DIR .. "src/mame/video/bbc.cpp",
- MAME_DIR .. "src/mame/drivers/bbcbc.cpp",
MAME_DIR .. "src/mame/drivers/electron.cpp",
MAME_DIR .. "src/mame/includes/electron.h",
MAME_DIR .. "src/mame/machine/electron.cpp",
@@ -1446,6 +1454,9 @@ files {
MAME_DIR .. "src/mame/video/pk8020.cpp",
MAME_DIR .. "src/mame/drivers/pyl601.cpp",
MAME_DIR .. "src/mame/drivers/sm1800.cpp",
+ MAME_DIR .. "src/mame/drivers/sm7238.cpp",
+ MAME_DIR .. "src/mame/machine/km035.cpp",
+ MAME_DIR .. "src/mame/machine/km035.h",
MAME_DIR .. "src/mame/drivers/uknc.cpp",
MAME_DIR .. "src/mame/drivers/unior.cpp",
MAME_DIR .. "src/mame/drivers/ut88.cpp",
@@ -2018,6 +2029,7 @@ createMESSProjects(_target, _subtarget, "microsoft")
files {
MAME_DIR .. "src/mame/drivers/xbox.cpp",
MAME_DIR .. "src/mame/includes/xbox.h",
+ MAME_DIR .. "src/mame/includes/xbox_usb.h",
}
createMESSProjects(_target, _subtarget, "mit")
@@ -2716,6 +2728,7 @@ files {
MAME_DIR .. "src/mame/drivers/ts803.cpp",
MAME_DIR .. "src/mame/drivers/ts816.cpp",
MAME_DIR .. "src/mame/drivers/tv950.cpp",
+ MAME_DIR .. "src/mame/drivers/tv990.cpp",
}
createMESSProjects(_target, _subtarget, "tem")
@@ -2885,6 +2898,11 @@ files {
MAME_DIR .. "src/mame/drivers/minicom.cpp",
}
+createMESSProjects(_target, _subtarget, "unicard")
+files {
+ MAME_DIR .. "src/mame/drivers/bbcbc.cpp",
+}
+
createMESSProjects(_target, _subtarget, "unisonic")
files {
MAME_DIR .. "src/mame/drivers/unichamp.cpp",
@@ -3083,6 +3101,7 @@ files {
MAME_DIR .. "src/mame/drivers/dim68k.cpp",
MAME_DIR .. "src/mame/drivers/dm7000.cpp",
MAME_DIR .. "src/mame/includes/dm7000.h",
+ MAME_DIR .. "src/mame/drivers/dmax8000.cpp",
MAME_DIR .. "src/mame/drivers/dmv.cpp",
MAME_DIR .. "src/mame/machine/dmv_keyb.cpp",
MAME_DIR .. "src/mame/machine/dmv_keyb.h",
@@ -3097,6 +3116,7 @@ files {
MAME_DIR .. "src/mame/drivers/fanucs15.cpp",
MAME_DIR .. "src/mame/drivers/fanucspmg.cpp",
MAME_DIR .. "src/mame/drivers/fc100.cpp",
+ MAME_DIR .. "src/mame/drivers/fcisio.cpp",
MAME_DIR .. "src/mame/drivers/fcscsi.cpp",
MAME_DIR .. "src/mame/drivers/fk1.cpp",
MAME_DIR .. "src/mame/drivers/ft68m.cpp",
diff --git a/docs/release/scripts/toolchain.lua b/docs/release/scripts/toolchain.lua
index 6046b4d97d8..ff2f10ebbc2 100644
--- a/docs/release/scripts/toolchain.lua
+++ b/docs/release/scripts/toolchain.lua
@@ -246,7 +246,7 @@ function toolchain(_buildDir, _subDir)
if not os.getenv("MINGW32") then
print("Set MINGW32 envrionment variable.")
end
- if not toolchainPrefix then
+ if toolchainPrefix == nil or toolchainPrefix == "" then
toolchainPrefix = "$(MINGW32)/bin/i686-w64-mingw32-"
end
premake.gcc.cc = toolchainPrefix .. "gcc"
@@ -266,7 +266,7 @@ function toolchain(_buildDir, _subDir)
if not os.getenv("MINGW64") then
print("Set MINGW64 envrionment variable.")
end
- if not toolchainPrefix then
+ if toolchainPrefix == nil or toolchainPrefix == "" then
toolchainPrefix = "$(MINGW64)/bin/x86_64-w64-mingw32-"
end
premake.gcc.cc = toolchainPrefix .. "gcc"
@@ -772,9 +772,14 @@ function toolchain(_buildDir, _subDir)
configuration { "openbsd", "x64", "Debug" }
targetdir (_buildDir .. "openbsd" .. "/bin/x64/Debug")
+ configuration { "android-*", "Release" }
+ targetdir (_buildDir .. "android/bin/" .. _OPTIONS["PLATFORM"] .. "/Release")
+
+ configuration { "android-*", "Debug" }
+ targetdir (_buildDir .. "android/bin/" .. _OPTIONS["PLATFORM"] .. "/Debug")
+
configuration { "android-*" }
- targetdir (_buildDir .. "android-" .. _OPTIONS["PLATFORM"] .. "/bin")
- objdir (_buildDir .. "android-" .. _OPTIONS["PLATFORM"] .. "/obj")
+ objdir (_buildDir .. "android/obj/" .. _OPTIONS["PLATFORM"])
includedirs {
MAME_DIR .. "3rdparty/bgfx/3rdparty/khronos",
"$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libcxx/include",
@@ -1063,12 +1068,12 @@ function strip()
configuration { "mingw*", "x64", "Release" }
postbuildcommands {
"$(SILENT) echo Stripping symbols.",
- "$(SILENT) " .. (_OPTIONS['TOOLCHAIN'] and toolchainPrefix or "$(MINGW64)/bin/") .. "strip -s \"$(TARGET)\"",
+ "$(SILENT) " .. (_OPTIONS['TOOLCHAIN'] or "$(MINGW64)/bin/") .. "strip -s \"$(TARGET)\"",
}
configuration { "mingw*", "x32", "Release" }
postbuildcommands {
"$(SILENT) echo Stripping symbols.",
- "$(SILENT) " .. (_OPTIONS['TOOLCHAIN'] and toolchainPrefix or "$(MINGW32)/bin/") .. "strip -s \"$(TARGET)\"",
+ "$(SILENT) " .. (_OPTIONS['TOOLCHAIN'] or "$(MINGW32)/bin/") .. "strip -s \"$(TARGET)\"",
}
configuration { "pnacl" }
diff --git a/docs/release/src/devices/cpu/m68000/m68kcpu.cpp b/docs/release/src/devices/cpu/m68000/m68kcpu.cpp
index b11b0d987af..cc6a047b769 100644
--- a/docs/release/src/devices/cpu/m68000/m68kcpu.cpp
+++ b/docs/release/src/devices/cpu/m68000/m68kcpu.cpp
@@ -704,41 +704,6 @@ static void m68k_cause_bus_error(m68000_base_device *m68k)
m68ki_jump_vector(m68k, EXCEPTION_BUS_ERROR);
}
-WRITE_LINE_MEMBER( m68000_base_device::write_irq1 )
-{
- set_input_line( M68K_IRQ_1, state );
-}
-
-WRITE_LINE_MEMBER( m68000_base_device::write_irq2 )
-{
- set_input_line( M68K_IRQ_2, state );
-}
-
-WRITE_LINE_MEMBER( m68000_base_device::write_irq3 )
-{
- set_input_line( M68K_IRQ_3, state );
-}
-
-WRITE_LINE_MEMBER( m68000_base_device::write_irq4 )
-{
- set_input_line( M68K_IRQ_4, state );
-}
-
-WRITE_LINE_MEMBER( m68000_base_device::write_irq5 )
-{
- set_input_line( M68K_IRQ_5, state );
-}
-
-WRITE_LINE_MEMBER( m68000_base_device::write_irq6 )
-{
- set_input_line( M68K_IRQ_6, state );
-}
-
-WRITE_LINE_MEMBER( m68000_base_device::write_irq7 )
-{
- set_input_line( M68K_IRQ_7, state );
-}
-
bool m68000_base_device::memory_translate(address_spacenum space, int intention, offs_t &address)
{
/* only applies to the program address space and only does something if the MMU's enabled */
diff --git a/docs/release/src/emu/validity.cpp b/docs/release/src/emu/validity.cpp
index 05607afe0a2..09d990ffb82 100644
--- a/docs/release/src/emu/validity.cpp
+++ b/docs/release/src/emu/validity.cpp
@@ -10,7 +10,10 @@
#include "emu.h"
#include "validity.h"
+
#include "emuopts.h"
+#include "video/rgbutil.h"
+
#include <ctype.h>
@@ -50,6 +53,20 @@ inline int validity_checker::get_defstr_index(const char *string, bool suppress_
//-------------------------------------------------
+// random_u64
+// random_s64
+// random_u32
+// random_s32
+//-------------------------------------------------
+#undef rand
+inline INT32 validity_checker::random_i32() { return INT32(random_u32()); }
+inline UINT32 validity_checker::random_u32() { return rand() ^ (rand() << 15); }
+inline INT64 validity_checker::random_i64() { return INT64(random_u64()); }
+inline UINT64 validity_checker::random_u64() { return UINT64(random_u32()) ^ (UINT64(random_u32()) << 30); }
+
+
+
+//-------------------------------------------------
// validate_tag - ensure that the given tag
// meets the general requirements
//-------------------------------------------------
@@ -182,6 +199,7 @@ bool validity_checker::check_all_matching(const char *string)
validate_begin();
validate_core();
validate_inlines();
+ validate_rgb();
// if we had warnings or errors, output
if (m_errors > 0 || m_warnings > 0 || !m_verbose_text.empty())
@@ -362,13 +380,12 @@ void validity_checker::validate_core()
void validity_checker::validate_inlines()
{
-#undef rand
- volatile UINT64 testu64a = rand() ^ (rand() << 15) ^ ((UINT64)rand() << 30) ^ ((UINT64)rand() << 45);
- volatile INT64 testi64a = rand() ^ (rand() << 15) ^ ((INT64)rand() << 30) ^ ((INT64)rand() << 45);
- volatile UINT32 testu32a = rand() ^ (rand() << 15);
- volatile UINT32 testu32b = rand() ^ (rand() << 15);
- volatile INT32 testi32a = rand() ^ (rand() << 15);
- volatile INT32 testi32b = rand() ^ (rand() << 15);
+ volatile UINT64 testu64a = random_u64();
+ volatile INT64 testi64a = random_i64();
+ volatile UINT32 testu32a = random_u32();
+ volatile UINT32 testu32b = random_u32();
+ volatile INT32 testi32a = random_i32();
+ volatile INT32 testi32b = random_i32();
INT32 resulti32, expectedi32;
UINT32 resultu32, expectedu32;
INT64 resulti64, expectedi64;
@@ -482,6 +499,834 @@ void validity_checker::validate_inlines()
//-------------------------------------------------
+// validate_rgb - validate optimised RGB utility
+// class
+//-------------------------------------------------
+
+void validity_checker::validate_rgb()
+{
+ /*
+ This performs cursory tests of most of the vector-optimised RGB
+ utilities, concentrating on the low-level maths. It uses random
+ values most of the time for a quick go/no-go indication rather
+ than trying to exercise edge cases. It doesn't matter too much
+ if the compiler optimises out some of the operations since it's
+ really intended to check for logic bugs in the vector code. If
+ the compiler can work out that the code produces the expected
+ result, that's good enough.
+
+ The tests for bitwise logical operations are ordered to minimise
+ the chance of all-zero or all-one patterns producing a
+ misleading good result.
+
+ The following functions are not tested yet:
+ rgbaint_t()
+ clamp_and_clear(const UINT32)
+ sign_extend(const UINT32, const UINT32)
+ min(const INT32)
+ max(const INT32)
+ blend(const rgbaint_t&, UINT8)
+ scale_and_clamp(const rgbaint_t&)
+ scale_imm_and_clamp(const INT32)
+ scale2_add_and_clamp(const rgbaint_t&, const rgbaint_t&, const rgbaint_t&)
+ scale_add_and_clamp(const rgbaint_t&, const rgbaint_t&);
+ scale_imm_add_and_clamp(const INT32, const rgbaint_t&);
+ static bilinear_filter(UINT32, UINT32, UINT32, UINT32, UINT8, UINT8)
+ bilinear_filter_rgbaint(UINT32, UINT32, UINT32, UINT32, UINT8, UINT8)
+ */
+
+ auto random_i32_nolimit = [this]
+ {
+ INT32 result;
+ do { result = random_i32(); } while ((result == std::numeric_limits<INT32>::min()) || (result == std::numeric_limits<INT32>::max()));
+ return result;
+ };
+
+ volatile INT32 expected_a, expected_r, expected_g, expected_b;
+ volatile INT32 actual_a, actual_r, actual_g, actual_b;
+ volatile INT32 imm;
+ rgbaint_t rgb, other;
+ rgb_t packed;
+ auto check_expected = [&] (const char *desc)
+ {
+ const volatile INT32 a = rgb.get_a32();
+ const volatile INT32 r = rgb.get_r32();
+ const volatile INT32 g = rgb.get_g32();
+ const volatile INT32 b = rgb.get_b32();
+ if (a != expected_a) osd_printf_error("Error testing %s get_a32() = %d (expected %d)\n", desc, a, expected_a);
+ if (r != expected_r) osd_printf_error("Error testing %s get_r32() = %d (expected %d)\n", desc, r, expected_r);
+ if (g != expected_g) osd_printf_error("Error testing %s get_g32() = %d (expected %d)\n", desc, g, expected_g);
+ if (b != expected_b) osd_printf_error("Error testing %s get_b32() = %d (expected %d)\n", desc, b, expected_b);
+ };
+
+ // check set/get
+ expected_a = random_i32();
+ expected_r = random_i32();
+ expected_g = random_i32();
+ expected_b = random_i32();
+ rgb.set(expected_a, expected_r, expected_g, expected_b);
+ check_expected("rgbaint_t::set(a, r, g, b)");
+
+ // check construct/set
+ expected_a = random_i32();
+ expected_r = random_i32();
+ expected_g = random_i32();
+ expected_b = random_i32();
+ rgb.set(rgbaint_t(expected_a, expected_r, expected_g, expected_b));
+ check_expected("rgbaint_t::set(rgbaint_t)");
+
+ // check construct/assign
+ expected_a = random_i32();
+ expected_r = random_i32();
+ expected_g = random_i32();
+ expected_b = random_i32();
+ rgb = rgbaint_t(expected_a, expected_r, expected_g, expected_b);
+ check_expected("rgbaint_t assignment");
+
+ // check piecewise set
+ rgb.set_a(expected_a = random_i32());
+ check_expected("rgbaint_t::set_a");
+ rgb.set_r(expected_r = random_i32());
+ check_expected("rgbaint_t::set_r");
+ rgb.set_g(expected_g = random_i32());
+ check_expected("rgbaint_t::set_g");
+ rgb.set_b(expected_b = random_i32());
+ check_expected("rgbaint_t::set_b");
+
+ // test merge_alpha
+ expected_a = rand();
+ rgb.merge_alpha(rgbaint_t(expected_a, rand(), rand(), rand()));
+ check_expected("rgbaint_t::merge_alpha");
+
+ // test RGB addition (method)
+ expected_a += actual_a = random_i32();
+ expected_r += actual_r = random_i32();
+ expected_g += actual_g = random_i32();
+ expected_b += actual_b = random_i32();
+ rgb.add(rgbaint_t(actual_a, actual_r, actual_g, actual_b));
+ check_expected("rgbaint_t::add");
+
+ // test RGB addition (operator)
+ expected_a += actual_a = random_i32();
+ expected_r += actual_r = random_i32();
+ expected_g += actual_g = random_i32();
+ expected_b += actual_b = random_i32();
+ rgb += rgbaint_t(actual_a, actual_r, actual_g, actual_b);
+ check_expected("rgbaint_t::operator+=");
+
+ // test offset addition (method)
+ imm = random_i32();
+ expected_a += imm;
+ expected_r += imm;
+ expected_g += imm;
+ expected_b += imm;
+ rgb.add_imm(imm);
+ check_expected("rgbaint_t::add_imm");
+
+ // test offset addition (operator)
+ imm = random_i32();
+ expected_a += imm;
+ expected_r += imm;
+ expected_g += imm;
+ expected_b += imm;
+ rgb += imm;
+ check_expected("rgbaint_t::operator+=");
+
+ // test immediate RGB addition
+ expected_a += actual_a = random_i32();
+ expected_r += actual_r = random_i32();
+ expected_g += actual_g = random_i32();
+ expected_b += actual_b = random_i32();
+ rgb.add_imm_rgba(actual_a, actual_r, actual_g, actual_b);
+ check_expected("rgbaint_t::add_imm_rgba");
+
+ // test RGB subtraction (method)
+ expected_a -= actual_a = random_i32();
+ expected_r -= actual_r = random_i32();
+ expected_g -= actual_g = random_i32();
+ expected_b -= actual_b = random_i32();
+ rgb.sub(rgbaint_t(actual_a, actual_r, actual_g, actual_b));
+ check_expected("rgbaint_t::sub");
+
+ // test RGB subtraction (operator)
+ expected_a -= actual_a = random_i32();
+ expected_r -= actual_r = random_i32();
+ expected_g -= actual_g = random_i32();
+ expected_b -= actual_b = random_i32();
+ rgb -= rgbaint_t(actual_a, actual_r, actual_g, actual_b);
+ check_expected("rgbaint_t::operator-=");
+
+ // test offset subtraction
+ imm = random_i32();
+ expected_a -= imm;
+ expected_r -= imm;
+ expected_g -= imm;
+ expected_b -= imm;
+ rgb.sub_imm(imm);
+ check_expected("rgbaint_t::sub_imm");
+
+ // test immediate RGB subtraction
+ expected_a -= actual_a = random_i32();
+ expected_r -= actual_r = random_i32();
+ expected_g -= actual_g = random_i32();
+ expected_b -= actual_b = random_i32();
+ rgb.sub_imm_rgba(actual_a, actual_r, actual_g, actual_b);
+ check_expected("rgbaint_t::sub_imm_rgba");
+
+ // test reversed RGB subtraction
+ expected_a = (actual_a = random_i32()) - expected_a;
+ expected_r = (actual_r = random_i32()) - expected_r;
+ expected_g = (actual_g = random_i32()) - expected_g;
+ expected_b = (actual_b = random_i32()) - expected_b;
+ rgb.subr(rgbaint_t(actual_a, actual_r, actual_g, actual_b));
+ check_expected("rgbaint_t::subr");
+
+ // test reversed offset subtraction
+ imm = random_i32();
+ expected_a = imm - expected_a;
+ expected_r = imm - expected_r;
+ expected_g = imm - expected_g;
+ expected_b = imm - expected_b;
+ rgb.subr_imm(imm);
+ check_expected("rgbaint_t::subr_imm");
+
+ // test reversed immediate RGB subtraction
+ expected_a = (actual_a = random_i32()) - expected_a;
+ expected_r = (actual_r = random_i32()) - expected_r;
+ expected_g = (actual_g = random_i32()) - expected_g;
+ expected_b = (actual_b = random_i32()) - expected_b;
+ rgb.subr_imm_rgba(actual_a, actual_r, actual_g, actual_b);
+ check_expected("rgbaint_t::subr_imm_rgba");
+
+ // test RGB multiplication (method)
+ expected_a *= actual_a = random_i32();
+ expected_r *= actual_r = random_i32();
+ expected_g *= actual_g = random_i32();
+ expected_b *= actual_b = random_i32();
+ rgb.mul(rgbaint_t(actual_a, actual_r, actual_g, actual_b));
+ check_expected("rgbaint_t::mul");
+
+ // test RGB multiplication (operator)
+ expected_a *= actual_a = random_i32();
+ expected_r *= actual_r = random_i32();
+ expected_g *= actual_g = random_i32();
+ expected_b *= actual_b = random_i32();
+ rgb *= rgbaint_t(actual_a, actual_r, actual_g, actual_b);
+ check_expected("rgbaint_t::operator*=");
+
+ // test factor multiplication (method)
+ imm = random_i32();
+ expected_a *= imm;
+ expected_r *= imm;
+ expected_g *= imm;
+ expected_b *= imm;
+ rgb.mul_imm(imm);
+ check_expected("rgbaint_t::mul_imm");
+
+ // test factor multiplication (operator)
+ imm = random_i32();
+ expected_a *= imm;
+ expected_r *= imm;
+ expected_g *= imm;
+ expected_b *= imm;
+ rgb *= imm;
+ check_expected("rgbaint_t::operator*=");
+
+ // test immediate RGB multiplication
+ expected_a *= actual_a = random_i32();
+ expected_r *= actual_r = random_i32();
+ expected_g *= actual_g = random_i32();
+ expected_b *= actual_b = random_i32();
+ rgb.mul_imm_rgba(actual_a, actual_r, actual_g, actual_b);
+ check_expected("rgbaint_t::mul_imm_rgba");
+
+ // test RGB and not
+ expected_a &= ~(actual_a = random_i32());
+ expected_r &= ~(actual_r = random_i32());
+ expected_g &= ~(actual_g = random_i32());
+ expected_b &= ~(actual_b = random_i32());
+ rgb.andnot_reg(rgbaint_t(actual_a, actual_r, actual_g, actual_b));
+ check_expected("rgbaint_t::andnot_reg");
+
+ // test RGB or
+ expected_a |= actual_a = random_i32();
+ expected_r |= actual_r = random_i32();
+ expected_g |= actual_g = random_i32();
+ expected_b |= actual_b = random_i32();
+ rgb.or_reg(rgbaint_t(actual_a, actual_r, actual_g, actual_b));
+ check_expected("rgbaint_t::or_reg");
+
+ // test RGB and
+ expected_a &= actual_a = random_i32();
+ expected_r &= actual_r = random_i32();
+ expected_g &= actual_g = random_i32();
+ expected_b &= actual_b = random_i32();
+ rgb.and_reg(rgbaint_t(actual_a, actual_r, actual_g, actual_b));
+ check_expected("rgbaint_t::and_reg");
+
+ // test RGB xor
+ expected_a ^= actual_a = random_i32();
+ expected_r ^= actual_r = random_i32();
+ expected_g ^= actual_g = random_i32();
+ expected_b ^= actual_b = random_i32();
+ rgb.xor_reg(rgbaint_t(actual_a, actual_r, actual_g, actual_b));
+ check_expected("rgbaint_t::xor_reg");
+
+ // test uniform or
+ imm = random_i32();
+ expected_a |= imm;
+ expected_r |= imm;
+ expected_g |= imm;
+ expected_b |= imm;
+ rgb.or_imm(imm);
+ check_expected("rgbaint_t::or_imm");
+
+ // test uniform and
+ imm = random_i32();
+ expected_a &= imm;
+ expected_r &= imm;
+ expected_g &= imm;
+ expected_b &= imm;
+ rgb.and_imm(imm);
+ check_expected("rgbaint_t::and_imm");
+
+ // test uniform xor
+ imm = random_i32();
+ expected_a ^= imm;
+ expected_r ^= imm;
+ expected_g ^= imm;
+ expected_b ^= imm;
+ rgb.xor_imm(imm);
+ check_expected("rgbaint_t::xor_imm");
+
+ // test immediate RGB or
+ expected_a |= actual_a = random_i32();
+ expected_r |= actual_r = random_i32();
+ expected_g |= actual_g = random_i32();
+ expected_b |= actual_b = random_i32();
+ rgb.or_imm_rgba(actual_a, actual_r, actual_g, actual_b);
+ check_expected("rgbaint_t::or_imm_rgba");
+
+ // test immediate RGB and
+ expected_a &= actual_a = random_i32();
+ expected_r &= actual_r = random_i32();
+ expected_g &= actual_g = random_i32();
+ expected_b &= actual_b = random_i32();
+ rgb.and_imm_rgba(actual_a, actual_r, actual_g, actual_b);
+ check_expected("rgbaint_t::and_imm_rgba");
+
+ // test immediate RGB xor
+ expected_a ^= actual_a = random_i32();
+ expected_r ^= actual_r = random_i32();
+ expected_g ^= actual_g = random_i32();
+ expected_b ^= actual_b = random_i32();
+ rgb.xor_imm_rgba(actual_a, actual_r, actual_g, actual_b);
+ check_expected("rgbaint_t::xor_imm_rgba");
+
+ // test 8-bit get
+ expected_a = INT32(UINT32(expected_a) & 0x00ff);
+ expected_r = INT32(UINT32(expected_r) & 0x00ff);
+ expected_g = INT32(UINT32(expected_g) & 0x00ff);
+ expected_b = INT32(UINT32(expected_b) & 0x00ff);
+ actual_a = INT32(UINT32(rgb.get_a()));
+ actual_r = INT32(UINT32(rgb.get_r()));
+ actual_g = INT32(UINT32(rgb.get_g()));
+ actual_b = INT32(UINT32(rgb.get_b()));
+ if (actual_a != expected_a) osd_printf_error("Error testing rgbaint_t::get_a() = %d (expected %d)\n", actual_a, expected_a);
+ if (actual_r != expected_r) osd_printf_error("Error testing rgbaint_t::get_r() = %d (expected %d)\n", actual_r, expected_r);
+ if (actual_g != expected_g) osd_printf_error("Error testing rgbaint_t::get_g() = %d (expected %d)\n", actual_g, expected_g);
+ if (actual_b != expected_b) osd_printf_error("Error testing rgbaint_t::get_b() = %d (expected %d)\n", actual_b, expected_b);
+
+ // test set from packed RGBA
+ imm = random_i32();
+ expected_a = INT32((UINT32(imm) >> 24) & 0x00ff);
+ expected_r = INT32((UINT32(imm) >> 16) & 0x00ff);
+ expected_g = INT32((UINT32(imm) >> 8) & 0x00ff);
+ expected_b = INT32((UINT32(imm) >> 0) & 0x00ff);
+ rgb.set(UINT32(imm));
+ check_expected("rgbaint_t::set(UINT32)");
+
+ // while we have a value loaded that we know doesn't exceed 8-bit range, check the non-clamping convert-to-rgba
+ packed = rgb.to_rgba();
+ if (UINT32(imm) != UINT32(packed))
+ osd_printf_error("Error testing rgbaint_t::to_rgba() = %08x (expected %08x)\n", UINT32(packed), UINT32(imm));
+
+ // test construct from packed RGBA and assign
+ imm = random_i32();
+ expected_a = INT32((UINT32(imm) >> 24) & 0x00ff);
+ expected_r = INT32((UINT32(imm) >> 16) & 0x00ff);
+ expected_g = INT32((UINT32(imm) >> 8) & 0x00ff);
+ expected_b = INT32((UINT32(imm) >> 0) & 0x00ff);
+ rgb = rgbaint_t(UINT32(imm));
+ check_expected("rgbaint_t(UINT32)");
+
+ // while we have a value loaded that we know doesn't exceed 8-bit range, check the non-clamping convert-to-rgba
+ packed = rgb.to_rgba();
+ if (UINT32(imm) != UINT32(packed))
+ osd_printf_error("Error testing rgbaint_t::to_rgba() = %08x (expected %08x)\n", UINT32(packed), UINT32(imm));
+
+ // test set with rgb_t
+ packed = random_u32();
+ expected_a = INT32(UINT32(packed.a()));
+ expected_r = INT32(UINT32(packed.r()));
+ expected_g = INT32(UINT32(packed.g()));
+ expected_b = INT32(UINT32(packed.b()));
+ rgb.set(packed);
+ check_expected("rgbaint_t::set(rgba_t)");
+
+ // test construct with rgb_t
+ packed = random_u32();
+ expected_a = INT32(UINT32(packed.a()));
+ expected_r = INT32(UINT32(packed.r()));
+ expected_g = INT32(UINT32(packed.g()));
+ expected_b = INT32(UINT32(packed.b()));
+ rgb = rgbaint_t(packed);
+ check_expected("rgbaint_t::set(rgba_t)");
+
+ // test clamping convert-to-rgba with hand-crafted values to catch edge cases
+ rgb.set(std::numeric_limits<INT32>::min(), -1, 0, 1);
+ packed = rgb.to_rgba_clamp();
+ if (UINT32(0x00000001) != UINT32(packed))
+ osd_printf_error("Error testing rgbaint_t::to_rgba_clamp() = %08x (expected 0x00000001)\n", UINT32(packed));
+ rgb.set(254, 255, 256, std::numeric_limits<INT32>::max());
+ packed = rgb.to_rgba_clamp();
+ if (UINT32(0xfeffffff) != UINT32(packed))
+ osd_printf_error("Error testing rgbaint_t::to_rgba_clamp() = %08x (expected 0xfeffffff)\n", UINT32(packed));
+ rgb.set(std::numeric_limits<INT32>::max(), std::numeric_limits<INT32>::min(), 256, -1);
+ packed = rgb.to_rgba_clamp();
+ if (UINT32(0xff00ff00) != UINT32(packed))
+ osd_printf_error("Error testing rgbaint_t::to_rgba_clamp() = %08x (expected 0xff00ff00)\n", UINT32(packed));
+ rgb.set(0, 255, 1, 254);
+ packed = rgb.to_rgba_clamp();
+ if (UINT32(0x00ff01fe) != UINT32(packed))
+ osd_printf_error("Error testing rgbaint_t::to_rgba_clamp() = %08x (expected 0x00ff01fe)\n", UINT32(packed));
+
+ // test in-place clamping with hand-crafted values to catch edge cases
+ expected_a = 0;
+ expected_r = 0;
+ expected_g = 0;
+ expected_b = 1;
+ rgb.set(std::numeric_limits<INT32>::min(), -1, 0, 1);
+ rgb.clamp_to_uint8();
+ check_expected("rgbaint_t::clamp_to_uint8");
+ expected_a = 254;
+ expected_r = 255;
+ expected_g = 255;
+ expected_b = 255;
+ rgb.set(254, 255, 256, std::numeric_limits<INT32>::max());
+ rgb.clamp_to_uint8();
+ check_expected("rgbaint_t::clamp_to_uint8");
+ expected_a = 255;
+ expected_r = 0;
+ expected_g = 255;
+ expected_b = 0;
+ rgb.set(std::numeric_limits<INT32>::max(), std::numeric_limits<INT32>::min(), 256, -1);
+ rgb.clamp_to_uint8();
+ check_expected("rgbaint_t::clamp_to_uint8");
+ expected_a = 0;
+ expected_r = 255;
+ expected_g = 1;
+ expected_b = 254;
+ rgb.set(0, 255, 1, 254);
+ rgb.clamp_to_uint8();
+ check_expected("rgbaint_t::clamp_to_uint8");
+
+ // test shift left
+ expected_a = (actual_a = random_i32()) << 19;
+ expected_r = (actual_r = random_i32()) << 3;
+ expected_g = (actual_g = random_i32()) << 21;
+ expected_b = (actual_b = random_i32()) << 6;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.shl(rgbaint_t(19, 3, 21, 6));
+ check_expected("rgbaint_t::shl");
+
+ // test shift left immediate
+ expected_a = (actual_a = random_i32()) << 7;
+ expected_r = (actual_r = random_i32()) << 7;
+ expected_g = (actual_g = random_i32()) << 7;
+ expected_b = (actual_b = random_i32()) << 7;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.shl_imm(7);
+ check_expected("rgbaint_t::shl_imm");
+
+ // test logical shift right
+ expected_a = INT32(UINT32(actual_a = random_i32()) >> 8);
+ expected_r = INT32(UINT32(actual_r = random_i32()) >> 18);
+ expected_g = INT32(UINT32(actual_g = random_i32()) >> 26);
+ expected_b = INT32(UINT32(actual_b = random_i32()) >> 4);
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.shr(rgbaint_t(8, 18, 26, 4));
+ check_expected("rgbaint_t::shr");
+
+ // test logical shift right with opposite signs
+ expected_a = INT32(UINT32(actual_a = -actual_a) >> 21);
+ expected_r = INT32(UINT32(actual_r = -actual_r) >> 13);
+ expected_g = INT32(UINT32(actual_g = -actual_g) >> 11);
+ expected_b = INT32(UINT32(actual_b = -actual_b) >> 17);
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.shr(rgbaint_t(21, 13, 11, 17));
+ check_expected("rgbaint_t::shr");
+
+ // test logical shift right immediate
+ expected_a = INT32(UINT32(actual_a = random_i32()) >> 5);
+ expected_r = INT32(UINT32(actual_r = random_i32()) >> 5);
+ expected_g = INT32(UINT32(actual_g = random_i32()) >> 5);
+ expected_b = INT32(UINT32(actual_b = random_i32()) >> 5);
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.shr_imm(5);
+ check_expected("rgbaint_t::shr_imm");
+
+ // test logical shift right immediate with opposite signs
+ expected_a = INT32(UINT32(actual_a = -actual_a) >> 15);
+ expected_r = INT32(UINT32(actual_r = -actual_r) >> 15);
+ expected_g = INT32(UINT32(actual_g = -actual_g) >> 15);
+ expected_b = INT32(UINT32(actual_b = -actual_b) >> 15);
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.shr_imm(15);
+ check_expected("rgbaint_t::shr_imm");
+
+ // test arithmetic shift right
+ expected_a = (actual_a = random_i32()) >> 16;
+ expected_r = (actual_r = random_i32()) >> 20;
+ expected_g = (actual_g = random_i32()) >> 14;
+ expected_b = (actual_b = random_i32()) >> 2;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.sra(rgbaint_t(16, 20, 14, 2));
+ check_expected("rgbaint_t::sra");
+
+ // test arithmetic shift right with opposite signs
+ expected_a = (actual_a = -actual_a) >> 1;
+ expected_r = (actual_r = -actual_r) >> 29;
+ expected_g = (actual_g = -actual_g) >> 10;
+ expected_b = (actual_b = -actual_b) >> 22;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.sra(rgbaint_t(1, 29, 10, 22));
+ check_expected("rgbaint_t::sra");
+
+ // test arithmetic shift right immediate (method)
+ expected_a = (actual_a = random_i32()) >> 12;
+ expected_r = (actual_r = random_i32()) >> 12;
+ expected_g = (actual_g = random_i32()) >> 12;
+ expected_b = (actual_b = random_i32()) >> 12;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.sra_imm(12);
+ check_expected("rgbaint_t::sra_imm");
+
+ // test arithmetic shift right immediate with opposite signs (method)
+ expected_a = (actual_a = -actual_a) >> 9;
+ expected_r = (actual_r = -actual_r) >> 9;
+ expected_g = (actual_g = -actual_g) >> 9;
+ expected_b = (actual_b = -actual_b) >> 9;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.sra_imm(9);
+ check_expected("rgbaint_t::sra_imm");
+
+ // test arithmetic shift right immediate (operator)
+ expected_a = (actual_a = random_i32()) >> 7;
+ expected_r = (actual_r = random_i32()) >> 7;
+ expected_g = (actual_g = random_i32()) >> 7;
+ expected_b = (actual_b = random_i32()) >> 7;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb >>= 7;
+ check_expected("rgbaint_t::operator>>=");
+
+ // test arithmetic shift right immediate with opposite signs (operator)
+ expected_a = (actual_a = -actual_a) >> 11;
+ expected_r = (actual_r = -actual_r) >> 11;
+ expected_g = (actual_g = -actual_g) >> 11;
+ expected_b = (actual_b = -actual_b) >> 11;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb >>= 11;
+ check_expected("rgbaint_t::operator>>=");
+
+ // test RGB equality comparison
+ actual_a = random_i32_nolimit();
+ actual_r = random_i32_nolimit();
+ actual_g = random_i32_nolimit();
+ actual_b = random_i32_nolimit();
+ expected_a = ~INT32(0);
+ expected_r = 0;
+ expected_g = 0;
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpeq(rgbaint_t(actual_a, actual_r - 1, actual_g + 1, std::numeric_limits<INT32>::min()));
+ check_expected("rgbaint_t::cmpeq");
+ expected_a = 0;
+ expected_r = ~INT32(0);
+ expected_g = 0;
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpeq(rgbaint_t(std::numeric_limits<INT32>::max(), actual_r, actual_g - 1, actual_b + 1));
+ check_expected("rgbaint_t::cmpeq");
+
+ // test immediate equality comparison
+ actual_a = random_i32_nolimit();
+ actual_r = random_i32_nolimit();
+ actual_g = random_i32_nolimit();
+ actual_b = random_i32_nolimit();
+ expected_a = ~INT32(0);
+ expected_r = (actual_r == actual_a) ? ~INT32(0) : 0;
+ expected_g = (actual_g == actual_a) ? ~INT32(0) : 0;
+ expected_b = (actual_b == actual_a) ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpeq_imm(actual_a);
+ check_expected("rgbaint_t::cmpeq_imm");
+ expected_a = (actual_a == actual_r) ? ~INT32(0) : 0;
+ expected_r = ~INT32(0);
+ expected_g = (actual_g == actual_r) ? ~INT32(0) : 0;
+ expected_b = (actual_b == actual_r) ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpeq_imm(actual_r);
+ check_expected("rgbaint_t::cmpeq_imm");
+ expected_a = (actual_a == actual_g) ? ~INT32(0) : 0;
+ expected_r = (actual_r == actual_g) ? ~INT32(0) : 0;
+ expected_g = ~INT32(0);
+ expected_b = (actual_b == actual_g) ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpeq_imm(actual_g);
+ check_expected("rgbaint_t::cmpeq_imm");
+ expected_a = (actual_a == actual_b) ? ~INT32(0) : 0;
+ expected_r = (actual_r == actual_b) ? ~INT32(0) : 0;
+ expected_g = (actual_g == actual_b) ? ~INT32(0) : 0;
+ expected_b = ~INT32(0);
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpeq_imm(actual_b);
+ check_expected("rgbaint_t::cmpeq_imm");
+ expected_a = 0;
+ expected_r = 0;
+ expected_g = 0;
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpeq_imm(std::numeric_limits<INT32>::min());
+ check_expected("rgbaint_t::cmpeq_imm");
+ expected_a = !actual_a ? ~INT32(0) : 0;
+ expected_r = !actual_r ? ~INT32(0) : 0;
+ expected_g = !actual_g ? ~INT32(0) : 0;
+ expected_b = !actual_b ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpeq_imm(0);
+ check_expected("rgbaint_t::cmpeq_imm");
+ expected_a = 0;
+ expected_r = 0;
+ expected_g = 0;
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpeq_imm(std::numeric_limits<INT32>::max());
+ check_expected("rgbaint_t::cmpeq_imm");
+
+ // test immediate RGB equality comparison
+ actual_a = random_i32_nolimit();
+ actual_r = random_i32_nolimit();
+ actual_g = random_i32_nolimit();
+ actual_b = random_i32_nolimit();
+ expected_a = 0;
+ expected_r = 0;
+ expected_g = ~INT32(0);
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpeq_imm_rgba(std::numeric_limits<INT32>::min(), std::numeric_limits<INT32>::max(), actual_g, actual_b - 1);
+ check_expected("rgbaint_t::cmpeq_imm_rgba");
+ expected_a = 0;
+ expected_r = 0;
+ expected_g = 0;
+ expected_b = ~INT32(0);
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpeq_imm_rgba(actual_a + 1, std::numeric_limits<INT32>::min(), std::numeric_limits<INT32>::max(), actual_b);
+ check_expected("rgbaint_t::cmpeq_imm_rgba");
+
+ // test RGB greater than comparison
+ actual_a = random_i32_nolimit();
+ actual_r = random_i32_nolimit();
+ actual_g = random_i32_nolimit();
+ actual_b = random_i32_nolimit();
+ expected_a = 0;
+ expected_r = ~INT32(0);
+ expected_g = 0;
+ expected_b = ~INT32(0);
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpgt(rgbaint_t(actual_a, actual_r - 1, actual_g + 1, std::numeric_limits<INT32>::min()));
+ check_expected("rgbaint_t::cmpgt");
+ expected_a = 0;
+ expected_r = 0;
+ expected_g = ~INT32(0);
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpgt(rgbaint_t(std::numeric_limits<INT32>::max(), actual_r, actual_g - 1, actual_b + 1));
+ check_expected("rgbaint_t::cmpgt");
+
+ // test immediate greater than comparison
+ actual_a = random_i32_nolimit();
+ actual_r = random_i32_nolimit();
+ actual_g = random_i32_nolimit();
+ actual_b = random_i32_nolimit();
+ expected_a = 0;
+ expected_r = (actual_r > actual_a) ? ~INT32(0) : 0;
+ expected_g = (actual_g > actual_a) ? ~INT32(0) : 0;
+ expected_b = (actual_b > actual_a) ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpgt_imm(actual_a);
+ check_expected("rgbaint_t::cmpgt_imm");
+ expected_a = (actual_a > actual_r) ? ~INT32(0) : 0;
+ expected_r = 0;
+ expected_g = (actual_g > actual_r) ? ~INT32(0) : 0;
+ expected_b = (actual_b > actual_r) ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpgt_imm(actual_r);
+ check_expected("rgbaint_t::cmpgt_imm");
+ expected_a = (actual_a > actual_g) ? ~INT32(0) : 0;
+ expected_r = (actual_r > actual_g) ? ~INT32(0) : 0;
+ expected_g =0;
+ expected_b = (actual_b > actual_g) ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpgt_imm(actual_g);
+ check_expected("rgbaint_t::cmpgt_imm");
+ expected_a = (actual_a > actual_b) ? ~INT32(0) : 0;
+ expected_r = (actual_r > actual_b) ? ~INT32(0) : 0;
+ expected_g = (actual_g > actual_b) ? ~INT32(0) : 0;
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpgt_imm(actual_b);
+ check_expected("rgbaint_t::cmpgt_imm");
+ expected_a = ~INT32(0);
+ expected_r = ~INT32(0);
+ expected_g = ~INT32(0);
+ expected_b = ~INT32(0);
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpgt_imm(std::numeric_limits<INT32>::min());
+ check_expected("rgbaint_t::cmpgt_imm");
+ expected_a = (actual_a > 0) ? ~INT32(0) : 0;
+ expected_r = (actual_r > 0) ? ~INT32(0) : 0;
+ expected_g = (actual_g > 0) ? ~INT32(0) : 0;
+ expected_b = (actual_b > 0) ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpgt_imm(0);
+ check_expected("rgbaint_t::cmpgt_imm");
+ expected_a = 0;
+ expected_r = 0;
+ expected_g = 0;
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpgt_imm(std::numeric_limits<INT32>::max());
+ check_expected("rgbaint_t::cmpgt_imm");
+
+ // test immediate RGB greater than comparison
+ actual_a = random_i32_nolimit();
+ actual_r = random_i32_nolimit();
+ actual_g = random_i32_nolimit();
+ actual_b = random_i32_nolimit();
+ expected_a = ~INT32(0);
+ expected_r = 0;
+ expected_g = 0;
+ expected_b = ~INT32(0);
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpgt_imm_rgba(std::numeric_limits<INT32>::min(), std::numeric_limits<INT32>::max(), actual_g, actual_b - 1);
+ check_expected("rgbaint_t::cmpgt_imm_rgba");
+ expected_a = 0;
+ expected_r = ~INT32(0);
+ expected_g = 0;
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmpgt_imm_rgba(actual_a + 1, std::numeric_limits<INT32>::min(), std::numeric_limits<INT32>::max(), actual_b);
+ check_expected("rgbaint_t::cmpgt_imm_rgba");
+
+ // test RGB less than comparison
+ actual_a = random_i32_nolimit();
+ actual_r = random_i32_nolimit();
+ actual_g = random_i32_nolimit();
+ actual_b = random_i32_nolimit();
+ expected_a = 0;
+ expected_r = 0;
+ expected_g = ~INT32(0);
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmplt(rgbaint_t(actual_a, actual_r - 1, actual_g + 1, std::numeric_limits<INT32>::min()));
+ check_expected("rgbaint_t::cmplt");
+ expected_a = ~INT32(0);
+ expected_r = 0;
+ expected_g = 0;
+ expected_b = ~INT32(0);
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmplt(rgbaint_t(std::numeric_limits<INT32>::max(), actual_r, actual_g - 1, actual_b + 1));
+ check_expected("rgbaint_t::cmplt");
+
+ // test immediate less than comparison
+ actual_a = random_i32_nolimit();
+ actual_r = random_i32_nolimit();
+ actual_g = random_i32_nolimit();
+ actual_b = random_i32_nolimit();
+ expected_a = 0;
+ expected_r = (actual_r < actual_a) ? ~INT32(0) : 0;
+ expected_g = (actual_g < actual_a) ? ~INT32(0) : 0;
+ expected_b = (actual_b < actual_a) ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmplt_imm(actual_a);
+ check_expected("rgbaint_t::cmplt_imm");
+ expected_a = (actual_a < actual_r) ? ~INT32(0) : 0;
+ expected_r = 0;
+ expected_g = (actual_g < actual_r) ? ~INT32(0) : 0;
+ expected_b = (actual_b < actual_r) ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmplt_imm(actual_r);
+ check_expected("rgbaint_t::cmplt_imm");
+ expected_a = (actual_a < actual_g) ? ~INT32(0) : 0;
+ expected_r = (actual_r < actual_g) ? ~INT32(0) : 0;
+ expected_g =0;
+ expected_b = (actual_b < actual_g) ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmplt_imm(actual_g);
+ check_expected("rgbaint_t::cmplt_imm");
+ expected_a = (actual_a < actual_b) ? ~INT32(0) : 0;
+ expected_r = (actual_r < actual_b) ? ~INT32(0) : 0;
+ expected_g = (actual_g < actual_b) ? ~INT32(0) : 0;
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmplt_imm(actual_b);
+ check_expected("rgbaint_t::cmplt_imm");
+ expected_a = 0;
+ expected_r = 0;
+ expected_g = 0;
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmplt_imm(std::numeric_limits<INT32>::min());
+ check_expected("rgbaint_t::cmplt_imm");
+ expected_a = (actual_a < 0) ? ~INT32(0) : 0;
+ expected_r = (actual_r < 0) ? ~INT32(0) : 0;
+ expected_g = (actual_g < 0) ? ~INT32(0) : 0;
+ expected_b = (actual_b < 0) ? ~INT32(0) : 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmplt_imm(0);
+ check_expected("rgbaint_t::cmplt_imm");
+ expected_a = ~INT32(0);
+ expected_r = ~INT32(0);
+ expected_g = ~INT32(0);
+ expected_b = ~INT32(0);
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmplt_imm(std::numeric_limits<INT32>::max());
+ check_expected("rgbaint_t::cmplt_imm");
+
+ // test immediate RGB less than comparison
+ actual_a = random_i32_nolimit();
+ actual_r = random_i32_nolimit();
+ actual_g = random_i32_nolimit();
+ actual_b = random_i32_nolimit();
+ expected_a = 0;
+ expected_r = ~INT32(0);
+ expected_g = 0;
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmplt_imm_rgba(std::numeric_limits<INT32>::min(), std::numeric_limits<INT32>::max(), actual_g, actual_b - 1);
+ check_expected("rgbaint_t::cmplt_imm_rgba");
+ expected_a = ~INT32(0);
+ expected_r = 0;
+ expected_g = ~INT32(0);
+ expected_b = 0;
+ rgb.set(actual_a, actual_r, actual_g, actual_b);
+ rgb.cmplt_imm_rgba(actual_a + 1, std::numeric_limits<INT32>::min(), std::numeric_limits<INT32>::max(), actual_b);
+ check_expected("rgbaint_t::cmplt_imm_rgba");
+}
+
+
+//-------------------------------------------------
// validate_driver - validate basic driver
// information
//-------------------------------------------------
@@ -632,7 +1477,7 @@ void validity_checker::validate_roms()
total_files++;
// make sure the hash is valid
- hash_collection hashes;
+ util::hash_collection hashes;
if (!hashes.from_internal_string(ROM_GETHASHDATA(romp)))
osd_printf_error("ROM '%s' has an invalid hash string '%s'\n", last_name, ROM_GETHASHDATA(romp));
}
@@ -1024,42 +1869,45 @@ void validity_checker::output_callback(osd_output_channel channel, const char *m
std::string output;
switch (channel)
{
- case OSD_OUTPUT_CHANNEL_ERROR:
- // count the error
- m_errors++;
+ case OSD_OUTPUT_CHANNEL_ERROR:
+ // count the error
+ m_errors++;
- // output the source(driver) device 'tag'
- build_output_prefix(output);
+ // output the source(driver) device 'tag'
+ build_output_prefix(output);
- // generate the string
- strcatvprintf(output, msg, args);
- m_error_text.append(output);
- break;
- case OSD_OUTPUT_CHANNEL_WARNING:
- // count the error
- m_warnings++;
+ // generate the string
+ strcatvprintf(output, msg, args);
+ m_error_text.append(output);
+ break;
- // output the source(driver) device 'tag'
- build_output_prefix(output);
+ case OSD_OUTPUT_CHANNEL_WARNING:
+ // count the error
+ m_warnings++;
- // generate the string and output to the original target
- strcatvprintf(output, msg, args);
- m_warning_text.append(output);
- break;
- case OSD_OUTPUT_CHANNEL_VERBOSE:
- // if we're not verbose, skip it
- if (!m_print_verbose) break;
+ // output the source(driver) device 'tag'
+ build_output_prefix(output);
- // output the source(driver) device 'tag'
- build_output_prefix(output);
+ // generate the string and output to the original target
+ strcatvprintf(output, msg, args);
+ m_warning_text.append(output);
+ break;
- // generate the string and output to the original target
- strcatvprintf(output, msg, args);
- m_verbose_text.append(output);
- break;
- default:
- chain_output(channel, msg, args);
- break;
+ case OSD_OUTPUT_CHANNEL_VERBOSE:
+ // if we're not verbose, skip it
+ if (!m_print_verbose) break;
+
+ // output the source(driver) device 'tag'
+ build_output_prefix(output);
+
+ // generate the string and output to the original target
+ strcatvprintf(output, msg, args);
+ m_verbose_text.append(output);
+ break;
+
+ default:
+ chain_output(channel, msg, args);
+ break;
}
}
@@ -1075,7 +1923,7 @@ void validity_checker::output_via_delegate(osd_output_channel channel, const cha
// call through to the delegate with the proper parameters
va_start(argptr, format);
- this->chain_output(channel, format, argptr);
+ chain_output(channel, format, argptr);
va_end(argptr);
}
diff --git a/docs/release/src/frontend/mame/audit.cpp b/docs/release/src/frontend/mame/audit.cpp
index e0db3da3cb3..ed811e7ec39 100644
--- a/docs/release/src/frontend/mame/audit.cpp
+++ b/docs/release/src/frontend/mame/audit.cpp
@@ -25,9 +25,9 @@
//-------------------------------------------------
media_auditor::media_auditor(const driver_enumerator &enumerator)
- : m_enumerator(enumerator),
- m_validation(AUDIT_VALIDATE_FULL),
- m_searchpath(nullptr)
+ : m_enumerator(enumerator)
+ , m_validation(AUDIT_VALIDATE_FULL)
+ , m_searchpath(nullptr)
{
}
@@ -40,7 +40,7 @@ media_auditor::media_auditor(const driver_enumerator &enumerator)
media_auditor::summary media_auditor::audit_media(const char *validation)
{
// start fresh
- m_record_list.reset();
+ m_record_list.clear();
// store validation for later
m_validation = validation;
@@ -49,10 +49,10 @@ media_auditor::summary media_auditor::audit_media(const char *validation)
// all searches
const char *driverpath = m_enumerator.config().root_device().searchpath();
- int found = 0;
- int required = 0;
- int shared_found = 0;
- int shared_required = 0;
+ std::size_t found = 0;
+ std::size_t required = 0;
+ std::size_t shared_found = 0;
+ std::size_t shared_required = 0;
// iterate over devices and regions
for (device_t &device : device_iterator(m_enumerator.config().root_device()))
@@ -61,44 +61,41 @@ const char *driverpath = m_enumerator.config().root_device().searchpath();
m_searchpath = device.searchpath();
// now iterate over regions and ROMs within
- for (const rom_entry *region = rom_first_region(device); region != nullptr; region = rom_next_region(region))
+ for (const rom_entry *region = rom_first_region(device); region; region = rom_next_region(region))
{
// temporary hack: add the driver path & region name
-std::string combinedpath = std::string(device.searchpath()).append(";").append(driverpath);
+std::string combinedpath = util::string_format("%s;%s", device.searchpath(), driverpath);
if (device.shortname())
combinedpath.append(";").append(device.shortname());
m_searchpath = combinedpath.c_str();
for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
{
- const char *name = ROM_GETNAME(rom);
- hash_collection hashes(ROM_GETHASHDATA(rom));
- device_t *shared_device = find_shared_device(device, name, hashes, ROM_GETLENGTH(rom));
+ char const *const name(ROM_GETNAME(rom));
+ util::hash_collection const hashes(ROM_GETHASHDATA(rom));
+ device_t *const shared_device(find_shared_device(device, name, hashes, ROM_GETLENGTH(rom)));
// count the number of files with hashes
- if (!hashes.flag(hash_collection::FLAG_NO_DUMP) && !ROM_ISOPTIONAL(rom))
+ if (!hashes.flag(util::hash_collection::FLAG_NO_DUMP) && !ROM_ISOPTIONAL(rom))
{
required++;
- if (shared_device != nullptr)
+ if (shared_device)
shared_required++;
}
- // audit a file
audit_record *record = nullptr;
if (ROMREGION_ISROMDATA(region))
- record = audit_one_rom(rom);
-
- // audit a disk
+ record = &audit_one_rom(rom);
else if (ROMREGION_ISDISKDATA(region))
- record = audit_one_disk(rom);
+ record = &audit_one_disk(rom, nullptr);
- if (record != nullptr)
+ if (record)
{
// count the number of files that are found.
- if (record->status() == audit_record::STATUS_GOOD || (record->status() == audit_record::STATUS_FOUND_INVALID && find_shared_device(device, name, record->actual_hashes(), record->actual_length()) == nullptr))
+ if ((record->status() == audit_status::GOOD) || ((record->status() == audit_status::FOUND_INVALID) && !find_shared_device(device, name, record->actual_hashes(), record->actual_length())))
{
found++;
- if (shared_device != nullptr)
+ if (shared_device)
shared_found++;
}
@@ -109,9 +106,9 @@ m_searchpath = combinedpath.c_str();
}
// if we only find files that are in the parent & either the set has no unique files or the parent is not found, then assume we don't have the set at all
- if (found == shared_found && required > 0 && (required != shared_required || shared_found == 0))
+ if ((found == shared_found) && (required > 0) && ((required != shared_required) || (shared_found == 0)))
{
- m_record_list.reset();
+ m_record_list.clear();
return NOTFOUND;
}
@@ -127,48 +124,20 @@ m_searchpath = combinedpath.c_str();
media_auditor::summary media_auditor::audit_device(device_t &device, const char *validation)
{
// start fresh
- m_record_list.reset();
+ m_record_list.clear();
// store validation for later
m_validation = validation;
m_searchpath = device.shortname();
- int found = 0;
- int required = 0;
-
- // now iterate over regions and ROMs within
- for (const rom_entry *region = rom_first_region(device); region != nullptr; region = rom_next_region(region))
- {
- for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
- {
- hash_collection hashes(ROM_GETHASHDATA(rom));
-
- // count the number of files with hashes
- if (!hashes.flag(hash_collection::FLAG_NO_DUMP) && !ROM_ISOPTIONAL(rom))
- {
- required++;
- }
-
- // audit a file
- audit_record *record = nullptr;
- if (ROMREGION_ISROMDATA(region))
- record = audit_one_rom(rom);
-
- // audit a disk
- else if (ROMREGION_ISDISKDATA(region))
- record = audit_one_disk(rom);
+ std::size_t found = 0;
+ std::size_t required = 0;
- // count the number of files that are found.
- if (record != nullptr && (record->status() == audit_record::STATUS_GOOD || record->status() == audit_record::STATUS_FOUND_INVALID))
- {
- found++;
- }
- }
- }
+ audit_regions(rom_first_region(device), nullptr, found, required);
- if (found == 0 && required > 0)
+ if ((found == 0) && (required > 0))
{
- m_record_list.reset();
+ m_record_list.clear();
return NOTFOUND;
}
@@ -180,74 +149,33 @@ media_auditor::summary media_auditor::audit_device(device_t &device, const char
//-------------------------------------------------
// audit_software
//-------------------------------------------------
-media_auditor::summary media_auditor::audit_software(const char *list_name, software_info *swinfo, const char *validation)
+media_auditor::summary media_auditor::audit_software(const char *list_name, const software_info *swinfo, const char *validation)
{
// start fresh
- m_record_list.reset();
+ m_record_list.clear();
// store validation for later
m_validation = validation;
- std::string combinedpath(swinfo->shortname());
- combinedpath.append(";");
- combinedpath.append(list_name);
- combinedpath.append(PATH_SEPARATOR);
- combinedpath.append(swinfo->shortname());
- std::string locationtag(list_name);
- locationtag.append("%");
- locationtag.append(swinfo->shortname());
- locationtag.append("%");
- if (swinfo->parentname() != nullptr)
+ std::string combinedpath(util::string_format("%s;%s%s%s", swinfo->shortname(), list_name, PATH_SEPARATOR, swinfo->shortname()));
+ std::string locationtag(util::string_format("%s%%%s%%", list_name, swinfo->shortname()));
+ if (!swinfo->parentname().empty())
{
locationtag.append(swinfo->parentname());
- combinedpath.append(";").append(swinfo->parentname()).append(";").append(list_name).append(PATH_SEPARATOR).append(swinfo->parentname());
+ combinedpath.append(util::string_format(";%s;%s%s%s", swinfo->parentname(), list_name, PATH_SEPARATOR, swinfo->parentname()));
}
m_searchpath = combinedpath.c_str();
- int found = 0;
- int required = 0;
+ std::size_t found = 0;
+ std::size_t required = 0;
// now iterate over software parts
- for (software_part &part : swinfo->parts())
- {
- // now iterate over regions
- for ( const rom_entry *region = part.romdata(); region; region = rom_next_region( region ) )
- {
- // now iterate over rom definitions
- for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
- {
- hash_collection hashes(ROM_GETHASHDATA(rom));
-
- // count the number of files with hashes
- if (!hashes.flag(hash_collection::FLAG_NO_DUMP) && !ROM_ISOPTIONAL(rom))
- {
- required++;
- }
+ for (const software_part &part : swinfo->parts())
+ audit_regions(part.romdata(), locationtag.c_str(), found, required);
- // audit a file
- audit_record *record = nullptr;
- if (ROMREGION_ISROMDATA(region))
- {
- record = audit_one_rom(rom);
- }
- // audit a disk
- else if (ROMREGION_ISDISKDATA(region))
- {
- record = audit_one_disk(rom, locationtag.c_str());
- }
-
- // count the number of files that are found.
- if (record != nullptr && (record->status() == audit_record::STATUS_GOOD || record->status() == audit_record::STATUS_FOUND_INVALID))
- {
- found++;
- }
- }
- }
- }
-
- if (found == 0 && required > 0)
+ if ((found == 0) && (required > 0))
{
- m_record_list.reset();
+ m_record_list.clear();
return NOTFOUND;
}
@@ -264,10 +192,10 @@ media_auditor::summary media_auditor::audit_software(const char *list_name, soft
media_auditor::summary media_auditor::audit_samples()
{
// start fresh
- m_record_list.reset();
+ m_record_list.clear();
- int required = 0;
- int found = 0;
+ std::size_t required = 0;
+ std::size_t found = 0;
// iterate over sample entries
for (samples_device &device : samples_device_iterator(m_enumerator.config().root_device()))
@@ -281,12 +209,12 @@ media_auditor::summary media_auditor::audit_samples()
searchpath.append(";").append(iter.altbasename());
// iterate over samples in this entry
- for (const char *samplename = iter.first(); samplename != nullptr; samplename = iter.next())
+ for (const char *samplename = iter.first(); samplename; samplename = iter.next())
{
required++;
// create a new record
- audit_record &record = m_record_list.append(*global_alloc(audit_record(samplename, audit_record::MEDIA_SAMPLE)));
+ audit_record &record = *m_record_list.emplace(m_record_list.end(), samplename, media_type::SAMPLE);
// look for the files
emu_file file(m_enumerator.options().sample_path(), OPEN_FLAG_READ | OPEN_FLAG_NO_PRELOAD);
@@ -301,18 +229,20 @@ media_auditor::summary media_auditor::audit_samples()
if (filerr == osd_file::error::NONE)
{
- record.set_status(audit_record::STATUS_GOOD, audit_record::SUBSTATUS_GOOD);
+ record.set_status(audit_status::GOOD, audit_substatus::GOOD);
found++;
}
else
- record.set_status(audit_record::STATUS_NOT_FOUND, audit_record::SUBSTATUS_NOT_FOUND);
+ {
+ record.set_status(audit_status::NOT_FOUND, audit_substatus::NOT_FOUND);
+ }
}
}
}
- if (found == 0 && required > 0)
+ if ((found == 0) && (required > 0))
{
- m_record_list.reset();
+ m_record_list.clear();
return NOTFOUND;
}
@@ -326,190 +256,131 @@ media_auditor::summary media_auditor::audit_samples()
// string format
//-------------------------------------------------
-media_auditor::summary media_auditor::summarize(const char *name, std::string *output)
+media_auditor::summary media_auditor::summarize(const char *name, std::ostream *output) const
{
- if (m_record_list.count() == 0)
- {
+ if (m_record_list.empty())
return NONE_NEEDED;
- }
// loop over records
summary overall_status = CORRECT;
- for (audit_record &record : m_record_list)
+ for (audit_record const &record : m_record_list)
{
- summary best_new_status = INCORRECT;
-
// skip anything that's fine
- if (record.substatus() == audit_record::SUBSTATUS_GOOD)
+ if (record.substatus() == audit_substatus::GOOD)
continue;
// output the game name, file name, and length (if applicable)
- if (output != nullptr)
+ if (output)
{
- output->append(string_format("%-12s: %s", name, record.name()));
+ util::stream_format(*output, "%-12s: %s", name, record.name());
if (record.expected_length() > 0)
- output->append(string_format(" (%d bytes)", record.expected_length()));
- output->append(" - ");
+ util::stream_format(*output, " (%d bytes)", record.expected_length());
+ *output << " - ";
}
// use the substatus for finer details
+ summary best_new_status = INCORRECT;
switch (record.substatus())
{
- case audit_record::SUBSTATUS_GOOD_NEEDS_REDUMP:
- if (output != nullptr) output->append("NEEDS REDUMP\n");
- best_new_status = BEST_AVAILABLE;
- break;
+ case audit_substatus::GOOD_NEEDS_REDUMP:
+ if (output) *output << "NEEDS REDUMP\n";
+ best_new_status = BEST_AVAILABLE;
+ break;
- case audit_record::SUBSTATUS_FOUND_NODUMP:
- if (output != nullptr) output->append("NO GOOD DUMP KNOWN\n");
- best_new_status = BEST_AVAILABLE;
- break;
+ case audit_substatus::FOUND_NODUMP:
+ if (output) *output << "NO GOOD DUMP KNOWN\n";
+ best_new_status = BEST_AVAILABLE;
+ break;
- case audit_record::SUBSTATUS_FOUND_BAD_CHECKSUM:
- if (output != nullptr)
- {
- output->append("INCORRECT CHECKSUM:\n");
- output->append(string_format("EXPECTED: %s\n", record.expected_hashes().macro_string().c_str()));
- output->append(string_format(" FOUND: %s\n", record.actual_hashes().macro_string().c_str()));
- }
- break;
+ case audit_substatus::FOUND_BAD_CHECKSUM:
+ if (output)
+ {
+ util::stream_format(*output, "INCORRECT CHECKSUM:\n");
+ util::stream_format(*output, "EXPECTED: %s\n", record.expected_hashes().macro_string());
+ util::stream_format(*output, " FOUND: %s\n", record.actual_hashes().macro_string());
+ }
+ break;
- case audit_record::SUBSTATUS_FOUND_WRONG_LENGTH:
- if (output != nullptr) output->append(string_format("INCORRECT LENGTH: %d bytes\n", record.actual_length()));
- break;
+ case audit_substatus::FOUND_WRONG_LENGTH:
+ if (output) util::stream_format(*output, "INCORRECT LENGTH: %d bytes\n", record.actual_length());
+ break;
- case audit_record::SUBSTATUS_NOT_FOUND:
- if (output != nullptr)
- {
- device_t *shared_device = record.shared_device();
- if (shared_device == nullptr)
- output->append("NOT FOUND\n");
- else
- output->append(string_format("NOT FOUND (%s)\n", shared_device->shortname()));
- }
- break;
+ case audit_substatus::NOT_FOUND:
+ if (output)
+ {
+ device_t *const shared_device = record.shared_device();
+ if (shared_device)
+ util::stream_format(*output, "NOT FOUND (%s)\n", shared_device->shortname());
+ else
+ util::stream_format(*output, "NOT FOUND\n");
+ }
+ break;
- case audit_record::SUBSTATUS_NOT_FOUND_NODUMP:
- if (output != nullptr) output->append("NOT FOUND - NO GOOD DUMP KNOWN\n");
- best_new_status = BEST_AVAILABLE;
- break;
+ case audit_substatus::NOT_FOUND_NODUMP:
+ if (output) *output << "NOT FOUND - NO GOOD DUMP KNOWN\n";
+ best_new_status = BEST_AVAILABLE;
+ break;
- case audit_record::SUBSTATUS_NOT_FOUND_OPTIONAL:
- if (output != nullptr) output->append("NOT FOUND BUT OPTIONAL\n");
- best_new_status = BEST_AVAILABLE;
- break;
+ case audit_substatus::NOT_FOUND_OPTIONAL:
+ if (output) *output << "NOT FOUND BUT OPTIONAL\n";
+ best_new_status = BEST_AVAILABLE;
+ break;
- default:
- assert(false);
+ default:
+ assert(false);
}
// downgrade the overall status if necessary
- overall_status = MAX(overall_status, best_new_status);
+ overall_status = (std::max)(overall_status, best_new_status);
}
return overall_status;
}
-// WINUI - only report problems that the user can fix
-media_auditor::summary media_auditor::winui_summarize(const char *name, std::string *output)
-{
- if (m_record_list.count() == 0)
- {
- return NONE_NEEDED;
- }
- // loop over records
- summary overall_status = CORRECT;
- for (audit_record *record = m_record_list.first(); record; record = record->next())
- {
- summary best_new_status = INCORRECT;
-
- // skip anything that's fine
- if ( (record->substatus() == audit_record::SUBSTATUS_GOOD)
- || (record->substatus() == audit_record::SUBSTATUS_GOOD_NEEDS_REDUMP)
- || (record->substatus() == audit_record::SUBSTATUS_NOT_FOUND_NODUMP)
- || (record->substatus() == audit_record::SUBSTATUS_FOUND_NODUMP)
- )
- continue;
+//-------------------------------------------------
+// audit_regions - validate/count for regions
+//-------------------------------------------------
- // output the game name, file name, and length (if applicable)
- if (output)
+void media_auditor::audit_regions(const rom_entry *region, const char *locationtag, std::size_t &found, std::size_t &required)
+{
+ // now iterate over regions
+ for ( ; region; region = rom_next_region(region))
+ {
+ // now iterate over rom definitions
+ for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
{
- output->append(string_format("%-12s: %s", name, record->name()));
- if (record->expected_length() > 0)
- output->append(string_format(" (%d bytes)", record->expected_length()));
- output->append(" - ");
- }
+ util::hash_collection const hashes(ROM_GETHASHDATA(rom));
- // use the substatus for finer details
- switch (record->substatus())
- {
- case audit_record::SUBSTATUS_GOOD_NEEDS_REDUMP:
- if (output) output->append("NEEDS REDUMP\n");
- best_new_status = BEST_AVAILABLE;
- break;
-
- //case audit_record::SUBSTATUS_FOUND_NODUMP:
- // if (output) output->append("NO GOOD DUMP KNOWN\n");
- // best_new_status = BEST_AVAILABLE;
- // break;
-
- case audit_record::SUBSTATUS_FOUND_BAD_CHECKSUM:
- if (output)
- {
- output->append("INCORRECT CHECKSUM:\n");
- output->append(string_format("EXPECTED: %s\n", record->expected_hashes().macro_string().c_str()));
- output->append(string_format(" FOUND: %s\n", record->actual_hashes().macro_string().c_str()));
- }
- break;
-
- case audit_record::SUBSTATUS_FOUND_WRONG_LENGTH:
- if (output) output->append(string_format("INCORRECT LENGTH: %d bytes\n", record->actual_length()));
- break;
-
- case audit_record::SUBSTATUS_NOT_FOUND:
- if (output)
- {
- device_t *shared_device = record->shared_device();
- if (shared_device)
- output->append(string_format("NOT FOUND (%s)\n", shared_device->shortname()));
- else
- output->append("NOT FOUND\n");
- }
- best_new_status = NOTFOUND;
- break;
-
- //case audit_record::SUBSTATUS_NOT_FOUND_NODUMP:
- // if (output) output->append("NOT FOUND - NO GOOD DUMP KNOWN\n");
- // best_new_status = BEST_AVAILABLE;
- // break;
+ // count the number of files with hashes
+ if (!hashes.flag(util::hash_collection::FLAG_NO_DUMP) && !ROM_ISOPTIONAL(rom))
+ required++;
- case audit_record::SUBSTATUS_NOT_FOUND_OPTIONAL:
- if (output) output->append("NOT FOUND BUT OPTIONAL\n");
- best_new_status = BEST_AVAILABLE;
- break;
+ audit_record const *record = nullptr;
+ if (ROMREGION_ISROMDATA(region))
+ record = &audit_one_rom(rom);
+ else if (ROMREGION_ISDISKDATA(region))
+ record = &audit_one_disk(rom, locationtag);
- default:
- break;
+ // count the number of files that are found.
+ if (record && ((record->status() == audit_status::GOOD) || (record->status() == audit_status::FOUND_INVALID)))
+ found++;
}
-
- // downgrade the overall status if necessary
- overall_status = MAX(overall_status, best_new_status);
}
- return overall_status;
}
+
//-------------------------------------------------
// audit_one_rom - validate a single ROM entry
//-------------------------------------------------
-audit_record *media_auditor::audit_one_rom(const rom_entry *rom)
+media_auditor::audit_record &media_auditor::audit_one_rom(const rom_entry *rom)
{
// allocate and append a new record
- audit_record &record = m_record_list.append(*global_alloc(audit_record(*rom, audit_record::MEDIA_ROM)));
+ audit_record &record = *m_record_list.emplace(m_record_list.end(), *rom, media_type::ROM);
// see if we have a CRC and extract it if so
UINT32 crc = 0;
- bool has_crc = record.expected_hashes().crc(crc);
+ bool const has_crc = record.expected_hashes().crc(crc);
// find the file and checksum it, getting the file length along the way
emu_file file(m_enumerator.options().media_path(), OPEN_FLAG_READ | OPEN_FLAG_NO_PRELOAD);
@@ -535,7 +406,7 @@ audit_record *media_auditor::audit_one_rom(const rom_entry *rom)
// compute the final status
compute_status(record, rom, record.actual_length() != 0);
- return &record;
+ return record;
}
@@ -543,10 +414,10 @@ audit_record *media_auditor::audit_one_rom(const rom_entry *rom)
// audit_one_disk - validate a single disk entry
//-------------------------------------------------
-audit_record *media_auditor::audit_one_disk(const rom_entry *rom, const char *locationtag)
+media_auditor::audit_record &media_auditor::audit_one_disk(const rom_entry *rom, const char *locationtag)
{
// allocate and append a new record
- audit_record &record = m_record_list.append(*global_alloc(audit_record(*rom, audit_record::MEDIA_DISK)));
+ audit_record &record = *m_record_list.emplace(m_record_list.end(), *rom, media_type::DISK);
// open the disk
chd_file source;
@@ -555,10 +426,10 @@ audit_record *media_auditor::audit_one_disk(const rom_entry *rom, const char *lo
// if we succeeded, get the hashes
if (err == CHDERR_NONE)
{
- hash_collection hashes;
+ util::hash_collection hashes;
// if there's a SHA1 hash, add them to the output hash
- if (source.sha1() != sha1_t::null)
+ if (source.sha1() != util::sha1_t::null)
hashes.add_sha1(source.sha1());
// update the actual values
@@ -567,7 +438,7 @@ audit_record *media_auditor::audit_one_disk(const rom_entry *rom, const char *lo
// compute the final status
compute_status(record, rom, err == CHDERR_NONE);
- return &record;
+ return record;
}
@@ -581,41 +452,25 @@ void media_auditor::compute_status(audit_record &record, const rom_entry *rom, b
// if not found, provide more details
if (!found)
{
- // no good dump
- if (record.expected_hashes().flag(hash_collection::FLAG_NO_DUMP))
- record.set_status(audit_record::STATUS_NOT_FOUND, audit_record::SUBSTATUS_NOT_FOUND_NODUMP);
-
- // optional ROM
+ if (record.expected_hashes().flag(util::hash_collection::FLAG_NO_DUMP))
+ record.set_status(audit_status::NOT_FOUND, audit_substatus::NOT_FOUND_NODUMP);
else if (ROM_ISOPTIONAL(rom))
- record.set_status(audit_record::STATUS_NOT_FOUND, audit_record::SUBSTATUS_NOT_FOUND_OPTIONAL);
-
- // just plain old not found
+ record.set_status(audit_status::NOT_FOUND, audit_substatus::NOT_FOUND_OPTIONAL);
else
- record.set_status(audit_record::STATUS_NOT_FOUND, audit_record::SUBSTATUS_NOT_FOUND);
+ record.set_status(audit_status::NOT_FOUND, audit_substatus::NOT_FOUND);
}
-
- // if found, provide more details
else
{
- // length mismatch
if (record.expected_length() != record.actual_length())
- record.set_status(audit_record::STATUS_FOUND_INVALID, audit_record::SUBSTATUS_FOUND_WRONG_LENGTH);
-
- // found but needs a dump
- else if (record.expected_hashes().flag(hash_collection::FLAG_NO_DUMP))
- record.set_status(audit_record::STATUS_GOOD, audit_record::SUBSTATUS_FOUND_NODUMP);
-
- // incorrect hash
+ record.set_status(audit_status::FOUND_INVALID, audit_substatus::FOUND_WRONG_LENGTH);
+ else if (record.expected_hashes().flag(util::hash_collection::FLAG_NO_DUMP))
+ record.set_status(audit_status::GOOD, audit_substatus::FOUND_NODUMP);
else if (record.expected_hashes() != record.actual_hashes())
- record.set_status(audit_record::STATUS_FOUND_INVALID, audit_record::SUBSTATUS_FOUND_BAD_CHECKSUM);
-
- // correct hash but needs a redump
- else if (record.expected_hashes().flag(hash_collection::FLAG_BAD_DUMP))
- record.set_status(audit_record::STATUS_GOOD, audit_record::SUBSTATUS_GOOD_NEEDS_REDUMP);
-
- // just plain old good
+ record.set_status(audit_status::FOUND_INVALID, audit_substatus::FOUND_BAD_CHECKSUM);
+ else if (record.expected_hashes().flag(util::hash_collection::FLAG_BAD_DUMP))
+ record.set_status(audit_status::GOOD, audit_substatus::GOOD_NEEDS_REDUMP);
else
- record.set_status(audit_record::STATUS_GOOD, audit_record::SUBSTATUS_GOOD);
+ record.set_status(audit_status::GOOD, audit_substatus::GOOD);
}
}
@@ -625,37 +480,47 @@ void media_auditor::compute_status(audit_record &record, const rom_entry *rom, b
// shares a media entry with the same hashes
//-------------------------------------------------
-device_t *media_auditor::find_shared_device(device_t &device, const char *name, const hash_collection &romhashes, UINT64 romlength)
+device_t *media_auditor::find_shared_device(device_t &device, const char *name, const util::hash_collection &romhashes, UINT64 romlength)
{
- bool dumped = !romhashes.flag(hash_collection::FLAG_NO_DUMP);
+ bool const dumped = !romhashes.flag(util::hash_collection::FLAG_NO_DUMP);
// special case for non-root devices
device_t *highest_device = nullptr;
- if (device.owner() != nullptr)
+ if (device.owner())
{
- for (const rom_entry *region = rom_first_region(device); region != nullptr; region = rom_next_region(region))
- for (const rom_entry *rom = rom_first_file(region); rom != nullptr; rom = rom_next_file(rom))
+ for (const rom_entry *region = rom_first_region(device); region; region = rom_next_region(region))
+ {
+ for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
+ {
if (ROM_GETLENGTH(rom) == romlength)
{
- hash_collection hashes(ROM_GETHASHDATA(rom));
+ util::hash_collection hashes(ROM_GETHASHDATA(rom));
if ((dumped && hashes == romhashes) || (!dumped && ROM_GETNAME(rom) == name))
highest_device = &device;
}
+ }
+ }
}
else
{
// iterate up the parent chain
- for (int drvindex = m_enumerator.find(m_enumerator.driver().parent); drvindex != -1; drvindex = m_enumerator.find(m_enumerator.driver(drvindex).parent))
+ for (auto drvindex = m_enumerator.find(m_enumerator.driver().parent); drvindex >= 0; drvindex = m_enumerator.find(m_enumerator.driver(drvindex).parent))
{
for (device_t &scandevice : device_iterator(m_enumerator.config(drvindex).root_device()))
+ {
for (const rom_entry *region = rom_first_region(scandevice); region; region = rom_next_region(region))
+ {
for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
+ {
if (ROM_GETLENGTH(rom) == romlength)
{
- hash_collection hashes(ROM_GETHASHDATA(rom));
+ util::hash_collection hashes(ROM_GETHASHDATA(rom));
if ((dumped && hashes == romhashes) || (!dumped && ROM_GETNAME(rom) == name))
highest_device = &scandevice;
}
+ }
+ }
+ }
}
}
@@ -667,27 +532,107 @@ device_t *media_auditor::find_shared_device(device_t &device, const char *name,
// audit_record - constructor
//-------------------------------------------------
-audit_record::audit_record(const rom_entry &media, media_type type)
- : m_next(nullptr),
- m_type(type),
- m_status(STATUS_ERROR),
- m_substatus(SUBSTATUS_ERROR),
- m_name(ROM_GETNAME(&media)),
- m_explength(rom_file_size(&media)),
- m_length(0),
- m_shared_device(nullptr)
+media_auditor::audit_record::audit_record(const rom_entry &media, media_type type)
+ : m_type(type)
+ , m_status(audit_status::UNVERIFIED)
+ , m_substatus(audit_substatus::UNVERIFIED)
+ , m_name(ROM_GETNAME(&media))
+ , m_explength(rom_file_size(&media))
+ , m_length(0)
+ , m_exphashes()
+ , m_hashes()
+ , m_shared_device(nullptr)
{
m_exphashes.from_internal_string(ROM_GETHASHDATA(&media));
}
-audit_record::audit_record(const char *name, media_type type)
- : m_next(nullptr),
- m_type(type),
- m_status(STATUS_ERROR),
- m_substatus(SUBSTATUS_ERROR),
- m_name(name),
- m_explength(0),
- m_length(0),
- m_shared_device(nullptr)
+media_auditor::audit_record::audit_record(const char *name, media_type type)
+ : m_type(type)
+ , m_status(audit_status::UNVERIFIED)
+ , m_substatus(audit_substatus::UNVERIFIED)
+ , m_name(name)
+ , m_explength(0)
+ , m_length(0)
+ , m_exphashes()
+ , m_hashes()
+ , m_shared_device(nullptr)
+{
+}
+
+
+
+// MESSUI - only report problems that the user can fix
+media_auditor::summary media_auditor::winui_summarize(const char *name, std::string *output)
{
+ if (m_record_list.empty())
+ return NONE_NEEDED;
+
+ // loop over records
+ summary overall_status = CORRECT;
+ for (audit_record const &record : m_record_list)
+ {
+ summary best_new_status = INCORRECT;
+
+ // skip anything that's fine
+ if ( (record.substatus() == audit_substatus::GOOD)
+ || (record.substatus() == audit_substatus::GOOD_NEEDS_REDUMP)
+ || (record.substatus() == audit_substatus::NOT_FOUND_NODUMP)
+ || (record.substatus() == audit_substatus::FOUND_NODUMP)
+ )
+ continue;
+
+ // output the game name, file name, and length (if applicable)
+ //if (output)
+ {
+ output->append(string_format("%-12s: %s", name, record.name()));
+ if (record.expected_length() > 0)
+ output->append(string_format(" (%d bytes)", record.expected_length()));
+ output->append(" - ");
+ }
+
+ // use the substatus for finer details
+ switch (record.substatus())
+ {
+ case audit_substatus::FOUND_NODUMP:
+ if (output) output->append("NO GOOD DUMP KNOWN\n");
+ best_new_status = BEST_AVAILABLE;
+ break;
+
+ case audit_substatus::FOUND_BAD_CHECKSUM:
+ if (output)
+ {
+ output->append("INCORRECT CHECKSUM:\n");
+ output->append(string_format("EXPECTED: %s\n", record.expected_hashes().macro_string().c_str()));
+ output->append(string_format(" FOUND: %s\n", record.actual_hashes().macro_string().c_str()));
+ }
+ break;
+
+ case audit_substatus::FOUND_WRONG_LENGTH:
+ if (output) output->append(string_format("INCORRECT LENGTH: %d bytes\n", record.actual_length()));
+ break;
+
+ case audit_substatus::NOT_FOUND:
+ if (output)
+ {
+ device_t *shared_device = record.shared_device();
+ if (shared_device == NULL)
+ output->append("NOT FOUND\n");
+ else
+ output->append(string_format("NOT FOUND (%s)\n", shared_device->shortname()));
+ }
+ break;
+
+ case audit_substatus::NOT_FOUND_OPTIONAL:
+ if (output) output->append("NOT FOUND BUT OPTIONAL\n");
+ best_new_status = BEST_AVAILABLE;
+ break;
+
+ default:
+ break;
+ }
+
+ // downgrade the overall status if necessary
+ overall_status = MAX(overall_status, best_new_status);
+ }
+ return overall_status;
}
diff --git a/docs/release/src/frontend/mame/audit.h b/docs/release/src/frontend/mame/audit.h
index d936951155f..f2a73ae56ac 100644
--- a/docs/release/src/frontend/mame/audit.h
+++ b/docs/release/src/frontend/mame/audit.h
@@ -10,11 +10,15 @@
#pragma once
-#ifndef __AUDIT_H__
-#define __AUDIT_H__
+#ifndef MAME_FRONTEND_AUDIT_H
+#define MAME_FRONTEND_AUDIT_H
#include "hash.h"
+#include <iosfwd>
+#include <list>
+#include <utility>
+
//**************************************************************************
@@ -35,100 +39,44 @@
// forward declarations
class driver_enumerator;
-// ======================> audit_record
-// holds the result of auditing a single item
-class audit_record
-{
- friend class simple_list<audit_record>;
+// ======================> media_auditor
+
+// class which manages auditing of items
+class media_auditor
+{
public:
- // media types
- enum media_type
+ enum class media_type
{
- MEDIA_ROM = 0,
- MEDIA_DISK,
- MEDIA_SAMPLE
+ ROM = 0,
+ DISK,
+ SAMPLE
};
// status values
- enum audit_status
+ enum class audit_status
{
- STATUS_GOOD = 0,
- STATUS_FOUND_INVALID,
- STATUS_NOT_FOUND,
- STATUS_ERROR
+ GOOD = 0,
+ FOUND_INVALID,
+ NOT_FOUND,
+ UNVERIFIED = 100
};
// substatus values
- enum audit_substatus
+ enum class audit_substatus
{
- SUBSTATUS_GOOD = 0,
- SUBSTATUS_GOOD_NEEDS_REDUMP,
- SUBSTATUS_FOUND_NODUMP,
- SUBSTATUS_FOUND_BAD_CHECKSUM,
- SUBSTATUS_FOUND_WRONG_LENGTH,
- SUBSTATUS_NOT_FOUND,
- SUBSTATUS_NOT_FOUND_NODUMP,
- SUBSTATUS_NOT_FOUND_OPTIONAL,
- SUBSTATUS_ERROR = 100
+ GOOD = 0,
+ GOOD_NEEDS_REDUMP,
+ FOUND_NODUMP,
+ FOUND_BAD_CHECKSUM,
+ FOUND_WRONG_LENGTH,
+ NOT_FOUND,
+ NOT_FOUND_NODUMP,
+ NOT_FOUND_OPTIONAL,
+ UNVERIFIED = 100
};
- // construction/destruction
- audit_record(const rom_entry &media, media_type type);
- audit_record(const char *name, media_type type);
-
- // getters
- audit_record *next() const { return m_next; }
- media_type type() const { return m_type; }
- audit_status status() const { return m_status; }
- audit_substatus substatus() const { return m_substatus; }
- const char *name() const { return m_name; }
- UINT64 expected_length() const { return m_explength; }
- UINT64 actual_length() const { return m_length; }
- const hash_collection &expected_hashes() const { return m_exphashes; }
- const hash_collection &actual_hashes() const { return m_hashes; }
- device_t *shared_device() const { return m_shared_device; }
-
- // setters
- void set_status(audit_status status, audit_substatus substatus)
- {
- m_status = status;
- m_substatus = substatus;
- }
-
- void set_actual(const hash_collection &hashes, UINT64 length = 0)
- {
- m_hashes = hashes;
- m_length = length;
- }
-
- void set_shared_device(device_t *shared_device)
- {
- m_shared_device = shared_device;
- }
-
-private:
- // internal state
- audit_record * m_next;
- media_type m_type; /* type of item that was audited */
- audit_status m_status; /* status of audit on this item */
- audit_substatus m_substatus; /* finer-detail status */
- const char * m_name; /* name of item */
- UINT64 m_explength; /* expected length of item */
- UINT64 m_length; /* actual length of item */
- hash_collection m_exphashes; /* expected hash data */
- hash_collection m_hashes; /* actual hash information */
- device_t * m_shared_device; /* device that shares the rom */
-};
-
-
-// ======================> media_auditor
-
-// class which manages auditing of items
-class media_auditor
-{
-public:
// summary values
enum summary
{
@@ -139,33 +87,96 @@ public:
NOTFOUND
};
+ // holds the result of auditing a single item
+ class audit_record
+ {
+ public:
+ // media types
+ // construction/destruction
+ audit_record(const rom_entry &media, media_type type);
+ audit_record(const char *name, media_type type);
+ audit_record(const audit_record &) = default;
+ audit_record(audit_record &&) = default;
+ audit_record &operator=(const audit_record &) = default;
+ audit_record &operator=(audit_record &&) = default;
+
+ // getters
+ media_type type() const { return m_type; }
+ audit_status status() const { return m_status; }
+ audit_substatus substatus() const { return m_substatus; }
+ const char *name() const { return m_name; }
+ UINT64 expected_length() const { return m_explength; }
+ UINT64 actual_length() const { return m_length; }
+ const util::hash_collection &expected_hashes() const { return m_exphashes; }
+ const util::hash_collection &actual_hashes() const { return m_hashes; }
+ device_t *shared_device() const { return m_shared_device; }
+
+ // setters
+ void set_status(audit_status status, audit_substatus substatus)
+ {
+ m_status = status;
+ m_substatus = substatus;
+ }
+
+ void set_actual(const util::hash_collection &hashes, UINT64 length = 0)
+ {
+ m_hashes = hashes;
+ m_length = length;
+ }
+
+ void set_actual(util::hash_collection &&hashes, UINT64 length = 0)
+ {
+ m_hashes = std::move(hashes);
+ m_length = length;
+ }
+
+ void set_shared_device(device_t *shared_device)
+ {
+ m_shared_device = shared_device;
+ }
+
+ private:
+ // internal state
+ media_type m_type; // type of item that was audited
+ audit_status m_status; // status of audit on this item
+ audit_substatus m_substatus; // finer-detail status
+ const char * m_name; // name of item
+ UINT64 m_explength; // expected length of item
+ UINT64 m_length; // actual length of item
+ util::hash_collection m_exphashes; // expected hash data
+ util::hash_collection m_hashes; // actual hash information
+ device_t * m_shared_device; // device that shares the rom
+ };
+ using record_list = std::list<audit_record>;
+
// construction/destruction
media_auditor(const driver_enumerator &enumerator);
// getters
- const simple_list<audit_record> &records() const { return m_record_list; }
+ const record_list &records() const { return m_record_list; }
// audit operations
summary audit_media(const char *validation = AUDIT_VALIDATE_FULL);
summary audit_device(device_t &device, const char *validation = AUDIT_VALIDATE_FULL);
- summary audit_software(const char *list_name, software_info *swinfo, const char *validation = AUDIT_VALIDATE_FULL);
+ summary audit_software(const char *list_name, const software_info *swinfo, const char *validation = AUDIT_VALIDATE_FULL);
summary audit_samples();
- summary summarize(const char *name,std::string *output = nullptr);
+ summary summarize(const char *name, std::ostream *output = nullptr) const;
summary winui_summarize(const char *name, std::string *output = nullptr); //WINUI - only report problems that the user can fix
private:
// internal helpers
- audit_record *audit_one_rom(const rom_entry *rom);
- audit_record *audit_one_disk(const rom_entry *rom, const char *locationtag = nullptr);
+ void audit_regions(const rom_entry *region, const char *locationtag, std::size_t &found, std::size_t &required);
+ audit_record &audit_one_rom(const rom_entry *rom);
+ audit_record &audit_one_disk(const rom_entry *rom, const char *locationtag);
void compute_status(audit_record &record, const rom_entry *rom, bool found);
- device_t *find_shared_device(device_t &device, const char *name, const hash_collection &romhashes, UINT64 romlength);
+ device_t *find_shared_device(device_t &device, const char *name, const util::hash_collection &romhashes, UINT64 romlength);
// internal state
- simple_list<audit_record> m_record_list;
+ record_list m_record_list;
const driver_enumerator & m_enumerator;
const char * m_validation;
const char * m_searchpath;
};
-#endif /* __AUDIT_H__ */
+#endif // MAME_FRONTEND_AUDIT_H
diff --git a/docs/release/src/hbmame/bus/neogeo/neogeo_slot.cpp b/docs/release/src/hbmame/bus/neogeo/neogeo_slot.cpp
index fac43eda050..1310c26f524 100644
--- a/docs/release/src/hbmame/bus/neogeo/neogeo_slot.cpp
+++ b/docs/release/src/hbmame/bus/neogeo/neogeo_slot.cpp
@@ -189,16 +189,6 @@ void neogeo_cart_slot_device::call_unload()
{
}
-/*-------------------------------------------------
- call softlist load
- -------------------------------------------------*/
-
-bool neogeo_cart_slot_device::call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry)
-{
- machine().rom_load().load_software_part_region(*this, swlist, swname, start_entry );
- return TRUE;
-}
-
/*-------------------------------------------------
get default card software
diff --git a/docs/release/src/hbmame/bus/neogeo/neogeo_slot.h b/docs/release/src/hbmame/bus/neogeo/neogeo_slot.h
index 1b037103165..427da810ff8 100644
--- a/docs/release/src/hbmame/bus/neogeo/neogeo_slot.h
+++ b/docs/release/src/hbmame/bus/neogeo/neogeo_slot.h
@@ -28,7 +28,7 @@ public:
// image-level overrides
virtual bool call_load() override;
virtual void call_unload() override;
- virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) override;
+ virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
virtual iodevice_t image_type() const override { return IO_CARTSLOT; }
virtual bool is_readable() const override { return 1; }
diff --git a/docs/release/src/hbmame/drivers/cps1.cpp b/docs/release/src/hbmame/drivers/cps1.cpp
index f1399ff957e..25992f9efd7 100644
--- a/docs/release/src/hbmame/drivers/cps1.cpp
+++ b/docs/release/src/hbmame/drivers/cps1.cpp
@@ -242,7 +242,7 @@ Stephh's log (2006.09.20) :
#include "cpu/pic16c5x/pic16c5x.h"
#include "cpu/m68000/m68000.h"
#include "machine/eepromser.h"
-#include "sound/2151intf.h"
+#include "sound/ym2151.h"
#include "sound/okim6295.h"
#include "sound/qsound.h"
#include "machine/kabuki.h"
diff --git a/docs/release/src/hbmame/drivers/fcrash.cpp b/docs/release/src/hbmame/drivers/fcrash.cpp
index a5fd9df5a92..e7786df8513 100644
--- a/docs/release/src/hbmame/drivers/fcrash.cpp
+++ b/docs/release/src/hbmame/drivers/fcrash.cpp
@@ -93,7 +93,7 @@ slampic: no sound. A priority problem between sprites and crowd.
#include "includes/cps1.h"
#include "sound/2203intf.h"
#include "sound/msm5205.h"
-#include "sound/2151intf.h"
+#include "sound/ym2151.h"
#include "sound/okim6295.h"
#include "machine/eepromser.h"
diff --git a/docs/release/src/hbmame/drivers/kof2002.cpp b/docs/release/src/hbmame/drivers/kof2002.cpp
index 7b87cc02b8d..eb95c7b5030 100644
--- a/docs/release/src/hbmame/drivers/kof2002.cpp
+++ b/docs/release/src/hbmame/drivers/kof2002.cpp
@@ -312,6 +312,58 @@ ROM_START( kof2k2bjo ) /* [OLD] The King of Fighters 2002 - (kof2k2bjho) - Remix
ROM_LOAD16_BYTE( "265-c8.c8", 0x3000001, 0x800000, CRC(ab0bb549) SHA1(d23afb60b7f831f7d4a98ad3c4a00ee19877a1ce) )
ROM_END
+ROM_START( kof2k2bl3 )
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "265bl3.p1", 0x000000, 0x100000, CRC(94a95838) SHA1(a872a92b828d976eabd332e8d22b451dd709eca6) )
+ ROM_LOAD16_WORD_SWAP( "265bl3.p2", 0x100000, 0x400000, CRC(2bada9e2) SHA1(48cdeb9d828d2be6e212f460ce5b1105802fd8e2) )
+
+ NEO_SFIX_128K( "265bl3.s1", CRC(9acd7f92) SHA1(827534f914b9cf91e907e8532c28abdcd8da71d7) )
+
+ NEO_BIOS_AUDIO_128K( "265ori.m1", CRC(AB9D360E) SHA1(a0c8a5aae387c4f0b72790211695da7df924c351) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "265nu.v1", 0x000000, 0x400000, CRC(13d98607) SHA1(0f1a374247992d301bc26c0bab200631a13a9f4a) )
+ ROM_LOAD( "265nu.v2", 0x400000, 0x400000, CRC(9cf74677) SHA1(073e7cb00127690fdec05c19f00347ec449f15ac) )
+ ROM_LOAD( "265nu.v3", 0x800000, 0x400000, CRC(8e9448b5) SHA1(c22420649c7c68a172290548cab846345c861cb0) )
+ ROM_LOAD( "265nu.v4", 0xc00000, 0x400000, CRC(067271b5) SHA1(36e07da78aaf634824c98023053bef802be4e218) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "265bl4.c1", 0x0000000, 0x800000, CRC(325399a6) SHA1(50a565941ac805759872176ebb1506a736c05917) )
+ ROM_LOAD16_BYTE( "265bl4.c2", 0x0000001, 0x800000, CRC(76374796) SHA1(d4adf26ed356d271838c40aea2a84f604da2f8cb) )
+ ROM_LOAD16_BYTE( "265ori.c3", 0x1000000, 0x800000, CRC(E5074EEA) SHA1(387ef21d58b416126b95843bac1a0b6cc346818f) )
+ ROM_LOAD16_BYTE( "265d.c4", 0x1000001, 0x800000, CRC(efe6a468) SHA1(2A414285E48AA948B5B0D4A9333BAB083B5FB853) )
+ ROM_LOAD16_BYTE( "265d.c5", 0x2000000, 0x800000, CRC(74bba7c6) SHA1(E01ADC7A4633BC0951B9B4F09ABC07D728E9A2D9) )
+ ROM_LOAD16_BYTE( "265d.c6", 0x2000001, 0x800000, CRC(e20d2216) SHA1(5D28EEA7B581E780B78F391A8179F1678EE0D9A5) )
+ ROM_LOAD16_BYTE( "265ori.c7", 0x3000000, 0x800000, CRC(0E9F6ADB) SHA1(0e4cdbd3df2ef7b0c78c3275ee22684c67bf2d23) )
+ ROM_LOAD16_BYTE( "265ori.c8", 0x3000001, 0x800000, CRC(9961799E) SHA1(cf5d43bbd90269155ac41fe9a31328654784351f) )
+ROM_END
+
+ROM_START( kof2k2bl4 )
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "265bl4.p1", 0x000000, 0x100000, CRC(938af736) SHA1(27b0301ed208c155b56a2775ad6d1b683ead667e) )
+ ROM_LOAD16_WORD_SWAP( "265bl4.p2", 0x100000, 0x400000, CRC(9ff989fb) SHA1(d17528aa2aacdbd731ec30edb17fcdb1ebe34e62) )
+
+ NEO_SFIX_128K( "265bl4.s1", CRC(2aacaf8e) SHA1(3b09ef3215180de70327313c573c870d33a54714) )
+
+ NEO_BIOS_AUDIO_128K( "265ori.m1", CRC(AB9D360E) SHA1(a0c8a5aae387c4f0b72790211695da7df924c351) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "265nu.v1", 0x000000, 0x400000, CRC(13d98607) SHA1(0f1a374247992d301bc26c0bab200631a13a9f4a) )
+ ROM_LOAD( "265nu.v2", 0x400000, 0x400000, CRC(9cf74677) SHA1(073e7cb00127690fdec05c19f00347ec449f15ac) )
+ ROM_LOAD( "265nu.v3", 0x800000, 0x400000, CRC(8e9448b5) SHA1(c22420649c7c68a172290548cab846345c861cb0) )
+ ROM_LOAD( "265nu.v4", 0xc00000, 0x400000, CRC(067271b5) SHA1(36e07da78aaf634824c98023053bef802be4e218) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "265bl4.c1", 0x0000000, 0x800000, CRC(325399a6) SHA1(50a565941ac805759872176ebb1506a736c05917) )
+ ROM_LOAD16_BYTE( "265bl4.c2", 0x0000001, 0x800000, CRC(76374796) SHA1(d4adf26ed356d271838c40aea2a84f604da2f8cb) )
+ ROM_LOAD16_BYTE( "265ori.c3", 0x1000000, 0x800000, CRC(E5074EEA) SHA1(387ef21d58b416126b95843bac1a0b6cc346818f) )
+ ROM_LOAD16_BYTE( "265ori.c4", 0x1000001, 0x800000, CRC(F6EB1FF2) SHA1(77cb493b9e75d42c204a9a6c052a813c2730e44f) )
+ ROM_LOAD16_BYTE( "265d.c5", 0x2000000, 0x800000, CRC(74bba7c6) SHA1(E01ADC7A4633BC0951B9B4F09ABC07D728E9A2D9) )
+ ROM_LOAD16_BYTE( "265d.c6", 0x2000001, 0x800000, CRC(e20d2216) SHA1(5D28EEA7B581E780B78F391A8179F1678EE0D9A5) )
+ ROM_LOAD16_BYTE( "265ori.c7", 0x3000000, 0x800000, CRC(0E9F6ADB) SHA1(0e4cdbd3df2ef7b0c78c3275ee22684c67bf2d23) )
+ ROM_LOAD16_BYTE( "265ori.c8", 0x3000001, 0x800000, CRC(9961799E) SHA1(cf5d43bbd90269155ac41fe9a31328654784351f) )
+ROM_END
+
ROM_START( kof2k2bld )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "265bld.p1", 0x000000, 0x100000, CRC(0a6b5e22) SHA1(0db2c458e79a0380ccfa3e1772e42223f0edaaa9) )
@@ -2133,6 +2185,33 @@ ROM_START( kof2k2olp )
ROM_LOAD16_BYTE( "265d.c8", 0x3000001, 0x800000, CRC(bef667a3) SHA1(D5E8BC185DCF63343D129C31D2DDAB9F723F1A12) )
ROM_END
+ROM_START( kof2k2omg ) // kof02omg
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "265omg.p1", 0x000000, 0x100000, CRC(62174834) SHA1(7bdfa0260bba90b0325b90849fb8f9acef34c3f4) )
+ ROM_IGNORE( 0x2bd4c1 )
+ ROM_LOAD16_WORD_SWAP( "265omg.p2", 0x100000, 0x400000, CRC(6fadc5c3) SHA1(8336d339013d3357b11b8e0c1816b560a755f935) )
+
+ NEO_SFIX_128K( "265omg.s1", CRC(6145daf4) SHA1(81bf405e8862854f3ae003ca840c0de05326a54f) )
+
+ NEO_BIOS_AUDIO_128K( "265ori.m1", CRC(AB9D360E) SHA1(a0c8a5aae387c4f0b72790211695da7df924c351) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "265nu.v1", 0x000000, 0x400000, CRC(13d98607) SHA1(0f1a374247992d301bc26c0bab200631a13a9f4a) )
+ ROM_LOAD( "265nu.v2", 0x400000, 0x400000, CRC(9cf74677) SHA1(073e7cb00127690fdec05c19f00347ec449f15ac) )
+ ROM_LOAD( "265nu.v3", 0x800000, 0x400000, CRC(8e9448b5) SHA1(c22420649c7c68a172290548cab846345c861cb0) )
+ ROM_LOAD( "265nu.v4", 0xc00000, 0x400000, CRC(067271b5) SHA1(36e07da78aaf634824c98023053bef802be4e218) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "265xxx.c1", 0x0000000, 0x800000, CRC(745B343E) SHA1(ae8293b18cfb4c20e2915149872d9fa561a218bf) )
+ ROM_LOAD16_BYTE( "265xxx.c2", 0x0000001, 0x800000, CRC(2AAB7F98) SHA1(083c6e9162ab3bb49b365f91246cb39019dabe43) )
+ ROM_LOAD16_BYTE( "265ori.c3", 0x1000000, 0x800000, CRC(E5074EEA) SHA1(387ef21d58b416126b95843bac1a0b6cc346818f) )
+ ROM_LOAD16_BYTE( "265ori.c4", 0x1000001, 0x800000, CRC(F6EB1FF2) SHA1(77cb493b9e75d42c204a9a6c052a813c2730e44f) )
+ ROM_LOAD16_BYTE( "265d.c5", 0x2000000, 0x800000, CRC(74bba7c6) SHA1(E01ADC7A4633BC0951B9B4F09ABC07D728E9A2D9) )
+ ROM_LOAD16_BYTE( "265d.c6", 0x2000001, 0x800000, CRC(e20d2216) SHA1(5D28EEA7B581E780B78F391A8179F1678EE0D9A5) )
+ ROM_LOAD16_BYTE( "265ori.c7", 0x3000000, 0x800000, CRC(0E9F6ADB) SHA1(0e4cdbd3df2ef7b0c78c3275ee22684c67bf2d23) )
+ ROM_LOAD16_BYTE( "265ori.c8", 0x3000001, 0x800000, CRC(9961799E) SHA1(cf5d43bbd90269155ac41fe9a31328654784351f) )
+ROM_END
+
ROM_START( kof2k2omg8 ) // KOF-ON Team omega 0.8
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "265omg8.p1", 0x000000, 0x100000, CRC(53086581) SHA1(a548625cfe62bc6f164276fda8e589a0e734af25) )
@@ -3165,6 +3244,32 @@ ROM_START( kof2k2sm ) // bad gfx on train scene
ROM_LOAD16_BYTE( "265d.c8", 0x3000001, 0x800000, CRC(bef667a3) SHA1(D5E8BC185DCF63343D129C31D2DDAB9F723F1A12) )
ROM_END
+ROM_START( kof2k2smf ) // kf2k2smf
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "265smf.p1", 0x000000, 0x100000, CRC(d8010414) SHA1(4a6e509e25b819188181375238f5b086ee28ff6e) )
+ ROM_LOAD16_WORD_SWAP( "265smf.p2", 0x100000, 0x400000, CRC(1647a83a) SHA1(2415636880cfb5a65255d9248a3034d247eff8d4) )
+
+ NEO_SFIX_128K( "265smf.s1", CRC(c7282dbc) SHA1(7fd82850a35a6ea0c2877aaf39cc46d7dcbd939b) )
+
+ NEO_BIOS_AUDIO_128K( "265ori.m1", CRC(AB9D360E) SHA1(a0c8a5aae387c4f0b72790211695da7df924c351) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "265nu.v1", 0x000000, 0x400000, CRC(13d98607) SHA1(0f1a374247992d301bc26c0bab200631a13a9f4a) )
+ ROM_LOAD( "265nu.v2", 0x400000, 0x400000, CRC(9cf74677) SHA1(073e7cb00127690fdec05c19f00347ec449f15ac) )
+ ROM_LOAD( "265nu.v3", 0x800000, 0x400000, CRC(8e9448b5) SHA1(c22420649c7c68a172290548cab846345c861cb0) )
+ ROM_LOAD( "265nu.v4", 0xc00000, 0x400000, CRC(067271b5) SHA1(36e07da78aaf634824c98023053bef802be4e218) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "265d.c1", 0x0000000, 0x800000, CRC(7efa6ef7) SHA1(71345A4202E7CC9239538FB978638141416C8893) )
+ ROM_LOAD16_BYTE( "265d.c2", 0x0000001, 0x800000, CRC(aa82948b) SHA1(B2A40797F68BDEB80BC54DCCC5495BE68934BF0E) )
+ ROM_LOAD16_BYTE( "265d.c3", 0x1000000, 0x800000, CRC(959fad0b) SHA1(63AB83DDC5F688DC8165A7FF8D262DF3FCD942A2) )
+ ROM_LOAD16_BYTE( "265d.c4", 0x1000001, 0x800000, CRC(efe6a468) SHA1(2A414285E48AA948B5B0D4A9333BAB083B5FB853) )
+ ROM_LOAD16_BYTE( "265d.c5", 0x2000000, 0x800000, CRC(74bba7c6) SHA1(E01ADC7A4633BC0951B9B4F09ABC07D728E9A2D9) )
+ ROM_LOAD16_BYTE( "265d.c6", 0x2000001, 0x800000, CRC(e20d2216) SHA1(5D28EEA7B581E780B78F391A8179F1678EE0D9A5) )
+ ROM_LOAD16_BYTE( "265smg.c7", 0x3000000, 0x800000, CRC(febfa475) SHA1(ed69f7536d39522b85bfaa512e75b85d08b439e9) )
+ ROM_LOAD16_BYTE( "265smg.c8", 0x3000001, 0x800000, CRC(8f9b7991) SHA1(9c6e6af48c18e81ecba68563f8fb9caa85899672) )
+ROM_END
+
ROM_START( kof2k2smg )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "265smg.p1", 0x000000, 0x100000, CRC(8c07ce4e) SHA1(754d588fb41cbaf9466c677e9daccac4e2025925) )
@@ -3473,6 +3578,8 @@ GAME( 2002, kof2k2bd, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, ko
GAME( 2002, kof2k2bh, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, kof2002m, ROT0, "Alphax2", "Kof2002 (Add Char set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, kof2k2bjh, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, kof2002m, ROT0, "Ben Jeremy", "Kof2002 (Diff Moves 031025)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, kof2k2bjo, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, kof2002m, ROT0, "Ben Jeremy", "Kof2002 (Diff Moves 031013)", MACHINE_SUPPORTS_SAVE )
+GAME( 2011, kof2k2bl3, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Neo Nebuwaks/Ismamj", "Kof2002 BLOOD S.PLUS (BL3)", MACHINE_SUPPORTS_SAVE )
+GAME( 2011, kof2k2bl4, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Neo Nebuwaks/Ismamj", "Kof2002 BLOOD S.PLUS (BL4)", MACHINE_SUPPORTS_SAVE )
GAME( 2002, kof2k2bld, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof2002 BLOOD PLUS", MACHINE_SUPPORTS_SAVE )
GAME( 2002, kof2k2blood2,kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof2002 BLOOD PLUS 2", MACHINE_SUPPORTS_SAVE )
GAME( 2002, kof2k2br, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, kof2k2h, ROT0, "hack", "Kof2002 (Portuguese set 2)", MACHINE_SUPPORTS_SAVE )
@@ -3547,6 +3654,7 @@ GAME( 2002, kof2k2mpu, kof2002, neogeo_noslot, neogeo, neogeo_state, ne
GAME( 2002, kof2k2ngp, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof2002 (Portuguese negative colour)", MACHINE_SUPPORTS_SAVE )
GAME( 2012, kof2k2nu, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack by BXX", "Kof2002 (Super Black Nude Mix)" , MACHINE_SUPPORTS_SAVE )
GAME( 2002, kof2k2olp, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof2002 (Orochi Leona 97 color style)", MACHINE_SUPPORTS_SAVE )
+GAME( 2002, kof2k2omg, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "KOF-ON Team", "Kof2002 (hack omg)", MACHINE_SUPPORTS_SAVE )
GAME( 2010, kof2k2omg8, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "KOF-ON Team", "Kof2002 (Omega v0.8)", MACHINE_SUPPORTS_SAVE )
GAME( 2012, kof2k2omg9, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "KOF-ON Team", "Kof2002 (Omega v0.9)", MACHINE_SUPPORTS_SAVE )
GAME( 2011, kof2k2omg9b, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "KOF-ON Team", "Kof2002 (Omega v0.9 beta)", MACHINE_SUPPORTS_SAVE )
@@ -3589,6 +3697,7 @@ GAME( 2002, kof2k2sb, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, ko
GAME( 2002, kof2k2se2, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, kof2002m, ROT0, "Creamymami", "Kof2002 (Add Char - Ultra kill start max - Ultra pow hack set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 2002, kof2k2seh, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, kof2002m, ROT0, "Creamymami", "Kof2002 (Add Char - Ultra kill start max - Ultra pow hack set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 2013, kof2k2sm, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Maitry Maker", "Kof2002 (Super Mix)" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 2002, kof2k2smf, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "KOF-ON Team/Abbas", "Kof2002 (SMF)" , MACHINE_SUPPORTS_SAVE )
GAME( 2002, kof2k2smg, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Wesker/Abbas", "Kof2002 (SMG by Abbas)" , MACHINE_SUPPORTS_SAVE )
GAME( 2002, kof2k2smg2, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Arn", "Kof2002 (Recompilation of SMG by Arn)" , MACHINE_SUPPORTS_SAVE )
GAME( 2002, kof2k2soi, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "ACM1PT", "Kof2002 Super Orochi Iori (by ADM1PT)", MACHINE_SUPPORTS_SAVE )
@@ -3603,4 +3712,4 @@ GAME( 2002, kof2k2wuk, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, ko
GAME( 2002, kof2k2xxx, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Peggy / Kim", "Kof2002 (Perfect revised edition)", MACHINE_SUPPORTS_SAVE )
///GAME( 2002, kof2002d, kof2002, neogeo_noslot, neogeo, neogeo_state, kof2002d, ROT0, "hack", "Kof2002 (NGM-2650)(NGH-2650) (decrypted C)", MACHINE_SUPPORTS_SAVE )
///GAME( 2002, kf2k2plb, kof2002, neogeo_noslot, neogeo, neogeo_state, kf2k2pls, ROT0, "bootleg", "Kof2002 Plus (set 3, bootleg / hack)", MACHINE_SUPPORTS_SAVE )
-///GAME( 2002, kf2k2plc, kof2002, neogeo_noslot, neogeo, neogeo_state, kf2k2plc, ROT0, "bootleg", "Kof2002 Super (set 4, bootleg / hack)", MACHINE_SUPPORTS_SAVE )
+///GAME( 2002, kf2k2plc, kof2002, neogeo_noslot, neogeo, neogeo_state, kf2k2plc, ROT0, "bootleg", "Kof2002 Super (set 4, bootleg / hack)", MACHINE_SUPPORTS_SAVE ) \ No newline at end of file
diff --git a/docs/release/src/hbmame/drivers/kof96.cpp b/docs/release/src/hbmame/drivers/kof96.cpp
index bf76252e248..17b21e38faa 100644
--- a/docs/release/src/hbmame/drivers/kof96.cpp
+++ b/docs/release/src/hbmame/drivers/kof96.cpp
@@ -858,6 +858,31 @@ ROM_START( kof96oir ) // Orochi Iori Remix by IsmaMj
ROM_LOAD16_BYTE( "214-c8.c8", 0x1800001, 0x400000, CRC(fa1461ad) SHA1(6c71a7f08e4044214223a6bf80984582ab5e0328) )
ROM_END
+ROM_START( kof96pch ) // All confirmed
+ ROM_REGION( 0x300000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "214pch.p1", 0x000000, 0x100000, CRC(71db3c3e) SHA1(39770e938067b7f4d434d7af93fbe77f0a3d9a3d) )
+ ROM_LOAD16_WORD_SWAP( "214-p2.sp2", 0x100000, 0x200000, CRC(002ccb73) SHA1(3ae8df682c75027ca82db25491021eeba00a267e) )
+
+ NEO_SFIX_128K( "214-s1.s1", CRC(1254cbdb) SHA1(fce5cf42588298711a3633e9c9c1d4dcb723ac76) )
+
+ NEO_BIOS_AUDIO_128K( "214-m1.m1", CRC(dabc427c) SHA1(b76722ed142ee7addceb4757424870dbd003e8b3) )
+
+ ROM_REGION( 0xa00000, "ymsnd", 0 )
+ ROM_LOAD( "214-v1.v1", 0x000000, 0x400000, CRC(63f7b045) SHA1(1353715f1a8476dca6f8031d9e7a401eacab8159) )
+ ROM_LOAD( "214-v2.v2", 0x400000, 0x400000, CRC(25929059) SHA1(6a721c4cb8f8dc772774023877d4a9f50d5a9e31) )
+ ROM_LOAD( "214-v3.v3", 0x800000, 0x200000, CRC(92a2257d) SHA1(5064aec78fa0d104e5dd5869b95382aa170214ee) )
+
+ ROM_REGION( 0x2000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "214-c1.c1", 0x0000000, 0x400000, CRC(7ecf4aa2) SHA1(f773c4c1f05d58dd37e7bb2ac1d1e0ec43998a71) )
+ ROM_LOAD16_BYTE( "214-c2.c2", 0x0000001, 0x400000, CRC(05b54f37) SHA1(cc31653fe4cb05201fba234e080cb9c7a7592b1b) )
+ ROM_LOAD16_BYTE( "214-c3.c3", 0x0800000, 0x400000, CRC(64989a65) SHA1(e6f3749d43be0afa9dad7b085cb782ba694252ca) )
+ ROM_LOAD16_BYTE( "214-c4.c4", 0x0800001, 0x400000, CRC(afbea515) SHA1(ae875052728de33174827705646bd14cf3937b5c) )
+ ROM_LOAD16_BYTE( "214-c5.c5", 0x1000000, 0x400000, CRC(2a3bbd26) SHA1(7c1a7e50a10a1b082e0d0d515c34135ee9f995ac) )
+ ROM_LOAD16_BYTE( "214-c6.c6", 0x1000001, 0x400000, CRC(44d30dc7) SHA1(c8ae001e37224b55d9e4a4d99f6578b4f6eb055f) )
+ ROM_LOAD16_BYTE( "214-c7.c7", 0x1800000, 0x400000, CRC(3687331b) SHA1(2be95caab76d7af51674f93884330ba73a6053e4) )
+ ROM_LOAD16_BYTE( "214-c8.c8", 0x1800001, 0x400000, CRC(fa1461ad) SHA1(6c71a7f08e4044214223a6bf80984582ab5e0328) )
+ROM_END
+
ROM_START( kof96pjc ) /* The King of Fighters '96 - Colour fix by TcwLee - (Character colour change) */
ROM_REGION( 0x300000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "214-p1.p1", 0x000000, 0x100000, CRC(52755d74) SHA1(4232d627f1d2e6ea9fc8cf01571d77d4d5b8a1bb) )
@@ -1346,7 +1371,7 @@ GAME( 1998, kof96c, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo,
GAME( 2011, kof96cbi, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "IsmaMj", "Kof'96 (Change Blood For Other Hack (02-03-11))", MACHINE_SUPPORTS_SAVE )
GAME( 1996, kof96ckvs, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "KVS", "Kof'96 (Chinese ver)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, kof96chj, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "CHL and Jason/K3", "Kof'96 (Diff Moves - Ultra kill style changed set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 200?, kof96cn, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'96 (Chinese Edition ver 1.0, hack)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, kof96cn, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Guangzhou Game Team", "Kof'96 (CN)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, kof96cr, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "CHL", "Kof'96 (Diff Moves and Style)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, kof96de, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'96 (Dragon Edition set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, kof96eh, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ydmis", "Kof'96 (Add Char - Pow hack ABC set 1)", MACHINE_SUPPORTS_SAVE )
@@ -1367,9 +1392,10 @@ GAME( 2007, kof96lx, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo,
GAME( 1996, kof96ncd, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Eddids FCHT", "Kof'96 (Boss, Like NEOGEOCD Version)", MACHINE_SUPPORTS_SAVE )
GAME( 2011, kof96oib, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "IsmaMj", "Kof'96 (Special Orochi Iori/Boss Hack v3.0)", MACHINE_SUPPORTS_SAVE )
GAME( 2011, kof96oib2, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "IsmaMj", "Kof'96 (Special Orochi Iori/Boss Hack v3.0 alt)", MACHINE_SUPPORTS_SAVE )
-GAME( 1996, kof96oih, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'96 (Orochi Iori (unknown hack))", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, kof96oih, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'96 (Orochi Iori (OIH))", MACHINE_SUPPORTS_SAVE )
GAME( 2010, kof96oir, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "IsmaMj", "Kof'96 (Orochi Iori Remix)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, kof96pjc, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "TcwLee", "Kof'96 (Char color changed)", MACHINE_SUPPORTS_SAVE )
+GAME( 2011, kof96pch, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "C-17", "Kof'96 (C-17 hack)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, kof96pm, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "KOF1996", "Kof'96 Practice Mode (Hack by KOF1996)", MACHINE_SUPPORTS_SAVE )
GAME( 2004, kof96rcw, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Wesker/Fight China", "Kof'96 (Diff Moves - Ultra kill style changed set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, kof96rf, kof96, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK2003", "Kof'96 Remix Final (2007 Revised Version)", MACHINE_SUPPORTS_SAVE )
diff --git a/docs/release/src/hbmame/drivers/kof97.cpp b/docs/release/src/hbmame/drivers/kof97.cpp
index 4fbf47a3a6d..8720f9cafc3 100644
--- a/docs/release/src/hbmame/drivers/kof97.cpp
+++ b/docs/release/src/hbmame/drivers/kof97.cpp
@@ -90,6 +90,29 @@ ROM_START( kof97ae1 )
ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
ROM_END
+ROM_START( kof97aot ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232aot.p1", 0x000000, 0x100000, CRC(edd3bd8f) SHA1(7c422db860c9b8c8caf933bfabbc43b891fc0a5e) )
+ ROM_LOAD16_WORD_SWAP( "232zm.p2", 0x100000, 0x400000, CRC(ca11478d) SHA1(484533266ba677fa2930e977226c4b72a59de8e2) )
+
+ NEO_SFIX_128K( "232-s1.s1", CRC(8514ecf5) SHA1(18d8e7feb51ea88816f1c786932a53655b0de6a0) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232-c1.c1", 0x0000000, 0x800000, CRC(5f8bf0a1) SHA1(e8b63bbc814de171fd18c5864a7fc639970c1ecf) )
+ ROM_LOAD16_BYTE( "232-c2.c2", 0x0000001, 0x800000, CRC(e4d45c81) SHA1(fdb2b9326362e27b1c7a5beb977e0bc537488186) )
+ ROM_LOAD16_BYTE( "232-c3.c3", 0x1000000, 0x800000, CRC(581d6618) SHA1(14d3124a08ded59f86932c6b28e1a4e48c564ccd) )
+ ROM_LOAD16_BYTE( "232-c4.c4", 0x1000001, 0x800000, CRC(49bb1e68) SHA1(f769c1bd1b019521111ff3f0d22c63cb1f2640ef) )
+ ROM_LOAD16_BYTE( "232-c5.c5", 0x2000000, 0x400000, CRC(34fc4e51) SHA1(b39c65f27873f71a6f5a5d1d04e5435f874472ee) )
+ ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
+ROM_END
+
ROM_START( kof97bh ) /* The King of Fighters '97 - Hack by Dodowang - (Can choose Orochi + add. Iori, Yashiro, Shermie, Chris and Leona - Orochi has icon in menue - extra stage select) */
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "232bh.p1", 0x000000, 0x100000, CRC(b49a3fcf) SHA1(2dcb95e184b86a455ef23b70aca00bbcd28f23c5) )
@@ -344,6 +367,55 @@ ROM_START( kof97cr ) /* The King of Fighters '97 - Remix by CHL Hack by Leather
ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
ROM_END
+ROM_START( kof97cy ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232cy.p1", 0x000000, 0x4550c4, CRC(070d8bd6) SHA1(2565bd372bb2a1aa88b55b770e48e7bfc82823d8) )
+ ROM_LOAD16_WORD_SWAP( "232cy.p2", 0x100000, 0x400000, CRC(97fd8943) SHA1(2127846451507769d49747f42c97be5b1a82ad93) )
+
+ //NEO_SFIX_128K( "232-s1.s1", CRC(8514ecf5) SHA1(18d8e7feb51ea88816f1c786932a53655b0de6a0) )
+ NEO_SFIX_MT_128K
+ ROM_LOAD( "232cy.s1", 0x000000, 0x20000, CRC(aaef5283) SHA1(e2b3fcedebf22cc40e671a651678b5a68868f701) )
+ ROM_IGNORE( 0x434f55 )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232cy.c1", 0x0000000, 0x800000, CRC(503850f7) SHA1(004cc243a424bbe3b81c32ba513999c2fdd2b430) )
+ ROM_LOAD16_BYTE( "232cy.c2", 0x0000001, 0x800000, CRC(ce3b418b) SHA1(8f605f0ea992b954bd540435156ce0cafaa5abed) )
+ ROM_LOAD16_BYTE( "232cy.c3", 0x1000000, 0x800000, CRC(52e5f3a7) SHA1(bae549239b0422dfb26b24c6d4a1e501dbb00cf0) )
+ ROM_LOAD16_BYTE( "232cy.c4", 0x1000001, 0x800000, CRC(b97c21e3) SHA1(8d79460de1ac0cf147292b9018661a729140e3f9) )
+ ROM_LOAD16_BYTE( "232-c5.c5", 0x2000000, 0x400000, CRC(34fc4e51) SHA1(b39c65f27873f71a6f5a5d1d04e5435f874472ee) )
+ ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
+ROM_END
+
+ROM_START( kof97dse ) // All confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232dse.p1", 0x000000, 0x100000, CRC(8f00511f) SHA1(7c04420f8d35034ac3995bc0764d444c843184f1) )
+ ROM_LOAD16_WORD_SWAP( "232dse.p2", 0x100000, 0x400000, CRC(0fa5639a) SHA1(ead4d2c4d6d13160170d121b9244eaf427637aaa) )
+
+ NEO_SFIX_128K( "232-s1.s1", CRC(8514ecf5) SHA1(18d8e7feb51ea88816f1c786932a53655b0de6a0) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232-c1.c1", 0x0000000, 0x800000, CRC(5f8bf0a1) SHA1(e8b63bbc814de171fd18c5864a7fc639970c1ecf) )
+ ROM_LOAD16_BYTE( "232-c2.c2", 0x0000001, 0x800000, CRC(e4d45c81) SHA1(fdb2b9326362e27b1c7a5beb977e0bc537488186) )
+ ROM_LOAD16_BYTE( "232-c3.c3", 0x1000000, 0x800000, CRC(581d6618) SHA1(14d3124a08ded59f86932c6b28e1a4e48c564ccd) )
+ ROM_LOAD16_BYTE( "232-c4.c4", 0x1000001, 0x800000, CRC(49bb1e68) SHA1(f769c1bd1b019521111ff3f0d22c63cb1f2640ef) )
+ ROM_LOAD16_BYTE( "232-c5.c5", 0x2000000, 0x400000, CRC(34fc4e51) SHA1(b39c65f27873f71a6f5a5d1d04e5435f874472ee) )
+ ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
+ROM_END
+
ROM_START( kof97eh ) /* The King of Fighters '97 - Super Enhance Hack by Creamymami, Leather and Ydmis - (Can choose Orochi + 5 add. characters - ultra kill start is max in Advanced Mode - ultra power hack ABC - extra stage select) */
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "232eh.p1", 0x000000, 0x100000, CRC(3d4eb515) SHA1(7d1ca643fb3872495fa681bc28a975d92822b7f0) )
@@ -413,10 +485,33 @@ ROM_START( kof97eho ) /* The King of Fighters '97 - Enhance by Ydmis - (Can choo
ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
ROM_END
+ROM_START( kof97ei ) // all confirmed (diff colours of kof97co)
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232ei.p1", 0x000000, 0x100000, CRC(5d8e9114) SHA1(5d9262c17758d64524f1af8266d16f336df283f9) )
+ ROM_LOAD16_WORD_SWAP( "232ei.p2", 0x100000, 0x400000, CRC(39259db2) SHA1(741a9ab344f182c06806b1ee4d2e2b8f5521bf6e) )
+
+ NEO_SFIX_128K( "232ae.s1", CRC(d4957067) SHA1(b756c97b050296db9b00e0bc6cdd79e4d2e2273e) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232ae.c1", 0x0000000, 0x800000, CRC(ea16b711) SHA1(e54d1a0b559f1ef326ee86bc89e9f1b399f08b32) )
+ ROM_LOAD16_BYTE( "232ae.c2", 0x0000001, 0x800000, CRC(b7bef674) SHA1(378a67dfa7dba03900dd7c70a3473c12f9879af1) )
+ ROM_LOAD16_BYTE( "232-c3.c3", 0x1000000, 0x800000, CRC(581d6618) SHA1(14d3124a08ded59f86932c6b28e1a4e48c564ccd) )
+ ROM_LOAD16_BYTE( "232-c4.c4", 0x1000001, 0x800000, CRC(49bb1e68) SHA1(f769c1bd1b019521111ff3f0d22c63cb1f2640ef) )
+ ROM_LOAD16_BYTE( "232-c5.c5", 0x2000000, 0x400000, CRC(34fc4e51) SHA1(b39c65f27873f71a6f5a5d1d04e5435f874472ee) )
+ ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
+ROM_END
+
ROM_START( kof97evo ) // Evolution
ROM_REGION( 0x500000, "maincpu", 0 )
- ROM_LOAD16_WORD_SWAP( "232evo.p1", 0x000000, 0x100000, CRC(8ee0d743) SHA1(7bfd8428efb0a738decccf0f2120dac1c4bc3a6a) )
- ROM_LOAD16_WORD_SWAP( "232evo.sp2", 0x100000, 0x400000, CRC(5cbb2499) SHA1(58e21c1ff7afbfcca0a733e2b3e9f54b2317ed42) )
+ ROM_LOAD16_WORD_SWAP( "232evo.p1", 0x000000, 0x100000, CRC(8ee0d743) SHA1(7bfd8428efb0a738decccf0f2120dac1c4bc3a6a) )
+ ROM_LOAD16_WORD_SWAP( "232evo.p2", 0x100000, 0x400000, CRC(5cbb2499) SHA1(58e21c1ff7afbfcca0a733e2b3e9f54b2317ed42) )
NEO_SFIX_128K( "232-s1.s1", CRC(8514ecf5) SHA1(18d8e7feb51ea88816f1c786932a53655b0de6a0) )
@@ -459,6 +554,30 @@ ROM_START( kof97evoa ) // Old evolution
ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
ROM_END
+ROM_START( kof97frb ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232frb.p1", 0x000000, 0x100000, CRC(3c5e84fc) SHA1(b71391369293a81cb22a849e1682e141e9d8c0b3) )
+ //ROM_LOAD16_WORD_SWAP( "232frb.pg1", 0x000000, 0x100000, CRC(5c2400b7) SHA1(49e23f80c012c62146a1bb8f254a7597823de430) ) // alternate rom in the set
+ ROM_LOAD16_WORD_SWAP( "232frb.p2", 0x100000, 0x400000, CRC(f7e09607) SHA1(f64d394226876e1d189549ba0fd7fb3c4fd9df82) )
+
+ NEO_SFIX_128K( "232frb.s1", CRC(3c9af3f7) SHA1(7320fa38fc6db4f3ab6077d2541bb16fa5fb31ef) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232frb.c1", 0x0000000, 0x800000, CRC(6f837a71) SHA1(dfc6dcb9e3def1c78fb43550a332657fae68650f) )
+ ROM_LOAD16_BYTE( "232frb.c2", 0x0000001, 0x800000, CRC(c1a51c17) SHA1(38b8862267daf7975a235dc72cf787256ca108fb) )
+ ROM_LOAD16_BYTE( "232-c3.c3", 0x1000000, 0x800000, CRC(581d6618) SHA1(14d3124a08ded59f86932c6b28e1a4e48c564ccd) )
+ ROM_LOAD16_BYTE( "232-c4.c4", 0x1000001, 0x800000, CRC(49bb1e68) SHA1(f769c1bd1b019521111ff3f0d22c63cb1f2640ef) )
+ ROM_LOAD16_BYTE( "232-c5.c5", 0x2000000, 0x400000, CRC(34fc4e51) SHA1(b39c65f27873f71a6f5a5d1d04e5435f874472ee) )
+ ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
+ROM_END
+
ROM_START( kof97hk ) // Evolution Hakeshu
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "232evoa.p1", 0x000000, 0x100000, CRC(d439c4ed) SHA1(67117ffce3c95615d75eb298c50224685df5f0b7) )
@@ -551,6 +670,29 @@ ROM_START( kof97ice ) /* The King of Fighters '97 - Colour fix by Cz-Kyo97 - (Co
ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
ROM_END
+ROM_START( kof97irgc ) // All confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232irgc.p1", 0x000000, 0x100000, CRC(fbc9341f) SHA1(fb9605f94a438aa79ad03fb9fd6f5fca7a6d1edb) )
+ ROM_LOAD16_WORD_SWAP( "232irgc.p2", 0x100000, 0x400000, CRC(6c9092ba) SHA1(d17d4349c799dcba22b383d36f0cfc8e2bac7adf) )
+
+ NEO_SFIX_128K( "232-s1.s1", CRC(8514ecf5) SHA1(18d8e7feb51ea88816f1c786932a53655b0de6a0) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232-c1.c1", 0x0000000, 0x800000, CRC(5f8bf0a1) SHA1(e8b63bbc814de171fd18c5864a7fc639970c1ecf) )
+ ROM_LOAD16_BYTE( "232-c2.c2", 0x0000001, 0x800000, CRC(e4d45c81) SHA1(fdb2b9326362e27b1c7a5beb977e0bc537488186) )
+ ROM_LOAD16_BYTE( "232-c3.c3", 0x1000000, 0x800000, CRC(581d6618) SHA1(14d3124a08ded59f86932c6b28e1a4e48c564ccd) )
+ ROM_LOAD16_BYTE( "232-c4.c4", 0x1000001, 0x800000, CRC(49bb1e68) SHA1(f769c1bd1b019521111ff3f0d22c63cb1f2640ef) )
+ ROM_LOAD16_BYTE( "232rev.c5", 0x2000000, 0x400000, CRC(9c543bc6) SHA1(cb227c71aca5e632a08fbd7f5af53581b5b28f93) )
+ ROM_LOAD16_BYTE( "232rev.c6", 0x2000001, 0x400000, CRC(e3feb991) SHA1(978b106bccd31c8229c9abcc6e682a7b5fc98154) )
+ROM_END
+
ROM_START( kof97kai )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "232kai.p1", 0x000000, 0x100000, CRC(e96524fe) SHA1(e9a523233228ed57bdbc2b8eb620054cadb381f2) )
@@ -1103,6 +1245,32 @@ ROM_START( kof97rev ) // KOF97 revival
ROM_LOAD16_BYTE( "232rev.c6", 0x2000001, 0x400000, CRC(e3feb991) SHA1(978b106bccd31c8229c9abcc6e682a7b5fc98154) )
ROM_END
+ROM_START( kof97ribe ) // All confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232ribe.p1", 0x000000, 0x4551c6, CRC(21863b47) SHA1(e3e2b1f6818cd37d5482be9108269b4bbfd7d459) )
+ ROM_LOAD16_WORD_SWAP( "232ribe.p2", 0x100000, 0x400000, CRC(5ad1ecc6) SHA1(83ffffa98013ca8fcec9157846e272b0e1184968) )
+ ROM_IGNORE( 0x054f64 )
+
+ NEO_SFIX_MT_128K
+ ROM_LOAD( "232ribe.v1", 0x000000, 0x20000, CRC(dcefb4c5) SHA1(9d3aebf0af27bc8e148621e3da7b73994e0725a1) )
+ ROM_IGNORE( 0x434f50 )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232-c1.c1", 0x0000000, 0x800000, CRC(5f8bf0a1) SHA1(e8b63bbc814de171fd18c5864a7fc639970c1ecf) )
+ ROM_LOAD16_BYTE( "232-c2.c2", 0x0000001, 0x800000, CRC(e4d45c81) SHA1(fdb2b9326362e27b1c7a5beb977e0bc537488186) )
+ ROM_LOAD16_BYTE( "232-c3.c3", 0x1000000, 0x800000, CRC(581d6618) SHA1(14d3124a08ded59f86932c6b28e1a4e48c564ccd) )
+ ROM_LOAD16_BYTE( "232-c4.c4", 0x1000001, 0x800000, CRC(49bb1e68) SHA1(f769c1bd1b019521111ff3f0d22c63cb1f2640ef) )
+ ROM_LOAD16_BYTE( "232-c5.c5", 0x2000000, 0x400000, CRC(34fc4e51) SHA1(b39c65f27873f71a6f5a5d1d04e5435f874472ee) )
+ ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
+ROM_END
+
ROM_START( kof97rk ) // Hack by Risko
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "232rk.p1", 0x000000, 0x100000, CRC(940409b7) SHA1(94d1e0ec3460f5a2087f5fc1e1455df123f18c28) )
@@ -1126,6 +1294,75 @@ ROM_START( kof97rk ) // Hack by Risko
ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
ROM_END
+ROM_START( kof97rst ) // All confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232rst.p1", 0x000000, 0x100000, CRC(c20d3712) SHA1(f55f781f0affab4d78fa5484ec9ed4254f359c0e) )
+ ROM_LOAD16_WORD_SWAP( "232rst.p2", 0x100000, 0x400000, CRC(ca32e3d2) SHA1(a1c540f9a6e305c3d73b04117a630abe6ba6f0fc) )
+
+ NEO_SFIX_128K( "232rst.s1", CRC(caab5d72) SHA1(1c4f6c6dc30c5d8e2aac3a651913ca9a4742dab3) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232rst.c1", 0x0000000, 0x800000, CRC(ede4fff1) SHA1(7ddc48cd06a71fbc8bac9d9bc36bd0a8395a008e) )
+ ROM_LOAD16_BYTE( "232rst.c2", 0x0000001, 0x800000, CRC(d6957979) SHA1(13d0c0cb480ca4c3f3b96408af54c01c400f989f) )
+ ROM_LOAD16_BYTE( "232yk.c3", 0x1000000, 0x800000, CRC(b092e64f) SHA1(7d809432d068db8f9056f5210570191416f1a53b) )
+ ROM_LOAD16_BYTE( "232yk.c4", 0x1000001, 0x800000, CRC(d25e8a04) SHA1(52227828e3fdd27399b4cd514551abf856293f47) )
+ ROM_LOAD16_BYTE( "232rst.c5", 0x2000000, 0x400000, CRC(6eba5e06) SHA1(939ba1b47e69a3d578f17256dd97d2f4f9238ad4) )
+ ROM_LOAD16_BYTE( "232rst.c6", 0x2000001, 0x400000, CRC(168e4ac5) SHA1(437db7a1388cdd1ff80b703a64655a73443b438f) )
+ROM_END
+
+ROM_START( kof97rst2 ) // All confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232rst2.p1", 0x000000, 0x100000, CRC(7d6ad86d) SHA1(9b2e9430b11a7c29e547a5a2af5ba9f914925f95) )
+ ROM_LOAD16_WORD_SWAP( "232rst.p2", 0x100000, 0x400000, CRC(ca32e3d2) SHA1(a1c540f9a6e305c3d73b04117a630abe6ba6f0fc) )
+
+ NEO_SFIX_128K( "232rst.s1", CRC(caab5d72) SHA1(1c4f6c6dc30c5d8e2aac3a651913ca9a4742dab3) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232rst.c1", 0x0000000, 0x800000, CRC(ede4fff1) SHA1(7ddc48cd06a71fbc8bac9d9bc36bd0a8395a008e) )
+ ROM_LOAD16_BYTE( "232rst.c2", 0x0000001, 0x800000, CRC(d6957979) SHA1(13d0c0cb480ca4c3f3b96408af54c01c400f989f) )
+ ROM_LOAD16_BYTE( "232yk.c3", 0x1000000, 0x800000, CRC(b092e64f) SHA1(7d809432d068db8f9056f5210570191416f1a53b) )
+ ROM_LOAD16_BYTE( "232yk.c4", 0x1000001, 0x800000, CRC(d25e8a04) SHA1(52227828e3fdd27399b4cd514551abf856293f47) )
+ ROM_LOAD16_BYTE( "232rst.c5", 0x2000000, 0x400000, CRC(6eba5e06) SHA1(939ba1b47e69a3d578f17256dd97d2f4f9238ad4) )
+ ROM_LOAD16_BYTE( "232rst.c6", 0x2000001, 0x400000, CRC(168e4ac5) SHA1(437db7a1388cdd1ff80b703a64655a73443b438f) )
+ROM_END
+
+ROM_START( kof97rst3 ) // All confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232rst3.p1", 0x000000, 0x100000, CRC(b7e4b5bd) SHA1(1fe4d492492dd4716f1b31319ad68b757c7fab3a) )
+ ROM_LOAD16_WORD_SWAP( "232rst3.p2", 0x100000, 0x400000, CRC(620a63ed) SHA1(20fa7c8d694a7f15715840240192c8d6e34e68b4) )
+
+ NEO_SFIX_128K( "232rst.s1", CRC(caab5d72) SHA1(1c4f6c6dc30c5d8e2aac3a651913ca9a4742dab3) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232rst.c1", 0x0000000, 0x800000, CRC(ede4fff1) SHA1(7ddc48cd06a71fbc8bac9d9bc36bd0a8395a008e) )
+ ROM_LOAD16_BYTE( "232rst.c2", 0x0000001, 0x800000, CRC(d6957979) SHA1(13d0c0cb480ca4c3f3b96408af54c01c400f989f) )
+ ROM_LOAD16_BYTE( "232-c3.c3", 0x1000000, 0x800000, CRC(581d6618) SHA1(14d3124a08ded59f86932c6b28e1a4e48c564ccd) )
+ ROM_LOAD16_BYTE( "232-c4.c4", 0x1000001, 0x800000, CRC(49bb1e68) SHA1(f769c1bd1b019521111ff3f0d22c63cb1f2640ef) )
+ ROM_LOAD16_BYTE( "232-c5.c5", 0x2000000, 0x400000, CRC(34fc4e51) SHA1(b39c65f27873f71a6f5a5d1d04e5435f874472ee) )
+ ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
+ROM_END
+
ROM_START( kof97rv )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "232rv.p1", 0x000000, 0x100000, CRC(eff2926f) SHA1(d9a64806ace1d2b08d8a5b2092bbfeb93c3230fd) )
@@ -1287,6 +1524,30 @@ ROM_START( kof97svs )
ROM_LOAD16_BYTE( "232svs.c6", 0x2000001, 0x800000, CRC(6f047b36) SHA1(9df4cb34f3b28a97c0b903394b3e2cdb79906582) )
ROM_END
+ROM_START( kof97svsb2 ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232svsb2.p1", 0x000000, 0x454fd8, CRC(c9a489de) SHA1(b93dd3aa9e91456c7d92b81dc96d60c1c94797d3) )
+ ROM_LOAD16_WORD_SWAP( "232svsb2.p2", 0x100000, 0x400000, CRC(9f2c57dd) SHA1(3cf16a8b0d79f95279ca7ba19678c50499b470e4) )
+ ROM_IGNORE( 0x054f64 )
+
+ NEO_SFIX_128K( "232xt.s1", CRC(d6fe166f) SHA1(55e70395466ab68e7a170be3aa6f5978e704701b) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x3000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232yk.c1", 0x0000000, 0x800000, CRC(d504bf4a) SHA1(a58f6c07080c666ae1bb3e2dbab4790feab5ccc7) )
+ ROM_LOAD16_BYTE( "232yk.c2", 0x0000001, 0x800000, CRC(942ea708) SHA1(20389bdb253611745c5515206b1eb620a1574711) )
+ ROM_LOAD16_BYTE( "232-c3.c3", 0x1000000, 0x800000, CRC(581d6618) SHA1(14d3124a08ded59f86932c6b28e1a4e48c564ccd) )
+ ROM_LOAD16_BYTE( "232-c4.c4", 0x1000001, 0x800000, CRC(49bb1e68) SHA1(f769c1bd1b019521111ff3f0d22c63cb1f2640ef) )
+ ROM_LOAD16_BYTE( "232svsb2.c5", 0x2000000, 0x800000, CRC(2cb9f438) SHA1(a358f81e937504b6bc087bf0e40a17ac07a968b2) )
+ ROM_LOAD16_BYTE( "232svsb2.c6", 0x2000001, 0x800000, CRC(95029580) SHA1(51cc1186269da68c89af2e2f491477e0e2eb244f) )
+ROM_END
+
ROM_START( kof97sw ) /* The King of Fighters '97 - (kof97sw) - Hack by Wesker - (Shingo: 26a\c the 623a\c special effect is the red flame) */
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "232sw.p1", 0x000000, 0x100000, CRC(b4378ad4) SHA1(18210a5259f1499123277532dabb00b0c7bee50e) )
@@ -1310,6 +1571,30 @@ ROM_START( kof97sw ) /* The King of Fighters '97 - (kof97sw) - Hack by Wesker -
ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
ROM_END
+ROM_START( kof97tse ) // All confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232tse.p1", 0x000000, 0x454f50, CRC(30408a6a) SHA1(71fee1b90a6e19baa98b6bb3c9a34034fbfe132c) )
+ ROM_LOAD16_WORD_SWAP( "232tse.p2", 0x100000, 0x400000, CRC(b157888a) SHA1(fa791e9abb7f6f8ac1497888f720bf62ad907949) )
+ ROM_IGNORE( 0x54f64 )
+
+ NEO_SFIX_128K( "232-s1.s1", CRC(8514ecf5) SHA1(18d8e7feb51ea88816f1c786932a53655b0de6a0) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232-c1.c1", 0x0000000, 0x800000, CRC(5f8bf0a1) SHA1(e8b63bbc814de171fd18c5864a7fc639970c1ecf) )
+ ROM_LOAD16_BYTE( "232-c2.c2", 0x0000001, 0x800000, CRC(e4d45c81) SHA1(fdb2b9326362e27b1c7a5beb977e0bc537488186) )
+ ROM_LOAD16_BYTE( "232-c3.c3", 0x1000000, 0x800000, CRC(581d6618) SHA1(14d3124a08ded59f86932c6b28e1a4e48c564ccd) )
+ ROM_LOAD16_BYTE( "232-c4.c4", 0x1000001, 0x800000, CRC(49bb1e68) SHA1(f769c1bd1b019521111ff3f0d22c63cb1f2640ef) )
+ ROM_LOAD16_BYTE( "232-c5.c5", 0x2000000, 0x400000, CRC(34fc4e51) SHA1(b39c65f27873f71a6f5a5d1d04e5435f874472ee) )
+ ROM_LOAD16_BYTE( "232-c6.c6", 0x2000001, 0x400000, CRC(4ff4d47b) SHA1(4d5689ede24a5fe4330bd85d4d3f4eb2795308bb) )
+ROM_END
+
ROM_START( kof97wh ) /* The King of Fighters '97 - (kof97wh) - Hack by Wesker - (Style change for Kyo to 95' Kyo) */
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "232wh.p1", 0x000000, 0x100000, CRC(a2534a20) SHA1(5717e30eeac96de6e23e0e5d4e9b1792362c8ae3) )
@@ -1701,6 +1986,58 @@ ROM_START( kof97yk2 )
ROM_LOAD16_BYTE( "232yk2.c6", 0x2000001, 0x800000, CRC(0b06fba8) SHA1(528b66d6d53682316dd1f33d1cf8b689b3642364) )
ROM_END
+ROM_START( kof97yk83 ) // all confirmed
+ ROM_REGION( 0x700000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232kp83.p1", 0x000000, 0x100000, CRC(b983abb8) SHA1(e3d3f222b883b82c686b52b7042401ac8a922992) )
+ ROM_LOAD16_WORD_SWAP( "232kp1.p2", 0x100000, 0x600000, CRC(fddde211) SHA1(6e8280ad7a9dda204f30e40d9575e31d3e436ef2) )
+
+ NEO_SFIX_128K( "232yk1.s1", CRC(c7dbe270) SHA1(0b81b31da6c18dd02e8d0442100685d5ff61bece) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x3000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232yk1.c1", 0x0000000, 0x800000, CRC(f748da71) SHA1(5012e8537e7d16d365d9c088a70323b3b71cd6f5) )
+ ROM_LOAD16_BYTE( "232yk1.c2", 0x0000001, 0x800000, CRC(6b77e767) SHA1(7f625fa348754a248d9b58bd2f085c47142faf91) )
+ ROM_LOAD16_BYTE( "232yk1.c3", 0x1000000, 0x800000, CRC(ffb025af) SHA1(64913b51b496a13a92317008d2a15543e6c89ba9) )
+ ROM_LOAD16_BYTE( "232yk1.c4", 0x1000001, 0x800000, CRC(7182157c) SHA1(306a968ae325d0b7d647e7fdb36a3a07bacda923) )
+ ROM_LOAD16_BYTE( "232yk1.c5", 0x2000000, 0x800000, CRC(00a77a26) SHA1(a86054fd3870be49ad6055a2fab663cb5ef27de2) )
+ ROM_LOAD16_BYTE( "232yk1.c6", 0x2000001, 0x800000, CRC(0b504e35) SHA1(597cabd5077670827ad3e809d6cd52c9c7f3013a) )
+ROM_END
+
+ROM_START( kof97yk85 )
+ ROM_REGION( 0x700000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "232yk85.p1", 0x000000, 0x100000, CRC(821b0dc4) SHA1(402488249d4e2984fb5c42f0bb4c00b179ea4d12) )
+ ROM_IGNORE( 0x354f67 )
+ ROM_LOAD16_WORD_SWAP( "232yk85.p2", 0x100000, 0x600000, CRC(170e7302) SHA1(3952ca4fbf8aa71e372372881efc4f4aafa9562c) )
+
+ NEO_SFIX_128K( "232yk85.s1", CRC(d8826314) SHA1(5d3ffdf709ee8f84e451464866d0ddcaf98bdb89) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+ //ROM_LOAD( "265-nu.v4", 0xc00000, 0x400000, CRC(067271b5) SHA1(36e07da78aaf634824c98023053bef802be4e218) ) in romset but m1 is not changed so i doubt it is used
+
+ ROM_REGION( 0x5000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "232yk85.c1", 0x0000000, 0x800000, CRC(e47371bb) SHA1(e0e107f4edfbac0a7638b240405745bf31dbadf9) )
+ ROM_LOAD16_BYTE( "232yk85.c2", 0x0000001, 0x800000, CRC(e09108b0) SHA1(b19e0101ed500dec65156a6c19334125a4012521) )
+ ROM_LOAD16_BYTE( "232yk1.c3", 0x1000000, 0x800000, CRC(ffb025af) SHA1(64913b51b496a13a92317008d2a15543e6c89ba9) )
+ ROM_LOAD16_BYTE( "232yk1.c4", 0x1000001, 0x800000, CRC(7182157c) SHA1(306a968ae325d0b7d647e7fdb36a3a07bacda923) )
+ ROM_LOAD16_BYTE( "232yk85.c5", 0x2000000, 0x800000, CRC(c61653cc) SHA1(05674fb5b0007f200b090e93863335fdf474fa64) )
+ ROM_LOAD16_BYTE( "232yk85.c6", 0x2000001, 0x800000, CRC(a01a762f) SHA1(68df7a1753745b9468c4f464779c2c5033f16458) )
+ ROM_LOAD16_BYTE( "232yk85.c7", 0x3000000, 0x800000, CRC(52ac1bcf) SHA1(51f026db5bac479b82297260b55575f8a60306c7) )
+ ROM_LOAD16_BYTE( "232yk85.c8", 0x3000001, 0x800000, CRC(76de561d) SHA1(8f27e746372daf77ff41c4ee431fa36ae22c7b8d) )
+ ROM_LOAD16_BYTE( "232yk85.c9", 0x4000000, 0x800000, CRC(46eb506a) SHA1(1b64fb31dfdc95b901b2e3d359bdee38f764358f) )
+ ROM_LOAD16_BYTE( "232yk85.c10", 0x4000001, 0x800000, CRC(33595746) SHA1(1532ce71b27beace35f359568d506eaf75ad578d) )
+ROM_END
+
ROM_START( kof97yl ) /* The King of Fighters '97 - Hack by Leather and Ydmis - (Can choose Orochi + 5 add. characters - extra stage select) */
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "232yl.p1", 0x000000, 0x100000, CRC(b74278b8) SHA1(5fe72fa346c54229b3b80121720af624a7eca95c) )
@@ -1821,6 +2158,7 @@ ROM_END
GAME( 1997, kof97aa, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Simaguang", "Kof'97 (Plus Athena)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97ae, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex, EGHT", "Kof'97 10TH ANNIVERSARY (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97ae1, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex, EGHT", "Kof'97 10TH ANNIVERSARY (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, kof97aot, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 RISK01983 (AOT)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97bh, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Dodowang", "Kof'97 (Add Char - Orochi icon - Extra stage select)", MACHINE_SUPPORTS_SAVE )
GAME( 2006, kof97bng, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'97 COMBO 2006 set 1", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97bs, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "0-DAY", "Kof'97 (Boss Hack)", MACHINE_SUPPORTS_SAVE )
@@ -1830,24 +2168,29 @@ GAME( 1997, kof97chl, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo,
GAME( 1997, kof97chl2, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "CHL", "Kof'97 (Diff Moves rev.2 - 030409)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97chris,kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (Chris Like 2k2)", MACHINE_SUPPORTS_SAVE )
GAME( 2007, kof97cn, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "EGHT", "Kof'97 (10th Anniversary Chinese Edition)", MACHINE_SUPPORTS_SAVE )
-GAME( 2010, kof97co, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'97 COMBO 2010/02/07", MACHINE_SUPPORTS_SAVE )
+GAME( 2010, kof97co, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'97 COMBO 2010-02-07", MACHINE_SUPPORTS_SAVE )
GAME( 2006, kof97co6, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'97 COMBO 2006", MACHINE_SUPPORTS_SAVE )
+GAME( 2015, kof97cy, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Emu_Max", "Kof'97 (CY)", MACHINE_SUPPORTS_SAVE )
+GAME( 2012, kof97dse, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Maerd", "Kof'97 MAERD 2012-06-28 (DSE)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97eh, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Creamymami, Leather and Ydmis", "Kof'97 (Add Char - Ultra kill start max in Adv Mode - Ultra pow hack ABC - Extra stage select)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97eh2, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Leather and Ydmis", "Kof'97 (Add Char - Ultra kill start max in Adv Mode - Pow hack ABC - Extra stage select)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97eho, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ydmis", "Kof'97 (Add Char - Ultra kill start max in Adv Mode - Pow hack ABC)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, kof97ei, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 COMBO 2010-02-07 (EI)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97evo, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yashional", "Kof'97 EVOLUTION", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97evoa, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 EVOLUTION (Old)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, kof97frb, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (FRB)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97hk, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 EVOLUTION (Hakeshu)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97hl, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (Fall Ban Edition)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97hxd, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Hxdhome", "Kof'97 (Add Char)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97ice, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Cz-Kyo97", "Kof'97 Ice", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, kof97irgc, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (IRGC)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97kai, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Kai", "Kof'97 PLUS", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97kp, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "KofPerfect", "Kof'97 (Add Orochi set 3)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, kof97kp1, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yukimura", "Kof'97 (KP 2000)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97lb, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "LB70", "Kof'97 (Quanhuang Shaman 3.0)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97lc, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Liuzheng0131", "Kof'97 (Color changed)", MACHINE_SUPPORTS_SAVE )
GAME( 2007, kof97lr, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (Lover Red)", MACHINE_SUPPORTS_SAVE )
-GAME( 2012, kof97m, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Maerd", "Kof'97 KOF97 MAERD 20120628", MACHINE_SUPPORTS_SAVE )
+GAME( 2012, kof97m, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Maerd", "Kof'97 KOF97 MAERD 2012-06-28", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97mit, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "MIT", "Kof'97 (Char style enhanced 050324)", MACHINE_SUPPORTS_SAVE )
GAME( 2010, kof97mj, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 SHION EDITION HACK", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97nd, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Baidu", "Kof'97 (Baidu)", MACHINE_SUPPORTS_SAVE )
@@ -1865,32 +2208,40 @@ GAME( 2006, kof97plus, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo,
GAME( 1997, kof97pm, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "KOF1996", "Kof'97 Practice Mode", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97ps, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (Playstation Hack)", MACHINE_SUPPORTS_SAVE )
GAME( 2016, kof97rev, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "BisMill Hassan", "Kof'97 (The Revival 2016)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, kof97ribe, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 PLUS (RIBE)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97rk, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Risko", "Kof'97 (Hack by Risko)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, kof97rst, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 PLUS (RST)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, kof97rst2, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 PLUS (RST2)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, kof97rst3, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 PLUS (RISK012003)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97rv, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (revised edition)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97saw, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Wesker", "Kof'97 (Kill red flame special effect)", MACHINE_SUPPORTS_SAVE )
-GAME( 2011, kof97sed, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (hack 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 2011, kof97sed, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (SED)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97sex, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Katana", "Kof'97 (Extra/Sexy Edition)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97shi, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yashional", "Kof'97 (Evolution Shin Edition)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97sm, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (Smoke Version)", MACHINE_SUPPORTS_SAVE )
-GAME( 1997, kof97svs, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (unknown hack)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, kof97svs, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (SVS)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, kof97svsb2,kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (SVSB2)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97sw, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Wesker", "Kof'97 (26a-c and 623a-c red flame special effect)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, kof97tse, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (TSE)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97wh, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Wesker", "Kof'97 (Style Kyo to 95' Kyo)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97wpls, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Wesker", "Kof'97 Plus", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97xbt, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 BT X Version", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97xi, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Jacky", "Kof'97 XI Flash Version", MACHINE_SUPPORTS_SAVE )
GAME( 2007, kof97xp, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Xuhui", "Kof'97 (Xuhui plus)", MACHINE_SUPPORTS_SAVE )
-GAME( 2007, kof97xt, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 Final Battle (hack)", MACHINE_SUPPORTS_SAVE )
+GAME( 2007, kof97xt, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 Final Battle", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97xt1, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Chris Love", "Kof'97 (Unfinished version by Cross Love)", MACHINE_SUPPORTS_SAVE )
-GAME( 200?, kof97xxx, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (Nude mix)", MACHINE_SUPPORTS_SAVE ) // no nudes here??
+GAME( 1997, kof97xxx, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 (Nude mix)", MACHINE_SUPPORTS_SAVE ) // no nudes here??
GAME( 1997, kof97y, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ydmis", "Kof'97 (Add Char - no Orochi)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97ya, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ydmis", "Kof'97 (Add Orochi set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97yb, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ydmis", "Kof'97 (Add Orochi set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97ye, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ydmis", "Kof'97 (Add Char - no Orochi - Pow hack ABC in Extra Mode set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97yg, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ydmis", "Kof'97 (Add Char - Pow hack ABC in Extra Mode)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97yh, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ydmis", "Kof'97 (Add Char - no Orochi - Pow hack ABC in Extra Mode set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 2007, kof97yk, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yukimura", "Kof'97 (Yukimura Hack 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1997, kof97yk1, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yukimura", "Kof'97 (Yukimura Hack 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1997, kof97yk2, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yukimura", "Kof'97 (Yukimura Hack 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 2007, kof97yk, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yukimura", "Kof'97 (Yukimura Hack YK)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, kof97yk1, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yukimura", "Kof'97 (Yukimura Hack YK1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, kof97yk2, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yukimura", "Kof'97 (Yukimura Hack YK2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, kof97yk83, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yukimura", "Kof'97 (Yukimura Hack YK83)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, kof97yk85, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yukimura", "Kof'97 (Yukimura Hack YK85)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97yl, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Leather and Ydmis", "Kof'97 (Add Char - Extra stage select set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97yl2, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Leather and Ydmis", "Kof'97 (Add Char - Extra stage select set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, kof97yo, kof97, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'97 Seven Yoga Community Imitation 98", MACHINE_SUPPORTS_SAVE )
diff --git a/docs/release/src/hbmame/drivers/kof98.cpp b/docs/release/src/hbmame/drivers/kof98.cpp
index bd43459e4a1..6fb0b2060b1 100644
--- a/docs/release/src/hbmame/drivers/kof98.cpp
+++ b/docs/release/src/hbmame/drivers/kof98.cpp
@@ -561,6 +561,32 @@ ROM_START( kof98c20110114 )
ROM_LOAD16_BYTE( "242-c8.c8", 0x3000001, 0x800000, CRC(c823e045) SHA1(886fbf64bcb58bc4eabb1fc9262f6ac9901a0f28) )
ROM_END
+ROM_START( kof98c20110314 ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "242ckc14.p1", 0x000000, 0x100000, CRC(e997a3e9) SHA1(c53d09931a1f2f97623cbfd390b703412dfde535) )
+ ROM_LOAD16_WORD_SWAP( "242ckc14.p2", 0x100000, 0x400000, CRC(3f2266bf) SHA1(f4fbdde4c2b9cd9f12b3f6942926993ca56fed3b) )
+
+ NEO_SFIX_128K( "242co.s1", CRC(6017cf97) SHA1(6cb5267f3c4ea99f56154e2f5b6d961f1f7f58f6) )
+
+ NEO_BIOS_AUDIO_256K( "242-mg1.m1", CRC(4e7a6b1b) SHA1(b54d08f88713ed0271aa06f9f7c9c572ef555b1a) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "242-v1.v1", 0x000000, 0x400000, CRC(b9ea8051) SHA1(49606f64eb249263b3341b4f50cc1763c390b2af) )
+ ROM_LOAD( "242-v2.v2", 0x400000, 0x400000, CRC(cc11106e) SHA1(d3108bc05c9bf041d4236b2fa0c66b013aa8db1b) )
+ ROM_LOAD( "242-v3.v3", 0x800000, 0x400000, CRC(044ea4e1) SHA1(062a2f2e52098d73bc31c9ad66f5db8080395ce8) )
+ ROM_LOAD( "242-v4.v4", 0xc00000, 0x400000, CRC(7985ea30) SHA1(54ed5f0324de6164ea81943ebccb3e8d298368ec) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "242cli15.c1", 0x0000000, 0x800000, CRC(066db0a6) SHA1(ea200b79bf60d2d9a025da873173cc4704d254b0) )
+ ROM_LOAD16_BYTE( "242cli15.c2", 0x0000001, 0x800000, CRC(99d0b0fa) SHA1(b56813917de0c19858c13e51888b6af2030bc324) )
+ ROM_LOAD16_BYTE( "242cli15.c3", 0x1000000, 0x800000, CRC(35800c82) SHA1(8dc25967a2c9d21d4f6f34a40507f8d9e7f14d9f) )
+ ROM_LOAD16_BYTE( "242cli15.c4", 0x1000001, 0x800000, CRC(499e6d69) SHA1(728bb3a505e22df096a05dd978fff7702928eb83) )
+ ROM_LOAD16_BYTE( "242-c5.c5", 0x2000000, 0x800000, CRC(9d10bed3) SHA1(4d44addc7c808649bfb03ec45fb9529da413adff) )
+ ROM_LOAD16_BYTE( "242-c6.c6", 0x2000001, 0x800000, CRC(da07b6a2) SHA1(9c3f0da7cde1ffa8feca89efc88f07096e502acf) )
+ ROM_LOAD16_BYTE( "242-c7.c7", 0x3000000, 0x800000, CRC(f6d7a38a) SHA1(dd295d974dd4a7e5cb26a3ef3febcd03f28d522b) )
+ ROM_LOAD16_BYTE( "242-c8.c8", 0x3000001, 0x800000, CRC(c823e045) SHA1(886fbf64bcb58bc4eabb1fc9262f6ac9901a0f28) )
+ROM_END
+
ROM_START( kof98c20120116 ) // no idea what other roms go with this, using ones from kof98co
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "242cla16.p1", 0x000000, 0x100000, CRC(99255778) SHA1(d6eb448f06cebabff3aea71cade6c7b742bad337) )
@@ -1887,6 +1913,32 @@ ROM_START( kof98c20151223 ) // only p1,p2 are confirmed
ROM_LOAD16_BYTE( "242-c8.c8", 0x3000001, 0x800000, CRC(c823e045) SHA1(886fbf64bcb58bc4eabb1fc9262f6ac9901a0f28) )
ROM_END
+ROM_START( kof98c20160320 ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "242cpc20.p1", 0x000000, 0x100000, CRC(3a6baeb5) SHA1(100cfaf7f8478ef0f480c1453d268aef6758952a) )
+ ROM_LOAD16_WORD_SWAP( "242cpc20.p2", 0x100000, 0x400000, CRC(d6c78a73) SHA1(6ec63abaf39c1c7ddf4830a9a0e71618b539ea05) )
+
+ NEO_SFIX_128K( "242cnf06.s1", CRC(7333d8b0) SHA1(43d441133d572f65e9e19839ae2557ad86e393a1) )
+
+ NEO_BIOS_AUDIO_256K( "242coc30.m1", CRC(db046fc4) SHA1(4b793a125bade067ef0fdcd1775d135c646c6b94) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "242-v1.v1", 0x000000, 0x400000, CRC(b9ea8051) SHA1(49606f64eb249263b3341b4f50cc1763c390b2af) )
+ ROM_LOAD( "242-v2.v2", 0x400000, 0x400000, CRC(cc11106e) SHA1(d3108bc05c9bf041d4236b2fa0c66b013aa8db1b) )
+ ROM_LOAD( "242-v3.v3", 0x800000, 0x400000, CRC(044ea4e1) SHA1(062a2f2e52098d73bc31c9ad66f5db8080395ce8) )
+ ROM_LOAD( "242-v4.v4", 0xc00000, 0x400000, CRC(7985ea30) SHA1(54ed5f0324de6164ea81943ebccb3e8d298368ec) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "242cli15.c1", 0x0000000, 0x800000, CRC(066db0a6) SHA1(ea200b79bf60d2d9a025da873173cc4704d254b0) )
+ ROM_LOAD16_BYTE( "242cli15.c2", 0x0000001, 0x800000, CRC(99d0b0fa) SHA1(b56813917de0c19858c13e51888b6af2030bc324) )
+ ROM_LOAD16_BYTE( "242cni24.c3", 0x1000000, 0x800000, CRC(ea84bdae) SHA1(27108247ed7406060f0b149a9dfa64869a6bbcf2) )
+ ROM_LOAD16_BYTE( "242cni24.c4", 0x1000001, 0x800000, CRC(2c17ac8e) SHA1(fc704f5cf358df81a88d20932be3edffe202dea9) )
+ ROM_LOAD16_BYTE( "242-c5.c5", 0x2000000, 0x800000, CRC(9d10bed3) SHA1(4d44addc7c808649bfb03ec45fb9529da413adff) )
+ ROM_LOAD16_BYTE( "242-c6.c6", 0x2000001, 0x800000, CRC(da07b6a2) SHA1(9c3f0da7cde1ffa8feca89efc88f07096e502acf) )
+ ROM_LOAD16_BYTE( "242-c7.c7", 0x3000000, 0x800000, CRC(f6d7a38a) SHA1(dd295d974dd4a7e5cb26a3ef3febcd03f28d522b) )
+ ROM_LOAD16_BYTE( "242-c8.c8", 0x3000001, 0x800000, CRC(c823e045) SHA1(886fbf64bcb58bc4eabb1fc9262f6ac9901a0f28) )
+ROM_END
+
ROM_START( kof98cd )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "242cd.p1", 0x000000, 0x100000, CRC(1a748f96) SHA1(bddb07fa6dc59ae547aed32218a6601b8b80816e) )
@@ -2277,6 +2329,32 @@ ROM_START( kof98evo2 )
ROM_LOAD16_BYTE( "242sp.c8", 0x3000001, 0x800000, CRC(9744d47f) SHA1(8a7057a99f6cbc9707f10feb64192716cf6df151) )
ROM_END
+ROM_START( kof98evr ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "242evr.p1", 0x000000, 0x100000, CRC(2cd3d8e9) SHA1(81014dd7e4ac6bd4d2f155dcee3930e1eb5174a1) )
+ ROM_LOAD16_WORD_SWAP( "242evr.p2", 0x100000, 0x400000, CRC(c1e80581) SHA1(466d41a3390bf655e2dba5a42c566ec5bcd626a6) )
+
+ NEO_SFIX_128K( "242evr.s1", CRC(88355acf) SHA1(bbcb0d7c5f6ad73d049a94f03d5ee1af23b99754) )
+
+ NEO_BIOS_AUDIO_256K( "242-m1.m1", CRC(4ef7016b) SHA1(4182235e963bd70d398a79abeb54ab4d62887c48) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "242-v1.v1", 0x000000, 0x400000, CRC(b9ea8051) SHA1(49606f64eb249263b3341b4f50cc1763c390b2af) )
+ ROM_LOAD( "242-v2.v2", 0x400000, 0x400000, CRC(cc11106e) SHA1(d3108bc05c9bf041d4236b2fa0c66b013aa8db1b) )
+ ROM_LOAD( "242-v3.v3", 0x800000, 0x400000, CRC(044ea4e1) SHA1(062a2f2e52098d73bc31c9ad66f5db8080395ce8) )
+ ROM_LOAD( "242-v4.v4", 0xc00000, 0x400000, CRC(7985ea30) SHA1(54ed5f0324de6164ea81943ebccb3e8d298368ec) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "242cn.c1", 0x0000000, 0x800000, CRC(40aceac9) SHA1(c9b7aee462e47bb70dc3644aa20b0698e7841ac1) )
+ ROM_LOAD16_BYTE( "242cn.c2", 0x0000001, 0x800000, CRC(3aa0b16b) SHA1(fbc063e85a6fa33ae189fe0e74ad53c6b29e3dd9) )
+ ROM_LOAD16_BYTE( "242-c3.c3", 0x1000000, 0x800000, CRC(22127b4f) SHA1(bd0d00f889d9da7c6ac48f287d9ed8c605ae22cf) )
+ ROM_LOAD16_BYTE( "242-c4.c4", 0x1000001, 0x800000, CRC(0b4fa044) SHA1(fa13c3764fae6b035a626601bc43629f1ebaaffd) )
+ ROM_LOAD16_BYTE( "242-c5.c5", 0x2000000, 0x800000, CRC(9d10bed3) SHA1(4d44addc7c808649bfb03ec45fb9529da413adff) )
+ ROM_LOAD16_BYTE( "242-c6.c6", 0x2000001, 0x800000, CRC(da07b6a2) SHA1(9c3f0da7cde1ffa8feca89efc88f07096e502acf) )
+ ROM_LOAD16_BYTE( "242evr.c7", 0x3000000, 0x800000, CRC(737249a8) SHA1(4ced30143182bd09596697600b2c4801cd66d274) )
+ ROM_LOAD16_BYTE( "242evr.c8", 0x3000001, 0x800000, CRC(3489c788) SHA1(b47ba5d64e7aad2d3f263f9fd659c1ae83b06284) )
+ROM_END
+
ROM_START( kof98f )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "242f.p1", 0x000000, 0x100000, CRC(c17a0ace) SHA1(b5496062954bdc3ab45a9b4e7787ab3426ff7404) )
@@ -2697,6 +2775,34 @@ ROM_START( kof98m )
ROM_LOAD16_BYTE( "242m.c10", 0x4000001, 0x800000, CRC(930f41f8) SHA1(6e0349f9fe622890bc0111c8a554f67909cd810f) )
ROM_END
+ROM_START( kof98mev ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "242mev.p1", 0x000000, 0x100000, CRC(d1a6a8be) SHA1(0197f00b5ac2452e8b8b5597c4edf98509ae14be) )
+ ROM_LOAD16_WORD_SWAP( "242mev.p2", 0x100000, 0x400000, CRC(73d3505d) SHA1(74f581aa2fdc968b403fc19c2b719aa12177ba42) )
+
+ NEO_SFIX_128K( "242mev.s1", CRC(9acd571d) SHA1(a3520208766e65ae8e0c7cd0977794098974ff18) )
+
+ NEO_BIOS_AUDIO_256K( "242-mg1.m1", CRC(4e7a6b1b) SHA1(b54d08f88713ed0271aa06f9f7c9c572ef555b1a) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "242-v1.v1", 0x000000, 0x400000, CRC(b9ea8051) SHA1(49606f64eb249263b3341b4f50cc1763c390b2af) )
+ ROM_LOAD( "242-v2.v2", 0x400000, 0x400000, CRC(cc11106e) SHA1(d3108bc05c9bf041d4236b2fa0c66b013aa8db1b) )
+ ROM_LOAD( "242-v3.v3", 0x800000, 0x400000, CRC(044ea4e1) SHA1(062a2f2e52098d73bc31c9ad66f5db8080395ce8) )
+ ROM_LOAD( "242-v4.v4", 0xc00000, 0x400000, CRC(7985ea30) SHA1(54ed5f0324de6164ea81943ebccb3e8d298368ec) )
+
+ ROM_REGION( 0x5000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "242-c1.c1", 0x0000000, 0x800000, CRC(e564ecd6) SHA1(78f22787a204f26bae9b2b1c945ddbc27143352f) )
+ ROM_LOAD16_BYTE( "242-c2.c2", 0x0000001, 0x800000, CRC(bd959b60) SHA1(2c97c59e77c9a3fe7d664e741d37944f3d56c10b) )
+ ROM_LOAD16_BYTE( "242-c3.c3", 0x1000000, 0x800000, CRC(22127b4f) SHA1(bd0d00f889d9da7c6ac48f287d9ed8c605ae22cf) )
+ ROM_LOAD16_BYTE( "242-c4.c4", 0x1000001, 0x800000, CRC(0b4fa044) SHA1(fa13c3764fae6b035a626601bc43629f1ebaaffd) )
+ ROM_LOAD16_BYTE( "242-c5.c5", 0x2000000, 0x800000, CRC(9d10bed3) SHA1(4d44addc7c808649bfb03ec45fb9529da413adff) )
+ ROM_LOAD16_BYTE( "242-c6.c6", 0x2000001, 0x800000, CRC(da07b6a2) SHA1(9c3f0da7cde1ffa8feca89efc88f07096e502acf) )
+ ROM_LOAD16_BYTE( "242mix.c7", 0x3000000, 0x800000, CRC(374eb904) SHA1(060ccdca943b6493890c9e42eacf943cf4acc100) )
+ ROM_LOAD16_BYTE( "242mix.c8", 0x3000001, 0x800000, CRC(eddd2789) SHA1(e1fe8238ed51ee328d8c7eebb58fa6230b9e48c5) )
+ ROM_LOAD16_BYTE( "242mev.c9", 0x4000000, 0x800000, CRC(1823dfa3) SHA1(f9f16465ec7564a812fb093d12adcba5f4660d85) )
+ ROM_LOAD16_BYTE( "242mev.c10", 0x4000001, 0x800000, CRC(6a04ab8c) SHA1(4c000e595cab2749bbee26b45527f5a7b573dfbc) )
+ROM_END
+
ROM_START( kof98mix ) // 2011-10-01 version
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "242mix.p1", 0x000000, 0x100000, CRC(4a0525b1) SHA1(14c0356fd63ba55040b1f744f3b4450bfbf32a93) )
@@ -3341,9 +3447,10 @@ GAME( 2008, kof98c20080524, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo,
GAME( 2008, kof98c20080616, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2008-06-16)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // sometimes reboots itself
GAME( 2008, kof98c20080712, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2008-07-12)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // sometimes reboots itself
GAME( 2009, kof98c20090620, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2009-06-20)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // sometimes reboots itself
-GAME( 2010, kof98c20090923, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2009-09-23)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // sometimes reboots itself
+GAME( 2009, kof98c20090923, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2009-09-23)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // sometimes reboots itself
GAME( 2010, kof98c20100214, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2010-02-14)", MACHINE_SUPPORTS_SAVE )
GAME( 2011, kof98c20110114, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2011-01-14)", MACHINE_SUPPORTS_SAVE )
+GAME( 2011, kof98c20110314, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2011-03-14)", MACHINE_SUPPORTS_SAVE )
GAME( 2012, kof98c20120116, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2012-01-16)", MACHINE_SUPPORTS_SAVE )
GAME( 2012, kof98c20120915, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2012-09-15)", MACHINE_SUPPORTS_SAVE )
GAME( 2013, kof98c20130213, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2013-02-13)", MACHINE_SUPPORTS_SAVE )
@@ -3394,7 +3501,8 @@ GAME( 2015, kof98c20150827, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo,
GAME( 2015, kof98c20151103, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2015-11-03)", MACHINE_SUPPORTS_SAVE )
GAME( 2015, kof98c20151108, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2015-11-08)", MACHINE_SUPPORTS_SAVE )
GAME( 2015, kof98c20151110, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2015-11-10)", MACHINE_SUPPORTS_SAVE )
-GAME( 2016, kof98c20151223, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2015-12-23)", MACHINE_SUPPORTS_SAVE )
+GAME( 2015, kof98c20151223, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2015-12-23)", MACHINE_SUPPORTS_SAVE )
+GAME( 2016, kof98c20160320, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ivex", "Kof'98 Combo (2016-03-20)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, kof98cd, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'98 (CD conversion)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, kof98cd1, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "EGHT", "Kof'98 (NGCD Ver 1.04f [EGHT])", MACHINE_SUPPORTS_SAVE )
GAME( 2003, kof98ch, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Chase", "Kof'98 (Diff Moves 030503)", MACHINE_SUPPORTS_SAVE )
@@ -3411,6 +3519,7 @@ GAME( 1998, kof98ehr, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo,
GAME( 1998, kof98evl, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'98 (Ultra Evolution Lite)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, kof98evo, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'98 (Evolution)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, kof98evo2, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'98 (Evolution Orochi Baozou Hack Set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, kof98evr, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'98 (EVR)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, kof98f, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'98 ('fake')", MACHINE_SUPPORTS_SAVE )
GAME( 2004, kof98fr, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Arkatrad", "Kof'98 (French 2004)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, kof98fro, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Arkatrad", "Kof'98 (French 2003)", MACHINE_SUPPORTS_SAVE )
@@ -3427,6 +3536,7 @@ GAME( 2010, kof98klc, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo,
GAME( 1998, kof98lb, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "LB70", "Kof'98 (hack by lb70)", MACHINE_SUPPORTS_SAVE )
GAME( 2009, kof98lv, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'98 (Love Edition (27-12-09))", MACHINE_SUPPORTS_SAVE )
GAME( 1998, kof98m, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'98 MIX", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, kof98mev, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'98 (MEV)", MACHINE_SUPPORTS_SAVE )
GAME( 2011, kof98mix, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'98 Mix (2011-10-01)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, kof98nc, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "FCHT", "Kof'98 (Neo-Geo CD 1.2 by Eddids from FCHT)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, kof98new, kof98, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'98 New Version", MACHINE_SUPPORTS_SAVE )
diff --git a/docs/release/src/hbmame/drivers/kof99.cpp b/docs/release/src/hbmame/drivers/kof99.cpp
index f355a454907..b545241a45e 100644
--- a/docs/release/src/hbmame/drivers/kof99.cpp
+++ b/docs/release/src/hbmame/drivers/kof99.cpp
@@ -1066,6 +1066,32 @@ ROM_START( kof99ndh )
ROM_LOAD16_BYTE( "251d.c8", 0x3000001, 0x800000, CRC(4c2fad1e) SHA1(26779e79296eb1988a8c4d60d2e1baf041f2c0cf) )
ROM_END
+ROM_START( kof99ndis ) // all complete
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "251ndis.p1", 0x000000, 0x4550f6, CRC(0ca863be) SHA1(4da27476f81fd1d10ff2ba8fc7d12b662804cc5d) )
+ ROM_LOAD16_WORD_SWAP( "251ndis.p2", 0x100000, 0x400000, CRC(c012ff9f) SHA1(ef53386e34464eaaed1fcba3d4d1dcfb269f995c) )
+
+ NEO_SFIX_128K( "251ndis.s1", CRC(16edaa55) SHA1(d8601a14c703e56c0635e2f7540492b164447d6b) )
+
+ NEO_BIOS_AUDIO_128K( "251-m1.m1", CRC(5e74539c) SHA1(6f49a9343cbd026b2c6720ff3fa2e5b1f85e80da) )
+
+ ROM_REGION( 0x0e00000, "ymsnd", 0 )
+ ROM_LOAD( "251-v1.v1", 0x000000, 0x400000, CRC(ef2eecc8) SHA1(8ed13b9db92dba3124bc5ba66e3e275885ece24a) )
+ ROM_LOAD( "251-v2.v2", 0x400000, 0x400000, CRC(73e211ca) SHA1(0e60fa64cab6255d9721e2b4bc22e3de64c874c5) )
+ ROM_LOAD( "251-v3.v3", 0x800000, 0x400000, CRC(821901da) SHA1(c6d4975bfaa19a62ed59126cadf2578c0a5c257f) )
+ ROM_LOAD( "251-v4.v4", 0xc00000, 0x200000, CRC(b49e6178) SHA1(dde6f76e958841e8c99b693e13ced9aa9ef316dc) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "251d.c1", 0x0000000, 0x800000, CRC(b3d88546) SHA1(c277525f3db5b4cb07e9842605c7c40e6c203ad9) )
+ ROM_LOAD16_BYTE( "251d.c2", 0x0000001, 0x800000, CRC(915c8634) SHA1(685ecb4271edf61f6a28a2235de11dd219b999d6) )
+ ROM_LOAD16_BYTE( "251d.c3", 0x1000000, 0x800000, CRC(b047c9d5) SHA1(b840eab2208e6c0a1db0cdb28df46ba07da2ddca) )
+ ROM_LOAD16_BYTE( "251d.c4", 0x1000001, 0x800000, CRC(6bc8e4b1) SHA1(674cb8145aeada1683a70beb02ed4ea028f5bdf8) )
+ ROM_LOAD16_BYTE( "251d.c5", 0x2000000, 0x800000, CRC(9746268c) SHA1(59d839f01f4827377a752679922bc7281099430d) )
+ ROM_LOAD16_BYTE( "251d.c6", 0x2000001, 0x800000, CRC(238b3e71) SHA1(f929c942972f768e68a5a009a3d174d203029160) )
+ ROM_LOAD16_BYTE( "251d.c7", 0x3000000, 0x800000, CRC(2f68fdeb) SHA1(37167c84a39141c179f94800f207dac3aabc5478) )
+ ROM_LOAD16_BYTE( "251d.c8", 0x3000001, 0x800000, CRC(4c2fad1e) SHA1(26779e79296eb1988a8c4d60d2e1baf041f2c0cf) )
+ROM_END
+
ROM_START( kof99ob )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "251ob.p1", 0x000000, 0x100000, CRC(b6147b23) SHA1(921dad6a2f1011ad67a82a6f9874b30658f233b0) )
@@ -2564,8 +2590,9 @@ GAME( 1999, kof99jh, kof99, neogeo_noslot, neogeo, neogeo_noslot_state, ko
GAME( 1999, kof99jho, kof99, neogeo_noslot, neogeo, neogeo_noslot_state, kof99k, ROT0, "Jason/K3", "Kof'99 (3 Add Char - Simple moves rev - Athena style changed 030924)", MACHINE_SUPPORTS_SAVE )
GAME( 2007, kof99lb, kof99, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "lb70", "Kof'99 (Hack by lb70)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, kof99m, kof99, neogeo_noslot, neogeo, neogeo_noslot_state, kof99k, ROT0, "MasakiAnton", "Kof'99 (2 Add Char)", MACHINE_SUPPORTS_SAVE )
-GAME( 1999, kof99nd, kof99, neogeo_noslot, neogeo, neogeo_hbmame, cmc42sfix, ROT0, "SNK", "Kof'99 (non encrypted P,decrypted C)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, kof99nd, kof99, neogeo_noslot, neogeo, neogeo_hbmame, cmc42sfix,ROT0, "SNK", "Kof'99 (non encrypted P,decrypted C)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, kof99ndh, kof99, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'99 (Boss Hack)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, kof99ndis, kof99, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'99 REMIX PRO (ndis)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, kof99ob, kof99, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'99 Orochi's Blood-Another part of Leona & Iori", MACHINE_SUPPORTS_SAVE )
GAME( 1999, kof99ob2, kof99, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Yashional", "Kof'99 Orochi's Blood (set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, kof99pb, kof99, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof'99 Perfect Boss", MACHINE_SUPPORTS_SAVE )
diff --git a/docs/release/src/hbmame/drivers/mslug.cpp b/docs/release/src/hbmame/drivers/mslug.cpp
index 2dcb35979c8..a586b78fd90 100644
--- a/docs/release/src/hbmame/drivers/mslug.cpp
+++ b/docs/release/src/hbmame/drivers/mslug.cpp
@@ -459,6 +459,29 @@ ROM_START( mslugx ) /* MVS AND AES VERSION */
ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
ROM_END
#endif
+ROM_START( mslugxce )
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "250ce.p1", 0x000000, 0x100000, CRC(e75a6d64) SHA1(529130f7ebb43231e6bf1b1703266b6c09356f9c) )
+ ROM_LOAD16_WORD_SWAP( "250ce.p2", 0x100000, 0x400000, CRC(5d1c52cd) SHA1(b2b131fa845b0098cbf0750fee20b402e276483b) )
+
+ NEO_SFIX_128K( "250-s1.s1", CRC(fb6f441d) SHA1(2cc392ecde5d5afb28ddbaa1030552b48571dcfb) )
+
+ NEO_BIOS_AUDIO_128K( "250-m1.m1", CRC(fd42a842) SHA1(55769bad4860f64ef53a333e0da9e073db483d6a) )
+
+ ROM_REGION( 0xa00000, "ymsnd", 0 )
+ ROM_LOAD( "250-v1.v1", 0x000000, 0x400000, CRC(c79ede73) SHA1(ebfcc67204ff9677cf7972fd5b6b7faabf07280c) )
+ ROM_LOAD( "250-v2.v2", 0x400000, 0x400000, CRC(ea9aabe1) SHA1(526c42ca9a388f7435569400e2f132e2724c71ff) )
+ ROM_LOAD( "250-v3.v3", 0x800000, 0x200000, CRC(2ca65102) SHA1(45979d1edb1fc774a415d9386f98d7cb252a2043) )
+
+ ROM_REGION( 0x3000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "250-c1.c1", 0x0000000, 0x800000, CRC(09a52c6f) SHA1(c3e8a8ccdac0f8bddc4c3413277626532405fae2) )
+ ROM_LOAD16_BYTE( "250-c2.c2", 0x0000001, 0x800000, CRC(31679821) SHA1(554f600a3aa09c16c13c625299b087a79d0d15c5) )
+ ROM_LOAD16_BYTE( "250-c3.c3", 0x1000000, 0x800000, CRC(fd602019) SHA1(c56646c62387bc1439d46610258c755beb8d7dd8) )
+ ROM_LOAD16_BYTE( "250-c4.c4", 0x1000001, 0x800000, CRC(31354513) SHA1(31be8ea2498001f68ce4b06b8b90acbf2dcab6af) )
+ ROM_LOAD16_BYTE( "250-c5.c5", 0x2000000, 0x800000, CRC(a4b56124) SHA1(d41069856df990a1a99d39fb263c8303389d5475) )
+ ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
+ROM_END
+
ROM_START( mslugxeb )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "250eb.p1", 0x000000, 0x100000, CRC(c41c7ddb) SHA1(1662a1fd1c35511b3091e979b55e940a9f887143) )
@@ -552,6 +575,30 @@ ROM_START( mslugxex )
ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
ROM_END
+ROM_START( mslugxfe )
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "250fe.p1", 0x000000, 0x100000, CRC(5a8b3db8) SHA1(7324aad0cc33f6b11b0350ca9d80246a412994d4) )
+ ROM_IGNORE( 0x354f47 )
+ ROM_LOAD16_WORD_SWAP( "250-p2.ep1", 0x100000, 0x400000, CRC(1fda2e12) SHA1(18aaa7a3ba8da99f78c430e9be69ccde04bc04d9) )
+
+ NEO_SFIX_128K( "250-s1.s1", CRC(fb6f441d) SHA1(2cc392ecde5d5afb28ddbaa1030552b48571dcfb) )
+
+ NEO_BIOS_AUDIO_128K( "250-m1.m1", CRC(fd42a842) SHA1(55769bad4860f64ef53a333e0da9e073db483d6a) )
+
+ ROM_REGION( 0xa00000, "ymsnd", 0 )
+ ROM_LOAD( "250-v1.v1", 0x000000, 0x400000, CRC(c79ede73) SHA1(ebfcc67204ff9677cf7972fd5b6b7faabf07280c) )
+ ROM_LOAD( "250-v2.v2", 0x400000, 0x400000, CRC(ea9aabe1) SHA1(526c42ca9a388f7435569400e2f132e2724c71ff) )
+ ROM_LOAD( "250-v3.v3", 0x800000, 0x200000, CRC(2ca65102) SHA1(45979d1edb1fc774a415d9386f98d7cb252a2043) )
+
+ ROM_REGION( 0x3000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "250-c1.c1", 0x0000000, 0x800000, CRC(09a52c6f) SHA1(c3e8a8ccdac0f8bddc4c3413277626532405fae2) )
+ ROM_LOAD16_BYTE( "250-c2.c2", 0x0000001, 0x800000, CRC(31679821) SHA1(554f600a3aa09c16c13c625299b087a79d0d15c5) )
+ ROM_LOAD16_BYTE( "250-c3.c3", 0x1000000, 0x800000, CRC(fd602019) SHA1(c56646c62387bc1439d46610258c755beb8d7dd8) )
+ ROM_LOAD16_BYTE( "250-c4.c4", 0x1000001, 0x800000, CRC(31354513) SHA1(31be8ea2498001f68ce4b06b8b90acbf2dcab6af) )
+ ROM_LOAD16_BYTE( "250-c5.c5", 0x2000000, 0x800000, CRC(a4b56124) SHA1(d41069856df990a1a99d39fb263c8303389d5475) )
+ ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
+ROM_END
+
ROM_START( mslugxfr ) /* Metal Slug X - Translation Hack by NEO-ARC - (French translation) */
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "250fr.p1", 0x000000, 0x100000, CRC(58a64443) SHA1(ab07993de04eb65f89bab5d4b6e473d7ecbc8ff1) )
@@ -644,6 +691,53 @@ ROM_START( mslugxit )
ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
ROM_END
+ROM_START( mslugxjdkj )
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "250jdkj.p1", 0x000000, 0x100000, CRC(4c1b90b1) SHA1(6127e60a6ef0daf82506c46e8344e1a4064b5186) )
+ ROM_IGNORE( 0x354f47 )
+ ROM_LOAD16_WORD_SWAP( "250svb.p2", 0x100000, 0x400000, CRC(6a114e1a) SHA1(3da62274252d36226dcccda0e05593f7f18c7193) )
+
+ NEO_SFIX_128K( "250-s1.s1", CRC(fb6f441d) SHA1(2cc392ecde5d5afb28ddbaa1030552b48571dcfb) )
+
+ NEO_BIOS_AUDIO_128K( "250-m1.m1", CRC(fd42a842) SHA1(55769bad4860f64ef53a333e0da9e073db483d6a) )
+
+ ROM_REGION( 0xa00000, "ymsnd", 0 )
+ ROM_LOAD( "250-v1.v1", 0x000000, 0x400000, CRC(c79ede73) SHA1(ebfcc67204ff9677cf7972fd5b6b7faabf07280c) )
+ ROM_LOAD( "250-v2.v2", 0x400000, 0x400000, CRC(ea9aabe1) SHA1(526c42ca9a388f7435569400e2f132e2724c71ff) )
+ ROM_LOAD( "250-v3.v3", 0x800000, 0x200000, CRC(2ca65102) SHA1(45979d1edb1fc774a415d9386f98d7cb252a2043) )
+
+ ROM_REGION( 0x3000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "250-c1.c1", 0x0000000, 0x800000, CRC(09a52c6f) SHA1(c3e8a8ccdac0f8bddc4c3413277626532405fae2) )
+ ROM_LOAD16_BYTE( "250-c2.c2", 0x0000001, 0x800000, CRC(31679821) SHA1(554f600a3aa09c16c13c625299b087a79d0d15c5) )
+ ROM_LOAD16_BYTE( "250-c3.c3", 0x1000000, 0x800000, CRC(fd602019) SHA1(c56646c62387bc1439d46610258c755beb8d7dd8) )
+ ROM_LOAD16_BYTE( "250-c4.c4", 0x1000001, 0x800000, CRC(31354513) SHA1(31be8ea2498001f68ce4b06b8b90acbf2dcab6af) )
+ ROM_LOAD16_BYTE( "250-c5.c5", 0x2000000, 0x800000, CRC(a4b56124) SHA1(d41069856df990a1a99d39fb263c8303389d5475) )
+ ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
+ROM_END
+
+ROM_START( mslugxmfb )
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "250mfb.p1", 0x000000, 0x100000, CRC(bd3611dc) SHA1(9c27f8a10f0a0da051b15cf42e6aed8f60abd309) )
+ ROM_LOAD16_WORD_SWAP( "250mfb.p2", 0x100000, 0x400000, CRC(7b47677c) SHA1(af42d01b6fb3c288b1750b9960c11020bc12b7b4) )
+
+ NEO_SFIX_128K( "250-s1.s1", CRC(fb6f441d) SHA1(2cc392ecde5d5afb28ddbaa1030552b48571dcfb) )
+
+ NEO_BIOS_AUDIO_128K( "250-m1.m1", CRC(fd42a842) SHA1(55769bad4860f64ef53a333e0da9e073db483d6a) )
+
+ ROM_REGION( 0xa00000, "ymsnd", 0 )
+ ROM_LOAD( "250-v1.v1", 0x000000, 0x400000, CRC(c79ede73) SHA1(ebfcc67204ff9677cf7972fd5b6b7faabf07280c) )
+ ROM_LOAD( "250-v2.v2", 0x400000, 0x400000, CRC(ea9aabe1) SHA1(526c42ca9a388f7435569400e2f132e2724c71ff) )
+ ROM_LOAD( "250-v3.v3", 0x800000, 0x200000, CRC(2ca65102) SHA1(45979d1edb1fc774a415d9386f98d7cb252a2043) )
+
+ ROM_REGION( 0x3000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "250-c1.c1", 0x0000000, 0x800000, CRC(09a52c6f) SHA1(c3e8a8ccdac0f8bddc4c3413277626532405fae2) )
+ ROM_LOAD16_BYTE( "250-c2.c2", 0x0000001, 0x800000, CRC(31679821) SHA1(554f600a3aa09c16c13c625299b087a79d0d15c5) )
+ ROM_LOAD16_BYTE( "250-c3.c3", 0x1000000, 0x800000, CRC(fd602019) SHA1(c56646c62387bc1439d46610258c755beb8d7dd8) )
+ ROM_LOAD16_BYTE( "250-c4.c4", 0x1000001, 0x800000, CRC(31354513) SHA1(31be8ea2498001f68ce4b06b8b90acbf2dcab6af) )
+ ROM_LOAD16_BYTE( "250-c5.c5", 0x2000000, 0x800000, CRC(a4b56124) SHA1(d41069856df990a1a99d39fb263c8303389d5475) )
+ ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
+ROM_END
+
ROM_START( mslugxp )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "250p.p1", 0x000000, 0x100000, CRC(e65937fc) SHA1(128af1815a23962de02384d61ff52869ae14cea1) )
@@ -690,6 +784,52 @@ ROM_START( mslugxr )
ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
ROM_END
+ROM_START( mslugxres )
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "250res.p1", 0x000000, 0x100000, CRC(d69fb994) SHA1(2cbffae29b92ef4b8f90e01488f89654a42a8596) )
+ ROM_LOAD16_WORD_SWAP( "250ce.p2", 0x100000, 0x400000, CRC(5d1c52cd) SHA1(b2b131fa845b0098cbf0750fee20b402e276483b) )
+
+ NEO_SFIX_128K( "250-s1.s1", CRC(fb6f441d) SHA1(2cc392ecde5d5afb28ddbaa1030552b48571dcfb) )
+
+ NEO_BIOS_AUDIO_128K( "250-m1.m1", CRC(fd42a842) SHA1(55769bad4860f64ef53a333e0da9e073db483d6a) )
+
+ ROM_REGION( 0xa00000, "ymsnd", 0 )
+ ROM_LOAD( "250-v1.v1", 0x000000, 0x400000, CRC(c79ede73) SHA1(ebfcc67204ff9677cf7972fd5b6b7faabf07280c) )
+ ROM_LOAD( "250-v2.v2", 0x400000, 0x400000, CRC(ea9aabe1) SHA1(526c42ca9a388f7435569400e2f132e2724c71ff) )
+ ROM_LOAD( "250-v3.v3", 0x800000, 0x200000, CRC(2ca65102) SHA1(45979d1edb1fc774a415d9386f98d7cb252a2043) )
+
+ ROM_REGION( 0x3000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "250-c1.c1", 0x0000000, 0x800000, CRC(09a52c6f) SHA1(c3e8a8ccdac0f8bddc4c3413277626532405fae2) )
+ ROM_LOAD16_BYTE( "250-c2.c2", 0x0000001, 0x800000, CRC(31679821) SHA1(554f600a3aa09c16c13c625299b087a79d0d15c5) )
+ ROM_LOAD16_BYTE( "250-c3.c3", 0x1000000, 0x800000, CRC(fd602019) SHA1(c56646c62387bc1439d46610258c755beb8d7dd8) )
+ ROM_LOAD16_BYTE( "250-c4.c4", 0x1000001, 0x800000, CRC(31354513) SHA1(31be8ea2498001f68ce4b06b8b90acbf2dcab6af) )
+ ROM_LOAD16_BYTE( "250-c5.c5", 0x2000000, 0x800000, CRC(a4b56124) SHA1(d41069856df990a1a99d39fb263c8303389d5475) )
+ ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
+ROM_END
+
+ROM_START( mslugxsef )
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "250sef.p1", 0x000000, 0x100000, CRC(aae5130c) SHA1(08b5fde0b809d0e68e89e6ef07fc83d7aedc8593) )
+ ROM_LOAD16_WORD_SWAP( "250mfb.p2", 0x100000, 0x400000, CRC(7b47677c) SHA1(af42d01b6fb3c288b1750b9960c11020bc12b7b4) )
+
+ NEO_SFIX_128K( "250-s1.s1", CRC(fb6f441d) SHA1(2cc392ecde5d5afb28ddbaa1030552b48571dcfb) )
+
+ NEO_BIOS_AUDIO_128K( "250-m1.m1", CRC(fd42a842) SHA1(55769bad4860f64ef53a333e0da9e073db483d6a) )
+
+ ROM_REGION( 0xa00000, "ymsnd", 0 )
+ ROM_LOAD( "250-v1.v1", 0x000000, 0x400000, CRC(c79ede73) SHA1(ebfcc67204ff9677cf7972fd5b6b7faabf07280c) )
+ ROM_LOAD( "250-v2.v2", 0x400000, 0x400000, CRC(ea9aabe1) SHA1(526c42ca9a388f7435569400e2f132e2724c71ff) )
+ ROM_LOAD( "250-v3.v3", 0x800000, 0x200000, CRC(2ca65102) SHA1(45979d1edb1fc774a415d9386f98d7cb252a2043) )
+
+ ROM_REGION( 0x3000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "250-c1.c1", 0x0000000, 0x800000, CRC(09a52c6f) SHA1(c3e8a8ccdac0f8bddc4c3413277626532405fae2) )
+ ROM_LOAD16_BYTE( "250-c2.c2", 0x0000001, 0x800000, CRC(31679821) SHA1(554f600a3aa09c16c13c625299b087a79d0d15c5) )
+ ROM_LOAD16_BYTE( "250-c3.c3", 0x1000000, 0x800000, CRC(fd602019) SHA1(c56646c62387bc1439d46610258c755beb8d7dd8) )
+ ROM_LOAD16_BYTE( "250-c4.c4", 0x1000001, 0x800000, CRC(31354513) SHA1(31be8ea2498001f68ce4b06b8b90acbf2dcab6af) )
+ ROM_LOAD16_BYTE( "250-c5.c5", 0x2000000, 0x800000, CRC(a4b56124) SHA1(d41069856df990a1a99d39fb263c8303389d5475) )
+ ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
+ROM_END
+
ROM_START( mslugxst )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "250st.p1", 0x000000, 0x100000, CRC(db88d115) SHA1(627d01c4d4bd6c4cfeac5f14859fe9a7026370b0) )
@@ -713,6 +853,29 @@ ROM_START( mslugxst )
ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
ROM_END
+ROM_START( mslugxsvb )
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "250svb.p1", 0x000000, 0x100000, CRC(4619b7de) SHA1(b1b1875f15528a12408ad477a9b1759ba74ec0d2) )
+ ROM_LOAD16_WORD_SWAP( "250svb.p2", 0x100000, 0x400000, CRC(6a114e1a) SHA1(3da62274252d36226dcccda0e05593f7f18c7193) )
+
+ NEO_SFIX_128K( "250-s1.s1", CRC(fb6f441d) SHA1(2cc392ecde5d5afb28ddbaa1030552b48571dcfb) )
+
+ NEO_BIOS_AUDIO_128K( "250-m1.m1", CRC(fd42a842) SHA1(55769bad4860f64ef53a333e0da9e073db483d6a) )
+
+ ROM_REGION( 0xa00000, "ymsnd", 0 )
+ ROM_LOAD( "250-v1.v1", 0x000000, 0x400000, CRC(c79ede73) SHA1(ebfcc67204ff9677cf7972fd5b6b7faabf07280c) )
+ ROM_LOAD( "250-v2.v2", 0x400000, 0x400000, CRC(ea9aabe1) SHA1(526c42ca9a388f7435569400e2f132e2724c71ff) )
+ ROM_LOAD( "250-v3.v3", 0x800000, 0x200000, CRC(2ca65102) SHA1(45979d1edb1fc774a415d9386f98d7cb252a2043) )
+
+ ROM_REGION( 0x3000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "250-c1.c1", 0x0000000, 0x800000, CRC(09a52c6f) SHA1(c3e8a8ccdac0f8bddc4c3413277626532405fae2) )
+ ROM_LOAD16_BYTE( "250-c2.c2", 0x0000001, 0x800000, CRC(31679821) SHA1(554f600a3aa09c16c13c625299b087a79d0d15c5) )
+ ROM_LOAD16_BYTE( "250-c3.c3", 0x1000000, 0x800000, CRC(fd602019) SHA1(c56646c62387bc1439d46610258c755beb8d7dd8) )
+ ROM_LOAD16_BYTE( "250-c4.c4", 0x1000001, 0x800000, CRC(31354513) SHA1(31be8ea2498001f68ce4b06b8b90acbf2dcab6af) )
+ ROM_LOAD16_BYTE( "250-c5.c5", 0x2000000, 0x800000, CRC(a4b56124) SHA1(d41069856df990a1a99d39fb263c8303389d5475) )
+ ROM_LOAD16_BYTE( "250-c6.c6", 0x2000001, 0x800000, CRC(83e3e69d) SHA1(39be66287696829d243fb71b3fb8b7dc2bc3298f) )
+ROM_END
+
#if 0
@@ -1928,6 +2091,30 @@ ROM_START( mslug4kh ) /* Metal Slug 4 - Enhance by Creamymami and Fighters Kim -
ROM_LOAD16_BYTE( "263-c6.c6", 0x2000001, 0x800000, CRC(5c8ba116) SHA1(6034db09c8706d4ddbcefc053efbc47a0953eb92) )
ROM_END
+ROM_START( mslug4lw )
+ ROM_REGION( 0x900000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "263lw.p1", 0x000000, 0x100000, CRC(783438fa) SHA1(7c15f902a319fb7c769c21bb1a860216a9691354) )
+ ROM_LOAD16_WORD_SWAP( "263lw.p2", 0x100000, 0x800000, CRC(5c897ae8) SHA1(d92739fc76b156447ffb3c18a93481d7f036d228) )
+
+ NEO_SFIX_128K( "263-s1.s1", CRC(a9446774) SHA1(c5a309fd8ee6d6750a15c82e710218a3755e38b2) )
+
+ NEO_BIOS_AUDIO_128K( "263nd.m1", CRC(ef5db532) SHA1(4aeba9e206b8f309610eb7e1891644f39aa61830) )
+
+ ROM_REGION( 0x1400000, "ymsnd", 0 )
+ ROM_LOAD( "263lw.v1", 0x000000, 0x400000, CRC(8cb5a9ef) SHA1(272ad312f8694acf9190ebf48d1c8a5fec73c130) )
+ ROM_LOAD( "263lw.v2", 0x400000, 0x400000, CRC(94217b1e) SHA1(c468a192e2ec0952a20cfd9e391cf6c12346efb3) )
+ ROM_LOAD( "263lw.v3", 0x800000, 0x400000, CRC(7616fcec) SHA1(83006094379d0373b967603dcaa1cec69c2f746f) )
+ ROM_LOAD( "263lw.v4", 0xC00000, 0x800000, CRC(6ac7ed2f) SHA1(4beb76d149e9e3d8b2c760a468d47fca260b2842) )
+
+ ROM_REGION( 0x3000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "263nd.c1", 0x0000000, 0x800000, CRC(361ddda6) SHA1(95f329019660f1ec7f15f6ea1e0c2bfc84b02ca8) )
+ ROM_LOAD16_BYTE( "263nd.c2", 0x0000001, 0x800000, CRC(15d192c4) SHA1(0b9afb62a1d4d764d616408b09e17a05fc4a87e7) )
+ ROM_LOAD16_BYTE( "263lw.c3", 0x1000000, 0x800000, CRC(e296612c) SHA1(57eb1861b738247aaf0643641268f676b71ed025) )
+ ROM_LOAD16_BYTE( "263lw.c4", 0x1000001, 0x800000, CRC(c22e3ad0) SHA1(11ce301d4e5b4b1b76e2b82d18c4a9b8b56eeb20) )
+ ROM_LOAD16_BYTE( "263lw.c5", 0x2000000, 0x400000, CRC(288cd91f) SHA1(a195be13d4ef19705cd3f08be1ec8cdacb29f159) )
+ ROM_LOAD16_BYTE( "263lw.c6", 0x2000001, 0x400000, CRC(b015aeee) SHA1(24e12e72b82eea9e52a4cefc774efb3bd7db822f) )
+ROM_END
+
ROM_START( mslug4nd )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "263nd.p1", 0x000000, 0x100000, CRC(4D7E6624) SHA1(125d5203e89cce23a851fa74cc8cbe003ef978f3) )
@@ -2243,6 +2430,32 @@ ROM_START( mslug5fr1 )
ROM_LOAD16_BYTE( "268hd.c8", 0x3000001, 0x800000, CRC(fafc3eb9) SHA1(F4F73194CC7FD151BE3CA2561F993B5BE7628369) )
ROM_END
+ROM_START( mslug5fu ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "268fu.p1", 0x000000, 0x100000, CRC(d1b04ae1) SHA1(b1ab15336bf6bec9dc8cfdbf2a07c6017e3e7ae4) )
+ ROM_LOAD16_WORD_SWAP( "268fu.p2", 0x100000, 0x400000, CRC(6357efbf) SHA1(d1b19bb18e2836d352e8a8d6700d4a0b83227fdb) )
+
+ NEO_SFIX_128K( "268fu.s1", CRC(64952683) SHA1(88ec728c2fe18a11fdd218bed5d73bb3affe2ec1) )
+
+ NEO_BIOS_AUDIO_512K( "268l9a.m1", CRC(464c72ad) SHA1(9e8a01c2bad897e2bbf32563a30f0474f8fcd2b5) )
+
+ ROM_REGION( 0x1037510, "ymsnd", 0 )
+ ROM_LOAD( "268l9b.v1", 0x000000, 0x400000, CRC(fcc8ba01) SHA1(c187c318c65f6aefae05e6cef9f17492edf2e4db) )
+ ROM_LOAD( "268l9b.v2", 0x400000, 0x400000, CRC(386f32bd) SHA1(d49fc812c442563b9e82da43bf5c6b9deea0f687) )
+ ROM_LOAD( "268l9b.v3", 0x800000, 0x400000, CRC(dc737e12) SHA1(f940ea767404f6a15dea526eda56ad66517ba79e) )
+ ROM_LOAD( "268l9b.v4", 0xc00000, 0x437510, CRC(2b310542) SHA1(5f0050d36cd1f722d78d9ae98db537eacc4d8548) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "268hd.c1", 0x0000000, 0x800000, CRC(e8239365) SHA1(E0A75902A783110049730B66AD3CBCCDD804BF62) )
+ ROM_LOAD16_BYTE( "268hd.c2", 0x0000001, 0x800000, CRC(89b21d4c) SHA1(862AC31CE9570529B33E6F58ADA0AC867A442679) )
+ ROM_LOAD16_BYTE( "268hd.c3", 0x1000000, 0x800000, CRC(3cda13a0) SHA1(5D029C92688384EAFD65AD711A2954D0B86A3163) )
+ ROM_LOAD16_BYTE( "268hd.c4", 0x1000001, 0x800000, CRC(9c00160d) SHA1(C612102F9CD288BBA4C245B5855D795E4362B217) )
+ ROM_LOAD16_BYTE( "268fu.c5", 0x2000000, 0x800000, CRC(3bc09dbf) SHA1(a47954a3295dc21e7db7dedc03ab789f8005eed5) )
+ ROM_LOAD16_BYTE( "268fu.c6", 0x2000001, 0x800000, CRC(0db5ce14) SHA1(aa2c4bb143e3bba18523df645c5be249eb9fc147) )
+ ROM_LOAD16_BYTE( "268fu.c7", 0x3000000, 0x800000, CRC(aa4f3214) SHA1(dc3a8fac2cc81e60abafc209eb4bcccdaafde380) )
+ ROM_LOAD16_BYTE( "268fu.c8", 0x3000001, 0x800000, CRC(c86d0d81) SHA1(1a00aa65481410c0b64fe971e547638c05c5a0ce) )
+ROM_END
+
ROM_START( mslug5hd )
ROM_REGION( 0x800000, "maincpu", 0 )
ROM_LOAD32_WORD_SWAP( "268-p1c.p1", 0x000000, 0x400000, CRC(3636690a) SHA1(e0da714b4bdc6efffe1250ded02ebddb3ab6d7b3) )
@@ -2442,17 +2655,24 @@ GAME( 2003, mslug2fro, mslug2, neogeo_noslot, neogeo, neogeo_state, neo
GAME( 1998, mslug2sh, mslug2, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Metal Slug 2 (hybrid Bullets version, Shinwa hack)", MACHINE_SUPPORTS_SAVE )
GAME( 2015, mslug2t, mslug2, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "System11", "Metal Slug 2 Turbo", MACHINE_SUPPORTS_SAVE )
// Metal Slug X
+GAME( 1999, mslugxce, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (CE)", MACHINE_SUPPORTS_SAVE )
GAME( 2013, mslugxeb, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "PlayerX China", "Metal Slug X (EB)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, mslugxeh, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "KrysoFun/KVS", "Metal Slug X (Style remix)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, mslugxeh1, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (Super Revised Version by KrysoFun)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, mslugxex, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (Excel version by PlayerX)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, mslugxfe, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (FE)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, mslugxfr, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "Arkatrad", "Metal Slug X (French)", MACHINE_SUPPORTS_SAVE )
GAME( 2002, mslugxfro, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "Arkatrad", "Metal Slug X (French) (Old)", MACHINE_SUPPORTS_SAVE )
GAME( 2013, mslugxhp, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (Enemy Heavy Plate 2013-06-18)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, mslugxit, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "Clomax & Ombra", "Metal Slug X (Italian - Beta)", MACHINE_SUPPORTS_SAVE )
-GAME( 1999, mslugxp, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X Plus (Hack by Player-X)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, mslugxjdkj,mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (JDKJ)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, mslugxmfb, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (MFB)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, mslugxp, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "Player-X", "Metal Slug X Plus (Hack by Player-X)", MACHINE_SUPPORTS_SAVE )
GAME( 2013, mslugxr, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (Reset Version 2013-05-28)", MACHINE_SUPPORTS_SAVE )
-GAME( 1999, mslugxst, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (Enhanced Version by STARK) [EGCG]", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, mslugxres, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (RES)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, mslugxsef, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (SEF)", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, mslugxst, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "EGCG / Stark", "Metal Slug X (Enhanced Version by STARK) [EGCG]", MACHINE_SUPPORTS_SAVE )
+GAME( 1999, mslugxsvb, mslugx, neogeo_noslot, neogeo, neogeo_noslot_state, mslugx, ROT0, "hack", "Metal Slug X (SVB)", MACHINE_SUPPORTS_SAVE )
// Metal Slug 3
GAME( 2000, mslug3d, mslug3, neogeo_noslot, neogeo, neogeo_hbmame, mslug3d, ROT0, "SNK", "Metal Slug 3 (decrypted C)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, mslug3e02, mslug3, neogeo_noslot, neogeo, neogeo_hbmame, mslug3n, ROT0, "Ydmis", "Metal Slug 3 (Style remix set 02)", MACHINE_SUPPORTS_SAVE )
@@ -2501,22 +2721,24 @@ GAME( 2005, mslug4fr, mslug4, neogeo_noslot, neogeo, neogeo_hbmame, msl
GAME( 2007, mslug4i, mslug4, neogeo_noslot, neogeo, neogeo_hbmame, mslug4it, ROT0, "Evoboy", "Metal Slug 4 (Italian)", MACHINE_SUPPORTS_SAVE )
GAME( 2002, mslug4i1, mslug4, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Metal Slug 4 (Italian)2", MACHINE_SUPPORTS_SAVE )
GAME( 2002, mslug4kh, mslug4, neogeo_noslot, neogeo, neogeo_hbmame, mslug4m, ROT0, "Creamymami and Fighters Kim", "Metal Slug 4 (Style remix 030731)", MACHINE_SUPPORTS_SAVE )
+GAME( 2002, mslug4lw, mslug4, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Metal Slug 4 (LW)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 2002, mslug4nd, mslug4, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Mega Enterprise / Playmore Corporation", "Metal Slug 4 (fully decrypted)", MACHINE_SUPPORTS_SAVE )
-GAME( 2002, mslug4sp, mslug4, neogeo_noslot, neogeo, neogeo_noslot_state, mslug4, ROT0, "hack", "Metal Slug 4 (unknown sp)", MACHINE_SUPPORTS_SAVE )
+GAME( 2002, mslug4sp, mslug4, neogeo_noslot, neogeo, neogeo_noslot_state, mslug4, ROT0, "hack", "Metal Slug 4 (SP)", MACHINE_SUPPORTS_SAVE )
// Metal Slug 5
GAME( 2003, mslug5b, mslug5, neogeo_noslot, neogeo, neogeo_hbmame, mslug5b, ROT0, "bootleg", "Metal Slug 5 (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, mslug5d, mslug5, neogeo_noslot, neogeo, neogeo_hbmame, mslug5d, ROT0, "hack", "Metal Slug 5 (decrypted C)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, mslug5d1, mslug5, neogeo_noslot, neogeo, neogeo_hbmame, mslug5d1, ROT0, "hack", "Metal Slug 5 (NGM-2680) (fully decrypted)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, mslug5f, mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, s1945p, ROT0, "C.B", "Metal Slug 5 (unknown f)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, mslug5f, mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, s1945p, ROT0, "C.B", "Metal Slug 5 (F)", MACHINE_SUPPORTS_SAVE )
GAME( 2006, mslug5fr, mslug5, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Arkatrad", "Metal Slug 5 (French)", MACHINE_SUPPORTS_SAVE )
GAME( 2006, mslug5fr1, mslug5, neogeo_noslot, neogeo, neogeo_hbmame, mslug5fr1,ROT0, "NEO-ARC", "Metal Slug 5 (French Edition)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, mslug5fu, mslug5, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Metal Slug 5 (FU)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 2003, mslug5hd, mslug5, neogeo_noslot, neogeo, neogeo_hbmame, mslug5hd, ROT0, "hack", "Metal Slug 5 (NGH-2680) (Decrypted C)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, mslug5l9a, mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, s1945p, ROT0, "C.B", "Metal Slug 5 Level 9 Hack (Ver A)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, mslug5l9b, mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, s1945p, ROT0, "C.B", "Metal Slug 5 Level 9 Hack (Ver B)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, mslug5lvf, mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, s1945p, ROT0, "C.B", "Metal Slug 5 (unknown lvf)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, mslug5lvnc,mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, s1945p, ROT0, "C.B", "Metal Slug 5 (unknown lvnc)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, mslug5lvf, mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, s1945p, ROT0, "C.B", "Metal Slug 5 (LVF)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, mslug5lvnc,mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, s1945p, ROT0, "C.B", "Metal Slug 5 (LVNC)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, mslug5nd, mslug5, neogeo_noslot, neogeo, neogeo_hbmame, mslug5nd, ROT0, "hack", "Metal Slug 5 (decrypted)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, mslug5w, mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, s1945p, ROT0, "C.B", "Metal Slug 5 (unknown w)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, mslug5w, mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, s1945p, ROT0, "C.B", "Metal Slug 5 (W)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, ms5boot, mslug5, neogeo_noslot, neogeo, neogeo_hbmame, ms5boot, ROT0, "bootleg", "Metal Slug 5 (Bootleg Set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, ms5pcbd, ms5pcb, neogeo_noslot, dualbios, neogeo_hbmame, ms5pcbd, ROT0, "hack", "Metal Slug 5 (JAMMA PCB) decrypted", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, ms5sp, mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, ms5plus, ROT0, "hack", "Metal Slug 5 PLUS (unknown sp)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, ms5sp, mslug5, neogeo_noslot, neogeo, neogeo_noslot_state, ms5plus, ROT0, "hack", "Metal Slug 5 PLUS (SP)", MACHINE_SUPPORTS_SAVE )
diff --git a/docs/release/src/hbmame/drivers/nggaroup.cpp b/docs/release/src/hbmame/drivers/nggaroup.cpp
index 06b8f9e1953..d0fc2ba1117 100644
--- a/docs/release/src/hbmame/drivers/nggaroup.cpp
+++ b/docs/release/src/hbmame/drivers/nggaroup.cpp
@@ -229,6 +229,32 @@ ROM_START( garoupfu ) /* Garou: Mark of the Wolves PROTOTYPE - Fix by UNKNOWN -
ROM_LOAD16_BYTE( "proto_253-c8.c8", 0x3000001, 0x800000, CRC(f778fe99) SHA1(c963f6ba90a36d02991728b44ffcf174ca18268a) )
ROM_END
+ROM_START( garoupx11 ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "253px11.p1", 0x000000, 0x100000, CRC(7a5e411e) SHA1(e56c518e1496948d882721d393e6e95b74cf95f4) )
+ ROM_LOAD16_WORD_SWAP( "253px11.p2", 0x100000, 0x400000, CRC(1eeecc14) SHA1(f42cfcaf10a2c8454bf90e53fa51c1c5c23b26de) )
+
+ NEO_SFIX_128K( "proto_253-s1.s1", CRC(779989de) SHA1(8bd550857b60f8a907f6d39a4225ceffdd330307) )
+
+ NEO_BIOS_AUDIO_256K( "proto_253-m1.m1", CRC(bbe464f7) SHA1(f5f8f3e48f5d453f45107085d6f4023bcd24c053) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "proto_253-v1.v1", 0x000000, 0x400000, CRC(274f3923) SHA1(4c7a8ad1cd0e3afc1f78de3c2929120ed434f104) )
+ ROM_LOAD( "proto_253-v2.v2", 0x400000, 0x400000, CRC(8f86dabe) SHA1(b3d2d9f5c1d97a6e7aee2c674fb6627f41bbb240) )
+ ROM_LOAD( "proto_253-v3.v3", 0x800000, 0x400000, CRC(05fd06cd) SHA1(6cd699719614bb87547632ea3d61d92d81fdf563) )
+ ROM_LOAD( "proto_253-v4.v4", 0xc00000, 0x400000, CRC(14984063) SHA1(170d5638327ec0eb3590b80dc11590897367250c) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "proto_253-c1.c1", 0x0000000, 0x800000, CRC(5bb5d137) SHA1(d648febd8e6a0bdd9bdbb6ce1f1f8b08567ec05a) )
+ ROM_LOAD16_BYTE( "proto_253-c2.c2", 0x0000001, 0x800000, CRC(5c8d2960) SHA1(f7503502be0332adf408ee0ea5ee5161c8939fd8) )
+ ROM_LOAD16_BYTE( "proto_253-c3.c3", 0x1000000, 0x800000, CRC(234d16fc) SHA1(7b9221f7ecc438150c8a10be72390329854ed21b) )
+ ROM_LOAD16_BYTE( "proto_253-c4.c4", 0x1000001, 0x800000, CRC(b9b5b993) SHA1(6059793eaf6e58c172235fe64aa9d25a40c38ed6) )
+ ROM_LOAD16_BYTE( "proto_253-c5.c5", 0x2000000, 0x800000, CRC(722615d2) SHA1(798832c535869f0e247c3db0d8253779b103e213) )
+ ROM_LOAD16_BYTE( "proto_253-c6.c6", 0x2000001, 0x800000, CRC(0a6fab38) SHA1(eaee6f2f18af91f7959d84d4b991b3fc182d07c4) )
+ ROM_LOAD16_BYTE( "proto_253-c7.c7", 0x3000000, 0x800000, CRC(d68e806f) SHA1(92bfd9839115bd590972ae4ecc45ad35dce22387) )
+ ROM_LOAD16_BYTE( "253px11.c8", 0x3000001, 0x800000, CRC(7f004da7) SHA1(724d2b6439822ca30dad6d1ab59739b59e52c3a1) )
+ROM_END
+
ROM_START( garoupy ) /* Garou: Mark of the Wolves PROTOTYPE - Hack by Ydmis - (In MVS mode P1 can choose Kain and Grant) */
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "253py.p1", 0x000000, 0x100000, CRC(5b010d7a) SHA1(5DC416E634456B2403ADF0668D18FC5FF60FAFDC) )
@@ -291,5 +317,6 @@ GAME( 1999, garoupehc, garoupy, neogeo_noslot, neogeo, neogeo_state, neo
GAME( 1999, garoupf, garoupy, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Unk", "Garou - Mark of the Wolves (proto) (Fixed winning message, sprites and some bugs)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, garoupfu, garoupy, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Unk", "Garou - Mark of the Wolves (proto) (Unk Hack/Fix)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, garoupfp, garoupy, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Unk", "Garou - Mark of the Wolves (proto) (Rom Fix - FixPlus)", MACHINE_SUPPORTS_SAVE )
+GAME( 2011, garoupx11, garoupy, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Garou - Mark of the Wolves XTREME PLUS", MACHINE_SUPPORTS_SAVE )
GAME( 1999, garoupy, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Ydmis", "Garou - Mark of the Wolves (proto) (P1 Add Char)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, garoupy1, garou, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Garou: Mark of the Wolves (Prototype) [Boss Hack by Ydmis]", MACHINE_SUPPORTS_SAVE )
diff --git a/docs/release/src/hbmame/drivers/ngkofmisc.cpp b/docs/release/src/hbmame/drivers/ngkofmisc.cpp
index 6a8dbe35b74..4a9de9d4585 100644
--- a/docs/release/src/hbmame/drivers/ngkofmisc.cpp
+++ b/docs/release/src/hbmame/drivers/ngkofmisc.cpp
@@ -253,6 +253,33 @@ ROM_START( ct2k3k3o ) /* [OLD] Crouching Tiger Hidden Dragon 2003 - Remix by Jas
ROM_LOAD16_BYTE( "5003-c8.bin", 0x3000001, 0x800000, CRC(917a1439) SHA1(6f28d1d7c6edee1283f25e632c69204dbebe40af) )
ROM_END
+ROM_START( ct2k3spi ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "360spi.p1", 0x000000, 0x454f4e, CRC(f3010a50) SHA1(b95f322c0682999f2c378fdf2db14fc804f71153) )
+ ROM_LOAD16_WORD_SWAP( "5003-p2.bin", 0x100000, 0x400000, CRC(adc1c22b) SHA1(271e0629989257a0d21d280c05df53df259414b1) )
+
+ //NEO_SFIX_256K( "360spi.s1", CRC(6c355ab4) SHA1(71ac2bcd3dbda8402baecc56dabc2297b148a900) ) // not working
+ NEO_SFIX_128K( "5003-s1.bin", CRC(5ba29aab) SHA1(e7ea67268a10243693bff722e6fd2276ca540acf) )
+
+ NEO_BIOS_AUDIO_128K( "5003-m1.bin", CRC(1a8c274b) SHA1(5f6f9c533f4a296a18c741ce59a69cf6f5c836b9) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "262-v1-08-e0.v1", 0x000000, 0x400000, CRC(83d49ecf) SHA1(2f2c116e45397652e77fcf5d951fa5f71b639572) )
+ ROM_LOAD( "262-v2-08-e0.v2", 0x400000, 0x400000, CRC(003f1843) SHA1(bdd58837ad542548bd4053c262f558af88e3b989) )
+ ROM_LOAD( "262-v3-08-e0.v3", 0x800000, 0x400000, CRC(2ae38dbe) SHA1(4e82b7dd3b899d61907620517a5a27bdaba0725d) )
+ ROM_LOAD( "262-v4-08-e0.v4", 0xc00000, 0x400000, CRC(26ec4dd9) SHA1(8bd68d95a2d913be41a51f51e48dbe3bff5924fb) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "5003-c1.bin", 0x0000000, 0x800000, CRC(68f54b67) SHA1(e2869709b11ea2846799fe431211c83e928e103e) )
+ ROM_LOAD16_BYTE( "5003-c2.bin", 0x0000001, 0x800000, CRC(2f8849d5) SHA1(7ef74981aa056f5acab4ddabffd3e98b4cb970be) )
+ ROM_LOAD16_BYTE( "5003-c3.bin", 0x1000000, 0x800000, CRC(ac4aff71) SHA1(c983f642e68deaa40fee3e208f2dd55f3bacbdc1) )
+ ROM_LOAD16_BYTE( "5003-c4.bin", 0x1000001, 0x800000, CRC(afef5d66) SHA1(39fe785563fbea54bba88de60dcc62e2458bd74a) )
+ ROM_LOAD16_BYTE( "5003-c5.bin", 0x2000000, 0x800000, CRC(c7c1ae50) SHA1(f54f5be7513a5ce2f01ab107a2b26f6a9ee1f2a9) )
+ ROM_LOAD16_BYTE( "5003-c6.bin", 0x2000001, 0x800000, CRC(613197f9) SHA1(6d1fefa1be81b79e251e55a1352544c0298e4674) )
+ ROM_LOAD16_BYTE( "5003-c7.bin", 0x3000000, 0x800000, CRC(64ddfe0f) SHA1(361f3f4618009bf6419961266eb9ab5002bef53c) )
+ ROM_LOAD16_BYTE( "5003-c8.bin", 0x3000001, 0x800000, CRC(917a1439) SHA1(6f28d1d7c6edee1283f25e632c69204dbebe40af) )
+ROM_END
+
ROM_START( ct2k3xx )
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "5003-p1.bin", 0x000000, 0x100000, CRC(bb7602c1) SHA1(abf329a40f34c88f7325b255e3bc090db1edaca4) )
@@ -351,8 +378,8 @@ ROM_START( kof2k4ru )
ROM_REGION( 0x4000000, "sprites", 0 )
ROM_LOAD16_BYTE( "365ru.c1", 0x0000000, 0x800000, CRC(c55d7733) SHA1(3837f178788c78dcf7b0a4fbab3d62bfe0b41f9a) )
ROM_LOAD16_BYTE( "365ru.c2", 0x0000001, 0x800000, CRC(d89b45c9) SHA1(31d7ad16534839821f68db07b28dd564fe5c13c3) )
- ROM_LOAD16_BYTE( "365ru.c3", 0x1000000, 0x800000, CRC(e5074eea) SHA1(387ef21d58b416126b95843bac1a0b6cc346818f) )
- ROM_LOAD16_BYTE( "365ru.c4", 0x1000001, 0x800000, CRC(f6eb1ff2) SHA1(77cb493b9e75d42c204a9a6c052a813c2730e44f) )
+ ROM_LOAD16_BYTE( "265ori.c3", 0x1000000, 0x800000, CRC(e5074eea) SHA1(387ef21d58b416126b95843bac1a0b6cc346818f) )
+ ROM_LOAD16_BYTE( "265ori.c4", 0x1000001, 0x800000, CRC(f6eb1ff2) SHA1(77cb493b9e75d42c204a9a6c052a813c2730e44f) )
ROM_LOAD16_BYTE( "365ru.c5", 0x2000000, 0x800000, CRC(11126545) SHA1(4ae58848c8a6701c9cfcd60e6674e8fb7491c0c0) )
ROM_LOAD16_BYTE( "365ru.c6", 0x2000001, 0x800000, CRC(d225bb9b) SHA1(ee627dab6aeebfb1af9dbdc315a927245243817c) )
ROM_LOAD16_BYTE( "365ru.c7", 0x3000000, 0x800000, CRC(750a7a2b) SHA1(3ef7688eedc3fcb9cef55306055b838f60a96285) )
@@ -495,7 +522,75 @@ ROM_START( kof2k8uni ) // hack of kof10th
ROM_END
-ROM_START( kof10thu )
+ROM_START( kof10thd16 ) // after loading, p1 needs unscrambling: 2&3<->4&5 etc
+ ROM_REGION( 0x800000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "363d16.p1", 0x000000, 0x00000, CRC(ea4274f6) SHA1(b9ea7f92f531916bed6363c8214ed5ae117d5148) )
+
+ NEO_SFIX_MT_128K
+ ROM_LOAD( "363d16.s1", 0x000000, 0x020000, CRC(6fae9f8f) SHA1(0194a0f8946c2d8e89e4b784586f77b874c03302) )
+ ROM_IGNORE( 0x435044 )
+
+ NEO_BIOS_AUDIO_128K( "kf10-m1.bin", CRC(f6fab859) SHA1(0184aa1394b9f9946d610278b53b846020dd88dc) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "kf10-v1.bin", 0x000000, 0x800000, CRC(0fc9a58d) SHA1(9d79ef00e2c2abd9f29af5521c2fbe5798bf336f) )
+ ROM_LOAD( "kf10-v2.bin", 0x800000, 0x800000, CRC(b8c475a4) SHA1(10caf9c69927a223445d2c4b147864c02ce520a8) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "kf10-c1a.bin", 0x0000000, 0x400000, CRC(3bbc0364) SHA1(e8aa7ff82f151ce1db56f259377b64cceef85af0) )
+ ROM_LOAD16_BYTE( "kf10-c2a.bin", 0x0000001, 0x400000, CRC(91230075) SHA1(d9098e05a7ba6008661147b6bf8bc2f494b8b72b) )
+ ROM_LOAD16_BYTE( "kf10-c1b.bin", 0x0800000, 0x400000, CRC(b5abfc28) SHA1(eabf60992bb3485c95330065294071ec155bfe7c) )
+ ROM_LOAD16_BYTE( "kf10-c2b.bin", 0x0800001, 0x400000, CRC(6cc4c6e1) SHA1(be824a944e745ee18efdc45c81fd496a4d624b9c) )
+ ROM_LOAD16_BYTE( "kf10-c3a.bin", 0x1000000, 0x400000, CRC(5b3d4a16) SHA1(93ac1cd7739100f8c32732644f81f2a19837b131) )
+ ROM_LOAD16_BYTE( "kf10-c4a.bin", 0x1000001, 0x400000, CRC(c6f3419b) SHA1(340c17a73aeb7bf8a6209f8459e6f00000075b50) )
+ ROM_LOAD16_BYTE( "kf10-c3b.bin", 0x1800000, 0x400000, CRC(9d2bba19) SHA1(5ebbd0af3f83a60e33c8ccb743e3d5f5a96f1273) )
+ ROM_LOAD16_BYTE( "kf10-c4b.bin", 0x1800001, 0x400000, CRC(5a4050cb) SHA1(8fd2291f349efa1ed5cd37ad4e273b60fe831a77) )
+ ROM_LOAD16_BYTE( "kf10-c5a.bin", 0x2000000, 0x400000, CRC(a289d1e1) SHA1(50c7d7ebde6e118a01036cc3e40827fcd9f0d3fd) )
+ ROM_LOAD16_BYTE( "kf10-c6a.bin", 0x2000001, 0x400000, CRC(e6494b5d) SHA1(18e064b9867ae0b0794065f8dbefd486620419db) )
+ ROM_LOAD16_BYTE( "kf10-c5b.bin", 0x2800000, 0x400000, CRC(404fff02) SHA1(56d1b32c87ea4885e49264e8b21846e465a20e1f) )
+ ROM_LOAD16_BYTE( "kf10-c6b.bin", 0x2800001, 0x400000, CRC(f2ccfc9e) SHA1(69db7fac7023785ab94ea711a72dbc2826cfe1a3) )
+ ROM_LOAD16_BYTE( "kf10-c7a.bin", 0x3000000, 0x400000, CRC(be79c5a8) SHA1(ded3c5eb3571647f50533eb682c2675372ace3fb) )
+ ROM_LOAD16_BYTE( "kf10-c8a.bin", 0x3000001, 0x400000, CRC(a5952ca4) SHA1(76dbb3cb45ce5a4beffa1ed29491204fc6617e42) )
+ ROM_LOAD16_BYTE( "kf10-c7b.bin", 0x3800000, 0x400000, CRC(3fdb3542) SHA1(7d2050752a2064cd6729f483a0da93808e2c6033) )
+ ROM_LOAD16_BYTE( "kf10-c8b.bin", 0x3800001, 0x400000, CRC(661b7a52) SHA1(0ae2ad2389134892f156337332b77adade3ddad1) )
+ROM_END
+
+ROM_START( kof10thep15 )
+ ROM_REGION( 0x800000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "363ep15.p1", 0x000000, 0x200000, CRC(8981b627) SHA1(b25754a6339f6533af791cd7dea95988b5f9072a) )
+ ROM_IGNORE(0x254f9f)
+ ROM_LOAD16_WORD_SWAP( "363ep15.p2", 0x200000, 0x400000, CRC(8eca396b) SHA1(58918c9dff5dc6e8975e16943ef8aefcd4caf34d) )
+ ROM_IGNORE(0x054f59)
+ ROM_LOAD16_WORD_SWAP( "5008-p3.bin", 0x600000, 0x200000, CRC(e629e13c) SHA1(6ebe080ce01c51064cb2f4d89315ba98a45ae727) )
+
+ NEO_SFIX_128K( "5008-s1.bin", CRC(92410064) SHA1(1fb800b46341858207d3b6961a760289fbec7faa) )
+
+ NEO_BIOS_AUDIO_128K( "5008-m1.bin", CRC(5a47d9ad) SHA1(0197737934653acc6c97221660d789e9914f3578) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "kf10-v1.bin", 0x000000, 0x800000, CRC(0fc9a58d) SHA1(9d79ef00e2c2abd9f29af5521c2fbe5798bf336f) )
+ ROM_LOAD( "kf10-v2.bin", 0x800000, 0x800000, CRC(b8c475a4) SHA1(10caf9c69927a223445d2c4b147864c02ce520a8) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "kf10-c1a.bin", 0x0000000, 0x400000, CRC(3bbc0364) SHA1(e8aa7ff82f151ce1db56f259377b64cceef85af0) )
+ ROM_LOAD16_BYTE( "kf10-c2a.bin", 0x0000001, 0x400000, CRC(91230075) SHA1(d9098e05a7ba6008661147b6bf8bc2f494b8b72b) )
+ ROM_LOAD16_BYTE( "kf10-c1b.bin", 0x0800000, 0x400000, CRC(b5abfc28) SHA1(eabf60992bb3485c95330065294071ec155bfe7c) )
+ ROM_LOAD16_BYTE( "kf10-c2b.bin", 0x0800001, 0x400000, CRC(6cc4c6e1) SHA1(be824a944e745ee18efdc45c81fd496a4d624b9c) )
+ ROM_LOAD16_BYTE( "kf10-c3a.bin", 0x1000000, 0x400000, CRC(5b3d4a16) SHA1(93ac1cd7739100f8c32732644f81f2a19837b131) )
+ ROM_LOAD16_BYTE( "kf10-c4a.bin", 0x1000001, 0x400000, CRC(c6f3419b) SHA1(340c17a73aeb7bf8a6209f8459e6f00000075b50) )
+ ROM_LOAD16_BYTE( "kf10-c3b.bin", 0x1800000, 0x400000, CRC(9d2bba19) SHA1(5ebbd0af3f83a60e33c8ccb743e3d5f5a96f1273) )
+ ROM_LOAD16_BYTE( "kf10-c4b.bin", 0x1800001, 0x400000, CRC(5a4050cb) SHA1(8fd2291f349efa1ed5cd37ad4e273b60fe831a77) )
+ ROM_LOAD16_BYTE( "kf10-c5a.bin", 0x2000000, 0x400000, CRC(a289d1e1) SHA1(50c7d7ebde6e118a01036cc3e40827fcd9f0d3fd) )
+ ROM_LOAD16_BYTE( "kf10-c6a.bin", 0x2000001, 0x400000, CRC(e6494b5d) SHA1(18e064b9867ae0b0794065f8dbefd486620419db) )
+ ROM_LOAD16_BYTE( "kf10-c5b.bin", 0x2800000, 0x400000, CRC(404fff02) SHA1(56d1b32c87ea4885e49264e8b21846e465a20e1f) )
+ ROM_LOAD16_BYTE( "kf10-c6b.bin", 0x2800001, 0x400000, CRC(f2ccfc9e) SHA1(69db7fac7023785ab94ea711a72dbc2826cfe1a3) )
+ ROM_LOAD16_BYTE( "kf10-c7a.bin", 0x3000000, 0x400000, CRC(be79c5a8) SHA1(ded3c5eb3571647f50533eb682c2675372ace3fb) )
+ ROM_LOAD16_BYTE( "kf10-c8a.bin", 0x3000001, 0x400000, CRC(a5952ca4) SHA1(76dbb3cb45ce5a4beffa1ed29491204fc6617e42) )
+ ROM_LOAD16_BYTE( "5008-c7b.bin", 0x3800000, 0x400000, CRC(33604ef0) SHA1(57deec23c81d5d673ce5992cef1f2567f1a2148e) )
+ ROM_LOAD16_BYTE( "5008-c8b.bin", 0x3800001, 0x400000, CRC(51f6a8f8) SHA1(9ef1cdbdd125a2b430346c22b59f36902312905f) )
+ROM_END
+
+ROM_START( kof10thu )
ROM_REGION( 0x800000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "363u.p1", 0x600000, 0x100000, CRC(dd135fb6) SHA1(4e85814a44ee9fee9760048dd6d6fd2b66521bb1) )
ROM_CONTINUE( 0x100000, 0x500000 )
@@ -622,6 +717,29 @@ ROM_START( kogf )
ROM_LOAD16_BYTE( "5232-c4.bin", 0x2000001, 0x400000, CRC(d2bd967b) SHA1(c494e0a98e127d37ca360a28accc167fa50fb626) )
ROM_END
+ROM_START( kogmxpls ) // all confirmed
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "361mxpls.p1", 0x000000, 0x100000, CRC(cb135241) SHA1(7a84ee0965a2dcd9f7a884e7fe862ce98b2a7921) )
+ ROM_LOAD16_WORD_SWAP( "361mxpls.p2", 0x100000, 0x400000, CRC(fef47a50) SHA1(cbe7361c06a14a2cdec6276745d3c93ba8fff211) )
+
+ NEO_SFIX_128K( "361mxpls.s1", CRC(4a46bdd3) SHA1(f0cd23f1b7f916c5cec36a8c379071e142849d61) )
+
+ NEO_BIOS_AUDIO_128K( "232-m1.m1", CRC(45348747) SHA1(ed77cbae2b208d1177a9f5f6e8cd57070e90b65b) )
+
+ ROM_REGION( 0xc00000, "ymsnd", 0 )
+ ROM_LOAD( "232-v1.v1", 0x000000, 0x400000, CRC(22a2b5b5) SHA1(ebdbc977332e6d93e266755000b43857e0082965) )
+ ROM_LOAD( "232-v2.v2", 0x400000, 0x400000, CRC(2304e744) SHA1(98d283e2bcc9291a53f52afd35ef76dfb0828432) )
+ ROM_LOAD( "232-v3.v3", 0x800000, 0x400000, CRC(759eb954) SHA1(54e77c4e9e6b89458e59824e478ddc33a9c72655) )
+
+ ROM_REGION( 0x2800000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "361d.c1", 0x0000000, 0x800000, CRC(8E964A75) SHA1(e7611d7908ca056f4b3c0ae2c4da8f6809db4556) )
+ ROM_LOAD16_BYTE( "361d.c2", 0x0000001, 0x800000, CRC(D102DE17) SHA1(e98f33a4d16ebda6cf369b92480d4306c780cf8b) )
+ ROM_LOAD16_BYTE( "232-c3.c3", 0x1000000, 0x800000, CRC(581d6618) SHA1(14d3124a08ded59f86932c6b28e1a4e48c564ccd) )
+ ROM_LOAD16_BYTE( "232-c4.c4", 0x1000001, 0x800000, CRC(49bb1e68) SHA1(f769c1bd1b019521111ff3f0d22c63cb1f2640ef) )
+ ROM_LOAD16_BYTE( "361mxpls.c5", 0x2000000, 0x400000, CRC(aec1c48b) SHA1(d6f4a8033f9b5c1942b2061f92b1bf7a13adaaae) )
+ ROM_LOAD16_BYTE( "361mxpls.c6", 0x2000001, 0x400000, CRC(eed0c40a) SHA1(efa91e7a9f4a30f4a86d0c4dd1d76754331de99f) )
+ROM_END
+
ROM_START( kogplus )
ROM_REGION( 0x600000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "361plus.p1", 0x000000, 0x200000, CRC(0338f453) SHA1(01ea5ca6cc632d732a539542dc163bbafb071b88) )
@@ -676,6 +794,7 @@ GAME( 2003, ct2k3eh, cthd2k3b, neogeo_noslot, neogeo, neogeo_noslot_state
GAME( 2003, ct2k3ifz, cthd2k3b, neogeo_noslot, neogeo, neogeo_noslot_state, cthd2003, ROT0, "hack", "Crouching Tiger Hidden Dragon 2003 (Ice FZ Remix)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, ct2k3k3, cthd2k3b, neogeo_noslot, neogeo, neogeo_noslot_state, cthd2003, ROT0, "Jason/K3", "Crouching Tiger Hidden Dragon 2003 Remix v1.2 (Diff Move - 030823)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, ct2k3k3o, cthd2k3b, neogeo_noslot, neogeo, neogeo_noslot_state, cthd2003, ROT0, "Jason/K3", "Crouching Tiger Hidden Dragon 2003 Remix (Diff Move - 030818)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, ct2k3spi, cthd2k3b, neogeo_noslot, neogeo, neogeo_noslot_state, cthd2003, ROT0, "hack", "Crouching Tiger Hidden Dragon 2003 (hack spi)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, ct2k3xx, cthd2k3b, neogeo_noslot, neogeo, neogeo_noslot_state, cthd2003, ROT0, "hack", "Crouching Tiger Hidden Dragon 2003 (Blood Edition)", MACHINE_SUPPORTS_SAVE )
GAME( 2003, ct2k3ys, cthd2k3b, neogeo_noslot, neogeo, neogeo_noslot_state, cthd2003, ROT0, "hack", "Crouching Tiger Hidden Dragon 2003 (Red Fire Remix)", MACHINE_SUPPORTS_SAVE )
GAME( 2004, kof2k4mp, kof2002, neogeo_noslot, neogeo, neogeo_noslot_state, kof2k4se, ROT0, "hack", "Kof Special Edition 2004 Magic PLUS", MACHINE_SUPPORTS_SAVE )
@@ -685,12 +804,15 @@ GAME( 2004, kof2k4se2, kof2002, neogeo_noslot, neogeo, neogeo_noslot_state
GAME( 2004, kof2k4seb, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Dragon Co.", "Kof Special Edition 2004 (portuguese)", MACHINE_SUPPORTS_SAVE )
GAME( 2004, kof2k4spl, kof2002, neogeo_noslot, neogeo, neogeo_noslot_state, kof2k4se, ROT0, "hack", "Kof Special Edition 2004 Plus", MACHINE_SUPPORTS_SAVE )
GAME( 2008, kof2k8uni, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof 10th Anniversary 2008 Unique", MACHINE_SUPPORTS_SAVE )
-GAME( 2005, kof10thu, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, kof10thu, ROT0, "hack", "Kof 10th Anniversary UNIQUE (bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 2015, kof10thep15,kof2002, neogeo_noslot, neogeo, neogeo_noslot_state, kf10thep, ROT0, "hack", "Kof 10th Anniversary Extra Plus (hack 15)", MACHINE_SUPPORTS_SAVE )
+GAME( 2005, kof10thd16, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, kof10thu, ROT0, "hack", "Kof 10th Anniversary UNIQUE (hack d16)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+GAME( 2005, kof10thu, kof2002, neogeo_noslot, neogeo, neogeo_hbmame, kof10thu, ROT0, "hack", "Kof 10th Anniversary UNIQUE (hack u)", MACHINE_SUPPORTS_SAVE )
GAME( 2005, kof10thub, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof 10th Anniversary UNIQUE (portuguese edition)", MACHINE_SUPPORTS_SAVE )
-GAME( 2005, kof10thud, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof 10th Anniversary UNIQUE (decrypted, bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 2005, kof10thud, kof2002, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "Kof 10th Anniversary UNIQUE (decrypted)", MACHINE_SUPPORTS_SAVE )
GAME( 2005, kogd, kof97, hbmame_kog, neogeo, neogeo_hbmame, kogd, ROT0, "hack", "King of Gladiator (fully decrypted)", MACHINE_SUPPORTS_SAVE )
-GAME( 1997, kogf, kof97, neogeo_kog, neogeo, neogeo_noslot_kog_state, kog, ROT0, "Zxbdragon / Ryu", "King of Gladiator (Fixed Edition by Zxbdragon & Ryu)", MACHINE_SUPPORTS_SAVE )
-GAME( 1997, kogplus, kof97, neogeo_kog, neogeo, neogeo_noslot_kog_state, kog, ROT0, "hack", "King of Gladiator PLUS", MACHINE_SUPPORTS_SAVE )
-GAME( 1997, kogplusf, kof97, hbmame_kog, neogeo, neogeo_hbmame, kogd, ROT0, "Zxbdragon / Ryu", "King of Gladiator PLUS (Fixed Edition by Zxbdragon & Ryu)", MACHINE_SUPPORTS_SAVE )
+GAME( 2005, kogf, kof97, neogeo_kog, neogeo, neogeo_noslot_kog_state, kog, ROT0, "Zxbdragon / Ryu", "King of Gladiator (Fixed Edition by Zxbdragon & Ryu)", MACHINE_SUPPORTS_SAVE )
+GAME( 2005, kogmxpls, kof97, hbmame_kog, neogeo, neogeo_hbmame, kogd, ROT0, "hack", "King of Gladiator MIX PLUS-EX", MACHINE_SUPPORTS_SAVE )
+GAME( 2005, kogplus, kof97, neogeo_kog, neogeo, neogeo_noslot_kog_state, kog, ROT0, "hack", "King of Gladiator PLUS", MACHINE_SUPPORTS_SAVE )
+GAME( 2005, kogplusf, kof97, hbmame_kog, neogeo, neogeo_hbmame, kogd, ROT0, "Zxbdragon / Ryu", "King of Gladiator PLUS (Fixed Edition by Zxbdragon & Ryu)", MACHINE_SUPPORTS_SAVE )
///GAME( 2004, kf2k4pls, kof2002, neogeo_noslot, neogeo, neogeo_state, kf2k4pls, ROT0, "hack", "Kof2004 Special Edition Plus", MACHINE_SUPPORTS_SAVE )
///GAME( 2004, kof10thd, kof2002, neogeo_noslot, neogeo, neogeo_state, kof10thd, ROT0, "hack", "Kof 10th Anniversary (Fully Decrypted)", MACHINE_SUPPORTS_SAVE )
diff --git a/docs/release/src/hbmame/drivers/ngrotd.cpp b/docs/release/src/hbmame/drivers/ngrotd.cpp
index 84248af9a25..6a4b07d9f12 100644
--- a/docs/release/src/hbmame/drivers/ngrotd.cpp
+++ b/docs/release/src/hbmame/drivers/ngrotd.cpp
@@ -239,6 +239,29 @@ ROM_START( rotdd )
ROM_LOAD16_BYTE( "264d.c8", 0x3000001, 0x800000, CRC(82b1ba22) SHA1(B4AD715807F2C15FC06945F0BCB475C3698CF089) )
ROM_END
+ROM_START( rotddh )
+ ROM_REGION( 0x800000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "264dh.p1", 0x000000, 0x800000, CRC(7c095666) SHA1(2b9412105cd60fa6d7eea9d13a552fd976f56eb6) )
+
+ NEO_SFIX_MT_128K
+
+ NEO_BIOS_AUDIO_128K( "264nd.m1", CRC(c5d36af9) SHA1(320739d0cfa6cc84455ae1f7b1f9cdab3c018933) )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD( "264-v1.v1", 0x000000, 0x800000, CRC(fa005812) SHA1(73723126dab5a640ac11955ed6da1bf7a91394f5) )
+ ROM_LOAD( "264-v2.v2", 0x800000, 0x800000, CRC(c3dc8bf0) SHA1(a105e37262d9500a30fb8a5dac05aa4fab2562a3) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "264d.c1", 0x0000000, 0x800000, CRC(ec9d18c0) SHA1(83EBEDAE9655B6C64421CD131930B27D252853EC) )
+ ROM_LOAD16_BYTE( "264d.c2", 0x0000001, 0x800000, CRC(b1069066) SHA1(0B4E2249EFC782B572B589F72AADBD8007E8778C) )
+ ROM_LOAD16_BYTE( "264d.c3", 0x1000000, 0x800000, CRC(7e636d49) SHA1(1BA15DDBCE8369D7232CC1DA3F833F6CB68FBC10) )
+ ROM_LOAD16_BYTE( "264d.c4", 0x1000001, 0x800000, CRC(76892fda) SHA1(27416585973A6EC7B5721DE1116C8700B38E3A4C) )
+ ROM_LOAD16_BYTE( "264d.c5", 0x2000000, 0x800000, CRC(469061bc) SHA1(34E60E5F93743BE88BFC9E8B7656FE9FAF77F8F5) )
+ ROM_LOAD16_BYTE( "264d.c6", 0x2000001, 0x800000, CRC(2200220a) SHA1(8379B4C89854B3CC9B4F33F4F51AB5387ACD14CA) )
+ ROM_LOAD16_BYTE( "264dh.c7", 0x3000000, 0x800000, CRC(2b5c1044) SHA1(1dc3b2bd5fed3e5b39d87c4728e8b0d8225ee7dc) )
+ ROM_LOAD16_BYTE( "264dh.c8", 0x3000001, 0x800000, CRC(f697f287) SHA1(2b257f2ebef69f19aaca54f37472f1c3dfc6bee6) )
+ROM_END
+
ROM_START( rotdeh ) /* Rage of the Dragons - Hack by Ydmis - (Can choose Abubo and Johann) */
ROM_REGION( 0x800000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "264eh.p1", 0x000000, 0x800000, CRC(b8db28bc) SHA1(9fd6cd7a13bde0854243dca4b0d7d9601cde4996) )
@@ -521,23 +544,24 @@ ROM_END
-GAME( 2002, rotdb, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Ydmis", "Rage of the Dragons (Add Char - Console mode enabled set 4)", MACHINE_SUPPORTS_SAVE ) // Abubo and Johann
+GAME( 2002, rotdb, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Ydmis", "Rage of the Dragons (Add Char - Console mode enabled set 4)", MACHINE_SUPPORTS_SAVE )
GAME( 2002, rotdbr, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "hack", "Rage of the Dragons (Portuguese)", MACHINE_SUPPORTS_SAVE )
GAME( 2002, rotdbr1, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "hack", "Rage of the Dragons (Portuguese) (Alt Set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 2002, rotdbr2, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "hack", "Rage of the Dragons (Portuguese) (Alt Set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 2002, rotdcre, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Creamymami and Unk","Rage of the Dragons (Console mode enabled - Always pow max - No change wait)", MACHINE_SUPPORTS_SAVE )
-GAME( 2002, rotdcreb, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Creamymami, Unk and Ydmis","Rage of the Dragons (Add Char - Console mode enabled - Always pow max - No change wait set 2)", MACHINE_SUPPORTS_SAVE ) // Abubo and Johann
+GAME( 2002, rotdcreb, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Creamymami, Unk and Ydmis","Rage of the Dragons (Add Char - Console mode enabled - Always pow max - No change wait set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 2002, rotdd, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdd, ROT0, "Evoga / Playmore","Rage of the Dragons (decrypted C)", MACHINE_SUPPORTS_SAVE )
-GAME( 2002, rotdeh, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Ydmis", "Rage of the Dragons (Add Char)", MACHINE_SUPPORTS_SAVE ) // Abubo and Johann
-GAME( 2002, rotdehc, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Creamymami, FWNL and Ydmis","Rage of the Dragons (Add Char - Console mode enabled - Always pow max - No change wait set 1)", MACHINE_SUPPORTS_SAVE ) // Abubo and Johann
-GAME( 2002, rotdfw, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "FWNL and Ydmis", "Rage of the Dragons (Add Char - Console mode enabled set 2)", MACHINE_SUPPORTS_SAVE ) // Abubo and Johann
-GAME( 2002, rotdfy, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "FWNL and Ydmis", "Rage of the Dragons (Add Char - Console mode enabled set 3)", MACHINE_SUPPORTS_SAVE ) // Abubo and Johann
-GAME( 2002, rotdh2b, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Unk and Ydmis", "Rage of the Dragons (Add Char - Console mode enabled set 5)", MACHINE_SUPPORTS_SAVE ) // Abubo and Johann
-GAME( 2002, rotdhab, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "HappyAsr", "Rage of the Dragons (Add Char - Console mode enabled - Char menu changed - Char choose twice)", MACHINE_SUPPORTS_SAVE ) // Abubo and Johann
+GAME( 2002, rotddh, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdd, ROT0, "hack", "Rage of the Dragons (hack dh)", MACHINE_SUPPORTS_SAVE )
+GAME( 2002, rotdeh, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Ydmis", "Rage of the Dragons (Add Char)", MACHINE_SUPPORTS_SAVE )
+GAME( 2002, rotdehc, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Creamymami, FWNL and Ydmis","Rage of the Dragons (Add Char - Console mode enabled - Always pow max - No change wait set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 2002, rotdfw, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "FWNL and Ydmis", "Rage of the Dragons (Add Char - Console mode enabled set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 2002, rotdfy, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "FWNL and Ydmis", "Rage of the Dragons (Add Char - Console mode enabled set 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 2002, rotdh2b, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Unk and Ydmis", "Rage of the Dragons (Add Char - Console mode enabled set 5)", MACHINE_SUPPORTS_SAVE )
+GAME( 2002, rotdhab, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "HappyAsr", "Rage of the Dragons (Add Char - Console mode enabled - Char menu changed - Char choose twice)", MACHINE_SUPPORTS_SAVE )
GAME( 2002, rotdhar, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "HappyAsr", "Rage of the Dragons (Console mode enabled set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 2002, rotdhfw, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "FWNL", "Rage of the Dragons (Console mode enabled set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 2002, rotdhfwb, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "FWNL and Ydmis", "Rage of the Dragons (Add Char - Console mode enabled set 1)", MACHINE_SUPPORTS_SAVE ) // Abubo and Johann
-GAME( 2002, rotdyc, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Creamymami and Ydmis", "Rage of the Dragons (Add Char - Console mode enabled - Pow hack)", MACHINE_SUPPORTS_SAVE ) // Abubo and Johann
+GAME( 2002, rotdhfwb, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "FWNL and Ydmis", "Rage of the Dragons (Add Char - Console mode enabled set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 2002, rotdyc, rotd, neogeo_noslot, neogeo, neogeo_hbmame, rotdb, ROT0, "Creamymami and Ydmis", "Rage of the Dragons (Add Char - Console mode enabled - Pow hack)", MACHINE_SUPPORTS_SAVE )
diff --git a/docs/release/src/hbmame/drivers/ngsengoku.cpp b/docs/release/src/hbmame/drivers/ngsengoku.cpp
index 2aa01c24008..3cd9a10169a 100644
--- a/docs/release/src/hbmame/drivers/ngsengoku.cpp
+++ b/docs/release/src/hbmame/drivers/ngsengoku.cpp
@@ -97,6 +97,30 @@ ROM_START( sengoku3d )
ROM_LOAD16_BYTE( "261d.c4", 0x1000001, 0x800000, CRC(18926df6) SHA1(a4859c9166ef7abec1f3e6af3292051a63a81f93) )
ROM_END
+ROM_START( sengoku3eb ) // sgk3eb
+ ROM_REGION( 0x500000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "261eb.p1", 0x100000, 0x100000, CRC(a77a0dc7) SHA1(a78885d1d121583c7733a868f6140babc4ba5544) )
+ ROM_IGNORE(0x100000)
+ ROM_CONTINUE(0x000000, 0x100000)
+ ROM_IGNORE(0x154f48)
+
+ NEO_SFIX_MT_128K
+
+ NEO_BIOS_AUDIO_512K( "261-m1.m1", CRC(7d501c39) SHA1(8e6bcc428f5ac7532d9c9be7e07ad0821461a080) )
+
+ ROM_REGION( 0x0e00000, "ymsnd", 0 )
+ ROM_LOAD( "261-v1.v1", 0x000000, 0x400000, CRC(64c30081) SHA1(f9ebd20cf59b72e864b7274c1bdb6d99ecaf4595) )
+ ROM_LOAD( "261-v2.v2", 0x400000, 0x400000, CRC(392a9c47) SHA1(7ab90a54089236ca6c3ef1af8e566a8025d38159) )
+ ROM_LOAD( "261-v3.v3", 0x800000, 0x400000, CRC(c1a7ebe3) SHA1(1d7bb481451f5ee0457e954bb5210300182c3c9c) )
+ ROM_LOAD( "261-v4.v4", 0xc00000, 0x200000, CRC(9000d085) SHA1(11157b355ab4eb6627e9f322ed875332d3d77349) )
+
+ ROM_REGION( 0x2000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "261-c1.c1", 0x0000000, 0x800000, CRC(ded84d9c) SHA1(d960523b813d4fae06d716298d4e431a5c77a0c5) )
+ ROM_LOAD16_BYTE( "261-c2.c2", 0x0000001, 0x800000, CRC(b8eb4348) SHA1(619d24312549932959481fa58f43f11c048e1ca5) )
+ ROM_LOAD16_BYTE( "261-c3.c3", 0x1000000, 0x800000, CRC(84e2034a) SHA1(38ec4ae4b86933a25c9a03799b8cade4b1346401) )
+ ROM_LOAD16_BYTE( "261-c4.c4", 0x1000001, 0x800000, CRC(0b45ae53) SHA1(a19fb21408ab633aee8bbf38bf43b5e26766b355) )
+ROM_END
+
ROM_START( sengoku3ha ) /* Sengoku 3 - Hack by HappyAse - (Can choose Byakki and Okuni - can directly choose USA and Brazil stage) */
ROM_REGION( 0x200000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "261ha.p1", 0x000000, 0x200000, CRC(ff392440) SHA1(01184f9edc786d0b83a3afe83e53b9834d54a98d) )
@@ -252,13 +276,14 @@ ROM_END
GAME( 2007, sengokucd, sengoku, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK", "Sengoku (CD conversion)", MACHINE_SUPPORTS_SAVE )
-GAME( 2001, sengoku3b, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "Ydmis", "Sengoku 3 (Add Char)", MACHINE_SUPPORTS_SAVE ) // Byakki and Okuni
-GAME( 2001, sengoku3c, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "Unk", "Sengoku 3 (Add Char - Char color changed)", MACHINE_SUPPORTS_SAVE ) // Byakki and Okuni
+GAME( 2001, sengoku3b, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "Ydmis", "Sengoku 3 (Add Char)", MACHINE_SUPPORTS_SAVE )
+GAME( 2001, sengoku3c, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "Unk", "Sengoku 3 (Add Char - Char color changed)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, sengoku3d, sengoku3, neogeo_noslot, neogeo, neogeo_hbmame, cmc42sfix, ROT0, "SNK", "Sengoku 3 (decrypted C)", MACHINE_SUPPORTS_SAVE )
-GAME( 2001, sengoku3ha, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "HappyAsr","Sengoku 3 (Add Char - Select USA and Brazil)", MACHINE_SUPPORTS_SAVE ) // Byakki and Okuni
-GAME( 2001, sengoku3k, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "KrysoFun", "Sengoku 3 (Add Char - Pow hack set 3)", MACHINE_SUPPORTS_SAVE ) // Byakki and Okuni
+GAME( 2001, sengoku3eb, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "hack", "Sengoku 3 (hack eb)", MACHINE_SUPPORTS_SAVE )
+GAME( 2001, sengoku3ha, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "HappyAsr","Sengoku 3 (Add Char - Select USA and Brazil)", MACHINE_SUPPORTS_SAVE )
+GAME( 2001, sengoku3k, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "KrysoFun", "Sengoku 3 (Add Char - Pow hack set 3)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, sengoku3kc, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "Fighters Kim", "Sengoku 3 (Char color changed - 80%)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, sengoku3p, sengoku3, neogeo_noslot, neogeo, neogeo_hbmame, sengo3d, ROT0, "Krysofun", "Sengoku 3/Sengoku legends 2001 EX Super Version", MACHINE_SUPPORTS_SAVE )
-GAME( 2001, sengoku3pl, sengoku3, neogeo_noslot, neogeo, neogeo_hbmame, sengo3d, ROT0, "hack", "Sengoku 3 / Sengoku Densho 2001 Plus (Hack by Player-X)" , MACHINE_SUPPORTS_SAVE ) /* Encrypted GFX */
-GAME( 2001, sengoku3ya, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "KrysoFun and Ydmis","Sengoku 3 (Add Char - Pow hack set 2)", MACHINE_SUPPORTS_SAVE ) // Byakki and Okuni
-GAME( 2001, sengoku3yk, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "KrysoFun and Ydmis","Sengoku 3 (Add Char - Pow hack set 1)", MACHINE_SUPPORTS_SAVE ) // Byakki and Okuni
+GAME( 2001, sengoku3pl, sengoku3, neogeo_noslot, neogeo, neogeo_hbmame, sengo3d, ROT0, "hack", "Sengoku 3 / Sengoku Densho 2001 Plus (Hack by Player-X)" , MACHINE_SUPPORTS_SAVE )
+GAME( 2001, sengoku3ya, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "KrysoFun and Ydmis","Sengoku 3 (Add Char - Pow hack set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 2001, sengoku3yk, sengoku3, neogeo_noslot, neogeo, neogeo_noslot_state, sengoku3, ROT0, "KrysoFun and Ydmis","Sengoku 3 (Add Char - Pow hack set 1)", MACHINE_SUPPORTS_SAVE )
diff --git a/docs/release/src/hbmame/drivers/ngsvc.cpp b/docs/release/src/hbmame/drivers/ngsvc.cpp
index 1c79c56c21a..c50fa2670f7 100644
--- a/docs/release/src/hbmame/drivers/ngsvc.cpp
+++ b/docs/release/src/hbmame/drivers/ngsvc.cpp
@@ -196,6 +196,43 @@ ROM_START( svcpcbd ) // JAMMA
ROM_LOAD16_BYTE( "269pcbd.c2", 0x0000001, 0x2000000, CRC(88ad01ec) SHA1(da223bc09aa465ea6c15954c45fefbf3ee79a4d7) )
ROM_END
+ROM_START( svcplusa2016 )
+ ROM_REGION( 0x600000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "269pa2016.p1", 0x000000, 0x454f9c, CRC(65471e6c) SHA1(32e07ec3d415940b3e1204e9e2ef00da60b4a685) )
+ ROM_LOAD16_WORD_SWAP( "269pa2016.p2", 0x200000, 0x400000, CRC(f78b0e9e) SHA1(839091db9ecfc6720fa28790fca7c6c057ff42a7) )
+ ROM_IGNORE( 0x054f62 )
+
+ NEO_SFIX_MT_128K
+ ROM_LOAD( "svc-s1pl.bin", 0x10000, 0x10000, CRC(ca3c735e) SHA1(aebd15253c90432a2e0a4c40f37110c1e2176ee4) )
+ ROM_CONTINUE( 0x00000, 0x10000 )
+
+ NEOGEO_BIOS
+
+ ROM_REGION( 0x20000, "audiobios", 0 )
+ ROM_LOAD( "sm1.sm1", 0x00000, 0x20000, CRC(94416d67) SHA1(42f9d7ddd6c0931fd64226a60dc73602b2819dcf) )
+
+ ROM_REGION( 0x50000, "audiocpu", 0 )
+ ROM_LOAD( "svc-m1.bin", 0x20000, 0x10000, CRC(804328c3) SHA1(f931636c563b0789d4812033a77b47bf663db43f) )
+ ROM_CONTINUE( 0x00000, 0x10000 )
+ ROM_COPY( "audiocpu", 0x000000, 0x10000, 0x10000 )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD16_WORD_SWAP( "svc-v2.bin", 0x000000, 0x400000, CRC(b5097287) SHA1(3ba3a9b5624879616382ed40337a3d9c50a0f314) )
+ ROM_LOAD16_WORD_SWAP( "svc-v1.bin", 0x400000, 0x400000, CRC(bd3a391f) SHA1(972bf09b75e99a683ee965bec93b0da8f15d72d9) )
+ ROM_LOAD16_WORD_SWAP( "svc-v4.bin", 0x800000, 0x400000, CRC(33fc0b37) SHA1(d61017d829f44c7df8795ba10c55c727d9972662) )
+ ROM_LOAD16_WORD_SWAP( "svc-v3.bin", 0xc00000, 0x400000, CRC(aa9849a0) SHA1(9539b3356a070a066a89f27c287f316e7367ce2a) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "svc-c1.bin", 0x0000000, 0x800000, CRC(a7826b89) SHA1(3bbe348ce54b80b56ef032ea532a18ef3cafeb11) )
+ ROM_LOAD16_BYTE( "svc-c2.bin", 0x0000001, 0x800000, CRC(ed3c2089) SHA1(b5d17692f15f5a678c273589fab2e3918711135e) )
+ ROM_LOAD16_BYTE( "svc-c3.bin", 0x1000000, 0x800000, CRC(71ed8063) SHA1(ea1df9e2e382a8560a06d447421844cc588f43dd) )
+ ROM_LOAD16_BYTE( "svc-c4.bin", 0x1000001, 0x800000, CRC(250bde2d) SHA1(8c72dcfceef6d022ab4b73ab37cf3ac0c3940c17) )
+ ROM_LOAD16_BYTE( "svc-c5.bin", 0x2000000, 0x800000, CRC(9817c082) SHA1(1bea9c7220c2b1524896c86841d6d8fd55f5d366) )
+ ROM_LOAD16_BYTE( "svc-c6.bin", 0x2000001, 0x800000, CRC(2bc0307f) SHA1(8090fa82c46eb503832359093c8cc3cee3141c90) )
+ ROM_LOAD16_BYTE( "svc-c7.bin", 0x3000000, 0x800000, CRC(4358d7b9) SHA1(9270b58c2abc072a046bedda72f1395df26d0714) )
+ ROM_LOAD16_BYTE( "svc-c8.bin", 0x3000001, 0x800000, CRC(366deee5) SHA1(d477ad7a5987fd6c7ef2c1680fbb7c884654590e) )
+ROM_END
+
ROM_START( svcplusb )
ROM_REGION( 0x600000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "269plusb.p1", 0x000000, 0x600000, CRC(5D738F9A) SHA1(10AD161D6DE285659DCAEBBEA4AA2B384341E14D) )
@@ -321,6 +358,41 @@ ROM_START( svcrm )
ROM_LOAD16_BYTE( "269d.c8", 0x3000001, 0x800000, CRC(de99e613) SHA1(F28C6AF4A31A937E5B441D4B860E3CCCA725F27A) )
ROM_END
+ROM_START( svcsplus2016 )
+ ROM_REGION( 0x800000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "svc-p1sp.bin", 0x000000, 0x400000, CRC(2601902f) SHA1(202348a13c6480f7de37a3ee983823838822fc98) )
+ ROM_LOAD16_WORD_SWAP( "269sp2016.p2", 0x400000, 0x400000, CRC(c30b4d6c) SHA1(5bd2cc39e988e2c8c92e0df3f75b8343cec5b09c) )
+ ROM_IGNORE( 0x054f4c )
+
+ NEO_SFIX_128K( "svc-s1sp.bin", CRC(233d6439) SHA1(369024c7a2405c3144c14ac016c07c3dc0f44187) )
+
+ NEOGEO_BIOS
+
+ ROM_REGION( 0x20000, "audiobios", 0 )
+ ROM_LOAD( "sm1.sm1", 0x00000, 0x20000, CRC(94416d67) SHA1(42f9d7ddd6c0931fd64226a60dc73602b2819dcf) )
+
+ ROM_REGION( 0x50000, "audiocpu", 0 )
+ ROM_LOAD( "svc-m1.bin", 0x20000, 0x10000, CRC(804328c3) SHA1(f931636c563b0789d4812033a77b47bf663db43f) )
+ ROM_CONTINUE( 0x00000, 0x10000 )
+ ROM_COPY( "audiocpu", 0x000000, 0x10000, 0x10000 )
+
+ ROM_REGION( 0x1000000, "ymsnd", 0 )
+ ROM_LOAD16_WORD_SWAP( "svc-v2.bin", 0x000000, 0x400000, CRC(b5097287) SHA1(3ba3a9b5624879616382ed40337a3d9c50a0f314) )
+ ROM_LOAD16_WORD_SWAP( "svc-v1.bin", 0x400000, 0x400000, CRC(bd3a391f) SHA1(972bf09b75e99a683ee965bec93b0da8f15d72d9) )
+ ROM_LOAD16_WORD_SWAP( "svc-v4.bin", 0x800000, 0x400000, CRC(33fc0b37) SHA1(d61017d829f44c7df8795ba10c55c727d9972662) )
+ ROM_LOAD16_WORD_SWAP( "svc-v3.bin", 0xc00000, 0x400000, CRC(aa9849a0) SHA1(9539b3356a070a066a89f27c287f316e7367ce2a) )
+
+ ROM_REGION( 0x4000000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "svc-c1.bin", 0x0000000, 0x800000, CRC(a7826b89) SHA1(3bbe348ce54b80b56ef032ea532a18ef3cafeb11) )
+ ROM_LOAD16_BYTE( "svc-c2.bin", 0x0000001, 0x800000, CRC(ed3c2089) SHA1(b5d17692f15f5a678c273589fab2e3918711135e) )
+ ROM_LOAD16_BYTE( "svc-c3.bin", 0x1000000, 0x800000, CRC(71ed8063) SHA1(ea1df9e2e382a8560a06d447421844cc588f43dd) )
+ ROM_LOAD16_BYTE( "svc-c4.bin", 0x1000001, 0x800000, CRC(250bde2d) SHA1(8c72dcfceef6d022ab4b73ab37cf3ac0c3940c17) )
+ ROM_LOAD16_BYTE( "svc-c5.bin", 0x2000000, 0x800000, CRC(9817c082) SHA1(1bea9c7220c2b1524896c86841d6d8fd55f5d366) )
+ ROM_LOAD16_BYTE( "svc-c6.bin", 0x2000001, 0x800000, CRC(2bc0307f) SHA1(8090fa82c46eb503832359093c8cc3cee3141c90) )
+ ROM_LOAD16_BYTE( "svc-c7.bin", 0x3000000, 0x800000, CRC(4358d7b9) SHA1(9270b58c2abc072a046bedda72f1395df26d0714) )
+ ROM_LOAD16_BYTE( "svc-c8.bin", 0x3000001, 0x800000, CRC(366deee5) SHA1(d477ad7a5987fd6c7ef2c1680fbb7c884654590e) )
+ROM_END
+
ROM_START( svcspryu )
ROM_REGION( 0x600000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "269spryu.p1", 0x000000, 0x600000, CRC(4f15b6b3) SHA1(651e5340b5442ff6cd9b6a325ea6ad8abc116cfb) )
@@ -348,15 +420,17 @@ ROM_END
-GAME( 2003, svcd, svc, neogeo_noslot, neogeo, neogeo_hbmame, svcd, ROT0, "hack", "SvC Chaos (decrypted C set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, svcd1, svc, neogeo_noslot, neogeo, neogeo_hbmame, svcd1, ROT0, "hack", "SvC Chaos (decrypted C set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, svch, svc, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "chbandy", "SvC Chaos (Remix Ver 1.0 by chbandy)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, svcesv, svc, neogeo_noslot, neogeo, neogeo_noslot_state, svc, ROT0, "hack", "SvC Chaos (unknown esv)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, svcnd, svc, neogeo_noslot, neogeo, neogeo_hbmame, svcplusd, ROT0, "hack", "SvC Chaos (unknown nd)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, svcpcbd, svcpcb, neogeo_noslot, dualbios, neogeo_hbmame, svcpcd, ROT0, "hack", "SVC Chaos (JAMMA PCB, decrypted C & V)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, svcplusb, svc, neogeo_noslot, neogeo, neogeo_hbmame, svcplusb, ROT0, "hack", "SvC Chaos PLUS (Bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, svcplusd, svc, neogeo_noslot, neogeo, neogeo_hbmame, svcplusd, ROT0, "hack", "SvC Chaos PLUS (unknown plusd)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, svcpryu, svc, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "SvC Plus (Koryu)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, svcps2, svc, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "EGHT", "SvC Playstation2 Hack Final 1.02 (EGHT)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, svcrm, svc, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Jason", "SVC REMIX ULTRA (Ver 1.2 by Jason)", MACHINE_SUPPORTS_SAVE )
-GAME( 2003, svcspryu, svc, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "SvC Plus (Super Koryu)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svcd, svc, neogeo_noslot, neogeo, neogeo_hbmame, svcd, ROT0, "hack", "SvC Chaos (decrypted C set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svcd1, svc, neogeo_noslot, neogeo, neogeo_hbmame, svcd1, ROT0, "hack", "SvC Chaos (decrypted C set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svch, svc, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "chbandy", "SvC Chaos (Remix Ver 1.0 by chbandy)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svcesv, svc, neogeo_noslot, neogeo, neogeo_noslot_state, svc, ROT0, "hack", "SvC Chaos (unknown esv)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svcnd, svc, neogeo_noslot, neogeo, neogeo_hbmame, svcplusd, ROT0, "hack", "SvC Chaos (unknown nd)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svcpcbd, svcpcb, neogeo_noslot, dualbios, neogeo_hbmame, svcpcd, ROT0, "hack", "SvC Chaos (JAMMA PCB, decrypted C & V)", MACHINE_SUPPORTS_SAVE )
+GAME( 2016, svcplusa2016, svc, neogeo_noslot, neogeo, neogeo_noslot_state, svcplusa, ROT0, "hack", "SvC Chaos PLUS (2016)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svcplusb, svc, neogeo_noslot, neogeo, neogeo_hbmame, svcplusb, ROT0, "hack", "SvC Chaos PLUS (Bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svcplusd, svc, neogeo_noslot, neogeo, neogeo_hbmame, svcplusd, ROT0, "hack", "SvC Chaos PLUS (unknown plusd)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svcpryu, svc, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "SvC Plus (Koryu)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svcps2, svc, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "EGHT", "SvC Playstation2 Hack Final 1.02 (EGHT)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svcrm, svc, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "Jason", "SvC REMIX ULTRA (Ver 1.2 by Jason)", MACHINE_SUPPORTS_SAVE )
+GAME( 2016, svcsplus2016, svc, neogeo_noslot, neogeo, neogeo_noslot_state, svcsplus, ROT0, "hack", "SvC Chaos Super Plus (2016)", MACHINE_SUPPORTS_SAVE )
+GAME( 2003, svcspryu, svc, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "hack", "SvC Plus (Super Koryu)", MACHINE_SUPPORTS_SAVE )
diff --git a/docs/release/src/hbmame/drivers/spacmiss.cpp b/docs/release/src/hbmame/drivers/spacmiss.cpp
index a95055737fe..0887fff58a9 100644
--- a/docs/release/src/hbmame/drivers/spacmiss.cpp
+++ b/docs/release/src/hbmame/drivers/spacmiss.cpp
@@ -382,7 +382,7 @@ static ADDRESS_MAP_START( spacmiss_io_map, AS_IO, 8, sm_state )
AM_RANGE(0x03, 0x03) AM_DEVREAD("mb14241", mb14241_device, shift_result_r) AM_WRITE(spacmiss_03_w)
AM_RANGE(0x04, 0x04) AM_DEVWRITE("mb14241", mb14241_device, shift_data_w)
AM_RANGE(0x05, 0x05) AM_WRITE(spacmiss_05_w)
- //AM_RANGE(0x06, 0x06) AM_WRITE(watchdog_reset_w)
+ AM_RANGE(0x06, 0x06) AM_WRITENOP //(watchdog_reset_w)
AM_RANGE(0x07, 0x07) AM_WRITE(spacmiss_07_w)
ADDRESS_MAP_END
diff --git a/docs/release/src/hbmame/hbmame.lst b/docs/release/src/hbmame/hbmame.lst
index ac8dafff6f5..a7dbcaf6060 100644
--- a/docs/release/src/hbmame/hbmame.lst
+++ b/docs/release/src/hbmame/hbmame.lst
@@ -518,6 +518,7 @@ kof96oib //IsmaMj
kof96oib2 //IsmaMj
kof96oih
kof96oir
+kof96pch
kof96pjc
kof96pm
kof96rcw
@@ -542,22 +543,28 @@ kof96seh
kof97aa
kof97ae
kof97ae1
+kof97aot
kof97bh
kof97bng
kof97bs
kof97cb2
kof97chris
kof97cn
-kof97co
-kof97co6
+kof97co // combo 2010-02-07
+kof97co6 // combo 2006
kof97cr
kof97chl
kof97chl2
+kof97cy
+kof97dse
kof97eh
kof97eh2
kof97eho
+kof97ei // combo 2010-02-07 different colours
kof97evo
kof97evoa
+kof97frb
+kof97irgc
kof97hk
kof97hl
kof97hxd
@@ -586,7 +593,11 @@ kof97plus
kof97pm
kof97ps
kof97rev
+kof97ribe
kof97rk
+kof97rst
+kof97rst2
+kof97rst3
kof97rv
kof97saw
kof97sed
@@ -594,7 +605,9 @@ kof97sex
kof97shi
kof97sm
kof97svs
+kof97svsb2
kof97sw
+kof97tse
kof97wh
kof97wpls
kof97xbt
@@ -612,6 +625,8 @@ kof97yh
kof97yk
kof97yk1
kof97yk2
+kof97yk83
+kof97yk85
kof97yl
kof97yl2
kof97yo
@@ -638,6 +653,7 @@ kof98c20090620 // sometimes reboots itself
kof98c20090923
kof98c20100214
kof98c20110114
+kof98c20110314
kof98c20120116
kof98c20120915
kof98c20130213
@@ -689,6 +705,7 @@ kof98c20151103
kof98c20151108
kof98c20151110
kof98c20151223
+kof98c20160320
kof98cd
kof98cd1
kof98ch
@@ -705,6 +722,7 @@ kof98ehr
kof98evl
kof98evo
kof98evo2
+kof98evr
kof98f
kof98fr
kof98fro
@@ -721,7 +739,8 @@ kof98klc
kof98lb
kof98lv
kof98m
-kof98mix /* KOF98 mix 2011-10-01 */
+kof98mev
+kof98mix
kof98nc
kof98new
kof98pjc
@@ -789,6 +808,7 @@ kof99lb
kof99m
kof99nd
kof99ndh
+kof99ndis
kof99ob
kof99ob2
kof99pb
@@ -979,9 +999,12 @@ kof2002x
kof2k2ath
kof2k2b // no sound in attract mode
kof2k2b1
+kof2k2bd //not working
kof2k2bh
kof2k2bjh
kof2k2bjo
+kof2k2bl3
+kof2k2bl4
kof2k2bld
kof2k2blood2
kof2k2br
@@ -1056,6 +1079,7 @@ kof2k2mpu
kof2k2ngp
kof2k2nu
kof2k2olp
+kof2k2omg
kof2k2omg8
kof2k2omg9
kof2k2omg9b
@@ -1098,6 +1122,7 @@ kof2k2sb
kof2k2seh
kof2k2se2
kof2k2sm // bad gfx on train scene
+kof2k2smf
kof2k2smg
kof2k2smg2
kof2k2soi
@@ -1110,7 +1135,6 @@ kof2k2ul
kof2k2ule
kof2k2wuk // no sound in attract mode
kof2k2xxx
-kof2k2bd //not working
//kf2k2plc
/* kof2003 */
@@ -1285,14 +1309,21 @@ mslug2fr
mslug2fro
mslug2sh
mslug2t // 2015 trap15 - remove slowdowns that plague gameplay
+mslugxce
mslugxeb
mslugxeh
mslugxeh1
mslugxex
+mslugxfe
mslugxfr
mslugxfro
-mslugxit
mslugxhp
+mslugxit
+mslugxjdkj
+mslugxmfb
+mslugxres
+mslugxsef
+mslugxsvb
mslugxp
mslugxr
mslugxst
@@ -1342,6 +1373,7 @@ mslug4fr
mslug4i
mslug4i1
mslug4kh
+//mslug4lw // not working - p roms are encrypted
mslug4nd
mslug4sp
mslug5b
@@ -1350,6 +1382,7 @@ mslug5d1
mslug5f
mslug5fr
mslug5fr1
+//mslug5fu // not working - p roms are encrypted
mslug5hd
mslug5l9a
mslug5l9b
@@ -1880,6 +1913,7 @@ garoupy
garoupf
garoupfu
garoupfp
+garoupx11
garoupy1
/* ngkofmisc */
@@ -1889,6 +1923,7 @@ ct2k3eh
ct2k3ifz
ct2k3k3
ct2k3k3o
+ct2k3spi
ct2k3xx
ct2k3ys
//ct2k3ad
@@ -1904,11 +1939,14 @@ kof2k4seb
kof2k4spl
kof2k8uni
//kof10thd
+//kof10thd16 // not working, p1 needs unscrambling
+kof10thep15
kof10thu
kof10thub
kof10thud
kogd
kogf
+kogmxpls
kogplus
kogplusf
@@ -1976,6 +2014,7 @@ rotdbr2d
rotdcre
rotdcreb
rotdd
+rotddh
rotdeh
rotdehc
rotdfw
@@ -2038,6 +2077,7 @@ sengokucd
sengoku3b
sengoku3c
sengoku3d
+sengoku3eb
sengoku3ha
sengoku3k
sengoku3kc
@@ -2053,11 +2093,13 @@ svcesv
svch
svcnd
svcpcbd
+svcplusa2016
svcplusb
svcplusd
svcpryu
svcps2
svcrm
+svcsplus2016
svcspryu
/* ngwh */
diff --git a/docs/release/src/hbmame/machine/ng_memcard.cpp b/docs/release/src/hbmame/machine/ng_memcard.cpp
index f4c816c6f1c..17b2c3178f5 100644
--- a/docs/release/src/hbmame/machine/ng_memcard.cpp
+++ b/docs/release/src/hbmame/machine/ng_memcard.cpp
@@ -72,7 +72,7 @@ void ng_memcard_device::call_unload()
fwrite(m_memcard_data, 0x800);
}
-bool ng_memcard_device::call_create(int format_type, option_resolution *format_options)
+bool ng_memcard_device::call_create(int format_type, util::option_resolution *format_options)
{
memset(m_memcard_data, 0, 0x800);
diff --git a/docs/release/src/hbmame/machine/ng_memcard.h b/docs/release/src/hbmame/machine/ng_memcard.h
index 4752c1d1a67..27eb36a7e21 100644
--- a/docs/release/src/hbmame/machine/ng_memcard.h
+++ b/docs/release/src/hbmame/machine/ng_memcard.h
@@ -26,8 +26,7 @@
// ======================> ng_memcard_device
-class ng_memcard_device : public device_t,
- public device_image_interface
+class ng_memcard_device : public device_t, public device_image_interface
{
public:
// construction/destruction
@@ -45,7 +44,7 @@ public:
virtual bool call_load() override;
virtual void call_unload() override;
- virtual bool call_create(int format_type, option_resolution *format_options) override;
+ virtual bool call_create(int format_type, util::option_resolution *format_options) override;
// device-level overrides
virtual void device_start() override;
diff --git a/docs/release/src/osd/winui/datafile.cpp b/docs/release/src/osd/winui/datafile.cpp
index 5d80b2d6540..546ac5a5d30 100644
--- a/docs/release/src/osd/winui/datafile.cpp
+++ b/docs/release/src/osd/winui/datafile.cpp
@@ -1,5 +1,6 @@
// For licensing and usage information, read docs/winui_license.txt
//****************************************************************************
+// MASTER
/****************************************************************************
* datafile.c
* History database engine
@@ -683,7 +684,7 @@ int load_driver_mameinfo(const game_driver *drv, char *buffer, int bufsize, int
{
for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
{
- hash_collection hashes(ROM_GETHASHDATA(rom));
+ util::hash_collection hashes(ROM_GETHASHDATA(rom));
if (g != -1)
{
@@ -694,7 +695,7 @@ int load_driver_mameinfo(const game_driver *drv, char *buffer, int bufsize, int
for (const rom_entry *pregion = rom_first_region(device); pregion; pregion = rom_next_region(pregion))
for (const rom_entry *prom = rom_first_file(pregion); prom; prom = rom_next_file(prom))
{
- hash_collection phashes(ROM_GETHASHDATA(prom));
+ util::hash_collection phashes(ROM_GETHASHDATA(prom));
if (hashes == phashes)
break;
diff --git a/docs/release/src/osd/winui/directories.cpp b/docs/release/src/osd/winui/directories.cpp
index d475325ae48..d5eb51e366d 100644
--- a/docs/release/src/osd/winui/directories.cpp
+++ b/docs/release/src/osd/winui/directories.cpp
@@ -276,7 +276,7 @@ static BOOL Directories_OnInitDialog(HWND hDlg, HWND hwndFocus, LPARAM lParam)
for (i = nDirInfoCount - 1; i >= 0; i--)
{
- t_s = tstring_from_utf8(g_directoryInfo[i].lpName);
+ t_s = ui_wstring_from_utf8(g_directoryInfo[i].lpName);
if( !t_s )
return FALSE;
(void)ComboBox_InsertString(GetDlgItem(hDlg, IDC_DIR_COMBO), 0, win_tstring_strdup(t_s));
@@ -299,7 +299,7 @@ static BOOL Directories_OnInitDialog(HWND hDlg, HWND hwndFocus, LPARAM lParam)
for (i = 0; i < nDirInfoCount; i++)
{
s = g_directoryInfo[i].pfnGetTheseDirs();
- t_s = tstring_from_utf8(s);
+ t_s = ui_wstring_from_utf8(s);
if( !t_s )
return FALSE;
if (IsMultiDir(i))
@@ -387,7 +387,7 @@ static int RetrieveDirList(int nDir, int nFlagResult, void (*SetTheseDirs)(const
if (i < nPaths - 1)
_tcscat(buf, TEXT(";"));
}
- utf8_buf = utf8_from_tstring(buf);
+ utf8_buf = ui_utf8_from_wstring(buf);
SetTheseDirs(utf8_buf);
osd_free(utf8_buf);
@@ -412,7 +412,7 @@ static void Directories_OnOk(HWND hDlg)
else
{
s = FixSlash(DirInfo_Dir(g_pDirInfo, i));
- utf8_s = utf8_from_tstring(s);
+ utf8_s = ui_utf8_from_wstring(s);
g_directoryInfo[i].pfnSetTheseDirs(utf8_s);
osd_free(utf8_s);
}
diff --git a/docs/release/src/osd/winui/dirwatch.cpp b/docs/release/src/osd/winui/dirwatch.cpp
index 79330fe25bb..82be60dd002 100644
--- a/docs/release/src/osd/winui/dirwatch.cpp
+++ b/docs/release/src/osd/winui/dirwatch.cpp
@@ -174,7 +174,7 @@ static void DirWatcher_Signal(PDIRWATCHER pWatcher, struct DirWatcherEntry *pEnt
// send the message (assuming that we have a target)
if (pWatcher->hwndTarget)
{
- t_filename = tstring_from_utf8(pszFileName);
+ t_filename = ui_wstring_from_utf8(pszFileName);
if( !t_filename )
return;
SendMessage(pWatcher->hwndTarget,
diff --git a/docs/release/src/osd/winui/mui_audit.cpp b/docs/release/src/osd/winui/mui_audit.cpp
index 3f58b8526a7..e67e246e039 100644
--- a/docs/release/src/osd/winui/mui_audit.cpp
+++ b/docs/release/src/osd/winui/mui_audit.cpp
@@ -1,4 +1,5 @@
// For licensing and usage information, read docs/winui_license.txt
+// MASTER
//****************************************************************************
/***************************************************************************
@@ -165,9 +166,15 @@ int MameUIVerifyRomSet(int game, bool choice)
}
else
if (choice)
+ {
auditor.winui_summarize(driver_list::driver(game).name, &summary_string); // audit all games
+ }
else
- auditor.summarize(driver_list::driver(game).name, &summary_string); // audit one game
+ {
+ std::ostringstream whatever;
+ auditor.summarize(driver_list::driver(game).name, &whatever); // audit one game
+ summary_string = whatever.str();
+ }
// output the summary of the audit
DetailsPrintf("%s", summary_string.c_str());
@@ -189,7 +196,11 @@ int MameUIVerifySampleSet(int game)
if (summary == media_auditor::NOTFOUND)
strcatprintf(summary_string, "%s: Sampleset NOT FOUND\n", driver_list::driver(game).name);
else
- auditor.summarize(driver_list::driver(game).name, &summary_string);
+ {
+ std::ostringstream whatever;
+ auditor.summarize(driver_list::driver(game).name, &whatever);
+ summary_string = whatever.str();
+ }
// output the summary of the audit
DetailsPrintf("%s", summary_string.c_str());
@@ -443,7 +454,7 @@ static void CLIB_DECL DetailsPrintf(const char *fmt, ...)
va_end(marker);
- t_s = tstring_from_utf8(ConvertToWindowsNewlines(buffer));
+ t_s = ui_wstring_from_utf8(ConvertToWindowsNewlines(buffer));
if( !t_s || _tcscmp(TEXT(""), t_s) == 0)
return;
diff --git a/docs/release/src/osd/winui/mui_opts.cpp b/docs/release/src/osd/winui/mui_opts.cpp
index f6e7bee24ce..067b998ee5c 100644
--- a/docs/release/src/osd/winui/mui_opts.cpp
+++ b/docs/release/src/osd/winui/mui_opts.cpp
@@ -2064,7 +2064,7 @@ static void FontDecodeString(const char* str, LOGFONT *f)
ptr = strrchr(str, ',');
if (ptr)
{
- t_ptr = tstring_from_utf8(ptr + 1);
+ t_ptr = ui_wstring_from_utf8(ptr + 1);
if( !t_ptr )
return;
_tcscpy(f->lfFaceName, t_ptr);
@@ -2075,7 +2075,7 @@ static void FontDecodeString(const char* str, LOGFONT *f)
/* Encode the given LOGFONT structure into a comma-delimited string */
static void FontEncodeString(const LOGFONT *f, char *str)
{
- char* utf8_FaceName = utf8_from_tstring(f->lfFaceName);
+ char* utf8_FaceName = ui_utf8_from_wstring(f->lfFaceName);
if( !utf8_FaceName )
return;
diff --git a/docs/release/src/osd/winui/mui_util.cpp b/docs/release/src/osd/winui/mui_util.cpp
index 9f140c75afd..b1aa2ce8da5 100644
--- a/docs/release/src/osd/winui/mui_util.cpp
+++ b/docs/release/src/osd/winui/mui_util.cpp
@@ -209,7 +209,7 @@ void DisplayTextFile(HWND hWnd, const char *cName)
LPCTSTR msg = 0;
LPTSTR tName;
- tName = tstring_from_utf8(cName);
+ tName = ui_wstring_from_utf8(cName);
if( !tName )
return;
@@ -650,7 +650,7 @@ void GetSystemErrorMessage(DWORD dwErrorId, TCHAR **tErrorMessage)
HICON win_extract_icon_utf8(HINSTANCE inst, const char* exefilename, UINT iconindex)
{
HICON icon = 0;
- TCHAR* t_exefilename = tstring_from_utf8(exefilename);
+ TCHAR* t_exefilename = ui_wstring_from_utf8(exefilename);
if( !t_exefilename )
return icon;
@@ -688,12 +688,11 @@ HANDLE win_create_file_utf8(const char* filename, DWORD desiredmode, DWORD share
DWORD flagsandattributes, HANDLE templatehandle)
{
HANDLE result = 0;
- TCHAR* t_filename = tstring_from_utf8(filename);
+ TCHAR* t_filename = ui_wstring_from_utf8(filename);
if( !t_filename )
return result;
- result = CreateFile(t_filename, desiredmode, sharemode, securityattributes, creationdisposition,
- flagsandattributes, templatehandle);
+ result = CreateFile(t_filename, desiredmode, sharemode, securityattributes, creationdisposition, flagsandattributes, templatehandle);
osd_free(t_filename);
@@ -719,7 +718,7 @@ DWORD win_get_current_directory_utf8(DWORD bufferlength, char* buffer)
result = GetCurrentDirectory(bufferlength, t_buffer);
if( bufferlength > 0 ) {
- utf8_buffer = utf8_from_tstring(t_buffer);
+ utf8_buffer = ui_utf8_from_wstring(t_buffer);
if( !utf8_buffer ) {
osd_free(t_buffer);
return result;
@@ -744,7 +743,7 @@ DWORD win_get_current_directory_utf8(DWORD bufferlength, char* buffer)
HANDLE win_find_first_file_utf8(const char* filename, LPWIN32_FIND_DATA findfiledata)
{
HANDLE result = 0;
- TCHAR* t_filename = tstring_from_utf8(filename);
+ TCHAR* t_filename = ui_wstring_from_utf8(filename);
if( !t_filename )
return result;
diff --git a/docs/release/src/osd/winui/mui_util.h b/docs/release/src/osd/winui/mui_util.h
index b1267e59fc0..1b82c6f1f05 100644
--- a/docs/release/src/osd/winui/mui_util.h
+++ b/docs/release/src/osd/winui/mui_util.h
@@ -66,5 +66,36 @@ HANDLE win_create_file_utf8(const char* filename, DWORD desiredmode, DWORD share
DWORD win_get_current_directory_utf8(DWORD bufferlength, char* buffer);
HANDLE win_find_first_file_utf8(const char* filename, LPWIN32_FIND_DATA findfiledata);
+ // wstring_from_utf8
+ //============================================================
+
+WCHAR *ui_wstring_from_utf8(const char *utf8string)
+{
+ int char_count;
+ WCHAR *result;
+
+ // convert MAME string (UTF-8) to UTF-16
+ char_count = MultiByteToWideChar(CP_UTF8, 0, utf8string, -1, nullptr, 0);
+ result = (WCHAR *)osd_malloc_array(char_count * sizeof(*result));
+ if (result != nullptr)
+ MultiByteToWideChar(CP_UTF8, 0, utf8string, -1, result, char_count);
+
+ return result;
+}
+
+char *ui_utf8_from_wstring(const WCHAR *wstring)
+{
+ int char_count;
+ char *result;
+
+ // convert UTF-16 to MAME string (UTF-8)
+ char_count = WideCharToMultiByte(CP_UTF8, 0, wstring, -1, nullptr, 0, nullptr, nullptr);
+ result = (char *)osd_malloc_array(char_count * sizeof(*result));
+ if (result != nullptr)
+ WideCharToMultiByte(CP_UTF8, 0, wstring, -1, result, char_count, nullptr, nullptr);
+ return result;
+}
+
+
#endif /* MUI_UTIL_H */
diff --git a/docs/release/src/osd/winui/newui.cpp b/docs/release/src/osd/winui/newui.cpp
index 73dda176311..77695a55603 100644
--- a/docs/release/src/osd/winui/newui.cpp
+++ b/docs/release/src/osd/winui/newui.cpp
@@ -1,27 +1,27 @@
// For licensing and usage information, read docs/winui_license.txt
-//****************************************************************************
+//************************************************************************************************
// MASTER
-//============================================================
//
// newui.c - This is the NEWUI Windows dropdown menu system
//
-//============================================================
+// known bugs:
+// - Unable to modify keyboard or joystick. Last known to be working in 0.158 .
+// Need to use the default UI.
+//
+//
+//************************************************************************************************
-// Needed for better file dialog
-//#ifdef _WIN32_WINNT
-//#undef _WIN32_WINNT
-//#endif // _WIN32_WINNT
-//#define _WIN32_WINNT 0x500
+// Set minimum windows version to XP
+#ifdef _WIN32_WINNT
+#undef _WIN32_WINNT
+#endif
+#define _WIN32_WINNT 0x501
// standard windows headers
-#define WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN // leave out not-needed libraries
#include "newui.h"
-// stupid hack; not sure why this is needed
-//#ifdef const
-//#undef const
-//#endif // const
#include <shellapi.h>
@@ -35,17 +35,17 @@ typedef enum _win_file_dialog_type win_file_dialog_type;
typedef struct _win_open_file_name win_open_file_name;
struct _win_open_file_name
{
- win_file_dialog_type type; // type of file dialog
- HWND owner; // owner of the dialog
- HINSTANCE instance; // instance
- const char * filter; // pipe char ("|") delimited strings
- DWORD filter_index; // index into filter
- char filename[MAX_PATH]; // filename buffer
- const char * initial_directory; // initial directory for dialog
- DWORD flags; // standard flags
- LPARAM custom_data; // custom data for dialog hook
- LPOFNHOOKPROC hook; // custom dialog hook
- LPCTSTR template_name; // custom dialog template
+ win_file_dialog_type type; // type of file dialog
+ HWND owner; // owner of the dialog
+ HINSTANCE instance; // instance
+ const char * filter; // pipe char ("|") delimited strings
+ DWORD filter_index; // index into filter
+ char filename[MAX_PATH]; // filename buffer
+ const char * initial_directory; // initial directory for dialog
+ DWORD flags; // standard flags
+ LPARAM custom_data; // custom data for dialog hook
+ LPOFNHOOKPROC hook; // custom dialog hook
+ LPCTSTR template_name; // custom dialog template
};
@@ -67,12 +67,8 @@ typedef void (*dialog_notification)(dialog_box *dialog, HWND dlgwnd, NMHDR *noti
#define win_dialog_tcsdup win_dialog_strdup
#endif
-static const TCHAR guide_prop[] = TEXT("opcntrl_guide");
-static const TCHAR spec_prop[] = TEXT("opcntrl_optspec");
-static const TCHAR value_prop[] = TEXT("opcntrl_value");
-
-#define SEQWM_SETFOCUS (WM_APP + 0)
-#define SEQWM_KILLFOCUS (WM_APP + 1)
+#define SEQWM_SETFOCUS (WM_APP + 0)
+#define SEQWM_KILLFOCUS (WM_APP + 1)
enum
{
@@ -152,39 +148,39 @@ struct _seqselect_info
// PARAMETERS
//============================================================
-#define DIM_VERTICAL_SPACING 3
-#define DIM_HORIZONTAL_SPACING 5
-#define DIM_NORMAL_ROW_HEIGHT 10
-#define DIM_COMBO_ROW_HEIGHT 12
-#define DIM_SLIDER_ROW_HEIGHT 18
-#define DIM_BUTTON_ROW_HEIGHT 12
-#define DIM_EDIT_WIDTH 120
-#define DIM_BUTTON_WIDTH 50
-#define DIM_ADJUSTER_SCR_WIDTH 12
-#define DIM_ADJUSTER_HEIGHT 12
-#define DIM_SCROLLBAR_WIDTH 10
-#define DIM_BOX_VERTSKEW -3
+#define DIM_VERTICAL_SPACING 3
+#define DIM_HORIZONTAL_SPACING 5
+#define DIM_NORMAL_ROW_HEIGHT 10
+#define DIM_COMBO_ROW_HEIGHT 12
+#define DIM_SLIDER_ROW_HEIGHT 18
+#define DIM_BUTTON_ROW_HEIGHT 12
+#define DIM_EDIT_WIDTH 120
+#define DIM_BUTTON_WIDTH 50
+#define DIM_ADJUSTER_SCR_WIDTH 12
+#define DIM_ADJUSTER_HEIGHT 12
+#define DIM_SCROLLBAR_WIDTH 10
+#define DIM_BOX_VERTSKEW -3
-#define DLGITEM_BUTTON ((const WCHAR *) dlgitem_button)
-#define DLGITEM_EDIT ((const WCHAR *) dlgitem_edit)
-#define DLGITEM_STATIC ((const WCHAR *) dlgitem_static)
-#define DLGITEM_LISTBOX ((const WCHAR *) dlgitem_listbox)
-#define DLGITEM_SCROLLBAR ((const WCHAR *) dlgitem_scrollbar)
-#define DLGITEM_COMBOBOX ((const WCHAR *) dlgitem_combobox)
+#define DLGITEM_BUTTON ((const WCHAR *) dlgitem_button)
+#define DLGITEM_EDIT ((const WCHAR *) dlgitem_edit)
+#define DLGITEM_STATIC ((const WCHAR *) dlgitem_static)
+#define DLGITEM_LISTBOX ((const WCHAR *) dlgitem_listbox)
+#define DLGITEM_SCROLLBAR ((const WCHAR *) dlgitem_scrollbar)
+#define DLGITEM_COMBOBOX ((const WCHAR *) dlgitem_combobox)
-#define DLGTEXT_OK "OK"
-#define DLGTEXT_APPLY "Apply"
-#define DLGTEXT_CANCEL "Cancel"
+#define DLGTEXT_OK "OK"
+#define DLGTEXT_APPLY "Apply"
+#define DLGTEXT_CANCEL "Cancel"
-#define FONT_SIZE 8
-#define FONT_FACE L"Arial"
+#define FONT_SIZE 8
+#define FONT_FACE L"Arial"
-#define SCROLL_DELTA_LINE 10
-#define SCROLL_DELTA_PAGE 100
+#define SCROLL_DELTA_LINE 10
+#define SCROLL_DELTA_PAGE 100
-#define LOG_WINMSGS 0
-#define DIALOG_STYLE WS_POPUP | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | WS_CAPTION | DS_SETFONT
-#define MAX_DIALOG_HEIGHT 200
+#define LOG_WINMSGS 0
+#define DIALOG_STYLE WS_POPUP | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | WS_CAPTION | DS_SETFONT
+#define MAX_DIALOG_HEIGHT 200
@@ -204,6 +200,10 @@ static const WORD dlgitem_static[] = { 0xFFFF, 0x0082 };
static const WORD dlgitem_listbox[] = { 0xFFFF, 0x0083 };
static const WORD dlgitem_scrollbar[] = { 0xFFFF, 0x0084 };
static const WORD dlgitem_combobox[] = { 0xFFFF, 0x0085 };
+static int joystick_menu_setup = 0;
+static char state_filename[MAX_PATH];
+static void add_filter_entry(std::string &dest, const char *description, const char *extensions);
+static const char* software_dir;
//============================================================
@@ -211,8 +211,7 @@ static const WORD dlgitem_combobox[] = { 0xFFFF, 0x0085 };
//============================================================
static void dialog_prime(dialog_box *di);
-static int dialog_write_item(dialog_box *di, DWORD style, short x, short y,
- short width, short height, const char *str, const WCHAR *class_name, WORD *id);
+static int dialog_write_item(dialog_box *di, DWORD style, short x, short y, short width, short height, const char *str, const WCHAR *class_name, WORD *id);
@@ -223,7 +222,6 @@ static int dialog_write_item(dialog_box *di, DWORD style, short x, short y,
#define ID_FRAMESKIP_0 10000
#define ID_DEVICE_0 11000
#define ID_JOYSTICK_0 12000
-#define ID_INPUT_0 13000
#define ID_VIDEO_VIEW_0 14000
#define MAX_JOYSTICKS (8)
@@ -242,38 +240,50 @@ enum
};
-//============================================================
-// LOCAL VARIABLES
-//============================================================
+//========================================================================
+// LOCAL STRING FUNCTIONS (these require osd_free after being called)
+//========================================================================
-static int joystick_menu_setup = 0;
-static char state_filename[MAX_PATH];
-static int add_filter_entry(char *dest, size_t dest_len, const char *description, const char *extensions);
-static const char* software_dir;
-
-struct file_dialog_params
+static WCHAR *ui_wstring_from_utf8(const char *utf8string)
{
- device_image_interface *dev;
- int *create_format;
- option_resolution **create_args;
-};
+ int char_count;
+ WCHAR *result;
+
+ // convert MAME string (UTF-8) to UTF-16
+ char_count = MultiByteToWideChar(CP_UTF8, 0, utf8string, -1, nullptr, 0);
+ result = (WCHAR *)osd_malloc_array(char_count * sizeof(*result));
+ if (result != nullptr)
+ MultiByteToWideChar(CP_UTF8, 0, utf8string, -1, result, char_count);
+
+ return result;
+}
+static char *ui_utf8_from_wstring(const WCHAR *wstring)
+{
+ int char_count;
+ char *result;
+ // convert UTF-16 to MAME string (UTF-8)
+ char_count = WideCharToMultiByte(CP_UTF8, 0, wstring, -1, nullptr, 0, nullptr, nullptr);
+ result = (char *)osd_malloc_array(char_count * sizeof(*result));
+ if (result != nullptr)
+ WideCharToMultiByte(CP_UTF8, 0, wstring, -1, result, char_count, nullptr, nullptr);
+ return result;
+}
//============================================================
// win_get_file_name_dialog - sanitize all of the ugliness
// in invoking GetOpenFileName() and GetSaveFileName()
+// called from win_file_dialog, state_dialog
//============================================================
static BOOL win_get_file_name_dialog(win_open_file_name *ofn)
{
BOOL result = FALSE;
BOOL dialog_result;
- OSVERSIONINFO vers;
OPENFILENAME os_ofn;
- DWORD os_ofn_size;
LPTSTR t_filter = NULL;
LPTSTR t_file = NULL;
DWORD t_file_size = 0;
@@ -282,25 +292,10 @@ static BOOL win_get_file_name_dialog(win_open_file_name *ofn)
char *utf8_file;
int i;
- // determine the version of Windows
- memset(&vers, 0, sizeof(vers));
- vers.dwOSVersionInfoSize = sizeof(vers);
- GetVersionEx(&vers);
-
- // based on the version of Windows, determine the correct struct size
- if (vers.dwMajorVersion >= 5)
- os_ofn_size = sizeof(os_ofn);
- else
-#ifdef __GNUC__
- os_ofn_size = 76; // MinGW does not define OPENFILENAME_NT4
-#else
- os_ofn_size = sizeof(OPENFILENAME_NT4);
-#endif
-
// do we have to translate the filter?
if (ofn->filter)
{
- buffer = tstring_from_utf8(ofn->filter);
+ buffer = ui_wstring_from_utf8(ofn->filter);
if (!buffer)
goto done;
@@ -316,7 +311,7 @@ static BOOL win_get_file_name_dialog(win_open_file_name *ofn)
// do we need to translate the file parameter?
if (ofn->filename)
{
- buffer = tstring_from_utf8(ofn->filename);
+ buffer = ui_wstring_from_utf8(ofn->filename);
if (!buffer)
goto done;
@@ -329,14 +324,14 @@ static BOOL win_get_file_name_dialog(win_open_file_name *ofn)
// do we need to translate the initial directory?
if (ofn->initial_directory)
{
- t_initial_directory = tstring_from_utf8(ofn->initial_directory);
+ t_initial_directory = ui_wstring_from_utf8(ofn->initial_directory);
if (t_initial_directory == NULL)
goto done;
}
// translate our custom structure to a native Win32 structure
memset(&os_ofn, 0, sizeof(os_ofn));
- os_ofn.lStructSize = os_ofn_size;
+ os_ofn.lStructSize = sizeof(OPENFILENAME);
os_ofn.hwndOwner = ofn->owner;
os_ofn.hInstance = ofn->instance;
os_ofn.lpstrFilter = t_filter;
@@ -373,7 +368,7 @@ static BOOL win_get_file_name_dialog(win_open_file_name *ofn)
// copy file back out into passed structure
if (t_file)
{
- utf8_file = utf8_from_tstring(t_file);
+ utf8_file = ui_utf8_from_wstring(t_file);
if (!utf8_file)
goto done;
@@ -394,6 +389,7 @@ done:
//============================================================
// win_scroll_window
+// called from dialog_proc
//============================================================
static void win_scroll_window(HWND window, WPARAM wparam, int scroll_bar, int scroll_delta_line)
@@ -454,6 +450,7 @@ static void win_scroll_window(HWND window, WPARAM wparam, int scroll_bar, int sc
//============================================================
// win_append_menu_utf8
+// create a menu item
//============================================================
static BOOL win_append_menu_utf8(HMENU menu, UINT flags, UINT_PTR id, const char *item)
@@ -465,7 +462,7 @@ static BOOL win_append_menu_utf8(HMENU menu, UINT flags, UINT_PTR id, const char
// only convert string when it's not a bitmap
if (!(flags & MF_BITMAP) && item)
{
- t_str = tstring_from_utf8(item);
+ t_str = ui_wstring_from_utf8(item);
t_item = t_str;
}
@@ -478,182 +475,10 @@ static BOOL win_append_menu_utf8(HMENU menu, UINT flags, UINT_PTR id, const char
}
-static int get_option_count(const option_guide *guide, const char *optspec)
-{
- struct OptionRange ranges[128];
- int count = 0, i;
-
- option_resolution_listranges(optspec, guide->parameter, ranges, ARRAY_LENGTH(ranges));
-
- for (i = 0; ranges[i].min >= 0; i++)
- count += ranges[i].max - ranges[i].min + 1;
-
- return count;
-}
-
-
-
-static BOOL prepare_combobox(HWND control, const option_guide *guide, const char *optspec)
-{
- struct OptionRange ranges[128];
- int default_value, default_index, current_index, option_count;
- int i, j, k;
- BOOL has_option;
- TCHAR buf1[256];
- TCHAR buf2[256];
- LPTSTR tempstr;
-
- SendMessage(control, CB_GETLBTEXT, SendMessage(control, CB_GETCURSEL, 0, 0), (LPARAM) buf1);
- SendMessage(control, CB_RESETCONTENT, 0, 0);
- has_option = guide && optspec;
-
- if (has_option)
- {
- if ((guide->option_type != OPTIONTYPE_INT) && (guide->option_type != OPTIONTYPE_ENUM_BEGIN))
- goto unexpected;
-
- option_resolution_listranges(optspec, guide->parameter,
- ranges, ARRAY_LENGTH(ranges));
- option_resolution_getdefault(optspec, guide->parameter, &default_value);
-
- option_count = 0;
- default_index = -1;
- current_index = -1;
-
- for (i = 0; ranges[i].min >= 0; i++)
- {
- for (j = ranges[i].min; j <= ranges[i].max; j++)
- {
- if (guide->option_type == OPTIONTYPE_INT)
- {
- _sntprintf(buf2, ARRAY_LENGTH(buf2), TEXT("%d"), j);
- SendMessage(control, CB_ADDSTRING, 0, (LPARAM) buf2);
- }
- else
- if (guide->option_type == OPTIONTYPE_ENUM_BEGIN)
- {
- for (k = 1; guide[k].option_type == OPTIONTYPE_ENUM_VALUE; k++)
- {
- if (guide[k].parameter == j)
- break;
- }
- if (guide[k].option_type != OPTIONTYPE_ENUM_VALUE)
- goto unexpected;
-
- tempstr = tstring_from_utf8(guide[k].display_name);
- SendMessage(control, CB_ADDSTRING, 0, (LPARAM) tempstr);
- osd_free(tempstr);
- }
- else
- goto unexpected;
-
- SendMessage(control, CB_SETITEMDATA, option_count, j);
-
- if (j == default_value)
- default_index = option_count;
- if (!_tcscmp(buf1, buf2))
- current_index = option_count;
- option_count++;
- }
- }
-
- // if there is only one option, it is effectively disabled
- if (option_count <= 1)
- has_option = FALSE;
-
- if (current_index >= 0)
- SendMessage(control, CB_SETCURSEL, current_index, 0);
- else if (default_index >= 0)
- SendMessage(control, CB_SETCURSEL, default_index, 0);
- }
- else
- {
- // this item is non applicable
- SendMessage(control, CB_ADDSTRING, 0, (LPARAM) TEXT("N/A"));
- SendMessage(control, CB_SETCURSEL, 0, 0);
- }
- EnableWindow(control, has_option);
- return TRUE;
-
-unexpected:
- printf("Unexpected result in prepare_combobox\n");
- assert(FALSE);
- return FALSE;
-}
-
-
-
-static BOOL prepare_editbox(HWND control, const option_guide *guide, const char *optspec)
-{
- optreserr_t err = OPTIONRESOLUTION_ERROR_SUCCESS;
- char buf[32];
- int val, has_option, option_count;
-
- has_option = guide && optspec;
- buf[0] = '\0';
-
- if (has_option)
- {
- switch(guide->option_type)
- {
- case OPTIONTYPE_STRING:
- break;
-
- case OPTIONTYPE_INT:
- err = option_resolution_getdefault(optspec, guide->parameter, &val);
- if (err)
- goto done;
- _snprintf(buf, ARRAY_LENGTH(buf), "%d", val);
- break;
-
- default:
- err = OPTIONRESOLTUION_ERROR_INTERNAL;
- goto done;
- }
- }
-
- if (has_option)
- {
- option_count = get_option_count(guide, optspec);
- if (option_count <= 1)
- has_option = FALSE;
- }
-
-done:
- if (err == OPTIONRESOLTUION_ERROR_INTERNAL)
- printf("Unexpected result in prepare_editbox\n");
- assert(err != OPTIONRESOLTUION_ERROR_INTERNAL);
- win_set_window_text_utf8(control, buf);
- EnableWindow(control, !err && has_option);
- return err == OPTIONRESOLUTION_ERROR_SUCCESS;
-}
-
-
-
-static BOOL win_prepare_option_control(HWND control, const option_guide *guide, const char *optspec)
-{
- BOOL rc = FALSE;
- TCHAR class_name[32];
-
- SetProp(control, guide_prop, (HANDLE) guide);
- SetProp(control, spec_prop, (HANDLE) optspec);
- GetClassName(control, class_name, sizeof(class_name)
- / sizeof(class_name[0]));
-
- if (!_tcsicmp(class_name, TEXT("ComboBox")))
- rc = prepare_combobox(control, guide, optspec);
- else
- if (!_tcsicmp(class_name, TEXT("Edit")))
- rc = prepare_editbox(control, guide, optspec);
-
- return rc;
-}
-
-
-
//============================================================
// call_windowproc
+// called from adjuster_sb_wndproc, seqselect_wndproc
//============================================================
static LRESULT call_windowproc(WNDPROC wndproc, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
@@ -668,9 +493,10 @@ static LRESULT call_windowproc(WNDPROC wndproc, HWND hwnd, UINT msg, WPARAM wpar
-//============================================================
+//==========================================================================
// dialog_write
-//============================================================
+// called from dialog_write_string, win_dialog_init, dialog_write_item
+//==========================================================================
static int dialog_write(struct _dialog_box *di, const void *ptr, size_t sz, int align)
{
@@ -719,6 +545,7 @@ static int dialog_write(struct _dialog_box *di, const void *ptr, size_t sz, int
//============================================================
// dialog_write_string
+// called from win_dialog_init, dialog_write_item
//============================================================
static int dialog_write_string(dialog_box *di, const WCHAR *str)
@@ -733,6 +560,7 @@ static int dialog_write_string(dialog_box *di, const WCHAR *str)
//============================================================
// win_dialog_exit
+// called from win_dialog_init, calc_dlgunits_multiple, change_device, and all customise_input functions
//============================================================
static void win_dialog_exit(dialog_box *dialog)
@@ -754,15 +582,15 @@ static void win_dialog_exit(dialog_box *dialog)
if (dialog->handle)
GlobalFree(dialog->handle);
- //pool_free_lib(dialog->mempool);
free(dialog);
}
-//============================================================
+//===========================================================================
// win_dialog_init
-//============================================================
+// called from calc_dlgunits_multiple, and all customise_input functions
+//===========================================================================
dialog_box *win_dialog_init(const char *title, const struct dialog_layout *layout)
{
@@ -783,7 +611,6 @@ dialog_box *win_dialog_init(const char *title, const struct dialog_layout *layou
memset(di, 0, sizeof(*di));
di->layout = layout;
- //di->mempool = pool_alloc_lib(NULL);
memset(&dlg_template, 0, sizeof(dlg_template));
dlg_template.style = di->style = DIALOG_STYLE;
@@ -797,7 +624,7 @@ dialog_box *win_dialog_init(const char *title, const struct dialog_layout *layou
if (dialog_write(di, w, sizeof(w), 2))
goto error;
- w_title = wstring_from_utf8(title);
+ w_title = ui_wstring_from_utf8(title);
rc = dialog_write_string(di, w_title);
osd_free(w_title);
if (rc)
@@ -824,6 +651,7 @@ error:
//============================================================
// compute_dlgunits_multiple
+// called from dialog_scrollbar_init
//============================================================
static void calc_dlgunits_multiple(void)
@@ -844,8 +672,7 @@ static void calc_dlgunits_multiple(void)
if (!dialog)
goto done;
- if (dialog_write_item(dialog, WS_CHILD | WS_VISIBLE | SS_LEFT,
- 0, 0, offset_x, offset_y, wnd_title, DLGITEM_STATIC, &id))
+ if (dialog_write_item(dialog, WS_CHILD | WS_VISIBLE | SS_LEFT, 0, 0, offset_x, offset_y, wnd_title, DLGITEM_STATIC, &id))
goto done;
dialog_prime(dialog);
@@ -868,6 +695,7 @@ done:
//============================================================
// dialog_trigger
+// called from dialog_proc, file_dialog_hook
//============================================================
static void dialog_trigger(HWND dlgwnd, WORD trigger_flags)
@@ -909,6 +737,7 @@ static void dialog_trigger(HWND dlgwnd, WORD trigger_flags)
//============================================================
// dialog_proc
+// called from win_dialog_runmodal
//============================================================
static INT_PTR CALLBACK dialog_proc(HWND dlgwnd, UINT msg, WPARAM wparam, LPARAM lparam)
@@ -917,12 +746,6 @@ static INT_PTR CALLBACK dialog_proc(HWND dlgwnd, UINT msg, WPARAM wparam, LPARAM
CHAR buf[32];
WORD command;
- //if (LOG_WINMSGS)
- //{
- // logerror("dialog_proc(): dlgwnd=%p msg=0x%08x wparam=0x%08x lparam=0x%08x\n",
- // dlgwnd, (unsigned int) msg, (unsigned int) wparam, (unsigned int) lparam);
- //}
-
switch(msg)
{
case WM_INITDIALOG:
@@ -985,12 +808,12 @@ static INT_PTR CALLBACK dialog_proc(HWND dlgwnd, UINT msg, WPARAM wparam, LPARAM
-//============================================================
+//=========================================================================================================================================================================================
// dialog_write_item
-//============================================================
+// called from calc_dlgunits_multiple, win_dialog_add_active_combobox, win_dialog_add_adjuster, dialog_add_single_seqselect, win_dialog_add_portselect, win_dialog_add_standard_buttons
+//=========================================================================================================================================================================================
-static int dialog_write_item(dialog_box *di, DWORD style, short x, short y,
- short width, short height, const char *str, const WCHAR *class_name, WORD *id)
+static int dialog_write_item(dialog_box *di, DWORD style, short x, short y, short width, short height, const char *str, const WCHAR *class_name, WORD *id)
{
DLGITEMTEMPLATE item_template;
UINT class_name_length;
@@ -1016,7 +839,7 @@ static int dialog_write_item(dialog_box *di, DWORD style, short x, short y,
if (dialog_write(di, class_name, class_name_length, 2))
return 1;
- w_str = str ? wstring_from_utf8(str) : NULL;
+ w_str = str ? ui_wstring_from_utf8(str) : NULL;
rc = dialog_write_string(di, w_str);
if (w_str)
osd_free(w_str);
@@ -1036,12 +859,12 @@ static int dialog_write_item(dialog_box *di, DWORD style, short x, short y,
-//============================================================
+//==========================================================================================================================================================
// dialog_add_trigger
-//============================================================
+// called from dialog_add_scrollbar, win_dialog_add_active_combobox, win_dialog_add_combobox_item, win_dialog_add_adjuster, dialog_add_single_seqselect
+//==========================================================================================================================================================
-static int dialog_add_trigger(struct _dialog_box *di, WORD dialog_item,
- WORD trigger_flags, UINT message, trigger_function trigger_proc,
+static int dialog_add_trigger(struct _dialog_box *di, WORD dialog_item, WORD trigger_flags, UINT message, trigger_function trigger_proc,
WPARAM wparam, LPARAM lparam, void (*storeval)(void *param, int val), void *storeval_param)
{
if (!di)
@@ -1052,8 +875,6 @@ static int dialog_add_trigger(struct _dialog_box *di, WORD dialog_item,
assert(trigger_flags);
dialog_info_trigger *trigger = new(dialog_info_trigger);
- //dialog_info_trigger *trigger;
- //trigger = global_alloc(dialog_info_trigger);
trigger->next = NULL;
trigger->trigger_flags = trigger_flags;
@@ -1077,6 +898,7 @@ static int dialog_add_trigger(struct _dialog_box *di, WORD dialog_item,
//============================================================
// dialog_scrollbar_init
+// called from dialog_add_scrollbar
//============================================================
static LRESULT dialog_scrollbar_init(dialog_box *dialog, HWND dlgwnd, UINT message, WPARAM wparam, LPARAM lparam)
@@ -1100,6 +922,7 @@ static LRESULT dialog_scrollbar_init(dialog_box *dialog, HWND dlgwnd, UINT messa
//============================================================
// dialog_add_scrollbar
+// called from dialog_prime
//============================================================
static int dialog_add_scrollbar(dialog_box *dialog)
@@ -1113,9 +936,10 @@ static int dialog_add_scrollbar(dialog_box *dialog)
-//============================================================
+//==============================================================================
// dialog_prime
-//============================================================
+// called from calc_dlgunits_multiple, win_dialog_runmodal, win_file_dialog
+//==============================================================================
static void dialog_prime(dialog_box *di)
{
@@ -1139,6 +963,7 @@ static void dialog_prime(dialog_box *di)
//============================================================
// dialog_get_combo_value
+// called from win_dialog_add_active_combobox
//============================================================
static LRESULT dialog_get_combo_value(dialog_box *dialog, HWND dialog_item, UINT message, WPARAM wparam, LPARAM lparam)
@@ -1154,6 +979,7 @@ static LRESULT dialog_get_combo_value(dialog_box *dialog, HWND dialog_item, UINT
//============================================================
// dialog_get_adjuster_value
+// called from win_dialog_add_adjuster
//============================================================
static LRESULT dialog_get_adjuster_value(dialog_box *dialog, HWND dialog_item, UINT message, WPARAM wparam, LPARAM lparam)
@@ -1165,9 +991,10 @@ static LRESULT dialog_get_adjuster_value(dialog_box *dialog, HWND dialog_item, U
-//============================================================
+//====================================================================================================
// dialog_new_control
-//============================================================
+// called from win_dialog_add_active_combobox, win_dialog_add_adjuster, win_dialog_add_portselect
+//====================================================================================================
static void dialog_new_control(struct _dialog_box *di, short *x, short *y)
{
@@ -1177,9 +1004,10 @@ static void dialog_new_control(struct _dialog_box *di, short *x, short *y)
-//============================================================
+//====================================================================================================
// dialog_finish_control
-//============================================================
+// called from win_dialog_add_active_combobox, win_dialog_add_adjuster, win_dialog_add_portselect
+//====================================================================================================
static void dialog_finish_control(struct _dialog_box *di, short x, short y)
{
@@ -1200,6 +1028,7 @@ static void dialog_finish_control(struct _dialog_box *di, short x, short y)
//============================================================
// dialog_combo_changed
+// called from win_dialog_add_active_combobox
//============================================================
static LRESULT dialog_combo_changed(dialog_box *dialog, HWND dlgitem, UINT message, WPARAM wparam, LPARAM lparam)
@@ -1213,6 +1042,7 @@ static LRESULT dialog_combo_changed(dialog_box *dialog, HWND dlgitem, UINT messa
//============================================================
// win_dialog_wcsdup
+// called from win_dialog_add_adjuster (via define)
//============================================================
static WCHAR *win_dialog_wcsdup(dialog_box *dialog, const WCHAR *s)
@@ -1227,6 +1057,7 @@ static WCHAR *win_dialog_wcsdup(dialog_box *dialog, const WCHAR *s)
//============================================================
// win_dialog_add_active_combobox
+// called from win_dialog_add_combobox
//============================================================
static int win_dialog_add_active_combobox(dialog_box *dialog, const char *item_label, int default_value,
@@ -1276,19 +1107,19 @@ done:
//============================================================
// win_dialog_add_combobox
+// called from customise_switches, customise_analogcontrols
//============================================================
-static int win_dialog_add_combobox(dialog_box *dialog, const char *item_label, int default_value,
- void (*storeval)(void *param, int val), void *storeval_param)
+static int win_dialog_add_combobox(dialog_box *dialog, const char *item_label, int default_value, void (*storeval)(void *param, int val), void *storeval_param)
{
- return win_dialog_add_active_combobox(dialog, item_label, default_value,
- storeval, storeval_param, NULL, NULL);
+ return win_dialog_add_active_combobox(dialog, item_label, default_value, storeval, storeval_param, NULL, NULL);
}
//============================================================
// win_dialog_add_combobox_item
+// called from customise_switches, customise_analogcontrols
//============================================================
static int win_dialog_add_combobox_item(dialog_box *dialog, const char *item_label, int item_data)
@@ -1317,6 +1148,7 @@ static int win_dialog_add_combobox_item(dialog_box *dialog, const char *item_lab
//============================================================
// adjuster_sb_wndproc
+// called from adjuster_sb_setup
//============================================================
struct adjuster_sb_stuff
@@ -1374,19 +1206,10 @@ static INT_PTR CALLBACK adjuster_sb_wndproc(HWND sbwnd, UINT msg, WPARAM wparam,
}
-//============================================================
-// win_dialog_malloc
-//============================================================
-
-//static void *win_dialog_malloc(dialog_box *dialog, size_t size)
-//{
-// return pool_malloc_lib(dialog->mempool, size);
-//}
-
-
//============================================================
// adjuster_sb_setup
+// called from win_dialog_add_adjuster
//============================================================
static LRESULT adjuster_sb_setup(dialog_box *dialog, HWND sbwnd, UINT message, WPARAM wparam, LPARAM lparam)
@@ -1412,6 +1235,7 @@ static LRESULT adjuster_sb_setup(dialog_box *dialog, HWND sbwnd, UINT message, W
//============================================================
// win_dialog_add_adjuster
+// called from customise_analogcontrols
//============================================================
static int win_dialog_add_adjuster(dialog_box *dialog, const char *item_label, int default_value,
@@ -1424,8 +1248,7 @@ static int win_dialog_add_adjuster(dialog_box *dialog, const char *item_label, i
dialog_new_control(dialog, &x, &y);
- if (dialog_write_item(dialog, WS_CHILD | WS_VISIBLE | SS_LEFT,
- x, y, dialog->layout->label_width, DIM_ADJUSTER_HEIGHT, item_label, DLGITEM_STATIC, NULL))
+ if (dialog_write_item(dialog, WS_CHILD | WS_VISIBLE | SS_LEFT, x, y, dialog->layout->label_width, DIM_ADJUSTER_HEIGHT, item_label, DLGITEM_STATIC, NULL))
goto error;
x += dialog->layout->label_width + DIM_HORIZONTAL_SPACING;
@@ -1436,28 +1259,23 @@ static int win_dialog_add_adjuster(dialog_box *dialog, const char *item_label, i
goto error;
x += dialog->layout->combo_width - DIM_ADJUSTER_SCR_WIDTH;
- _sntprintf(buf, ARRAY_LENGTH(buf),
- is_percentage ? TEXT("%d%%") : TEXT("%d"),
- default_value);
+ _sntprintf(buf, ARRAY_LENGTH(buf), is_percentage ? TEXT("%d%%") : TEXT("%d"), default_value);
s = win_dialog_tcsdup(dialog, buf);
osd_free(buf);
if (!s)
return 1;
- if (dialog_add_trigger(dialog, dialog->item_count, TRIGGER_INITDIALOG, WM_SETTEXT, NULL,
- 0, (LPARAM) s, NULL, NULL))
+ if (dialog_add_trigger(dialog, dialog->item_count, TRIGGER_INITDIALOG, WM_SETTEXT, NULL, 0, (LPARAM) s, NULL, NULL))
goto error;
// add the trigger invoked when the apply button is pressed
if (dialog_add_trigger(dialog, dialog->item_count, TRIGGER_APPLY, 0, dialog_get_adjuster_value, 0, 0, storeval, storeval_param))
goto error;
- if (dialog_write_item(dialog, WS_CHILD | WS_VISIBLE | WS_TABSTOP | SBS_VERT,
- x, y, DIM_ADJUSTER_SCR_WIDTH, DIM_ADJUSTER_HEIGHT, NULL, DLGITEM_SCROLLBAR, NULL))
+ if (dialog_write_item(dialog, WS_CHILD | WS_VISIBLE | WS_TABSTOP | SBS_VERT, x, y, DIM_ADJUSTER_SCR_WIDTH, DIM_ADJUSTER_HEIGHT, NULL, DLGITEM_SCROLLBAR, NULL))
goto error;
x += DIM_ADJUSTER_SCR_WIDTH + DIM_HORIZONTAL_SPACING;
- if (dialog_add_trigger(dialog, dialog->item_count, TRIGGER_INITDIALOG, 0, adjuster_sb_setup,
- 0, MAKELONG(min_value, max_value), NULL, NULL))
+ if (dialog_add_trigger(dialog, dialog->item_count, TRIGGER_INITDIALOG, 0, adjuster_sb_setup, 0, MAKELONG(min_value, max_value), NULL, NULL))
return 1;
y += DIM_COMBO_ROW_HEIGHT + DIM_VERTICAL_SPACING * 2;
@@ -1485,9 +1303,10 @@ static seqselect_info *get_seqselect_info(HWND editwnd)
-//============================================================
+//=============================================================================
// seqselect_settext
-//============================================================
+// called from seqselect_start_read_from_main_thread, seqselect_setup
+//=============================================================================
//#pragma GCC diagnostic push
#ifdef __GNUC__
#pragma GCC diagnostic ignored "-Wunused-value"
@@ -1502,7 +1321,7 @@ static void seqselect_settext(HWND editwnd)
// the basics
stuff = get_seqselect_info(editwnd);
if (stuff == NULL)
- return; // this should not happen - need to fix this
+ return; // this should not happen - need to fix this
// retrieve the seq name
seqstring = Machine->input().seq_name(*stuff->code);
@@ -1529,6 +1348,7 @@ static void seqselect_settext(HWND editwnd)
//============================================================
// seqselect_start_read_from_main_thread
+// called from seqselect_wndproc
//============================================================
static void seqselect_start_read_from_main_thread(void *param)
@@ -1580,6 +1400,7 @@ static void seqselect_start_read_from_main_thread(void *param)
//============================================================
// seqselect_stop_read_from_main_thread
+// called from seqselect_wndproc
//============================================================
static void seqselect_stop_read_from_main_thread(void *param)
@@ -1600,6 +1421,7 @@ static void seqselect_stop_read_from_main_thread(void *param)
//============================================================
// seqselect_wndproc
+// called from seqselect_setup
//============================================================
static INT_PTR CALLBACK seqselect_wndproc(HWND editwnd, UINT msg, WPARAM wparam, LPARAM lparam)
@@ -1657,6 +1479,7 @@ static INT_PTR CALLBACK seqselect_wndproc(HWND editwnd, UINT msg, WPARAM wparam,
//============================================================
// seqselect_setup
+// called from dialog_add_single_seqselect
//============================================================
static LRESULT seqselect_setup(dialog_box *dialog, HWND editwnd, UINT message, WPARAM wparam, LPARAM lparam)
@@ -1675,6 +1498,7 @@ static LRESULT seqselect_setup(dialog_box *dialog, HWND editwnd, UINT message, W
//============================================================
// seqselect_apply
+// called from dialog_add_single_seqselect
//============================================================
static LRESULT seqselect_apply(dialog_box *dialog, HWND editwnd, UINT message, WPARAM wparam, LPARAM lparam)
@@ -1690,14 +1514,13 @@ static LRESULT seqselect_apply(dialog_box *dialog, HWND editwnd, UINT message, W
//============================================================
// dialog_add_single_seqselect
+// called from win_dialog_add_portselect
//============================================================
-static int dialog_add_single_seqselect(struct _dialog_box *di, short x, short y,
- short cx, short cy, ioport_field *field, int is_analog, int seqtype)
+static int dialog_add_single_seqselect(struct _dialog_box *di, short x, short y, short cx, short cy, ioport_field *field, int is_analog, int seqtype)
{
// write the dialog item
- if (dialog_write_item(di, WS_CHILD | WS_VISIBLE | SS_ENDELLIPSIS | ES_CENTER | SS_SUNKEN,
- x, y, cx, cy, NULL, DLGITEM_EDIT, NULL))
+ if (dialog_write_item(di, WS_CHILD | WS_VISIBLE | SS_ENDELLIPSIS | ES_CENTER | SS_SUNKEN, x, y, cx, cy, NULL, DLGITEM_EDIT, NULL))
return 1;
// allocate a seqselect_info
@@ -1728,6 +1551,7 @@ static int dialog_add_single_seqselect(struct _dialog_box *di, short x, short y,
//============================================================
// win_dialog_add_seqselect
+// called from customise_input, customise_miscinput
//============================================================
static int win_dialog_add_portselect(dialog_box *dialog, ioport_field *field)
@@ -1780,8 +1604,7 @@ static int win_dialog_add_portselect(dialog_box *dialog, ioport_field *field)
// create our local name for this entry; also convert from
// MAME strings to wide strings
len = strlen(port_name);
- s = (char *) alloca((len + (port_suffix[seq] ? strlen(port_suffix[seq])
- : 0) + 1) * sizeof(*s));
+ s = (char *) alloca((len + (port_suffix[seq] ? strlen(port_suffix[seq]) : 0) + 1) * sizeof(*s));
strcpy(s, port_name);
if (port_suffix[seq])
@@ -1796,8 +1619,7 @@ static int win_dialog_add_portselect(dialog_box *dialog, ioport_field *field)
return 1;
x += dialog->layout->label_width + DIM_HORIZONTAL_SPACING;
- if (dialog_add_single_seqselect(di, x, y, DIM_EDIT_WIDTH, DIM_NORMAL_ROW_HEIGHT,
- field, is_analog[seq], seq_types[seq]))
+ if (dialog_add_single_seqselect(di, x, y, DIM_EDIT_WIDTH, DIM_NORMAL_ROW_HEIGHT, field, is_analog[seq], seq_types[seq]))
return 1;
y += DIM_VERTICAL_SPACING + DIM_NORMAL_ROW_HEIGHT;
x += DIM_EDIT_WIDTH + DIM_HORIZONTAL_SPACING;
@@ -1810,24 +1632,6 @@ static int win_dialog_add_portselect(dialog_box *dialog, ioport_field *field)
//============================================================
-// win_dialog_add_notification
-//============================================================
-
-static int win_dialog_add_notification(dialog_box *dialog, UINT notification, dialog_notification callback, void *param)
-{
- // hack
- if (!dialog->notify_callback)
- printf("Unexpected result in win_dialog_add_notification\n");
- assert(!dialog->notify_callback);
- dialog->notify_code = notification;
- dialog->notify_callback = callback;
- dialog->notify_param = param;
- return 0;
-}
-
-
-
-//============================================================
// win_dialog_add_standard_buttons
//============================================================
@@ -1848,16 +1652,14 @@ static int win_dialog_add_standard_buttons(dialog_box *dialog)
y = di->size_y + DIM_VERTICAL_SPACING;
// display cancel button
- if (dialog_write_item(di, WS_CHILD | WS_VISIBLE | SS_LEFT,
- x, y, DIM_BUTTON_WIDTH, DIM_BUTTON_ROW_HEIGHT, DLGTEXT_CANCEL, DLGITEM_BUTTON, NULL))
+ if (dialog_write_item(di, WS_CHILD | WS_VISIBLE | SS_LEFT, x, y, DIM_BUTTON_WIDTH, DIM_BUTTON_ROW_HEIGHT, DLGTEXT_CANCEL, DLGITEM_BUTTON, NULL))
return 1;
// work out where OK button goes
x -= DIM_HORIZONTAL_SPACING + DIM_BUTTON_WIDTH;
// display OK button
- if (dialog_write_item(di, WS_CHILD | WS_VISIBLE | SS_LEFT,
- x, y, DIM_BUTTON_WIDTH, DIM_BUTTON_ROW_HEIGHT, DLGTEXT_OK, DLGITEM_BUTTON, NULL))
+ if (dialog_write_item(di, WS_CHILD | WS_VISIBLE | SS_LEFT, x, y, DIM_BUTTON_WIDTH, DIM_BUTTON_ROW_HEIGHT, DLGTEXT_OK, DLGITEM_BUTTON, NULL))
return 1;
di->size_y += DIM_BUTTON_ROW_HEIGHT + DIM_VERTICAL_SPACING * 2;
@@ -1886,13 +1688,13 @@ static void before_display_dialog(running_machine &machine)
static void after_display_dialog(running_machine &machine)
{
winwindow_ui_pause(machine, FALSE);
- //Machine = NULL;
}
//============================================================
// win_dialog_runmodal
+// called from the various customise_inputs functions
//============================================================
static void win_dialog_runmodal(running_machine &machine, HWND wnd, dialog_box *dialog)
@@ -1913,68 +1715,11 @@ static void win_dialog_runmodal(running_machine &machine, HWND wnd, dialog_box *
//============================================================
-// file_dialog_hook
-//============================================================
-
-static UINT_PTR CALLBACK file_dialog_hook(HWND dlgwnd, UINT message, WPARAM wparam, LPARAM lparam)
-{
- OPENFILENAME *ofn;
- dialog_box *dialog;
- UINT_PTR rc = 0;
- LPNMHDR notify;
- LONG_PTR l;
-
- switch(message)
- {
- case WM_INITDIALOG:
- ofn = (OPENFILENAME *) lparam;
- dialog = (dialog_box *) ofn->lCustData;
-
- SetWindowLongPtr(dlgwnd, GWLP_USERDATA, (LONG_PTR) dialog);
- dialog_trigger(dlgwnd, TRIGGER_INITDIALOG);
- rc = 1;
-
- // hack
- if (dialog->notify_callback && (dialog->notify_code == CDN_TYPECHANGE))
- dialog->notify_callback(dialog, dlgwnd, NULL, dialog->notify_param);
- break;
-
- case WM_NOTIFY:
- notify = (LPNMHDR) lparam;
- switch(notify->code)
- {
- case CDN_FILEOK:
- dialog_trigger(dlgwnd, TRIGGER_APPLY);
- break;
- }
-
- // hack
- l = GetWindowLongPtr(dlgwnd, GWLP_USERDATA);
- dialog = (dialog_box *) l;
- if (dialog->notify_callback && (notify->code == dialog->notify_code))
- dialog->notify_callback(dialog, dlgwnd, notify, dialog->notify_param);
- break;
-
- case WM_COMMAND:
- switch(HIWORD(wparam))
- {
- case CBN_SELCHANGE:
- dialog_trigger(dlgwnd, TRIGGER_CHANGED);
- break;
- }
- break;
- }
- return rc;
-}
-
-
-
-//============================================================
// win_file_dialog
+// called from change_device
//============================================================
-static BOOL win_file_dialog(running_machine &machine,
- HWND parent, win_file_dialog_type dlgtype, dialog_box *custom_dialog, const char *filter,
+static BOOL win_file_dialog(running_machine &machine, HWND parent, win_file_dialog_type dlgtype, const char *filter,
const char *initial_dir, char *filename, size_t filename_len)
{
win_open_file_name ofn;
@@ -1991,17 +1736,6 @@ static BOOL win_file_dialog(running_machine &machine,
if (dlgtype == WIN_FILE_DIALOG_OPEN)
ofn.flags |= OFN_FILEMUSTEXIST;
- if (custom_dialog)
- {
- custom_dialog->style = WS_CHILD | WS_CLIPSIBLINGS | DS_3DLOOK | DS_CONTROL | DS_SETFONT;
- dialog_prime(custom_dialog);
-
- ofn.flags |= OFN_ENABLETEMPLATEHANDLE | OFN_ENABLEHOOK;
- ofn.instance = (HINSTANCE)custom_dialog->handle;
- ofn.custom_data = (LPARAM) custom_dialog;
- ofn.hook = file_dialog_hook;
- }
-
snprintf(ofn.filename, ARRAY_LENGTH(ofn.filename), "%s", filename);
before_display_dialog(machine);
@@ -2014,45 +1748,6 @@ static BOOL win_file_dialog(running_machine &machine,
-
-//============================================================
-// input_item_from_serial_number
-//============================================================
-#if 0
-static int input_item_from_serial_number(running_machine &machine, int serial_number,
- ioport_port **port, ioport_field **field, ioport_setting **setting)
-{
- ioport_port *this_port = NULL;
- ioport_field *this_field = NULL;
- ioport_setting *this_setting = NULL;
-
- int i = 0;
- for (this_port = machine.ioport().ports().first(); (i != serial_number) && (this_port); this_port = this_port->next())
- {
- i++;
- for (this_field = this_port->fields().first(); (i != serial_number) && (this_field); this_field = this_field->next())
- {
- i++;
- for (this_setting = this_field->settings().first(); (i != serial_number) && (this_setting); this_setting = this_setting->next())
- i++;
- }
- }
-
- if (this_field)
- this_port = &this_field->port();
-
- if (port)
- *port = this_port;
- if (field)
- *field = this_field;
- if (setting)
- *setting = this_setting;
-
- return (i == serial_number);
-}
-#endif
-
-
//============================================================
// customise_input
//============================================================
@@ -2060,14 +1755,7 @@ static int input_item_from_serial_number(running_machine &machine, int serial_nu
static void customise_input(running_machine &machine, HWND wnd, const char *title, int player, int inputclass)
{
dialog_box *dlg;
- int this_inputclass = 0;
- int this_player = 0, portslot_count = 0, i = 0;
- const int max_portslots = 256;
-
- struct
- {
- ioport_field *field;
- } portslots[max_portslots];
+ int this_inputclass, this_player;
/* create the dialog */
dlg = win_dialog_init(title, NULL);
@@ -2089,35 +1777,12 @@ static void customise_input(running_machine &machine, HWND wnd, const char *titl
&& (this_player == player)
&& (this_inputclass == inputclass))
{
- /* store this InputPort/RECT combo in our list. we do not
- * necessarily want to add it yet because we the INI might
- * want to reorder the tab order */
- if (portslot_count < max_portslots)
- {
- portslots[portslot_count].field = &field;
- portslot_count++;
- }
+ if (win_dialog_add_portselect(dlg, &field))
+ goto done;
}
}
}
- /* finally add the portselects to the dialog */
- if (portslot_count > max_portslots)
- portslot_count = max_portslots;
-
- /* No keyboard? Just exit */
- if (!portslot_count)
- goto done;
-
- for (i = 0; i < portslot_count; i++)
- {
- if (portslots[i].field)
- {
- if (win_dialog_add_portselect(dlg, portslots[i].field))
- goto done;
- }
- }
-
/* ...and now add OK/Cancel */
if (win_dialog_add_standard_buttons(dlg))
goto done;
@@ -2154,13 +1819,11 @@ static void customise_keyboard(running_machine &machine, HWND wnd)
-//============================================================
+//===============================================================================================
// check_for_miscinput
-// (to decide if "Miscellaneous Inputs" menu item should
-// show or not).
-// We do this here because the core check has been broken
-// for years (always returns false).
-//============================================================
+// (to decide if "Miscellaneous Inputs" menu item should show or not).
+// We do this here because the core check has been broken for years (always returns false).
+//===============================================================================================
static bool check_for_miscinput(running_machine &machine)
{
@@ -2196,16 +1859,9 @@ static bool check_for_miscinput(running_machine &machine)
static void customise_miscinput(running_machine &machine, HWND wnd)
{
dialog_box *dlg;
- int this_inputclass = 0;
- int portslot_count = 0, i = 0;
- const int max_portslots = 256;
+ int this_inputclass;
const char *title = "Miscellaneous Inputs";
- struct
- {
- ioport_field *field;
- } portslots[max_portslots];
-
/* create the dialog */
dlg = win_dialog_init(title, NULL);
if (!dlg)
@@ -2225,31 +1881,12 @@ static void customise_miscinput(running_machine &machine, HWND wnd)
&& (this_inputclass != INPUT_CLASS_CONTROLLER)
&& (this_inputclass != INPUT_CLASS_KEYBOARD))
{
- /* store this InputPort/RECT combo in our list. we do not
- * necessarily want to add it yet because we the INI might
- * want to reorder the tab order */
- if (portslot_count < max_portslots)
- {
- portslots[portslot_count].field = &field;
- portslot_count++;
- }
+ if (win_dialog_add_portselect(dlg, &field))
+ goto done;
}
}
}
- /* finally add the portselects to the dialog */
- if (portslot_count > max_portslots)
- portslot_count = max_portslots;
-
- for (i = 0; i < portslot_count; i++)
- {
- if (portslots[i].field)
- {
- if (win_dialog_add_portselect(dlg, portslots[i].field))
- goto done;
- }
- }
-
/* ...and now add OK/Cancel */
if (win_dialog_add_standard_buttons(dlg))
goto done;
@@ -2266,6 +1903,7 @@ done:
//============================================================
// storeval_inputport
+// called from customise_switches
//============================================================
static void storeval_inputport(void *param, int val)
@@ -2379,10 +2017,18 @@ static void store_analogitem(void *param, int val, int selected_item)
switch(selected_item)
{
- case ANALOG_ITEM_KEYSPEED: settings.delta = val; break;
- case ANALOG_ITEM_CENTERSPEED: settings.centerdelta = val; break;
- case ANALOG_ITEM_REVERSE: settings.reverse = val; break;
- case ANALOG_ITEM_SENSITIVITY: settings.sensitivity = val; break;
+ case ANALOG_ITEM_KEYSPEED:
+ settings.delta = val;
+ break;
+ case ANALOG_ITEM_CENTERSPEED:
+ settings.centerdelta = val;
+ break;
+ case ANALOG_ITEM_REVERSE:
+ settings.reverse = val;
+ break;
+ case ANALOG_ITEM_SENSITIVITY:
+ settings.sensitivity = val;
+ break;
}
field->set_user_settings(settings);
}
@@ -2447,18 +2093,15 @@ static void customise_analogcontrols(running_machine &machine, HWND wnd)
name = field.name();
afield = &field;
- _snprintf(buf, ARRAY_LENGTH(buf),
- "%s %s", name, "Digital Speed");
+ _snprintf(buf, ARRAY_LENGTH(buf), "%s %s", name, "Digital Speed");
if (win_dialog_add_adjuster(dlg, buf, settings.delta, 1, 255, FALSE, store_delta, (void *) afield))
goto done;
- _snprintf(buf, ARRAY_LENGTH(buf),
- "%s %s", name, "Autocenter Speed");
- if (win_dialog_add_adjuster(dlg, buf, settings.centerdelta, 1, 255, FALSE, store_centerdelta, (void *) afield))
+ _snprintf(buf, ARRAY_LENGTH(buf), "%s %s", name, "Autocenter Speed");
+ if (win_dialog_add_adjuster(dlg, buf, settings.centerdelta, 0, 255, FALSE, store_centerdelta, (void *) afield))
goto done;
- _snprintf(buf, ARRAY_LENGTH(buf),
- "%s %s", name, "Reverse");
+ _snprintf(buf, ARRAY_LENGTH(buf), "%s %s", name, "Reverse");
if (win_dialog_add_combobox(dlg, buf, settings.reverse ? 1 : 0, store_reverse, (void *) afield))
goto done;
if (win_dialog_add_combobox_item(dlg, "Off", 0))
@@ -2466,8 +2109,7 @@ static void customise_analogcontrols(running_machine &machine, HWND wnd)
if (win_dialog_add_combobox_item(dlg, "On", 1))
goto done;
- _snprintf(buf, ARRAY_LENGTH(buf),
- "%s %s", name, "Sensitivity");
+ _snprintf(buf, ARRAY_LENGTH(buf), "%s %s", name, "Sensitivity");
if (win_dialog_add_adjuster(dlg, buf, settings.sensitivity, 1, 255, TRUE, store_sensitivity, (void *) afield))
goto done;
}
@@ -2487,6 +2129,7 @@ done:
//============================================================
// win_dirname
+// called from state_dialog
//============================================================
static char *win_dirname(const char *filename)
@@ -2523,11 +2166,10 @@ static char *win_dirname(const char *filename)
//============================================================
// state_dialog
+// called when loading or saving a state
//============================================================
-static void state_dialog(HWND wnd, win_file_dialog_type dlgtype,
- DWORD fileproc_flags, bool is_load,
- running_machine &machine)
+static void state_dialog(HWND wnd, win_file_dialog_type dlgtype, DWORD fileproc_flags, bool is_load, running_machine &machine)
{
win_open_file_name ofn;
char *dir = NULL;
@@ -2588,226 +2230,31 @@ static void state_save(running_machine &machine)
//============================================================
-// format_combo_changed
-//============================================================
-
-static void format_combo_changed(dialog_box *dialog, HWND dlgwnd, NMHDR *notification, void *changed_param)
-{
- HWND wnd;
- int format_combo_val = 0;
- device_image_interface *dev;
- const option_guide *guide;
- const char *optspec;
- struct file_dialog_params *params;
- int has_option = 0;
- TCHAR t_buf1[128];
- char *utf8_buf1;
-
- params = (struct file_dialog_params *) changed_param;
-
- // locate the format control
- format_combo_val = notification ? (((OFNOTIFY *) notification)->lpOFN->nFilterIndex - 1) : 0;
- if (format_combo_val < 0)
- format_combo_val = 0;
- *(params->create_format) = format_combo_val;
-
- // compute our parameters
- dev = params->dev;
- guide = dev->device_get_creation_option_guide();
- optspec =dev->device_get_indexed_creatable_format(format_combo_val)->optspec();
-
- // set the default extension
- CommDlg_OpenSave_SetDefExt(GetParent(dlgwnd),
- (const char*)dev->device_get_indexed_creatable_format(format_combo_val)->extensions());
-
- // enumerate through all of the child windows
- wnd = NULL;
- while((wnd = FindWindowEx(dlgwnd, wnd, NULL, NULL)))
- {
- // get label text, removing trailing NULL
- GetWindowText(wnd, t_buf1, ARRAY_LENGTH(t_buf1));
- utf8_buf1 = utf8_from_tstring(t_buf1);
- assert(utf8_buf1[strlen(utf8_buf1)-1] == ':');
- utf8_buf1[strlen(utf8_buf1)-1] = '\0';
-
- // find guide entry
- while(guide->option_type && strcmp(utf8_buf1, guide->display_name))
- guide++;
-
- wnd = GetNextWindow(wnd, GW_HWNDNEXT);
- if (wnd && guide)
- {
- // we now have the handle to the window, and the guide entry
- has_option = option_resolution_contains(optspec, guide->parameter);
-
- SendMessage(wnd, CB_GETLBTEXT, SendMessage(wnd, CB_GETCURSEL, 0, 0), (LPARAM) t_buf1);
- SendMessage(wnd, CB_RESETCONTENT, 0, 0);
-
- win_prepare_option_control(wnd,
- has_option ? guide : NULL,
- has_option ? optspec : NULL);
- }
- osd_free(utf8_buf1);
- }
-}
-
-
-
-//============================================================
-// storeval_option_resolution
-//============================================================
-
-struct storeval_optres_params
-{
- struct file_dialog_params *fdparams;
- const option_guide *guide_entry;
-};
-
-static void storeval_option_resolution(void *storeval_param, int val)
-{
- option_resolution *resolution;
- struct storeval_optres_params *params;
- device_image_interface *dev;
- char buf[16];
-
- params = (struct storeval_optres_params *) storeval_param;
- dev = params->fdparams->dev;
-
- // create the resolution, if necessary
- resolution = *(params->fdparams->create_args);
- if (!resolution)
- {
- const option_guide *optguide = dev->device_get_creation_option_guide();
- const image_device_format *format = dev->device_get_indexed_creatable_format(*(params->fdparams->create_format));
-
- resolution = option_resolution_create(optguide, format->optspec());
- if (!resolution)
- return;
- *(params->fdparams->create_args) = resolution;
- }
-
- snprintf(buf, ARRAY_LENGTH(buf), "%d", val);
- option_resolution_add_param(resolution, params->guide_entry->identifier, buf);
-}
-
-
-
-//============================================================
-// build_option_dialog
-//============================================================
-
-static dialog_box *build_option_dialog(device_image_interface *dev, char *filter, size_t filter_len, int *create_format, option_resolution **create_args)
-{
- dialog_box *dialog;
- const option_guide *guide_entry;
- int found = 0, pos = 0;
- char buf[256];
- struct file_dialog_params *params;
- struct storeval_optres_params *storeval_params;
- static const struct dialog_layout filedialog_layout = { 44, 220 };
-
- // make the filter
- pos = 0;
- for (auto &format : dev->formatlist())
- pos += add_filter_entry(filter + pos, filter_len - pos, format->description(), format->extensions());
-
- // create the dialog
- dialog = win_dialog_init(NULL, &filedialog_layout);
- if (!dialog)
- goto error;
-
- // allocate the params
- params = global_alloc(file_dialog_params);
- if (!params)
- goto error;
- params->dev = dev;
- params->create_format = create_format;
- params->create_args = create_args;
-
- // set the notify handler; so that we get notified when the format dialog changed
- if (win_dialog_add_notification(dialog, CDN_TYPECHANGE, format_combo_changed, params))
- goto error;
-
- // loop through the entries
- for (guide_entry = dev->device_get_creation_option_guide(); guide_entry->option_type != OPTIONTYPE_END; guide_entry++)
- {
- // make sure that this entry is present on at least one option specification
- found = FALSE;
- for (auto &format : dev->formatlist())
- {
- if (option_resolution_contains(format->optspec(), guide_entry->parameter))
- {
- found = TRUE;
- break;
- }
- }
-
- if (found)
- {
- storeval_params = global_alloc(storeval_optres_params);
- if (!storeval_params)
- goto error;
- storeval_params->fdparams = params;
- storeval_params->guide_entry = guide_entry;
-
- // this option is present on at least one of the specs
- switch(guide_entry->option_type)
- {
- case OPTIONTYPE_INT:
- snprintf(buf, ARRAY_LENGTH(buf), "%s:", guide_entry->display_name);
- if (win_dialog_add_combobox(dialog, buf, 0, storeval_option_resolution, storeval_params))
- goto error;
- break;
-
- default:
- break;
- }
- }
- }
-
- return dialog;
-
-error:
- if (dialog)
- win_dialog_exit(dialog);
- return NULL;
-}
-
-
-
-//============================================================
// copy_extension_list
//============================================================
-static int copy_extension_list(char *dest, size_t dest_len, const char *extensions)
+static void copy_extension_list(std::string &dest, const char *extensions)
{
- const char *s;
- int pos = 0;
-
// our extension lists are comma delimited; Win32 expects to see lists
// delimited by semicolons
- s = extensions;
- while(*s)
+ char const *s = extensions;
+ while (*s)
{
// append a semicolon if not at the beginning
if (s != extensions)
- pos += snprintf(&dest[pos], dest_len - pos, ";");
+ dest.push_back(';');
// append ".*"
- pos += snprintf(&dest[pos], dest_len - pos, "*.");
+ dest.append("*.");
// append the file extension
- while(*s && (*s != ','))
- {
- pos += snprintf(&dest[pos], dest_len - pos, "%c", *s);
- s++;
- }
+ while (*s && (*s != ','))
+ dest.push_back(*s++);
// if we found a comma, advance
while(*s == ',')
s++;
}
- return pos;
}
@@ -2816,26 +2263,23 @@ static int copy_extension_list(char *dest, size_t dest_len, const char *extensio
// add_filter_entry
//============================================================
-static int add_filter_entry(char *dest, size_t dest_len, const char *description, const char *extensions)
+static void add_filter_entry(std::string &dest, const char *description, const char *extensions)
{
- int pos = 0;
-
// add the description
- pos += snprintf(&dest[pos], dest_len - pos, "%s (", description);
+ dest.append(description);
+ dest.append(" (");
// add the extensions to the description
- pos += copy_extension_list(&dest[pos], dest_len - pos, extensions);
+ copy_extension_list(dest, extensions);
// add the trailing rparen and '|' character
- pos += snprintf(&dest[pos], dest_len - pos, ")|");
+ dest.append(")|");
// now add the extension list itself
- pos += copy_extension_list(&dest[pos], dest_len - pos, extensions);
+ copy_extension_list(dest, extensions);
// append a '|'
- pos += snprintf(&dest[pos], dest_len - pos, "|");
-
- return pos;
+ dest.append("|");
}
@@ -2844,55 +2288,36 @@ static int add_filter_entry(char *dest, size_t dest_len, const char *description
// build_generic_filter
//============================================================
-static void build_generic_filter(device_image_interface *dev, bool is_save, char *filter, size_t filter_len)
+static void build_generic_filter(device_image_interface *img, bool is_save, std::string &filter)
{
- char *s;
+ std::string file_extension = img->file_extensions();
- const char *file_extension;
-
- /* copy the string */
- file_extension = dev->file_extensions();
- const char* s2 = ",zip,7z"; // Add ZIP extension as a default.
- char *result = (LPSTR) alloca(strlen(file_extension)+strlen(s2)+1);
- strcpy(result, file_extension);
if (!is_save)
- strcat(result, s2);
-
- // start writing the filter
- s = filter;
+ file_extension.append(",zip,7z");
- // common image types
- s += add_filter_entry(filter, filter_len, "Common image types", result);
- //free(result);
+ add_filter_entry(filter, "Common image types", file_extension.c_str());
- // all files
- s += sprintf(s, "All files (*.*)|*.*|");
+ filter.append("All files (*.*)|*.*|");
- // compressed
if (!is_save)
- s += sprintf(s, "Compressed Images (*.zip;*.7z)|*.zip;*.7z|");
-
- *(s++) = '\0';
+ filter.append("Compressed Images (*.zip;*.7z)|*.zip;*.7z|");
}
//============================================================
// change_device
+// open a dialog box to open or create a software file
//============================================================
static void change_device(HWND wnd, device_image_interface *image, bool is_save)
{
- dialog_box *dialog = NULL;
- char filter[2048];
+ std::string filter;
char filename[MAX_PATH];
const char *initial_dir;
BOOL result = 0;
int create_format = 0;
- option_resolution *create_args = NULL;
-
- // sanity check
- assert(image);
+ util::option_resolution *create_args = NULL;
// get the file
if (image->exists())
@@ -2925,22 +2350,12 @@ static void change_device(HWND wnd, device_image_interface *image, bool is_save)
// NOTE: the working directory can come from the .cfg file. If it's wrong delete the cfg.
//printf("%s = %s = %s = %s\n",dst,working,initial_dir,software_dir);
- // add custom dialog elements, if appropriate
- if (is_save
- && (image->device_get_creation_option_guide())
- && (image->formatlist().front()))
- {
- dialog = build_option_dialog(image, filter, ARRAY_LENGTH(filter), &create_format, &create_args);
- if (!dialog)
- goto done;
- }
- else
- // build a normal filter
- build_generic_filter(image, is_save, filter, ARRAY_LENGTH(filter));
+
+ // build a normal filter
+ build_generic_filter(image, is_save, filter);
// display the dialog
- result = win_file_dialog(image->device().machine(), wnd, is_save ? WIN_FILE_DIALOG_SAVE : WIN_FILE_DIALOG_OPEN,
- dialog, filter, initial_dir, filename, ARRAY_LENGTH(filename));
+ result = win_file_dialog(image->device().machine(), wnd, is_save ? WIN_FILE_DIALOG_SAVE : WIN_FILE_DIALOG_OPEN, filter.c_str(), initial_dir, filename, ARRAY_LENGTH(filename));
if (result)
{
// mount the image
@@ -2952,12 +2367,6 @@ static void change_device(HWND wnd, device_image_interface *image, bool is_save)
// no need to check the returnvalue and show a messagebox anymore.
// a UI message will now be generated by the image code
}
-
-done:
- if (dialog)
- win_dialog_exit(dialog);
- if (create_args)
- option_resolution_close(create_args);
}
@@ -3021,7 +2430,7 @@ static HMENU find_sub_menu(HMENU menu, const char *menutext, bool create_sub_men
while(*menutext)
{
- TCHAR *t_menutext = tstring_from_utf8(menutext);
+ TCHAR *t_menutext = ui_wstring_from_utf8(menutext);
int i = -1;
do
@@ -3199,10 +2608,10 @@ static void prepare_menus(HWND wnd)
speed = window->machine().video().throttled() ? window->machine().video().speed_factor() : 0;
- has_config = window->machine().ioport().type_class_present(INPUT_CLASS_CONFIG);
- has_dipswitch = window->machine().ioport().type_class_present(INPUT_CLASS_DIPSWITCH);
- has_keyboard = window->machine().ioport().type_class_present(INPUT_CLASS_KEYBOARD);
- has_misc = check_for_miscinput(window->machine());
+ has_config = window->machine().ioport().type_class_present(INPUT_CLASS_CONFIG);
+ has_dipswitch = window->machine().ioport().type_class_present(INPUT_CLASS_DIPSWITCH);
+ has_keyboard = window->machine().ioport().type_class_present(INPUT_CLASS_KEYBOARD);
+ has_misc = check_for_miscinput(window->machine());
has_analog = 0;
for (auto &port : window->machine().ioport().ports())
@@ -3274,9 +2683,8 @@ static void prepare_menus(HWND wnd)
view_index = window->m_target->view();
while((view_name = window->m_target->view_name(i)))
{
- TCHAR *t_view_name = tstring_from_utf8(view_name);
- InsertMenu(video_menu, i, MF_BYPOSITION | (i == view_index ? MF_CHECKED : 0),
- ID_VIDEO_VIEW_0 + i, t_view_name);
+ TCHAR *t_view_name = ui_wstring_from_utf8(view_name);
+ InsertMenu(video_menu, i, MF_BYPOSITION | (i == view_index ? MF_CHECKED : 0), ID_VIDEO_VIEW_0 + i, t_view_name);
osd_free(t_view_name);
i++;
}
@@ -3312,8 +2720,8 @@ static void prepare_menus(HWND wnd)
cassette_state state;
state = (cassette_state)(img.exists() ? (dynamic_cast<cassette_image_device*>(&img.device())->get_state() & CASSETTE_MASK_UISTATE) : CASSETTE_STOPPED);
win_append_menu_utf8(sub_menu, MF_SEPARATOR, 0, NULL);
- win_append_menu_utf8(sub_menu, flags_for_exists | ((state == CASSETTE_STOPPED) ? MF_CHECKED : 0), new_item + DEVOPTION_CASSETTE_STOPPAUSE, "Pause/Stop");
- win_append_menu_utf8(sub_menu, flags_for_exists | ((state == CASSETTE_PLAY) ? MF_CHECKED : 0), new_item + DEVOPTION_CASSETTE_PLAY, "Play");
+ win_append_menu_utf8(sub_menu, flags_for_exists | ((state == CASSETTE_STOPPED) ? MF_CHECKED : 0), new_item + DEVOPTION_CASSETTE_STOPPAUSE, "Pause/Stop");
+ win_append_menu_utf8(sub_menu, flags_for_exists | ((state == CASSETTE_PLAY) ? MF_CHECKED : 0), new_item + DEVOPTION_CASSETTE_PLAY, "Play");
win_append_menu_utf8(sub_menu, flags_for_writing | ((state == CASSETTE_RECORD) ? MF_CHECKED : 0), new_item + DEVOPTION_CASSETTE_RECORD, "Record");
win_append_menu_utf8(sub_menu, flags_for_exists, new_item + DEVOPTION_CASSETTE_REWIND, "Rewind");
win_append_menu_utf8(sub_menu, flags_for_exists, new_item + DEVOPTION_CASSETTE_FASTFORWARD, "Fast Forward");
@@ -3395,10 +2803,7 @@ static void win_toggle_menubar(void)
{
RECT window_rect;
GetWindowRect(hwnd, &window_rect);
- SetWindowPos(hwnd, HWND_TOP, 0, 0,
- window_rect.right - window_rect.left + width_diff,
- window_rect.bottom - window_rect.top + height_diff,
- SWP_NOMOVE | SWP_NOZORDER);
+ SetWindowPos(hwnd, HWND_TOP, 0, 0, window_rect.right - window_rect.left + width_diff, window_rect.bottom - window_rect.top + height_diff, SWP_NOMOVE | SWP_NOZORDER);
}
RedrawWindow(hwnd, NULL, NULL, 0);
@@ -3409,6 +2814,7 @@ static void win_toggle_menubar(void)
//============================================================
// device_command
+// This handles all options under the "Media" dropdown
//============================================================
static void device_command(HWND wnd, device_image_interface *img, int devoption)
@@ -3489,7 +2895,7 @@ static void help_display(HWND wnd, const char *chapter)
if (!is_windowed())
winwindow_toggle_full_screen();
- TCHAR *t_chapter = tstring_from_utf8(chapter);
+ TCHAR *t_chapter = ui_wstring_from_utf8(chapter);
// htmlhelp(wnd, t_chapter, 0 /*HH_DISPLAY_TOPIC*/, 0);
// TCHAR *szSite = new TCHAR[100];
// _tcscpy(szSite, TEXT("http://messui.the-chronicles.org/onlinehelp/"));
@@ -3585,10 +2991,10 @@ static int pause_for_command(UINT command)
// invoke_command
//============================================================
-static int invoke_command(HWND wnd, UINT command)
+static bool invoke_command(HWND wnd, UINT command)
{
std::string error_string;
- int handled = 1;
+ bool handled = TRUE;
int dev_command = 0;
device_image_interface *img;
LONG_PTR ptr = GetWindowLongPtr(wnd, GWLP_USERDATA);
@@ -3772,13 +3178,9 @@ static int invoke_command(HWND wnd, UINT command)
window->m_target->set_view(command - ID_VIDEO_VIEW_0);
window->update(); // actually change window size
}
-// else
-// if (input_item_from_serial_number(window->machine(), command - ID_INPUT_0, NULL, &field, &setting))
- // should never happen
-// handled = 0;
else
// bogus command
- handled = 0;
+ handled = FALSE;
break;
}
@@ -3802,7 +3204,7 @@ static void set_menu_text(HMENU menu_bar, int command, const char *text)
MENUITEMINFO mii;
// convert to TCHAR
- t_text = tstring_from_utf8(text);
+ t_text = ui_wstring_from_utf8(text);
// invoke SetMenuItemInfo()
memset(&mii, 0, sizeof(mii));
@@ -3854,8 +3256,7 @@ static int win_setup_menus(running_machine &machine, HMODULE module, HMENU menu_
char *src;
char *dst;
- snprintf(state_filename, ARRAY_LENGTH(state_filename),
- "%s State", machine.system().description);
+ snprintf(state_filename, ARRAY_LENGTH(state_filename), "%s State", machine.system().description);
src = state_filename;
dst = state_filename;
diff --git a/docs/release/src/osd/winui/newui.h b/docs/release/src/osd/winui/newui.h
index 5ad8c9fa638..e0cc3f07b9f 100644
--- a/docs/release/src/osd/winui/newui.h
+++ b/docs/release/src/osd/winui/newui.h
@@ -20,7 +20,6 @@
#include "ui/ui.h"
#include "newuires.h"
#include "strconv.h"
-#include "debug/debugcpu.h"
#include "imagedev/cassette.h"
#include "windows/window.h"
#include "winutf8.h"
@@ -28,7 +27,7 @@
// These are called from src/osd/windows/windows.c and
-// provide the linkage between newui and the core.
+// provide the linkage between newui and the core.
LRESULT CALLBACK winwindow_video_window_proc_ui(HWND wnd, UINT message, WPARAM wparam, LPARAM lparam);
diff --git a/docs/release/src/osd/winui/properties.cpp b/docs/release/src/osd/winui/properties.cpp
index 5b7fa44c37b..03cab233107 100644
--- a/docs/release/src/osd/winui/properties.cpp
+++ b/docs/release/src/osd/winui/properties.cpp
@@ -535,13 +535,13 @@ void InitPropertyPageToPage(HINSTANCE hInst, HWND hWnd, HICON hIcon, OPTIONS_TYP
switch( opt_type )
{
case OPTIONS_GAME:
- t_description = tstring_from_utf8(ModifyThe(driver_list::driver(g_nGame).description));
+ t_description = ui_wstring_from_utf8(ModifyThe(driver_list::driver(g_nGame).description));
break;
case OPTIONS_SOURCE:
- t_description = tstring_from_utf8(GetDriverFilename(g_nGame));
+ t_description = ui_wstring_from_utf8(GetDriverFilename(g_nGame));
break;
case OPTIONS_GLOBAL:
- t_description = tstring_from_utf8("Default Settings");
+ t_description = ui_wstring_from_utf8("Default Settings");
break;
default:
return;
@@ -1753,7 +1753,7 @@ static BOOL ScreenReadControl(datamap *map, HWND dialog, HWND control, windows_o
screen_option_index = ComboBox_GetCurSel(control);
screen_option_value = (TCHAR*) ComboBox_GetItemData(control, screen_option_index);
snprintf(screen_option_name, ARRAY_LENGTH(screen_option_name), "screen%d", selected_screen);
- op_val = utf8_from_tstring(screen_option_value);
+ op_val = ui_utf8_from_wstring(screen_option_value);
opts->set_value(screen_option_name, op_val, OPTION_PRIORITY_CMDLINE,error_string);
osd_free(op_val);
return FALSE;
@@ -1772,7 +1772,7 @@ static BOOL ScreenPopulateControl(datamap *map, HWND dialog, HWND control, windo
/* Remove all items in the list. */
res = ComboBox_ResetContent(control);
res = ComboBox_InsertString(control, 0, TEXT("Auto"));
- res = ComboBox_SetItemData(control, 0, (void*)tstring_from_utf8("auto"));
+ res = ComboBox_SetItemData(control, 0, (void*)ui_wstring_from_utf8("auto"));
//Dynamically populate it, by enumerating the Monitors
//iMonitors = GetSystemMetrics(SM_CMONITORS); // this gets the count of monitors attached
@@ -1789,7 +1789,7 @@ static BOOL ScreenPopulateControl(datamap *map, HWND dialog, HWND control, windo
res = ComboBox_SetItemData(control, i+1, (void*)win_tstring_strdup(dd.DeviceName));
snprintf(screen_option, ARRAY_LENGTH(screen_option), "screen%d", GetSelectedScreen(dialog));
- t_option = tstring_from_utf8(opts->value(screen_option));
+ t_option = ui_wstring_from_utf8(opts->value(screen_option));
if( !t_option )
return FALSE;
if (_tcscmp(t_option, dd.DeviceName) == 0)
@@ -1866,7 +1866,7 @@ static BOOL DefaultInputReadControl(datamap *map, HWND dialog, HWND control, win
input_option_index = ComboBox_GetCurSel(control);
input_option_value = (TCHAR*) ComboBox_GetItemData(control, input_option_index);
- op_val = utf8_from_tstring(input_option_value);
+ op_val = ui_utf8_from_wstring(input_option_value);
opts->set_value(OPTION_CTRLR, input_option_index ? op_val : "", OPTION_PRIORITY_CMDLINE,error_string);
osd_free(op_val);
return FALSE;
@@ -1890,7 +1890,7 @@ static BOOL DefaultInputPopulateControl(datamap *map, HWND dialog, HWND control,
ctrlr_option = opts->value(OPTION_CTRLR);
if( ctrlr_option )
{
- t_buf = tstring_from_utf8(ctrlr_option);
+ t_buf = ui_wstring_from_utf8(ctrlr_option);
if( !t_buf )
return FALSE;
t_ctrlr_option = t_buf;
@@ -1906,7 +1906,7 @@ static BOOL DefaultInputPopulateControl(datamap *map, HWND dialog, HWND control,
res = ComboBox_SetItemData(control, index, "");
index++;
- t_ctrldir = tstring_from_utf8(GetCtrlrDir());
+ t_ctrldir = ui_wstring_from_utf8(GetCtrlrDir());
if( !t_ctrldir )
{
if( t_buf )
@@ -2043,7 +2043,7 @@ static BOOL ResolutionPopulateControl(datamap *map, HWND dialog, HWND control_,
// determine which screen we're using
snprintf(screen_option, ARRAY_LENGTH(screen_option), "screen%d", GetSelectedScreen(dialog));
screen = opts->value(screen_option);
- t_screen = tstring_from_utf8(screen);
+ t_screen = ui_wstring_from_utf8(screen);
// retrieve screen information
devmode.dmSize = sizeof(devmode);
@@ -2654,7 +2654,7 @@ static void InitializeBIOSUI(HWND hwnd)
{
const char *name = ROM_GETHASHDATA(rom);
const char *biosname = ROM_GETNAME(rom);
- t_s = tstring_from_utf8(name);
+ t_s = ui_wstring_from_utf8(name);
if( !t_s )
return;
res = ComboBox_InsertString(hCtrl, i, win_tstring_strdup(t_s));
@@ -2683,7 +2683,7 @@ static void InitializeBIOSUI(HWND hwnd)
{
const char *name = ROM_GETHASHDATA(rom);
const char *biosname = ROM_GETNAME(rom);
- t_s = tstring_from_utf8(name);
+ t_s = ui_wstring_from_utf8(name);
if( !t_s )
return;
res = ComboBox_InsertString(hCtrl, i, win_tstring_strdup(t_s));
@@ -2918,7 +2918,7 @@ static BOOL DirListReadControl(datamap *map, HWND dialog, HWND control, windows_
pos += _tcslen(&buffer[pos]);
}
- const char* paths = utf8_from_tstring(buffer);
+ const char* paths = ui_utf8_from_wstring(buffer);
if ((buffer[1] == 0x3A) || (buffer[0] == 0)) // must be a folder or null
{
std::string error_string;
@@ -2943,7 +2943,7 @@ static BOOL DirListPopulateControl(datamap *map, HWND dialog, HWND control, wind
windows_options o;
load_options(o, driver_index);
const char* paths = o.value(OPTION_COMMENT_DIRECTORY);
- TCHAR* t_dir_list = tstring_from_utf8(paths);
+ TCHAR* t_dir_list = ui_wstring_from_utf8(paths);
paths = 0;
if (!t_dir_list)
return FALSE;
@@ -3055,7 +3055,7 @@ static BOOL RamPopulateControl(datamap *map, HWND dialog, HWND control, windows_
char tmpval[20] ;
ram = ramdev->default_size();
messram_string(tmpval,ram);
- t_ramstring = tstring_from_utf8(tmpval);
+ t_ramstring = ui_wstring_from_utf8(tmpval);
if( !t_ramstring )
return FALSE;
@@ -3084,7 +3084,7 @@ static BOOL RamPopulateControl(datamap *map, HWND dialog, HWND control, windows_
this_ram_string = p;
- t_ramstring = tstring_from_utf8(this_ram_string);
+ t_ramstring = ui_wstring_from_utf8(this_ram_string);
if( !t_ramstring )
return FALSE;
diff --git a/docs/release/src/osd/winui/tabview.cpp b/docs/release/src/osd/winui/tabview.cpp
index 9b9b30dc49c..7c2fce7d69a 100644
--- a/docs/release/src/osd/winui/tabview.cpp
+++ b/docs/release/src/osd/winui/tabview.cpp
@@ -286,7 +286,7 @@ void TabView_Reset(HWND hwndTabView)
{
if (!pTabViewInfo->pCallbacks->pfnGetShowTab || pTabViewInfo->pCallbacks->pfnGetShowTab(i))
{
- t_text = tstring_from_utf8(pTabViewInfo->pCallbacks->pfnGetTabLongName(i));
+ t_text = ui_wstring_from_utf8(pTabViewInfo->pCallbacks->pfnGetTabLongName(i));
if( !t_text )
return;
tci.pszText = t_text;
diff --git a/docs/release/src/osd/winui/treeview.cpp b/docs/release/src/osd/winui/treeview.cpp
index eefaf0f4761..c1338b2998f 100644
--- a/docs/release/src/osd/winui/treeview.cpp
+++ b/docs/release/src/osd/winui/treeview.cpp
@@ -147,11 +147,11 @@ static BOOL win_move_file_utf8(const char* existingfilename, const char* newfile
TCHAR* t_newfilename;
BOOL result = FALSE;
- t_existingfilename = tstring_from_utf8(existingfilename);
+ t_existingfilename = ui_wstring_from_utf8(existingfilename);
if( !t_existingfilename )
return result;
- t_newfilename = tstring_from_utf8(newfilename);
+ t_newfilename = ui_wstring_from_utf8(newfilename);
if( !t_newfilename ) {
free(t_existingfilename);
return result;
@@ -1095,10 +1095,10 @@ void CreateDumpingFolders(int parent_index)
if (ROMREGION_ISROMDATA(region) || ROMREGION_ISDISKDATA(region) )
{
//name = ROM_GETNAME(rom);
- hash_collection hashes(ROM_GETHASHDATA(rom));
- if (hashes.flag(hash_collection::FLAG_BAD_DUMP))
+ util::hash_collection hashes(ROM_GETHASHDATA(rom));
+ if (hashes.flag(util::hash_collection::FLAG_BAD_DUMP))
bBadDump = TRUE;
- if (hashes.flag(hash_collection::FLAG_NO_DUMP))
+ if (hashes.flag(util::hash_collection::FLAG_NO_DUMP))
bNoDump = TRUE;
}
}
@@ -1560,7 +1560,7 @@ static LPTREEFOLDER NewFolder(const char *lpTitle, UINT nFolderId, int nParent,
memset(lpFolder, '\0', sizeof (TREEFOLDER));
lpFolder->m_lpTitle = (LPSTR)malloc(strlen(lpTitle) + 1);
strcpy((char *)lpFolder->m_lpTitle,lpTitle);
- lpFolder->m_lptTitle = tstring_from_utf8(lpFolder->m_lpTitle);
+ lpFolder->m_lptTitle = ui_wstring_from_utf8(lpFolder->m_lpTitle);
lpFolder->m_lpGameBits = NewBits(driver_list::total());
lpFolder->m_nFolderId = nFolderId;
lpFolder->m_nParent = nParent;
diff --git a/docs/release/src/osd/winui/winui.cpp b/docs/release/src/osd/winui/winui.cpp
index b46ed105e18..2786e6b2234 100644
--- a/docs/release/src/osd/winui/winui.cpp
+++ b/docs/release/src/osd/winui/winui.cpp
@@ -999,7 +999,7 @@ int MameUIMain(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow)
return 999;
for (i = 0; i < __argc; i++)
{
- utf8_argv[i] = utf8_from_tstring(__targv[i]);
+ utf8_argv[i] = ui_utf8_from_wstring(__targv[i]);
if (utf8_argv[i] == NULL)
{
free(utf8_argv);
@@ -1674,7 +1674,7 @@ static BOOL Win32UI_init(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow)
HelpInit();
- t_inpdir = tstring_from_utf8(GetInpDir());
+ t_inpdir = ui_wstring_from_utf8(GetInpDir());
if( ! t_inpdir )
return FALSE;
@@ -2839,7 +2839,7 @@ static void CopyToolTipText(LPTOOLTIPTEXT lpttt)
SendMessage(hStatusBar, SB_GETTEXT, (WPARAM)iButton, (LPARAM)&String );
else {
//for first pane we get the Status directly, to get the line breaks
- t_gameinfostatus = tstring_from_utf8( GameInfoStatus(Picker_GetSelectedItem(hwndList), FALSE));
+ t_gameinfostatus = ui_wstring_from_utf8( GameInfoStatus(Picker_GetSelectedItem(hwndList), FALSE));
if( !t_gameinfostatus )
return;
_tcscpy(String, t_gameinfostatus);
@@ -3045,7 +3045,7 @@ static void EnableSelection(int nGame)
HMENU hMenu = GetMenu(hMain);
TCHAR* t_description;
- t_description = tstring_from_utf8(ConvertAmpersandString(ModifyThe(driver_list::driver(nGame).description)));
+ t_description = ui_wstring_from_utf8(ConvertAmpersandString(ModifyThe(driver_list::driver(nGame).description)));
if( !t_description )
return;
@@ -3202,7 +3202,7 @@ static BOOL TreeViewNotify(LPNMHDR nm)
if (ptvdi->item.pszText == NULL || _tcslen(ptvdi->item.pszText) == 0)
return FALSE;
- utf8_szText = utf8_from_tstring(ptvdi->item.pszText);
+ utf8_szText = ui_utf8_from_wstring(ptvdi->item.pszText);
if( !utf8_szText )
return FALSE;
@@ -3571,7 +3571,7 @@ static void PollGUIJoystick()
si.cb = sizeof(si);
exec_command = GetExecCommand();
- t_exec_command = tstring_from_utf8(exec_command);
+ t_exec_command = ui_wstring_from_utf8(exec_command);
if( !t_exec_command )
return;
CreateProcess(NULL, t_exec_command, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
@@ -4316,7 +4316,7 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify)
if (as[t1] == '\\') as[t1]='\0';
t1 = as.find(':');
if (t1 > 0)
- t_bgdir = tstring_from_utf8(as.c_str());
+ t_bgdir = ui_wstring_from_utf8(as.c_str());
OPENFILENAME OFN;
static TCHAR szFile[MAX_PATH] = TEXT("\0");
@@ -4347,7 +4347,7 @@ static BOOL MameCommand(HWND hwnd,int id, HWND hwndCtl, UINT codeNotify)
if (GetOpenFileName(&OFN))
{
osd_free(t_bgdir);
- utf8_szFile = utf8_from_tstring(szFile);
+ utf8_szFile = ui_utf8_from_wstring(szFile);
if( !utf8_szFile )
return FALSE;
@@ -4663,7 +4663,7 @@ static const TCHAR *GamePicker_GetItemString(HWND hwndPicker, int nItem, int nCo
if( utf8_s )
{
- TCHAR* t_s = tstring_from_utf8(utf8_s);
+ TCHAR* t_s = ui_wstring_from_utf8(utf8_s);
if( !t_s )
return s;
@@ -4746,7 +4746,7 @@ static void InitListView()
res = ListView_SetTextBkColor(hwndList, CLR_NONE);
res = ListView_SetBkColor(hwndList, CLR_NONE);
- t_bgdir = tstring_from_utf8(GetBgDir());
+ t_bgdir = ui_wstring_from_utf8(GetBgDir());
if( !t_bgdir )
return;
@@ -5140,7 +5140,7 @@ BOOL CommonFileDialog(common_file_dialog_proc cfd, char *filename, int filetype)
char *utf8_filename;
// convert the filename to UTF-8 and copy into buffer
- t_filename = tstring_from_utf8(filename);
+ t_filename = ui_wstring_from_utf8(filename);
if (t_filename)
{
_sntprintf(t_filename_buffer, ARRAY_LENGTH(t_filename_buffer), TEXT("%s"), t_filename);
@@ -5222,7 +5222,7 @@ BOOL CommonFileDialog(common_file_dialog_proc cfd, char *filename, int filetype)
dirname.resize(i);
if (dirname.empty())
dirname = ".";
- ofn.lpstrInitialDir = tstring_from_utf8(dirname.c_str());
+ ofn.lpstrInitialDir = ui_wstring_from_utf8(dirname.c_str());
ofn.lpstrTitle = NULL;
ofn.Flags = OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
@@ -5239,7 +5239,7 @@ BOOL CommonFileDialog(common_file_dialog_proc cfd, char *filename, int filetype)
/*GetDirectory(filename,last_directory,sizeof(last_directory));*/
}
- utf8_filename = utf8_from_tstring(t_filename_buffer);
+ utf8_filename = ui_utf8_from_wstring(t_filename_buffer);
if (utf8_filename)
{
snprintf(filename, MAX_PATH, "%s", utf8_filename);
@@ -5251,7 +5251,7 @@ BOOL CommonFileDialog(common_file_dialog_proc cfd, char *filename, int filetype)
void SetStatusBarText(int part_index, const char *message)
{
- TCHAR* t_message = tstring_from_utf8(message);
+ TCHAR* t_message = ui_wstring_from_utf8(message);
if( !t_message )
return;
SendMessage(hStatusBar, SB_SETTEXT, (WPARAM) part_index, (LPARAM)(LPCTSTR) win_tstring_strdup(t_message));
@@ -5849,7 +5849,7 @@ static void UpdateMenu(HMENU hMenu)
if (have_selection)
{
- t_description = tstring_from_utf8(ConvertAmpersandString(ModifyThe(driver_list::driver(nGame).description)));
+ t_description = ui_wstring_from_utf8(ConvertAmpersandString(ModifyThe(driver_list::driver(nGame).description)));
if( !t_description )
return;
@@ -5965,7 +5965,7 @@ void InitTreeContextMenu(HMENU hTreeMenu)
for (i=0;g_folderData[i].m_lpTitle;i++)
{
- TCHAR* t_title = tstring_from_utf8(g_folderData[i].m_lpTitle);
+ TCHAR* t_title = ui_wstring_from_utf8(g_folderData[i].m_lpTitle);
if( !t_title )
return;
diff --git a/docs/release/src/version.cpp b/docs/release/src/version.cpp
index 5f46a84a9bd..5e42933f341 100644
--- a/docs/release/src/version.cpp
+++ b/docs/release/src/version.cpp
@@ -8,7 +8,7 @@
***************************************************************************/
-#define BARE_BUILD_VERSION "0.175"
+#define BARE_BUILD_VERSION "0.176"
extern const char bare_build_version[];
extern const char build_version[];