diff options
| author | 2016-06-18 17:15:17 +0200 | |
|---|---|---|
| committer | 2016-06-18 17:15:17 +0200 | |
| commit | b4beaa37b744c8b2804ff398e373e035a7e8941c (patch) | |
| tree | 93b7a1edcfb25197fce1028959f1f494fa3d461b | |
| parent | 0213201d1d902f7f166afd8f0ded227b009dfc07 (diff) | |
| parent | 1ad39fd8250863ff4c7f90e84d971db006085a17 (diff) | |
Merge remote-tracking branch 'mainline/master'
914 files changed, 30722 insertions, 12341 deletions
diff --git a/.drone.yml b/.drone.yml index ef898228c9a..8e7f15a17d6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -10,6 +10,7 @@ build: - SUBTARGET=tiny - MINGW32=/c/msys32/mingw32 - MAME_EXE=mametiny.exe + - IGNORE_GIT=1 # - SOURCES=src/mame/drivers/pacman.cpp commands: # - pacman -S -q --noprogressbar --noconfirm winpty diff --git a/.travis.yml b/.travis.yml index a582da5666d..9ca2e07d7be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,8 +23,8 @@ env: script: - if [ $TRAVIS_OS_NAME == 'linux' ]; then if [ $CC == 'clang' ]; then - make -j2 OVERRIDE_CXX="clang++-3.6" OVERRIDE_CC="clang-3.6" && ./$MAME -validate; - else make -j4 OPTIMIZE=0 OVERRIDE_CC="gcc-5" OVERRIDE_CXX="g++-5" && ./$MAME -validate; + make -j2 IGNORE_GIT=1 OVERRIDE_CXX="clang++-3.6" OVERRIDE_CC="clang-3.6" && ./$MAME -validate; + else make -j4 IGNORE_GIT=1 OPTIMIZE=0 OVERRIDE_CC="gcc-5" OVERRIDE_CXX="g++-5" && ./$MAME -validate; fi elif [ $TRAVIS_OS_NAME == 'osx' ]; then unset LDOPTS && make -j2 OPTIMIZE=0 USE_LIBSDL=1 && ./$MAME -validate; @@ -43,4 +43,4 @@ branches: - master notifications: email: false -
\ No newline at end of file + diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp index 752cd42b666..62bbd8c3bc5 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp @@ -1415,9 +1415,9 @@ void ImGui::ShowTestWindow(bool* p_open) ImGui::InputFloat("blue", &bar, 0.05f, 0, 3); ImGui::NextColumn(); - if (ImGui::CollapsingHeader("Category A")) ImGui::Text("Blah blah blah"); ImGui::NextColumn(); - if (ImGui::CollapsingHeader("Category B")) ImGui::Text("Blah blah blah"); ImGui::NextColumn(); - if (ImGui::CollapsingHeader("Category C")) ImGui::Text("Blah blah blah"); ImGui::NextColumn(); + if (ImGui::CollapsingHeader("Category A")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn(); + if (ImGui::CollapsingHeader("Category B")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn(); + if (ImGui::CollapsingHeader("Category C")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn(); ImGui::Columns(1); ImGui::Separator(); ImGui::TreePop(); @@ -1873,9 +1873,9 @@ static void ShowExampleAppConstrainedResize(bool* p_open) "Custom: Fixed Steps (100)", }; ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc)); - if (ImGui::Button("200x200")) ImGui::SetWindowSize(ImVec2(200,200)); ImGui::SameLine(); - if (ImGui::Button("500x500")) ImGui::SetWindowSize(ImVec2(500,500)); ImGui::SameLine(); - if (ImGui::Button("800x200")) ImGui::SetWindowSize(ImVec2(800,200)); + if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200,200)); } ImGui::SameLine(); + if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500,500)); } ImGui::SameLine(); + if (ImGui::Button("800x200")) { ImGui::SetWindowSize(ImVec2(800,200)); } for (int i = 0; i < 10; i++) ImGui::Text("Hello, sailor! Making this line long enough for the example."); } @@ -2088,8 +2088,8 @@ struct ExampleAppConsole // TODO: display items starting from the bottom if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine(); - if (ImGui::SmallButton("Add Dummy Error")) AddLog("[error] something went wrong"); ImGui::SameLine(); - if (ImGui::SmallButton("Clear")) ClearLog(); ImGui::SameLine(); + if (ImGui::SmallButton("Add Dummy Error")) { AddLog("[error] something went wrong"); } ImGui::SameLine(); + if (ImGui::SmallButton("Clear")) { ClearLog(); } ImGui::SameLine(); if (ImGui::SmallButton("Scroll to bottom")) ScrollToBottom = true; //static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); } @@ -2143,7 +2143,7 @@ struct ExampleAppConsole if (ImGui::InputText("Input", InputBuf, IM_ARRAYSIZE(InputBuf), ImGuiInputTextFlags_EnterReturnsTrue|ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_CallbackHistory, &TextEditCallbackStub, (void*)this)) { char* input_end = InputBuf+strlen(InputBuf); - while (input_end > InputBuf && input_end[-1] == ' ') input_end--; *input_end = 0; + while (input_end > InputBuf && input_end[-1] == ' ') { input_end--; } *input_end = 0; if (InputBuf[0]) ExecCommand(InputBuf); strcpy(InputBuf, ""); diff --git a/3rdparty/bgfx/3rdparty/stb/stb_image.c b/3rdparty/bgfx/3rdparty/stb/stb_image.c index ad26b74f55d..16e04103441 100644 --- a/3rdparty/bgfx/3rdparty/stb/stb_image.c +++ b/3rdparty/bgfx/3rdparty/stb/stb_image.c @@ -1375,18 +1375,18 @@ static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int r // convert source image with img_n components to one with req_comp components; // avoid switch per pixel, so use switch per scanline and massive macros switch (COMBO(img_n, req_comp)) { - CASE(1,2) dest[0]=src[0], dest[1]=255; break; - CASE(1,3) dest[0]=dest[1]=dest[2]=src[0]; break; - CASE(1,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; break; - CASE(2,1) dest[0]=src[0]; break; - CASE(2,3) dest[0]=dest[1]=dest[2]=src[0]; break; - CASE(2,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; break; - CASE(3,4) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; break; - CASE(3,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break; - CASE(3,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = 255; break; - CASE(4,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break; - CASE(4,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = src[3]; break; - CASE(4,3) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; break; + CASE(1,2) { dest[0]=src[0]; dest[1]=255; } break; + CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=255; } break; + CASE(2,1) { dest[0]=src[0]; } break; + CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + CASE(3,4) { dest[0]=src[0]; dest[1]=src[1]; dest[2]=src[2]; dest[3]=255; } break; + CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = 255; } break; + CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = src[3]; } break; + CASE(4,3) { dest[0]=src[0]; dest[1]=src[1]; dest[2]=src[2]; } break; default: STBI_ASSERT(0); } #undef CASE @@ -4101,12 +4101,12 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r switch (filter) { // "none" filter turns into a memcpy here; make that explicit. case STBI__F_none: memcpy(cur, raw, nk); break; - CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); break; - CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); break; - CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); break; - CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); break; - CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); break; + CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); } break; + CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); } break; + CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); } break; + CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); } break; + CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); } break; } #undef CASE raw += nk; @@ -4117,13 +4117,13 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ for (k=0; k < filter_bytes; ++k) switch (filter) { - CASE(STBI__F_none) cur[k] = raw[k]; break; - CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); break; - CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); break; - CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); break; - CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); break; - CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); break; + CASE(STBI__F_none) { cur[k] = raw[k]; } break; + CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); } break; + CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); } break; + CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); } break; + CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); } break; + CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); } break; } #undef CASE diff --git a/3rdparty/genie/src/actions/fastbuild/fastbuild_project.lua b/3rdparty/genie/src/actions/fastbuild/fastbuild_project.lua index 17f95a98e2e..ba0b98a4298 100644 --- a/3rdparty/genie/src/actions/fastbuild/fastbuild_project.lua +++ b/3rdparty/genie/src/actions/fastbuild/fastbuild_project.lua @@ -155,14 +155,18 @@ local function compile(indentlevel, prj, cfg, commonbasepath) end if cfg.flags.Symbols then - if (premake.config.isoptimizedbuild(cfg.flags) - or cfg.flags.NoEditAndContinue) then - table.insert(compileroptions, '/Zi') + if (cfg.flags.C7DebugInfo) then + table.insert(compileroptions, '/Z7') else - table.insert(compileroptions, '/ZI') + if (premake.config.isoptimizedbuild(cfg.flags) + or cfg.flags.NoEditAndContinue) then + table.insert(compileroptions, '/Zi') + else + table.insert(compileroptions, '/ZI') + end + local targetdir = add_trailing_backslash(cfg.buildtarget.directory) + table.insert(compileroptions, string.format("/Fd\"%s%s.pdb\"", targetdir, cfg.buildtarget.basename)) end - local targetdir = add_trailing_backslash(cfg.buildtarget.directory) - table.insert(compileroptions, string.format("/Fd\"%s%s.pdb\"", targetdir, cfg.buildtarget.basename)) end local isoptimised = true diff --git a/3rdparty/genie/src/actions/make/make_cpp.lua b/3rdparty/genie/src/actions/make/make_cpp.lua index c6da55c23d8..8b2b96abe75 100644 --- a/3rdparty/genie/src/actions/make/make_cpp.lua +++ b/3rdparty/genie/src/actions/make/make_cpp.lua @@ -480,10 +480,9 @@ table.sort(prj.files) for _, file in ipairs(prj.files or {}) do if path.isSourceFile(file) then - _p('$(OBJDIR)/%s.o: %s $(GCH) %s' + _p('$(OBJDIR)/%s.o: %s $(GCH)' , _MAKE.esc(path.trimdots(path.removeext(file))) , _MAKE.esc(file) - , _MAKE.getmakefilename(prj, true) ) if (path.isobjcfile(file) and prj.msgcompile_objc) then _p('\t@echo ' .. prj.msgcompile_objc) diff --git a/3rdparty/genie/src/actions/vstudio/vs2010_vcxproj.lua b/3rdparty/genie/src/actions/vstudio/vs2010_vcxproj.lua index 4199f7cefed..55fbe5e58e4 100644 --- a/3rdparty/genie/src/actions/vstudio/vs2010_vcxproj.lua +++ b/3rdparty/genie/src/actions/vstudio/vs2010_vcxproj.lua @@ -298,12 +298,14 @@ -- local debug_info = '' if cfg.flags.Symbols then - if (action.vstudio.supports64bitEditContinue == false and cfg.platform == "x64") + if cfg.flags.C7DebugInfo then + debug_info = "OldStyle" + elseif (action.vstudio.supports64bitEditContinue == false and cfg.platform == "x64") or cfg.flags.Managed or premake.config.isoptimizedbuild(cfg.flags) or cfg.flags.NoEditAndContinue then - debug_info = "ProgramDatabase" + debug_info = "ProgramDatabase" else debug_info = "EditAndContinue" end diff --git a/3rdparty/genie/src/base/api.lua b/3rdparty/genie/src/base/api.lua index 4eae4a6c6d7..b76982662a0 100644 --- a/3rdparty/genie/src/base/api.lua +++ b/3rdparty/genie/src/base/api.lua @@ -143,6 +143,7 @@ local allowed_flags = { ATL = 1, + C7DebugInfo = 1, DebugEnvsDontMerge = 1, DebugEnvsInherit = 1, DeploymentContent = 1, diff --git a/3rdparty/genie/src/base/bake.lua b/3rdparty/genie/src/base/bake.lua index e39fa6c7744..4beb158764c 100644 --- a/3rdparty/genie/src/base/bake.lua +++ b/3rdparty/genie/src/base/bake.lua @@ -175,10 +175,14 @@ end local function removevalues(tbl, removes) - for i=#tbl,1,-1 do + for k, v in pairs(tbl) do for _, pattern in ipairs(removes) do - if pattern == tbl[i] then - table.remove(tbl, i) + if pattern == tbl[k] then + if type(k) == "number" then + table.remove(tbl, k) + else + tbl[k] = nil + end break end end diff --git a/3rdparty/genie/src/base/premake.lua b/3rdparty/genie/src/base/premake.lua index 292e42eca6b..ac5bd2af163 100644 --- a/3rdparty/genie/src/base/premake.lua +++ b/3rdparty/genie/src/base/premake.lua @@ -22,43 +22,18 @@ function premake.generate(obj, filename, callback) filename = premake.project.getfilename(obj, filename) + printf("Generating %s...", filename) - io.capture() - callback(obj) - local new = io.endcapture() - - local delta = false - - local f, err = io.open(filename, "rb") + local f, err = io.open(filename, "wb") if (not f) then - if string.find(err, "No such file or directory") then - delta = true - else - error(err, 0) - end - else - local existing = f:read("*all") - if existing ~= new then - delta = true - end - f:close() + error(err, 0) end - if delta then - printf("Generating %s...", filename) - local f, err = io.open(filename, "wb") - if (not f) then - error(err, 0) - end - - f:write(new) - f:close() - else - printf("Skipping %s as its contents would not change.", filename) - end + io.output(f) + callback(obj) + f:close() end - -- -- Finds a valid premake build file in the specified directory -- Used by both the main genie process, and include commands diff --git a/3rdparty/genie/src/host/scripts.c b/3rdparty/genie/src/host/scripts.c index f66e49ae476..ed1242f0fc8 100644 --- a/3rdparty/genie/src/host/scripts.c +++ b/3rdparty/genie/src/host/scripts.c @@ -70,37 +70,37 @@ const char* builtin_scripts[] = { /* base/bake.lua */ "premake.bake = { }\nlocal bake = premake.bake\nlocal nocopy =\n{\nblocks = true,\nkeywords = true,\nprojects = true,\n__configs = true,\n}\nlocal nocascade =\n{\nmakesettings = true,\n}\nlocal keeprelative =\n{\nbasedir = true,\nlocation = true,\n}\nfunction premake.getactiveterms()\nlocal terms = { _action = _ACTION:lower(), os = os.get() }\nfor key, value in pairs(_OPTIONS) do\nif value ~= \"\" then\ntable.insert(terms, value:lower())\nelse\ntable.insert(terms, key:lower())\nend\nend\nreturn terms\nend\nfunction premake.iskeywordmatch(keyword, terms)\nif keyword:startswith(\"not \") then\nreturn not premake.iskeywordmatch(keyword:sub(5), terms)\nend\nfor _, pattern in ipairs(keyword:explode(\" or \")) do\nfor termkey, term in pairs(terms) do\nif term:match(pattern) == term then\nreturn termkey\nend\nend\nend\nend\nfunction premake.iskeywordsmatch(keywords, terms)\nlocal hasrequired = false\nfor _, keyword in ipairs(keywords) do\nlocal matched = premake.iskeywordmatch(keyword, terms)\nif not matched the" "n\nreturn false\nend\nif matched == \"required\" then\nhasrequired = true\nend\nend\nif terms.required and not hasrequired then\nreturn false\nelse\nreturn true\nend\nend\nlocal function adjustpaths(location, obj)\nfunction adjustpathlist(list)\nfor i, p in ipairs(list) do\nlist[i] = path.getrelative(location, p)\nend\nend\nfor name, value in pairs(obj) do\nlocal field = premake.fields[name]\nif field and value and not keeprelative[name] then\nif field.kind == \"path\" then\nobj[name] = path.getrelative(location, value)\nelseif field.kind == \"dirlist\" or field.kind == \"filelist\" then\nadjustpathlist(value)\nelseif field.kind == \"keypath\" then\nfor k,v in pairs(value) do\nadjustpathlist(v)\nend\nend\nend\nend\nend\nlocal function mergefield(kind, dest, src)\nlocal tbl = dest or { }\nif kind == \"keyvalue\" or kind == \"keypath\" then\nfor key, value in pairs(src) do\ntbl[key] = mergefield(\"list\", tbl[key], value)\nend\nelse\nfor _, item in ipairs(src) do\nif not tbl[item] then\ntable.insert(tbl, item)\n" - "tbl[item] = item\nend\nend\nend\nreturn tbl\nend\nlocal function removevalues(tbl, removes)\nfor i=#tbl,1,-1 do\nfor _, pattern in ipairs(removes) do\nif pattern == tbl[i] then\ntable.remove(tbl, i)\nbreak\nend\nend\nend\nend\nlocal function mergeobject(dest, src)\nif not src then\nreturn\nend\nfor fieldname, value in pairs(src) do\nif not nocopy[fieldname] then\nlocal field = premake.fields[fieldname]\nif field then\nif type(value) == \"table\" then\ndest[fieldname] = mergefield(field.kind, dest[fieldname], value)\nif src.removes then\nremoves = src.removes[fieldname]\nif removes then\nremovevalues(dest[fieldname], removes)\nend\nend\nelse\ndest[fieldname] = value\nend\nelse\ndest[fieldname] = value\nend\nend\nend\nend\nlocal function merge(dest, obj, basis, terms, cfgname, pltname)\nlocal key = cfgname or \"\"\npltname = pltname or \"Native\"\nif pltname ~= \"Native\" then\nkey = key .. pltname\nend\nterms.config = (cfgname or \"\"):lower()\nterms.platform = pltname:lower()\nlocal cfg = {}\nmergeobject(cfg, " - "basis[key])\nadjustpaths(obj.location, cfg)\nmergeobject(cfg, obj)\nif (cfg.kind) then\nterms['kind']=cfg.kind:lower()\nend\nfor _, blk in ipairs(obj.blocks) do\nif (premake.iskeywordsmatch(blk.keywords, terms))then\nmergeobject(cfg, blk)\nif (cfg.kind and not cfg.terms.kind) then\ncfg.terms['kind'] = cfg.kind:lower()\nterms['kind'] = cfg.kind:lower()\nend\nend\nend\ncfg.name = cfgname\ncfg.platform = pltname\nfor k,v in pairs(terms) do\ncfg.terms[k] =v\nend\ndest[key] = cfg\nend\nlocal function collapse(obj, basis)\nlocal result = {}\nbasis = basis or {}\nlocal sln = obj.solution or obj\nlocal terms = premake.getactiveterms()\nmerge(result, obj, basis, terms)--this adjusts terms\nfor _, cfgname in ipairs(sln.configurations) do\nlocal terms_local = {}\nfor k,v in pairs(terms)do terms_local[k]=v end\nmerge(result, obj, basis, terms_local, cfgname, \"Native\")--terms cam also be adjusted here\nfor _, pltname in ipairs(sln.platforms or {}) do\nif pltname ~= \"Native\" then\nmerge(result, obj, basis,terms_lo" - "cal, cfgname, pltname)--terms also here\nend\nend\nend\nreturn result\nend\nlocal function builduniquedirs()\nlocal num_variations = 4\nlocal cfg_dirs = {}\nlocal hit_counts = {}\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nfor _, cfg in pairs(prj.__configs) do\nlocal dirs = { }\ndirs[1] = path.getabsolute(path.join(cfg.location, cfg.objdir or cfg.project.objdir or \"obj\"))\ndirs[2] = path.join(dirs[1], iif(cfg.platform == \"Native\", \"\", cfg.platform))\ndirs[3] = path.join(dirs[2], cfg.name)\ndirs[4] = path.join(dirs[3], cfg.project.name)\ncfg_dirs[cfg] = dirs\nlocal start = iif(cfg.name, 2, 1)\nfor v = start, num_variations do\nlocal d = dirs[v]\nhit_counts[d] = (hit_counts[d] or 0) + 1\nend\nend\nend\nend\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nfor _, cfg in pairs(prj.__configs) do\nlocal dir\nlocal start = iif(cfg.name, 2, 1)\nfor v = start, iif(cfg.flags.SingleOutputDir==true,num_variations-1,num_variations) do\ndir = cfg_dirs[cfg" - "][v]\nif hit_counts[dir] == 1 then break end\nend\ncfg.objectsdir = path.getrelative(cfg.location, dir)\nend\nend\nend\nend\nlocal function buildtargets()\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nfor _, cfg in pairs(prj.__configs) do\nlocal pathstyle = premake.getpathstyle(cfg)\nlocal namestyle = premake.getnamestyle(cfg)\ncfg.buildtarget = premake.gettarget(cfg, \"build\", pathstyle, namestyle, cfg.system)\ncfg.linktarget = premake.gettarget(cfg, \"link\", pathstyle, namestyle, cfg.system)\nif pathstyle == \"windows\" then\ncfg.objectsdir = path.translate(cfg.objectsdir, \"\\\\\")\nend\nend\nend\nend\nend\n local function getCfgKind(cfg)\n if(cfg.kind) then\n return cfg.kind;\n end\n if(cfg.project.__configs[\"\"] and cfg.project.__configs[\"\"].kind) then\n return cfg.project.__configs[\"\"].kind;\n end\n return nil\n end\n local function getprojrec(dstArray, foundList, cfg, cfgname, searchField, bLinkage)\n if(not cfg) then return end\n local foundUsePrjs " - "= {};\n for _, useName in ipairs(cfg[searchField]) do\n local testName = useName:lower();\n if((not foundList[testName])) then\n local theProj = nil;\n local theUseProj = nil;\n for _, prj in ipairs(cfg.project.solution.projects) do\n if (prj.name:lower() == testName) then\n if(prj.usage) then\n theUseProj = prj;\n else\n theProj = prj;\n end\n end\n end\n --Must connect to a usage project.\n if(theUseProj) then\n foundList[testName] = true;\n local prjEntry = {\n name = testName,\n proj = theProj,\n usageProj = theUseProj,\n bLinkageOnly = bLinkage,\n };\n dstArray[testName] = prjEntry;\n table.insert(foundUsePrjs, theUseProj);\n end\n end\n end\n for _, usePrj in ipairs(foundUsePrjs) do\n --Links can only recurse through static libraries.\n if((searchField ~= \"links\") or\n (getCfgKind(usePrj.__configs[cfgname]) == \"StaticLib\")) then\n getprojrec(dstArray, foundList, usePrj.__configs[cfgname],\n cfgname, searchField, bLinkage);\n end\n end\n end\n --\n -- This functi" - "on will recursively get all projects that the given configuration has in its \"uses\"\n -- field. The return values are a list of tables. Each table in that list contains the following:\n --name = The lowercase name of the project.\n --proj = The project. Can be nil if it is usage-only.\n --usageProj = The usage project. Can't be nil, as using a project that has no\n -- usage project is not put into the list.\n --bLinkageOnly = If this is true, then only the linkage information should be copied.\n -- The recursion will only look at the \"uses\" field on *usage* projects.\n -- This function will also add projects to the list that are mentioned in the \"links\"\n -- field of usage projects. These will only copy linker information, but they will recurse.\n -- through other \"links\" fields.\n --\n local function getprojectsconnections(cfg, cfgname)\n local dstArray = {};\n local foundList = {};\n foundList[cfg.project.name:lower()] = true;\n --First, follow the uses recursively.\n getprojrec(dstA" - "rray, foundList, cfg, cfgname, \"uses\", false);\n --Next, go through all of the usage projects and recursively get their links.\n --But only if they're not already there. Get the links as linkage-only.\n local linkArray = {};\n for prjName, prjEntry in pairs(dstArray) do\n getprojrec(linkArray, foundList, prjEntry.usageProj.__configs[cfgname], cfgname,\n \"links\", true);\n end\n --Copy from linkArray into dstArray.\n for prjName, prjEntry in pairs(linkArray) do\n dstArray[prjName] = prjEntry;\n end\n return dstArray;\n end\n local function isnameofproj(cfg, strName)\n local sln = cfg.project.solution;\n local strTest = strName:lower();\n for prjIx, prj in ipairs(sln.projects) do\n if (prj.name:lower() == strTest) then\n return true;\n end\n end\n return false;\n end\n --\n -- Copies the field from dstCfg to srcCfg.\n --\n local function copydependentfield(srcCfg, dstCfg, strSrcField)\n local srcField = premake.fields[strSrcField];\n local strDstField = strSrcField;\n if type(src" - "Cfg[strSrcField]) == \"table\" then\n --handle paths.\n if (srcField.kind == \"dirlist\" or srcField.kind == \"filelist\") and\n (not keeprelative[strSrcField]) then\n for i,p in ipairs(srcCfg[strSrcField]) do\n table.insert(dstCfg[strDstField],\n path.rebase(p, srcCfg.project.location, dstCfg.project.location))\n end\n else\n if(strSrcField == \"links\") then\n for i,p in ipairs(srcCfg[strSrcField]) do\n if(not isnameofproj(dstCfg, p)) then\n table.insert(dstCfg[strDstField], p)\n else\n printf(\"Failed to copy '%s' from proj '%s'.\",\n p, srcCfg.project.name);\n end\n end\n else\n for i,p in ipairs(srcCfg[strSrcField]) do\n table.insert(dstCfg[strDstField], p)\n end\n end\n end\n else\n if(srcField.kind == \"path\" and (not keeprelative[strSrcField])) then\n dstCfg[strDstField] = path.rebase(srcCfg[strSrcField],\n prj.location, dstCfg.project.location);\n else\n dstCfg[strDstField] = srcCfg[strSrcField];\n end\n end\n end\n --\n -- This function will take the list of project" - " entries and apply their usage project data\n -- to the given configuration. It will copy compiling information for the projects that are\n -- not listed as linkage-only. It will copy the linking information for projects only if\n -- the source project is not a static library. It won't copy linking information\n -- if the project is in this solution; instead it will add that project to the configuration's\n -- links field, expecting that Premake will handle the rest.\n --\n local function copyusagedata(cfg, cfgname, linkToProjs)\n local myPrj = cfg.project;\n local bIsStaticLib = (getCfgKind(cfg) == \"StaticLib\");\n for prjName, prjEntry in pairs(linkToProjs) do\n local srcPrj = prjEntry.usageProj;\n local srcCfg = srcPrj.__configs[cfgname];\n for name, field in pairs(premake.fields) do\n if(srcCfg[name]) then\n if(field.usagecopy) then\n if(not prjEntry.bLinkageOnly) then\n copydependentfield(srcCfg, cfg, name)\n end\n elseif(field.linkagecopy) then\n --Copy the linkage data if we're buil" - "ding a non-static thing\n --and this is a pure usage project. If it's not pure-usage, then\n --we will simply put the project's name in the links field later.\n if((not bIsStaticLib) and (not prjEntry.proj)) then\n copydependentfield(srcCfg, cfg, name)\n end\n end\n end\n end\n if((not bIsStaticLib) and prjEntry.proj) then\n table.insert(cfg.links, prjEntry.proj.name);\n end\n end\n end\nfunction premake.bake.buildconfigs()\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nprj.location = prj.location or sln.location or prj.basedir\nadjustpaths(prj.location, prj)\nfor _, blk in ipairs(prj.blocks) do\nadjustpaths(prj.location, blk)\nend\nend\nsln.location = sln.location or sln.basedir\nend\nfor sln in premake.solution.each() do\nlocal basis = collapse(sln)\nfor _, prj in ipairs(sln.projects) do\nprj.__configs = collapse(prj, basis)\nfor _, cfg in pairs(prj.__configs) do\nbake.postprocess(prj, cfg)\nend\nend\nend\nfor sln in premake.solution.each() do\nfor prjIx, prj in i" - "pairs(sln.projects) do\nif(not prj.usage) then\nfor cfgname, cfg in pairs(prj.__configs) do\nlocal usesPrjs = getprojectsconnections(cfg, cfgname);\ncopyusagedata(cfg, cfgname, usesPrjs)\nend\nend\nend\nend\nfor sln in premake.solution.each() do\nlocal removeList = {};\nfor index, prj in ipairs(sln.projects) do\nif(prj.usage) then\ntable.insert(removeList, 1, index); --Add in reverse order.\nend\nend\nfor _, index in ipairs(removeList) do\ntable.remove(sln.projects, index);\nend\nend\nbuilduniquedirs()\nbuildtargets(cfg)\nend\nfunction premake.bake.postprocess(prj, cfg)\ncfg.project = prj\ncfg.shortname = premake.getconfigname(cfg.name, cfg.platform, true)\ncfg.longname = premake.getconfigname(cfg.name, cfg.platform)\ncfg.location = cfg.location or cfg.basedir\nlocal platform = premake.platforms[cfg.platform]\nif platform.iscrosscompiler then\ncfg.system = cfg.platform\nelse\ncfg.system = os.get()\nend\nif cfg.kind == \"SharedLib\" and platform.nosharedlibs then\ncfg.kind = \"StaticLib\"\nend\nlocal removef" - "iles = cfg.removefiles\nif _ACTION == 'gmake' or _ACTION == 'ninja' then\nremovefiles = table.join(removefiles, cfg.excludes)\nend\nlocal files = {}\nfor _, fname in ipairs(cfg.files) do\nif not table.icontains(removefiles, fname) then\ntable.insert(files, fname)\nend\nend\ncfg.files = files\nfor name, field in pairs(premake.fields) do\nif field.isflags then\nlocal values = cfg[name]\nfor _, flag in ipairs(values) do values[flag] = true end\nend\nend\ncfg.__fileconfigs = { }\nfor _, fname in ipairs(cfg.files) do\nlocal fcfg = {}\nif premake._filelevelconfig then\ncfg.terms.required = fname:lower()\nfor _, blk in ipairs(cfg.project.blocks) do\nif (premake.iskeywordsmatch(blk.keywords, cfg.terms)) then\nmergeobject(fcfg, blk)\nend\nend\nend\nfcfg.name = fname\ncfg.__fileconfigs[fname] = fcfg\ntable.insert(cfg.__fileconfigs, fcfg)\nend\nend\n", + "tbl[item] = item\nend\nend\nend\nreturn tbl\nend\nlocal function removevalues(tbl, removes)\nfor k, v in pairs(tbl) do\nfor _, pattern in ipairs(removes) do\nif pattern == tbl[k] then\nif type(k) == \"number\" then \ntable.remove(tbl, k) \nelse \ntbl[k] = nil \nend\nbreak\nend\nend\nend\nend\nlocal function mergeobject(dest, src)\nif not src then\nreturn\nend\nfor fieldname, value in pairs(src) do\nif not nocopy[fieldname] then\nlocal field = premake.fields[fieldname]\nif field then\nif type(value) == \"table\" then\ndest[fieldname] = mergefield(field.kind, dest[fieldname], value)\nif src.removes then\nremoves = src.removes[fieldname]\nif removes then\nremovevalues(dest[fieldname], removes)\nend\nend\nelse\ndest[fieldname] = value\nend\nelse\ndest[fieldname] = value\nend\nend\nend\nend\nlocal function merge(dest, obj, basis, terms, cfgname, pltname)\nlocal key = cfgname or \"\"\npltname = pltname or \"Native\"\nif pltname ~= \"Native\" then\nkey = key .. pltname\nend\nterms.config = (cfgname or \"\"):lower()\n" + "terms.platform = pltname:lower()\nlocal cfg = {}\nmergeobject(cfg, basis[key])\nadjustpaths(obj.location, cfg)\nmergeobject(cfg, obj)\nif (cfg.kind) then\nterms['kind']=cfg.kind:lower()\nend\nfor _, blk in ipairs(obj.blocks) do\nif (premake.iskeywordsmatch(blk.keywords, terms))then\nmergeobject(cfg, blk)\nif (cfg.kind and not cfg.terms.kind) then\ncfg.terms['kind'] = cfg.kind:lower()\nterms['kind'] = cfg.kind:lower()\nend\nend\nend\ncfg.name = cfgname\ncfg.platform = pltname\nfor k,v in pairs(terms) do\ncfg.terms[k] =v\nend\ndest[key] = cfg\nend\nlocal function collapse(obj, basis)\nlocal result = {}\nbasis = basis or {}\nlocal sln = obj.solution or obj\nlocal terms = premake.getactiveterms()\nmerge(result, obj, basis, terms)--this adjusts terms\nfor _, cfgname in ipairs(sln.configurations) do\nlocal terms_local = {}\nfor k,v in pairs(terms)do terms_local[k]=v end\nmerge(result, obj, basis, terms_local, cfgname, \"Native\")--terms cam also be adjusted here\nfor _, pltname in ipairs(sln.platforms or {}) d" + "o\nif pltname ~= \"Native\" then\nmerge(result, obj, basis,terms_local, cfgname, pltname)--terms also here\nend\nend\nend\nreturn result\nend\nlocal function builduniquedirs()\nlocal num_variations = 4\nlocal cfg_dirs = {}\nlocal hit_counts = {}\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nfor _, cfg in pairs(prj.__configs) do\nlocal dirs = { }\ndirs[1] = path.getabsolute(path.join(cfg.location, cfg.objdir or cfg.project.objdir or \"obj\"))\ndirs[2] = path.join(dirs[1], iif(cfg.platform == \"Native\", \"\", cfg.platform))\ndirs[3] = path.join(dirs[2], cfg.name)\ndirs[4] = path.join(dirs[3], cfg.project.name)\ncfg_dirs[cfg] = dirs\nlocal start = iif(cfg.name, 2, 1)\nfor v = start, num_variations do\nlocal d = dirs[v]\nhit_counts[d] = (hit_counts[d] or 0) + 1\nend\nend\nend\nend\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nfor _, cfg in pairs(prj.__configs) do\nlocal dir\nlocal start = iif(cfg.name, 2, 1)\nfor v = start, iif(cfg.flags.SingleOutp" + "utDir==true,num_variations-1,num_variations) do\ndir = cfg_dirs[cfg][v]\nif hit_counts[dir] == 1 then break end\nend\ncfg.objectsdir = path.getrelative(cfg.location, dir)\nend\nend\nend\nend\nlocal function buildtargets()\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nfor _, cfg in pairs(prj.__configs) do\nlocal pathstyle = premake.getpathstyle(cfg)\nlocal namestyle = premake.getnamestyle(cfg)\ncfg.buildtarget = premake.gettarget(cfg, \"build\", pathstyle, namestyle, cfg.system)\ncfg.linktarget = premake.gettarget(cfg, \"link\", pathstyle, namestyle, cfg.system)\nif pathstyle == \"windows\" then\ncfg.objectsdir = path.translate(cfg.objectsdir, \"\\\\\")\nend\nend\nend\nend\nend\n local function getCfgKind(cfg)\n if(cfg.kind) then\n return cfg.kind;\n end\n if(cfg.project.__configs[\"\"] and cfg.project.__configs[\"\"].kind) then\n return cfg.project.__configs[\"\"].kind;\n end\n return nil\n end\n local function getprojrec(dstArray, foundList, cfg, cfgname, searchFie" + "ld, bLinkage)\n if(not cfg) then return end\n local foundUsePrjs = {};\n for _, useName in ipairs(cfg[searchField]) do\n local testName = useName:lower();\n if((not foundList[testName])) then\n local theProj = nil;\n local theUseProj = nil;\n for _, prj in ipairs(cfg.project.solution.projects) do\n if (prj.name:lower() == testName) then\n if(prj.usage) then\n theUseProj = prj;\n else\n theProj = prj;\n end\n end\n end\n --Must connect to a usage project.\n if(theUseProj) then\n foundList[testName] = true;\n local prjEntry = {\n name = testName,\n proj = theProj,\n usageProj = theUseProj,\n bLinkageOnly = bLinkage,\n };\n dstArray[testName] = prjEntry;\n table.insert(foundUsePrjs, theUseProj);\n end\n end\n end\n for _, usePrj in ipairs(foundUsePrjs) do\n --Links can only recurse through static libraries.\n if((searchField ~= \"links\") or\n (getCfgKind(usePrj.__configs[cfgname]) == \"StaticLib\")) then\n getprojrec(dstArray, foundList, usePrj.__configs[cfgname],\n cfgname, s" + "earchField, bLinkage);\n end\n end\n end\n --\n -- This function will recursively get all projects that the given configuration has in its \"uses\"\n -- field. The return values are a list of tables. Each table in that list contains the following:\n --name = The lowercase name of the project.\n --proj = The project. Can be nil if it is usage-only.\n --usageProj = The usage project. Can't be nil, as using a project that has no\n -- usage project is not put into the list.\n --bLinkageOnly = If this is true, then only the linkage information should be copied.\n -- The recursion will only look at the \"uses\" field on *usage* projects.\n -- This function will also add projects to the list that are mentioned in the \"links\"\n -- field of usage projects. These will only copy linker information, but they will recurse.\n -- through other \"links\" fields.\n --\n local function getprojectsconnections(cfg, cfgname)\n local dstArray = {};\n local foundList = {};\n foundList[cfg.project.name:lower()] " + "= true;\n --First, follow the uses recursively.\n getprojrec(dstArray, foundList, cfg, cfgname, \"uses\", false);\n --Next, go through all of the usage projects and recursively get their links.\n --But only if they're not already there. Get the links as linkage-only.\n local linkArray = {};\n for prjName, prjEntry in pairs(dstArray) do\n getprojrec(linkArray, foundList, prjEntry.usageProj.__configs[cfgname], cfgname,\n \"links\", true);\n end\n --Copy from linkArray into dstArray.\n for prjName, prjEntry in pairs(linkArray) do\n dstArray[prjName] = prjEntry;\n end\n return dstArray;\n end\n local function isnameofproj(cfg, strName)\n local sln = cfg.project.solution;\n local strTest = strName:lower();\n for prjIx, prj in ipairs(sln.projects) do\n if (prj.name:lower() == strTest) then\n return true;\n end\n end\n return false;\n end\n --\n -- Copies the field from dstCfg to srcCfg.\n --\n local function copydependentfield(srcCfg, dstCfg, strSrcField)\n local srcField = premake.fiel" + "ds[strSrcField];\n local strDstField = strSrcField;\n if type(srcCfg[strSrcField]) == \"table\" then\n --handle paths.\n if (srcField.kind == \"dirlist\" or srcField.kind == \"filelist\") and\n (not keeprelative[strSrcField]) then\n for i,p in ipairs(srcCfg[strSrcField]) do\n table.insert(dstCfg[strDstField],\n path.rebase(p, srcCfg.project.location, dstCfg.project.location))\n end\n else\n if(strSrcField == \"links\") then\n for i,p in ipairs(srcCfg[strSrcField]) do\n if(not isnameofproj(dstCfg, p)) then\n table.insert(dstCfg[strDstField], p)\n else\n printf(\"Failed to copy '%s' from proj '%s'.\",\n p, srcCfg.project.name);\n end\n end\n else\n for i,p in ipairs(srcCfg[strSrcField]) do\n table.insert(dstCfg[strDstField], p)\n end\n end\n end\n else\n if(srcField.kind == \"path\" and (not keeprelative[strSrcField])) then\n dstCfg[strDstField] = path.rebase(srcCfg[strSrcField],\n prj.location, dstCfg.project.location);\n else\n dstCfg[strDstField] = srcCfg[strSrcField];\n end\n " + " end\n end\n --\n -- This function will take the list of project entries and apply their usage project data\n -- to the given configuration. It will copy compiling information for the projects that are\n -- not listed as linkage-only. It will copy the linking information for projects only if\n -- the source project is not a static library. It won't copy linking information\n -- if the project is in this solution; instead it will add that project to the configuration's\n -- links field, expecting that Premake will handle the rest.\n --\n local function copyusagedata(cfg, cfgname, linkToProjs)\n local myPrj = cfg.project;\n local bIsStaticLib = (getCfgKind(cfg) == \"StaticLib\");\n for prjName, prjEntry in pairs(linkToProjs) do\n local srcPrj = prjEntry.usageProj;\n local srcCfg = srcPrj.__configs[cfgname];\n for name, field in pairs(premake.fields) do\n if(srcCfg[name]) then\n if(field.usagecopy) then\n if(not prjEntry.bLinkageOnly) then\n copydependentfield(srcCfg, cfg, name)\n end\n else" + "if(field.linkagecopy) then\n --Copy the linkage data if we're building a non-static thing\n --and this is a pure usage project. If it's not pure-usage, then\n --we will simply put the project's name in the links field later.\n if((not bIsStaticLib) and (not prjEntry.proj)) then\n copydependentfield(srcCfg, cfg, name)\n end\n end\n end\n end\n if((not bIsStaticLib) and prjEntry.proj) then\n table.insert(cfg.links, prjEntry.proj.name);\n end\n end\n end\nfunction premake.bake.buildconfigs()\nfor sln in premake.solution.each() do\nfor _, prj in ipairs(sln.projects) do\nprj.location = prj.location or sln.location or prj.basedir\nadjustpaths(prj.location, prj)\nfor _, blk in ipairs(prj.blocks) do\nadjustpaths(prj.location, blk)\nend\nend\nsln.location = sln.location or sln.basedir\nend\nfor sln in premake.solution.each() do\nlocal basis = collapse(sln)\nfor _, prj in ipairs(sln.projects) do\nprj.__configs = collapse(prj, basis)\nfor _, cfg in pairs(prj.__configs) do\nbake.postprocess(prj, cfg)\nend\ne" + "nd\nend\nfor sln in premake.solution.each() do\nfor prjIx, prj in ipairs(sln.projects) do\nif(not prj.usage) then\nfor cfgname, cfg in pairs(prj.__configs) do\nlocal usesPrjs = getprojectsconnections(cfg, cfgname);\ncopyusagedata(cfg, cfgname, usesPrjs)\nend\nend\nend\nend\nfor sln in premake.solution.each() do\nlocal removeList = {};\nfor index, prj in ipairs(sln.projects) do\nif(prj.usage) then\ntable.insert(removeList, 1, index); --Add in reverse order.\nend\nend\nfor _, index in ipairs(removeList) do\ntable.remove(sln.projects, index);\nend\nend\nbuilduniquedirs()\nbuildtargets(cfg)\nend\nfunction premake.bake.postprocess(prj, cfg)\ncfg.project = prj\ncfg.shortname = premake.getconfigname(cfg.name, cfg.platform, true)\ncfg.longname = premake.getconfigname(cfg.name, cfg.platform)\ncfg.location = cfg.location or cfg.basedir\nlocal platform = premake.platforms[cfg.platform]\nif platform.iscrosscompiler then\ncfg.system = cfg.platform\nelse\ncfg.system = os.get()\nend\nif cfg.kind == \"SharedLib\" and platf" + "orm.nosharedlibs then\ncfg.kind = \"StaticLib\"\nend\nlocal removefiles = cfg.removefiles\nif _ACTION == 'gmake' or _ACTION == 'ninja' then\nremovefiles = table.join(removefiles, cfg.excludes)\nend\nlocal files = {}\nfor _, fname in ipairs(cfg.files) do\nif not table.icontains(removefiles, fname) then\ntable.insert(files, fname)\nend\nend\ncfg.files = files\nfor name, field in pairs(premake.fields) do\nif field.isflags then\nlocal values = cfg[name]\nfor _, flag in ipairs(values) do values[flag] = true end\nend\nend\ncfg.__fileconfigs = { }\nfor _, fname in ipairs(cfg.files) do\nlocal fcfg = {}\nif premake._filelevelconfig then\ncfg.terms.required = fname:lower()\nfor _, blk in ipairs(cfg.project.blocks) do\nif (premake.iskeywordsmatch(blk.keywords, cfg.terms)) then\nmergeobject(fcfg, blk)\nend\nend\nend\nfcfg.name = fname\ncfg.__fileconfigs[fname] = fcfg\ntable.insert(cfg.__fileconfigs, fcfg)\nend\nend\n", /* base/api.lua */ "premake.fields =\n{\narchivesplit_size =\n{\nkind = \"string\",\nscope = \"config\",\n},\nbasedir =\n{\nkind = \"path\",\nscope = \"container\",\n},\nbuildaction =\n{\nkind = \"string\",\nscope = \"config\",\nallowed = {\n\"Compile\",\n\"Copy\",\n\"Embed\",\n\"None\"\n}\n},\nbuildoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_c =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_cpp =\n{\nkind = \"list\",\nscope = \"config\",\n},\nbuildoptions_objc =\n{\nkind = \"list\",\nscope = \"config\",\n},\nconfigurations =\n{\nkind = \"list\",\nscope = \"solution\",\n},\ncustombuildtask =\n{\nkind = \"table\",\nscope = \"config\",\n},\ndebugargs =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndebugdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\ndebugenvs =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndefines =\n{\nkind = \"list\",\nscope = \"config\",\n},\ndeploymentoptions =\n{\nkind = \"list\",\nscope = \"config\",\nusagecopy = true,\n},\ndependency =\n{\nkind = \"" - "table\",\nscope = \"config\",\n},\nexcludes =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nnopch =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nfiles =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nremovefiles =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nflags =\n{\nkind = \"list\",\nscope = \"config\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_flags = {\nATL = 1,\nDebugEnvsDontMerge = 1,\nDebugEnvsInherit = 1,\nDeploymentContent = 1,\nEnableMinimalRebuild = 1,\nEnableSSE = 1,\nEnableSSE2 = 1,\nEnableAVX = 1,\nEnableAVX2 = 1,\nExtraWarnings = 1,\nFatalWarnings = 1,\nFloatFast = 1,\nFloatStrict = 1,\nManaged = 1,\nMinimumWarnings = 1,\nMFC = 1,\nNativeWChar = 1,\nNo64BitChecks = 1,\nNoBufferSecurityCheck = 1,\nNoEditAndContinue = 1,\nNoExceptions = 1,\nNoFramePointer = 1,\nNoImportLib = 1,\nNoIncrementalLink = 1,\nNoManifest = 1,\nNoMultiProcessorCompilation = 1,\nNoNativeWChar = 1,\nNoPCH = 1,\nNoRTTI = 1,\nNoWinMD = 1, -- explicitly disables" - " Windows Metadata\nNoWinRT = 1, -- explicitly disables Windows Runtime Extension\nFastCall = 1,\nStdCall = 1,\nSingleOutputDir = 1,\nOptimize = 1,\nOptimizeSize = 1,\nOptimizeSpeed = 1,\nDebugRuntime = 1,\nReleaseRuntime = 1,\nSEH = 1,\nStaticATL = 1,\nStaticRuntime = 1,\nSymbols = 1,\nUnicode = 1,\nUnsafe = 1,\nUnsignedChar = 1,\nUseFullPaths = 1,\nWinMain = 1,\n}\nlocal englishToAmericanSpelling =\n{\noptimise = 'optimize',\noptimisesize = 'optimizesize',\noptimisespeed = 'optimizespeed',\n}\nlocal lowervalue = value:lower()\nlowervalue = englishToAmericanSpelling[lowervalue] or lowervalue\nfor v, _ in pairs(allowed_flags) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid flag\"\nend,\n},\nframework =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = {\n\"1.0\",\n\"1.1\",\n\"2.0\",\n\"3.0\",\n\"3.5\",\n\"4.0\",\n\"4.5\",\n}\n},\nwindowstargetplatformversion =\n{\nkind = \"string\",\nscope = \"project\",\n},\nwindowstargetplatformminversion =\n{\nkind = \"string\",\nsc" - "ope = \"project\",\n},\nforcedincludes =\n{\nkind = \"list\",\nscope = \"config\",\n},\nimagepath =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimageoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nimplibdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimplibextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibname =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibsuffix =\n{\nkind = \"string\",\nscope = \"config\",\n},\nincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nuserincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nkind =\n{\nkind = \"string\",\nscope = \"config\",\nallowed = {\n\"ConsoleApp\",\n\"WindowedApp\",\n\"StaticLib\",\n\"SharedLib\"\n}\n},\nlanguage =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = {\n\"C\",\n\"C++\",\n\"C#\",\n\"Vala\",\n}\n},\nlibdirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nlinkage" - "copy = true,\n},\nlinkoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nlinks =\n{\nkind = \"list\",\nscope = \"config\",\nallowed = function(value)\nif value:find('/', nil, true) then\nvalue = path.getabsolute(value)\nend\nreturn value\nend,\nlinkagecopy = true,\n},\nlocation =\n{\nkind = \"path\",\nscope = \"container\",\n},\nmakesettings =\n{\nkind = \"list\",\nscope = \"config\",\n},\nmessageskip =\n{\nkind = \"list\",\nscope = \"solution\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_messages = {\nSkipCreatingMessage = 1,\nSkipBuildingMessage = 1,\nSkipCleaningMessage = 1,\n}\nlocal lowervalue = value:lower()\nfor v, _ in pairs(allowed_messages) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid message to skip\"\nend,\n},\nmsgarchiving =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgcompile =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgprecompile =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgcompile_objc =\n" - "{\nkind = \"string\",\nscope = \"config\",\n},\nmsgresource =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsglinking =\n{\nkind = \"string\",\nscope = \"config\",\n},\nobjdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\noptions =\n{\nkind = \"list\",\nscope = \"container\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_options = {\nForceCPP = 1,\nArchiveSplit = 1\n}\nlocal lowervalue = value:lower()\nfor v, _ in pairs(allowed_options) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid option\"\nend,\n},\npchheader =\n{\nkind = \"string\",\nscope = \"config\",\n},\npchsource =\n{\nkind = \"path\",\nscope = \"config\",\n},\nplatforms =\n{\nkind = \"list\",\nscope = \"solution\",\nallowed = table.keys(premake.platforms),\n},\npostbuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\nprebuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\npostcompiletasks =\n{\nkind = \"list\",\nscope = \"config\",\n},\nprelinkcomman" - "ds =\n{\nkind = \"list\",\nscope = \"config\",\n},\nresdefines =\n{\nkind = \"list\",\nscope = \"config\",\n},\nresincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nresoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nstartproject =\n{\nkind = \"string\",\nscope = \"solution\",\n},\ntargetdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\ntargetsubdir =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetname =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetsuffix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntrimpaths =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nuuid =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = function(value)\nlocal ok = true\nif (#value ~= 36) then ok = false end\nfor i=1,36 do\nlocal ch = value:sub(i,i)\nif (not ch:find(\"[ABCDEFabcdef0123456789-]\")) then ok = false end\nend\nif (value:su" - "b(9,9) ~= \"-\") then ok = false end\nif (value:sub(14,14) ~= \"-\") then ok = false end\nif (value:sub(19,19) ~= \"-\") then ok = false end\nif (value:sub(24,24) ~= \"-\") then ok = false end\nif (not ok) then\nreturn nil, \"invalid UUID\"\nend\nreturn value:upper()\nend\n},\nuses =\n{\nkind = \"list\",\nscope = \"config\",\n},\nvpaths =\n{\nkind = \"keypath\",\nscope = \"container\",\n},\n}\npremake.check_paths = false\nfunction premake.checkvalue(value, allowed)\nif (allowed) then\nif (type(allowed) == \"function\") then\nreturn allowed(value)\nelse\nfor _,v in ipairs(allowed) do\nif (value:lower() == v:lower()) then\nreturn v\nend\nend\nreturn nil, \"invalid value '\" .. value .. \"'\"\nend\nelse\nreturn value\nend\nend\nfunction premake.getobject(t)\nlocal container\nif (t == \"container\" or t == \"solution\") then\ncontainer = premake.CurrentContainer\nelse\ncontainer = premake.CurrentConfiguration\nend\nif t == \"solution\" then\nif typex(container) == \"project\" then\ncontainer = container.solutio" - "n\nend\nif typex(container) ~= \"solution\" then\ncontainer = nil\nend\nend\nlocal msg\nif (not container) then\nif (t == \"container\") then\nmsg = \"no active solution or project\"\nelseif (t == \"solution\") then\nmsg = \"no active solution\"\nelse\nmsg = \"no active solution, project, or configuration\"\nend\nend\nreturn container, msg\nend\nfunction premake.setarray(obj, fieldname, value, allowed)\nobj[fieldname] = obj[fieldname] or {}\nlocal function add(value, depth)\nif type(value) == \"table\" then\nfor _,v in ipairs(value) do\nadd(v, depth + 1)\nend\nelse\nvalue, err = premake.checkvalue(value, allowed)\nif not value then\nerror(err, depth)\nend\ntable.insert(obj[fieldname], value)\nend\nend\nif value then\nadd(value, 5)\nend\nreturn obj[fieldname]\nend\nfunction premake.settable(obj, fieldname, value, allowed)\nobj[fieldname] = obj[fieldname] or {}\ntable.insert(obj[fieldname], value)\nreturn obj[fieldname]\nend\nlocal function domatchedarray(ctype, fieldname, value, matchfunc)\nlocal result = { }\n" - "function makeabsolute(value, depth)\nif (type(value) == \"table\") then\nfor _, item in ipairs(value) do\nmakeabsolute(item, depth + 1)\nend\nelseif type(value) == \"string\" then\nif value:find(\"*\") then\nlocal arr = matchfunc(value);\nif (premake.check_paths) and (#arr == 0) then\nerror(\"Can't find matching files for pattern :\" .. value)\nend\nmakeabsolute(arr, depth + 1)\nelse\ntable.insert(result, path.getabsolute(value))\nend\nelse\nerror(\"Invalid value in list: expected string, got \" .. type(value), depth)\nend\nend\nmakeabsolute(value, 3)\nreturn premake.setarray(ctype, fieldname, result)\nend\nfunction premake.setdirarray(ctype, fieldname, value)\nreturn domatchedarray(ctype, fieldname, value, os.matchdirs)\nend\nfunction premake.setfilearray(ctype, fieldname, value)\nreturn domatchedarray(ctype, fieldname, value, os.matchfiles)\nend\nfunction premake.setkeyvalue(ctype, fieldname, values)\nlocal container, err = premake.getobject(ctype)\nif not container then\nerror(err, 4)\nend\nif not container" - "[fieldname] then\ncontainer[fieldname] = {}\nend\nif type(values) ~= \"table\" then\nerror(\"invalid value; table expected\", 4)\nend\nlocal field = container[fieldname]\nfor key,value in pairs(values) do\nif not field[key] then\nfield[key] = {}\nend\ntable.insertflat(field[key], value)\nend\nreturn field\nend\nfunction premake.setstring(ctype, fieldname, value, allowed)\nlocal container, err = premake.getobject(ctype)\nif (not container) then\nerror(err, 4)\nend\nif (value) then\nvalue, err = premake.checkvalue(value, allowed)\nif (not value) then\nerror(err, 4)\nend\ncontainer[fieldname] = value\nend\nreturn container[fieldname]\nend\nfunction premake.remove(fieldname, value)\nlocal cfg = premake.CurrentConfiguration\ncfg.removes = cfg.removes or {}\ncfg.removes[fieldname] = premake.setarray(cfg.removes, fieldname, value)\nend\nlocal function accessor(name, value)\nlocal kind = premake.fields[name].kind\nlocal scope = premake.fields[name].scope\nlocal allowed = premake.fields[name].allowed\nif (kind == " - "\"string\" or kind == \"path\") and value then\nif type(value) ~= \"string\" then\nerror(\"string value expected\", 3)\nend\nend\nlocal container, err = premake.getobject(scope)\nif (not container) then\nerror(err, 3)\nend\nif kind == \"string\" then\nreturn premake.setstring(scope, name, value, allowed)\nelseif kind == \"path\" then\nif value then value = path.getabsolute(value) end\nreturn premake.setstring(scope, name, value)\nelseif kind == \"list\" then\nreturn premake.setarray(container, name, value, allowed)\nelseif kind == \"table\" then\nreturn premake.settable(container, name, value, allowed)\nelseif kind == \"dirlist\" then\nreturn premake.setdirarray(container, name, value)\nelseif kind == \"filelist\" or kind == \"absolutefilelist\" then\nreturn premake.setfilearray(container, name, value)\nelseif kind == \"keyvalue\" or kind == \"keypath\" then\nreturn premake.setkeyvalue(scope, name, value)\nend\nend\nfor name, info in pairs(premake.fields) do\n_G[name] = function(value)\nreturn accessor(name, v" - "alue)\nend\nif info.kind == \"list\"\nor info.kind == \"dirlist\"\nor info.kind == \"filelist\"\nor info.kind == \"absolutefilelist\"\nthen\nif name ~= \"removefiles\"\nand name ~= \"files\" then\n_G[\"remove\"..name] = function(value)\npremake.remove(name, value)\nend\nend\nend\nend\nfunction configuration(terms)\nif not terms then\nreturn premake.CurrentConfiguration\nend\nlocal container, err = premake.getobject(\"container\")\nif (not container) then\nerror(err, 2)\nend\nlocal cfg = { }\ncfg.terms = table.flatten({terms})\ntable.insert(container.blocks, cfg)\npremake.CurrentConfiguration = cfg\ncfg.keywords = { }\nfor _, word in ipairs(cfg.terms) do\ntable.insert(cfg.keywords, path.wildcards(word):lower())\nend\nfor name, field in pairs(premake.fields) do\nif (field.kind ~= \"string\" and field.kind ~= \"path\") then\ncfg[name] = { }\nend\nend\nreturn cfg\nend\nlocal function creategroup(name, sln, curpath, parent, inpath)\nlocal group = {}\nsetmetatable(group, {\n__type = \"group\"\n})\ntable.insert(sln." - "groups, group)\nsln.groups[inpath] = group\ngroup.solution = sln\ngroup.name = name\ngroup.uuid = os.uuid(curpath)\ngroup.parent = parent\nreturn group\nend\nlocal function creategroupsfrompath(inpath, sln)\nif inpath == nil then return nil end\ninpath = path.translate(inpath, \"/\")\nlocal groups = string.explode(inpath, \"/\")\nlocal curpath = \"\"\nlocal lastgroup = nil\nfor i, v in ipairs(groups) do\ncurpath = curpath .. \"/\" .. v:lower()\nlocal group = sln.groups[curpath]\nif group == nil then\ngroup = creategroup(v, sln, curpath, lastgroup, curpath)\nend\nlastgroup = group\nend\nreturn lastgroup\nend\nlocal function createproject(name, sln, isUsage)\nlocal prj = {}\nsetmetatable(prj, {\n__type = \"project\",\n})\ntable.insert(sln.projects, prj)\nif(isUsage) then\nif(sln.projects[name]) then\nsln.projects[name].usageProj = prj;\nelse\nsln.projects[name] = prj\nend\nelse\nif(sln.projects[name]) then\nprj.usageProj = sln.projects[name];\nend\nsln.projects[name] = prj\nend\nlocal group = creategroupsfrompat" - "h(premake.CurrentGroup, sln)\nprj.solution = sln\nprj.name = name\nprj.basedir = os.getcwd()\nprj.uuid = os.uuid(prj.name)\nprj.blocks = { }\nprj.usage = isUsage\nprj.group = group\nreturn prj;\nend\nfunction usage(name)\nif (not name) then\nif(typex(premake.CurrentContainer) ~= \"project\") then return nil end\nif(not premake.CurrentContainer.usage) then return nil end\nreturn premake.CurrentContainer\nend\nlocal sln\nif (typex(premake.CurrentContainer) == \"project\") then\nsln = premake.CurrentContainer.solution\nelse\nsln = premake.CurrentContainer\nend\nif (typex(sln) ~= \"solution\") then\nerror(\"no active solution\", 2)\nend\nif((not sln.projects[name]) or\n((not sln.projects[name].usage) and (not sln.projects[name].usageProj))) then\npremake.CurrentContainer = createproject(name, sln, true)\nelse\npremake.CurrentContainer = iff(sln.projects[name].usage,\nsln.projects[name], sln.projects[name].usageProj)\nend\nconfiguration { }\nreturn premake." - "CurrentContainer\nend\nfunction project(name)\nif (not name) then\nif(typex(premake.CurrentContainer) ~= \"project\") then return nil end\nif(premake.CurrentContainer.usage) then return nil end\nreturn premake.CurrentContainer\nend\nlocal sln\nif (typex(premake.CurrentContainer) == \"project\") then\nsln = premake.CurrentContainer.solution\nelse\nsln = premake.CurrentContainer\nend\nif (typex(sln) ~= \"solution\") then\nerror(\"no active solution\", 2)\nend\nif((not sln.projects[name]) or sln.projects[name].usage) then\npremake.CurrentContainer = createproject(name, sln)\nelse\npremake.CurrentContainer = sln.projects[name];\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction solution(name)\nif not name then\nif typex(premake.CurrentContainer) == \"project\" then\nreturn premake.CurrentContainer.solution\nelse\nreturn premake.CurrentContainer\nend\nend\npremake.CurrentContainer = premake.solution.get(name)\nif (not premake.CurrentContainer) then\npremake.CurrentContainer = premake.solution.n" - "ew(name)\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction group(name)\nif not name then\nreturn premake.CurrentGroup\nend\npremake.CurrentGroup = name\nreturn premake.CurrentGroup\nend\nfunction newaction(a)\npremake.action.add(a)\nend\nfunction newoption(opt)\npremake.option.add(opt)\nend\nfunction enablefilelevelconfig()\npremake._filelevelconfig = true\nend\n", + "table\",\nscope = \"config\",\n},\nexcludes =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nnopch =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nfiles =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nremovefiles =\n{\nkind = \"filelist\",\nscope = \"config\",\n},\nflags =\n{\nkind = \"list\",\nscope = \"config\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_flags = {\nATL = 1,\nC7DebugInfo = 1,\nDebugEnvsDontMerge = 1,\nDebugEnvsInherit = 1,\nDeploymentContent = 1,\nEnableMinimalRebuild = 1,\nEnableSSE = 1,\nEnableSSE2 = 1,\nEnableAVX = 1,\nEnableAVX2 = 1,\nExtraWarnings = 1,\nFatalWarnings = 1,\nFloatFast = 1,\nFloatStrict = 1,\nManaged = 1,\nMinimumWarnings = 1,\nMFC = 1,\nNativeWChar = 1,\nNo64BitChecks = 1,\nNoBufferSecurityCheck = 1,\nNoEditAndContinue = 1,\nNoExceptions = 1,\nNoFramePointer = 1,\nNoImportLib = 1,\nNoIncrementalLink = 1,\nNoManifest = 1,\nNoMultiProcessorCompilation = 1,\nNoNativeWChar = 1,\nNoPCH = 1,\nNoRTTI = 1,\nNoWinMD = 1, -- e" + "xplicitly disables Windows Metadata\nNoWinRT = 1, -- explicitly disables Windows Runtime Extension\nFastCall = 1,\nStdCall = 1,\nSingleOutputDir = 1,\nOptimize = 1,\nOptimizeSize = 1,\nOptimizeSpeed = 1,\nDebugRuntime = 1,\nReleaseRuntime = 1,\nSEH = 1,\nStaticATL = 1,\nStaticRuntime = 1,\nSymbols = 1,\nUnicode = 1,\nUnsafe = 1,\nUnsignedChar = 1,\nUseFullPaths = 1,\nWinMain = 1,\n}\nlocal englishToAmericanSpelling =\n{\noptimise = 'optimize',\noptimisesize = 'optimizesize',\noptimisespeed = 'optimizespeed',\n}\nlocal lowervalue = value:lower()\nlowervalue = englishToAmericanSpelling[lowervalue] or lowervalue\nfor v, _ in pairs(allowed_flags) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid flag\"\nend,\n},\nframework =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = {\n\"1.0\",\n\"1.1\",\n\"2.0\",\n\"3.0\",\n\"3.5\",\n\"4.0\",\n\"4.5\",\n}\n},\nwindowstargetplatformversion =\n{\nkind = \"string\",\nscope = \"project\",\n},\nwindowstargetplatformminversion =\n{\nkind" + " = \"string\",\nscope = \"project\",\n},\nforcedincludes =\n{\nkind = \"list\",\nscope = \"config\",\n},\nimagepath =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimageoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nimplibdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\nimplibextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibname =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\nimplibsuffix =\n{\nkind = \"string\",\nscope = \"config\",\n},\nincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nuserincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\nusagecopy = true,\n},\nkind =\n{\nkind = \"string\",\nscope = \"config\",\nallowed = {\n\"ConsoleApp\",\n\"WindowedApp\",\n\"StaticLib\",\n\"SharedLib\"\n}\n},\nlanguage =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = {\n\"C\",\n\"C++\",\n\"C#\",\n\"Vala\",\n}\n},\nlibdirs =\n{\nkind = \"dirlist\",\nscope = \"" + "config\",\nlinkagecopy = true,\n},\nlinkoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nlinks =\n{\nkind = \"list\",\nscope = \"config\",\nallowed = function(value)\nif value:find('/', nil, true) then\nvalue = path.getabsolute(value)\nend\nreturn value\nend,\nlinkagecopy = true,\n},\nlocation =\n{\nkind = \"path\",\nscope = \"container\",\n},\nmakesettings =\n{\nkind = \"list\",\nscope = \"config\",\n},\nmessageskip =\n{\nkind = \"list\",\nscope = \"solution\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_messages = {\nSkipCreatingMessage = 1,\nSkipBuildingMessage = 1,\nSkipCleaningMessage = 1,\n}\nlocal lowervalue = value:lower()\nfor v, _ in pairs(allowed_messages) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid message to skip\"\nend,\n},\nmsgarchiving =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgcompile =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgprecompile =\n{\nkind = \"string\",\nscope = \"config\",\n},\nm" + "sgcompile_objc =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsgresource =\n{\nkind = \"string\",\nscope = \"config\",\n},\nmsglinking =\n{\nkind = \"string\",\nscope = \"config\",\n},\nobjdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\noptions =\n{\nkind = \"list\",\nscope = \"container\",\nisflags = true,\nusagecopy = true,\nallowed = function(value)\nlocal allowed_options = {\nForceCPP = 1,\nArchiveSplit = 1\n}\nlocal lowervalue = value:lower()\nfor v, _ in pairs(allowed_options) do\nif v:lower() == lowervalue then\nreturn v\nend\nend\nreturn nil, \"invalid option\"\nend,\n},\npchheader =\n{\nkind = \"string\",\nscope = \"config\",\n},\npchsource =\n{\nkind = \"path\",\nscope = \"config\",\n},\nplatforms =\n{\nkind = \"list\",\nscope = \"solution\",\nallowed = table.keys(premake.platforms),\n},\npostbuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\nprebuildcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\npostcompiletasks =\n{\nkind = \"list\",\nscope = \"config\"," + "\n},\nprelinkcommands =\n{\nkind = \"list\",\nscope = \"config\",\n},\nresdefines =\n{\nkind = \"list\",\nscope = \"config\",\n},\nresincludedirs =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nresoptions =\n{\nkind = \"list\",\nscope = \"config\",\n},\nstartproject =\n{\nkind = \"string\",\nscope = \"solution\",\n},\ntargetdir =\n{\nkind = \"path\",\nscope = \"config\",\n},\ntargetsubdir =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetextension =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetname =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetprefix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntargetsuffix =\n{\nkind = \"string\",\nscope = \"config\",\n},\ntrimpaths =\n{\nkind = \"dirlist\",\nscope = \"config\",\n},\nuuid =\n{\nkind = \"string\",\nscope = \"container\",\nallowed = function(value)\nlocal ok = true\nif (#value ~= 36) then ok = false end\nfor i=1,36 do\nlocal ch = value:sub(i,i)\nif (not ch:find(\"[ABCDEFabcdef0123456789-]\")) then ok = false end" + "\nend\nif (value:sub(9,9) ~= \"-\") then ok = false end\nif (value:sub(14,14) ~= \"-\") then ok = false end\nif (value:sub(19,19) ~= \"-\") then ok = false end\nif (value:sub(24,24) ~= \"-\") then ok = false end\nif (not ok) then\nreturn nil, \"invalid UUID\"\nend\nreturn value:upper()\nend\n},\nuses =\n{\nkind = \"list\",\nscope = \"config\",\n},\nvpaths =\n{\nkind = \"keypath\",\nscope = \"container\",\n},\n}\npremake.check_paths = false\nfunction premake.checkvalue(value, allowed)\nif (allowed) then\nif (type(allowed) == \"function\") then\nreturn allowed(value)\nelse\nfor _,v in ipairs(allowed) do\nif (value:lower() == v:lower()) then\nreturn v\nend\nend\nreturn nil, \"invalid value '\" .. value .. \"'\"\nend\nelse\nreturn value\nend\nend\nfunction premake.getobject(t)\nlocal container\nif (t == \"container\" or t == \"solution\") then\ncontainer = premake.CurrentContainer\nelse\ncontainer = premake.CurrentConfiguration\nend\nif t == \"solution\" then\nif typex(container) == \"project\" then\ncontainer " + "= container.solution\nend\nif typex(container) ~= \"solution\" then\ncontainer = nil\nend\nend\nlocal msg\nif (not container) then\nif (t == \"container\") then\nmsg = \"no active solution or project\"\nelseif (t == \"solution\") then\nmsg = \"no active solution\"\nelse\nmsg = \"no active solution, project, or configuration\"\nend\nend\nreturn container, msg\nend\nfunction premake.setarray(obj, fieldname, value, allowed)\nobj[fieldname] = obj[fieldname] or {}\nlocal function add(value, depth)\nif type(value) == \"table\" then\nfor _,v in ipairs(value) do\nadd(v, depth + 1)\nend\nelse\nvalue, err = premake.checkvalue(value, allowed)\nif not value then\nerror(err, depth)\nend\ntable.insert(obj[fieldname], value)\nend\nend\nif value then\nadd(value, 5)\nend\nreturn obj[fieldname]\nend\nfunction premake.settable(obj, fieldname, value, allowed)\nobj[fieldname] = obj[fieldname] or {}\ntable.insert(obj[fieldname], value)\nreturn obj[fieldname]\nend\nlocal function domatchedarray(ctype, fieldname, value, matchfunc)\nl" + "ocal result = { }\nfunction makeabsolute(value, depth)\nif (type(value) == \"table\") then\nfor _, item in ipairs(value) do\nmakeabsolute(item, depth + 1)\nend\nelseif type(value) == \"string\" then\nif value:find(\"*\") then\nlocal arr = matchfunc(value);\nif (premake.check_paths) and (#arr == 0) then\nerror(\"Can't find matching files for pattern :\" .. value)\nend\nmakeabsolute(arr, depth + 1)\nelse\ntable.insert(result, path.getabsolute(value))\nend\nelse\nerror(\"Invalid value in list: expected string, got \" .. type(value), depth)\nend\nend\nmakeabsolute(value, 3)\nreturn premake.setarray(ctype, fieldname, result)\nend\nfunction premake.setdirarray(ctype, fieldname, value)\nreturn domatchedarray(ctype, fieldname, value, os.matchdirs)\nend\nfunction premake.setfilearray(ctype, fieldname, value)\nreturn domatchedarray(ctype, fieldname, value, os.matchfiles)\nend\nfunction premake.setkeyvalue(ctype, fieldname, values)\nlocal container, err = premake.getobject(ctype)\nif not container then\nerror(err, 4)\nen" + "d\nif not container[fieldname] then\ncontainer[fieldname] = {}\nend\nif type(values) ~= \"table\" then\nerror(\"invalid value; table expected\", 4)\nend\nlocal field = container[fieldname]\nfor key,value in pairs(values) do\nif not field[key] then\nfield[key] = {}\nend\ntable.insertflat(field[key], value)\nend\nreturn field\nend\nfunction premake.setstring(ctype, fieldname, value, allowed)\nlocal container, err = premake.getobject(ctype)\nif (not container) then\nerror(err, 4)\nend\nif (value) then\nvalue, err = premake.checkvalue(value, allowed)\nif (not value) then\nerror(err, 4)\nend\ncontainer[fieldname] = value\nend\nreturn container[fieldname]\nend\nfunction premake.remove(fieldname, value)\nlocal cfg = premake.CurrentConfiguration\ncfg.removes = cfg.removes or {}\ncfg.removes[fieldname] = premake.setarray(cfg.removes, fieldname, value)\nend\nlocal function accessor(name, value)\nlocal kind = premake.fields[name].kind\nlocal scope = premake.fields[name].scope\nlocal allowed = premake.fields[name].al" + "lowed\nif (kind == \"string\" or kind == \"path\") and value then\nif type(value) ~= \"string\" then\nerror(\"string value expected\", 3)\nend\nend\nlocal container, err = premake.getobject(scope)\nif (not container) then\nerror(err, 3)\nend\nif kind == \"string\" then\nreturn premake.setstring(scope, name, value, allowed)\nelseif kind == \"path\" then\nif value then value = path.getabsolute(value) end\nreturn premake.setstring(scope, name, value)\nelseif kind == \"list\" then\nreturn premake.setarray(container, name, value, allowed)\nelseif kind == \"table\" then\nreturn premake.settable(container, name, value, allowed)\nelseif kind == \"dirlist\" then\nreturn premake.setdirarray(container, name, value)\nelseif kind == \"filelist\" or kind == \"absolutefilelist\" then\nreturn premake.setfilearray(container, name, value)\nelseif kind == \"keyvalue\" or kind == \"keypath\" then\nreturn premake.setkeyvalue(scope, name, value)\nend\nend\nfor name, info in pairs(premake.fields) do\n_G[name] = function(value)\nretu" + "rn accessor(name, value)\nend\nif info.kind == \"list\"\nor info.kind == \"dirlist\"\nor info.kind == \"filelist\"\nor info.kind == \"absolutefilelist\"\nthen\nif name ~= \"removefiles\"\nand name ~= \"files\" then\n_G[\"remove\"..name] = function(value)\npremake.remove(name, value)\nend\nend\nend\nend\nfunction configuration(terms)\nif not terms then\nreturn premake.CurrentConfiguration\nend\nlocal container, err = premake.getobject(\"container\")\nif (not container) then\nerror(err, 2)\nend\nlocal cfg = { }\ncfg.terms = table.flatten({terms})\ntable.insert(container.blocks, cfg)\npremake.CurrentConfiguration = cfg\ncfg.keywords = { }\nfor _, word in ipairs(cfg.terms) do\ntable.insert(cfg.keywords, path.wildcards(word):lower())\nend\nfor name, field in pairs(premake.fields) do\nif (field.kind ~= \"string\" and field.kind ~= \"path\") then\ncfg[name] = { }\nend\nend\nreturn cfg\nend\nlocal function creategroup(name, sln, curpath, parent, inpath)\nlocal group = {}\nsetmetatable(group, {\n__type = \"group\"\n})" + "\ntable.insert(sln.groups, group)\nsln.groups[inpath] = group\ngroup.solution = sln\ngroup.name = name\ngroup.uuid = os.uuid(curpath)\ngroup.parent = parent\nreturn group\nend\nlocal function creategroupsfrompath(inpath, sln)\nif inpath == nil then return nil end\ninpath = path.translate(inpath, \"/\")\nlocal groups = string.explode(inpath, \"/\")\nlocal curpath = \"\"\nlocal lastgroup = nil\nfor i, v in ipairs(groups) do\ncurpath = curpath .. \"/\" .. v:lower()\nlocal group = sln.groups[curpath]\nif group == nil then\ngroup = creategroup(v, sln, curpath, lastgroup, curpath)\nend\nlastgroup = group\nend\nreturn lastgroup\nend\nlocal function createproject(name, sln, isUsage)\nlocal prj = {}\nsetmetatable(prj, {\n__type = \"project\",\n})\ntable.insert(sln.projects, prj)\nif(isUsage) then\nif(sln.projects[name]) then\nsln.projects[name].usageProj = prj;\nelse\nsln.projects[name] = prj\nend\nelse\nif(sln.projects[name]) then\nprj.usageProj = sln.projects[name];\nend\nsln.projects[name] = prj\nend\nlocal group = " + "creategroupsfrompath(premake.CurrentGroup, sln)\nprj.solution = sln\nprj.name = name\nprj.basedir = os.getcwd()\nprj.uuid = os.uuid(prj.name)\nprj.blocks = { }\nprj.usage = isUsage\nprj.group = group\nreturn prj;\nend\nfunction usage(name)\nif (not name) then\nif(typex(premake.CurrentContainer) ~= \"project\") then return nil end\nif(not premake.CurrentContainer.usage) then return nil end\nreturn premake.CurrentContainer\nend\nlocal sln\nif (typex(premake.CurrentContainer) == \"project\") then\nsln = premake.CurrentContainer.solution\nelse\nsln = premake.CurrentContainer\nend\nif (typex(sln) ~= \"solution\") then\nerror(\"no active solution\", 2)\nend\nif((not sln.projects[name]) or\n((not sln.projects[name].usage) and (not sln.projects[name].usageProj))) then\npremake.CurrentContainer = createproject(name, sln, true)\nelse\npremake.CurrentContainer = iff(sln.projects[name].usage,\nsln.projects[name], sln.projects[name].usageProj)\nend\nconfiguration {" + " }\nreturn premake.CurrentContainer\nend\nfunction project(name)\nif (not name) then\nif(typex(premake.CurrentContainer) ~= \"project\") then return nil end\nif(premake.CurrentContainer.usage) then return nil end\nreturn premake.CurrentContainer\nend\nlocal sln\nif (typex(premake.CurrentContainer) == \"project\") then\nsln = premake.CurrentContainer.solution\nelse\nsln = premake.CurrentContainer\nend\nif (typex(sln) ~= \"solution\") then\nerror(\"no active solution\", 2)\nend\nif((not sln.projects[name]) or sln.projects[name].usage) then\npremake.CurrentContainer = createproject(name, sln)\nelse\npremake.CurrentContainer = sln.projects[name];\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction solution(name)\nif not name then\nif typex(premake.CurrentContainer) == \"project\" then\nreturn premake.CurrentContainer.solution\nelse\nreturn premake.CurrentContainer\nend\nend\npremake.CurrentContainer = premake.solution.get(name)\nif (not premake.CurrentContainer) then\npremake.CurrentContainer =" + " premake.solution.new(name)\nend\nconfiguration { }\nreturn premake.CurrentContainer\nend\nfunction group(name)\nif not name then\nreturn premake.CurrentGroup\nend\npremake.CurrentGroup = name\nreturn premake.CurrentGroup\nend\nfunction newaction(a)\npremake.action.add(a)\nend\nfunction newoption(opt)\npremake.option.add(opt)\nend\nfunction enablefilelevelconfig()\npremake._filelevelconfig = true\nend\n", /* base/cmdline.lua */ "newoption\n{\ntrigger = \"cc\",\nvalue = \"VALUE\",\ndescription = \"Choose a C/C++ compiler set\",\nallowed = {\n{ \"gcc\", \"GNU GCC (gcc/g++)\" },\n{ \"ow\", \"OpenWatcom\" },\n{ \"ghs\", \"Green Hills Software\" },\n}\n}\nnewoption\n{\ntrigger = \"dotnet\",\nvalue = \"VALUE\",\ndescription = \"Choose a .NET compiler set\",\nallowed = {\n{ \"msnet\", \"Microsoft .NET (csc)\" },\n{ \"mono\", \"Novell Mono (mcs)\" },\n{ \"pnet\", \"Portable.NET (cscc)\" },\n}\n}\nnewoption\n{\ntrigger = \"file\",\nvalue = \"FILE\",\ndescription = \"Read FILE as a Premake script; default is 'premake4.lua'\"\n}\nnewoption\n{\ntrigger = \"help\",\ndescription = \"Display this information\"\n}\nnewoption\n{\ntrigger = \"os\",\nvalue = \"VALUE\",\ndescription = \"Generate files for a different operating system\",\nallowed = {\n{ \"bsd\", \"OpenBSD, NetBSD, or FreeBSD\" },\n{ \"linux\", \"Linux\" },\n{ \"macosx\", \"Apple Mac OS X\" },\n{ \"solaris\", \"Sola" @@ -171,8 +171,7 @@ const char* builtin_scripts[] = { "function premake.showhelp()\nprintf(\"\")\nprintf(\"Usage: genie [options] action [arguments]\")\nprintf(\"\")\nprintf(\"OPTIONS\")\nprintf(\"\")\nfor option in premake.option.each() do\nlocal trigger = option.trigger\nlocal description = option.description\nif (option.value) then trigger = trigger .. \"=\" .. option.value end\nif (option.allowed) then description = description .. \"; one of:\" end\nprintf(\" --%-15s %s\", trigger, description)\nif (option.allowed) then\nfor _, value in ipairs(option.allowed) do\nprintf(\" %-14s %s\", value[1], value[2])\nend\nend\nprintf(\"\")\nend\nprintf(\"ACTIONS\")\nprintf(\"\")\nfor action in premake.action.each() do\nprintf(\" %-17s %s\", action.trigger, action.description)\nend\nprintf(\"\")\nprintf(\"For additional information, see https://github.com/bkaradzic/genie\")\nend\n", /* base/premake.lua */ - "premake._filelevelconfig = false\nfunction premake.generate(obj, filename, callback)\nfilename = premake.project.getfilename(obj, filename)\nio.capture()\ncallback(obj)\nlocal new = io.endcapture()\nlocal delta = false\nlocal f, err = io.open(filename, \"rb\")\nif (not f) then\nif string.find(err, \"No such file or directory\") then\ndelta = true\nelse\nerror(err, 0)\nend\nelse\nlocal existing = f:read(\"*all\")\nif existing ~= new then\ndelta = true\nend\nf:close()\nend\nif delta then\nprintf(\"Generating %s...\", filename)\nlocal f, err = io.open(filename, \"wb\")\nif (not f) then\nerror(err, 0)\nend\nf:write(new)\nf:close()\nelse\nprintf(\"Skipping %s as its contents would not change.\", filename)\nend\nend\nfunction premake.findDefaultScript(dir, search_upwards)\nsearch_upwards = search_upwards or true\nlocal last = \"\"\nwhile dir ~= last do\nfor _, name in ipairs({ \"genie.lua\", \"solution.lua\", \"premake4.lua\" }) do\nlocal script0 = dir .. \"/\" .. name\nif (os.isfile(script0)) then\nreturn dir, name" - "\nend\nlocal script1 = dir .. \"/scripts/\" .. name\nif (os.isfile(script1)) then\nreturn dir .. \"/scripts/\", name\nend\nend\nlast = dir\ndir = path.getabsolute(dir .. \"/..\")\nif dir == \".\" or not search_upwards then break end\nend\nreturn nil, nil\nend\n", + "premake._filelevelconfig = false\nfunction premake.generate(obj, filename, callback)\nfilename = premake.project.getfilename(obj, filename)\nprintf(\"Generating %s...\", filename)\nlocal f, err = io.open(filename, \"wb\")\nif (not f) then\nerror(err, 0)\nend\nio.output(f)\ncallback(obj)\nf:close()\nend\nfunction premake.findDefaultScript(dir, search_upwards)\nsearch_upwards = search_upwards or true\nlocal last = \"\"\nwhile dir ~= last do\nfor _, name in ipairs({ \"genie.lua\", \"solution.lua\", \"premake4.lua\" }) do\nlocal script0 = dir .. \"/\" .. name\nif (os.isfile(script0)) then\nreturn dir, name\nend\nlocal script1 = dir .. \"/scripts/\" .. name\nif (os.isfile(script1)) then\nreturn dir .. \"/scripts/\", name\nend\nend\nlast = dir\ndir = path.getabsolute(dir .. \"/..\")\nif dir == \".\" or not search_upwards then break end\nend\nreturn nil, nil\nend\n", /* base/iter.lua */ "iter = {}\nfunction iter.sortByKeys(arr, f)\nlocal a = table.keys(arr)\ntable.sort(a, f)\nlocal i = 0\nreturn function()\ni = i + 1\nif a[i] ~= nil then \nreturn a[i], arr[a[i]]\nend\nend\nend\n", @@ -235,8 +234,8 @@ const char* builtin_scripts[] = { "atform.cc)\nend\nif platform.cxx then\n_p(' CXX = %s', platform.cxx)\nend\nif platform.ar then\n_p(' AR = %s', platform.ar)\nend\nend\nfunction cpp.flags(cfg, cc)\nif cfg.pchheader and not cfg.flags.NoPCH then\n_p(' FORCE_INCLUDE += -include $(OBJDIR)/$(notdir $(PCH))')\nend\nif #cfg.forcedincludes > 0 then\n_p(' FORCE_INCLUDE += -include %s'\n,_MAKE.esc(table.concat(cfg.forcedincludes, \";\")))\nend\n_p(' ALL_CPPFLAGS += $(CPPFLAGS) %s $(DEFINES) $(INCLUDES)', table.concat(cc.getcppflags(cfg), \" \"))\n_p(' ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_c)))\n_p(' ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_cpp)))\n_p(' ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_objc)))" "\n_p(' ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)%s',\n make.list(table.join(cc.getdefines(cfg.resdefines),\n cc.getincludedirs(cfg.resincludedirs), cfg.resoptions)))\nend\nfunction cpp.linker(prj, cfg, cc)\n_p(' ALL_LDFLAGS += $(LDFLAGS)%s', make.list(table.join(cc.getlibdirflags(cfg), cc.getldflags(cfg), cfg.linkoptions)))\n_p(' LDDEPS +=%s', make.list(_MAKE.esc(premake.getlinks(cfg, \"siblings\", \"fullpath\"))))\n_p(' LIBS += $(LDDEPS)%s', make.list(cc.getlinkflags(cfg)))\n_p(' EXTERNAL_LIBS +=%s', make.list(cc.getlibfiles(cfg)))\nif cfg.kind == \"StaticLib\" then\nif (not prj.options.ArchiveSplit) then\n_p(' LINKCMD = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, false)))\nelse\n_p(' LINKCMD = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, false)))\n_p(' LINKCMD_NDX = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, true)))\nend\nelse\nlocal tool = iif(cfg.language == \"C\", \"CC" "\", \"CXX\")\n_p(' LINKCMD = $(%s) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS)', tool)\nend\nend\nfunction cpp.pchconfig(cfg)\nif not cfg.pchheader or cfg.flags.NoPCH then\nreturn\nend\nlocal pch = cfg.pchheader\nfor _, incdir in ipairs(cfg.includedirs) do\nlocal abspath = path.getabsolute(path.join(cfg.project.location, incdir))\nlocal testname = path.join(abspath, pch)\nif os.isfile(testname) then\npch = path.getrelative(cfg.location, testname)\nbreak\nend\nend\n_p(' PCH = %s', _MAKE.esc(pch))\n_p(' GCH = $(OBJDIR)/$(notdir $(PCH)).gch')\nend\nfunction cpp.pchrules(prj)\n_p('ifneq (,$(PCH))')\n_p('$(GCH): $(PCH) | $(OBJDIR)')\nif prj.msgprecompile then\n_p('\\t@echo ' .. prj.msgprecompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nlocal cmd = iif(prj.language == \"C\", \"$(CC) $(ALL_CFLAGS) -x c-header\", \"$(CXX) $(ALL_CXXFLAGS) -x c++-header\")\n_p('\\t$(SILENT) %s $(DEFINES) $(INCLUDES) -o \"$@\" -c \"$<\"', cmd)\n_p('endif')\n_p('')\nend\nfunction cp" - "p.fileRules(prj)\ntable.sort(prj.files)\nfor _, file in ipairs(prj.files or {}) do\nif path.isSourceFile(file) then\n_p('$(OBJDIR)/%s.o: %s $(GCH) %s'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n, _MAKE.esc(file)\n, _MAKE.getmakefilename(prj, true)\n)\nif (path.isobjcfile(file) and prj.msgcompile_objc) then\n_p('\\t@echo ' .. prj.msgcompile_objc)\nelseif prj.msgcompile then\n_p('\\t@echo ' .. prj.msgcompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nif (path.isobjcfile(file)) then\n_p('\\t$(SILENT) $(CXX) $(ALL_OBJCFLAGS) $(FORCE_INCLUDE) -o \"$@\" -c \"$<\"')\nelse\ncpp.buildcommand(path.iscfile(file) and not prj.options.ForceCPP, \"o\")\nend\nfor _, task in ipairs(prj.postcompiletasks or {}) do\n_p('\\t$(SILENT) %s', task)\n_p('')\nend\n_p('')\nelseif (path.getextension(file) == \".rc\") then\n_p('$(OBJDIR)/%s.res: %s', _MAKE.esc(path.getbasename(file)), _MAKE.esc(file))\nif prj.msgresource then\n_p('\\t@echo ' .. prj.msgresource)\nelse\n_p('\\t@echo $(notdir $<)')\nend\n_p('\\t$(SILENT) $(RESCOMP) $< " - "-O coff -o \"$@\" $(ALL_RESFLAGS)')\n_p('')\nend\nend\nend\nfunction cpp.dependencyRules(prj)\nfor _, dependency in ipairs(prj.dependency or {}) do\nfor _, dep in ipairs(dependency or {}) do\nif (dep[3]==nil or dep[3]==false) then\n_p('$(OBJDIR)/%s.o: %s'\n, _MAKE.esc(path.trimdots(path.removeext(path.getrelative(prj.location, dep[1]))))\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nelse\n_p('%s: %s'\n, _MAKE.esc(dep[1])\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nend\n_p('')\nend\nend\nend\nfunction cpp.buildcommand(iscfile, objext)\nlocal flags = iif(iscfile, '$(CC) $(ALL_CFLAGS)', '$(CXX) $(ALL_CXXFLAGS)')\n_p('\\t$(SILENT) %s $(FORCE_INCLUDE) -o \"$@\" -c \"$<\"', flags, objext)\nend\n", + "p.fileRules(prj)\ntable.sort(prj.files)\nfor _, file in ipairs(prj.files or {}) do\nif path.isSourceFile(file) then\n_p('$(OBJDIR)/%s.o: %s $(GCH)'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n, _MAKE.esc(file)\n)\nif (path.isobjcfile(file) and prj.msgcompile_objc) then\n_p('\\t@echo ' .. prj.msgcompile_objc)\nelseif prj.msgcompile then\n_p('\\t@echo ' .. prj.msgcompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nif (path.isobjcfile(file)) then\n_p('\\t$(SILENT) $(CXX) $(ALL_OBJCFLAGS) $(FORCE_INCLUDE) -o \"$@\" -c \"$<\"')\nelse\ncpp.buildcommand(path.iscfile(file) and not prj.options.ForceCPP, \"o\")\nend\nfor _, task in ipairs(prj.postcompiletasks or {}) do\n_p('\\t$(SILENT) %s', task)\n_p('')\nend\n_p('')\nelseif (path.getextension(file) == \".rc\") then\n_p('$(OBJDIR)/%s.res: %s', _MAKE.esc(path.getbasename(file)), _MAKE.esc(file))\nif prj.msgresource then\n_p('\\t@echo ' .. prj.msgresource)\nelse\n_p('\\t@echo $(notdir $<)')\nend\n_p('\\t$(SILENT) $(RESCOMP) $< -O coff -o \"$@\" $(ALL_RESFLAGS)')\n_p" + "('')\nend\nend\nend\nfunction cpp.dependencyRules(prj)\nfor _, dependency in ipairs(prj.dependency or {}) do\nfor _, dep in ipairs(dependency or {}) do\nif (dep[3]==nil or dep[3]==false) then\n_p('$(OBJDIR)/%s.o: %s'\n, _MAKE.esc(path.trimdots(path.removeext(path.getrelative(prj.location, dep[1]))))\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nelse\n_p('%s: %s'\n, _MAKE.esc(dep[1])\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nend\n_p('')\nend\nend\nend\nfunction cpp.buildcommand(iscfile, objext)\nlocal flags = iif(iscfile, '$(CC) $(ALL_CFLAGS)', '$(CXX) $(ALL_CXXFLAGS)')\n_p('\\t$(SILENT) %s $(FORCE_INCLUDE) -o \"$@\" -c \"$<\"', flags, objext)\nend\n", /* actions/make/make_csharp.lua */ "local function getresourcefilename(cfg, fname)\nif path.getextension(fname) == \".resx\" then\n local name = cfg.buildtarget.basename .. \".\"\n local dir = path.getdirectory(fname)\n if dir ~= \".\" then \nname = name .. path.translate(dir, \".\") .. \".\"\nend\nreturn \"$(OBJDIR)/\" .. _MAKE.esc(name .. path.getbasename(fname)) .. \".resources\"\nelse\nreturn fname\nend\nend\nfunction premake.make_csharp(prj)\nlocal csc = premake.dotnet\nlocal cfglibs = { }\nlocal cfgpairs = { }\nlocal anycfg\nfor cfg in premake.eachconfig(prj) do\nanycfg = cfg\ncfglibs[cfg] = premake.getlinks(cfg, \"siblings\", \"fullpath\")\ncfgpairs[cfg] = { }\nfor _, fname in ipairs(cfglibs[cfg]) do\nif path.getdirectory(fname) ~= cfg.buildtarget.directory then\ncfgpairs[cfg][\"$(TARGETDIR)/\" .. _MAKE.esc(path.getname(fname))] = _MAKE.esc(fname)\nend\nend\nend\nlocal sources = {}\nlocal embedded = { }\nlocal copypairs = { }\nfor fcfg in premake.project.eachfile(prj) do\nlocal action = csc.getbuildaction(fcfg)\nif action == \"Co" @@ -314,31 +313,31 @@ const char* builtin_scripts[] = { "i;*.idb</LayoutExtensionFilter>')\n_p(2, '<IsolateConfigurationsOnDeploy>true</IsolateConfigurationsOnDeploy>')\nend\nif cfg.kind ~= \"StaticLib\" then\n_p(2,'<LinkIncremental>%s</LinkIncremental>', tostring(premake.config.isincrementallink(cfg)))\nend\nif cfg.flags.NoManifest then\n_p(2,'<GenerateManifest>false</GenerateManifest>')\nend\n_p(1,'</PropertyGroup>')\nend\nend\nlocal function runtime(cfg)\nlocal runtime\nlocal flags = cfg.flags\nif premake.config.isdebugbuild(cfg) then\nruntime = iif(flags.StaticRuntime and not flags.Managed, \"MultiThreadedDebug\", \"MultiThreadedDebugDLL\")\nelse\nruntime = iif(flags.StaticRuntime and not flags.Managed, \"MultiThreaded\", \"MultiThreadedDLL\")\nend\nreturn runtime\nend\nlocal function precompiled_header(cfg)\n if not cfg.flags.NoPCH and cfg.pchheader then\n_p(3,'<PrecompiledHeader>Use</PrecompiledHeader>')\n_p(3,'<PrecompiledHeaderFile>%s</PrecompiledHeaderFile>', cfg.pchheader)\nelse\n_p(3,'<PrecompiledHeader></PrecompiledHeader>')\nend\nend\nlocal functio" "n preprocessor(indent,cfg)\nif #cfg.defines > 0 then\n_p(indent,'<PreprocessorDefinitions>%s;%%(PreprocessorDefinitions)</PreprocessorDefinitions>'\n,premake.esc(table.concat(cfg.defines, \";\")))\nelse\n_p(indent,'<PreprocessorDefinitions></PreprocessorDefinitions>')\nend\nend\nlocal function include_dirs(indent,cfg)\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\nif #includedirs> 0 then\n_p(indent,'<AdditionalIncludeDirectories>%s;%%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>'\n,premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\')))\nend\nend\nlocal function resource_compile(cfg)\n_p(2,'<ResourceCompile>')\npreprocessor(3,cfg)\ninclude_dirs(3,cfg)\n_p(2,'</ResourceCompile>')\nend\nlocal function exceptions(cfg)\nif cfg.flags.NoExceptions then\n_p(3, '<ExceptionHandling>false</ExceptionHandling>')\nelseif cfg.flags.SEH then\n_p(3, '<ExceptionHandling>Async</ExceptionHandling>')\nend\nend\nlocal function rtti(cfg)\nif cfg.flags.NoRTTI and not cfg.flags.M" "anaged then\n_p(3,'<RuntimeTypeInfo>false</RuntimeTypeInfo>')\nend\nend\nlocal function calling_convention(cfg)\nif cfg.flags.FastCall then\n_p(3,'<CallingConvention>FastCall</CallingConvention>')\nelseif cfg.flags.StdCall then\n_p(3,'<CallingConvention>StdCall</CallingConvention>')\nend\nend\nlocal function wchar_t_builtin(cfg)\nif cfg.flags.NativeWChar then\n_p(3,'<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>')\nelseif cfg.flags.NoNativeWChar then\n_p(3,'<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>')\nend\nend\nlocal function sse(cfg)\nif cfg.flags.EnableSSE then\n_p(3, '<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>')\nelseif cfg.flags.EnableSSE2 then\n_p(3, '<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>')\nelseif cfg.flags.EnableAVX then\n_p(3, '<EnableEnhancedInstructionSet>AdvancedVectorExtensions</EnableEnhancedInstructionSet>')\nelseif cfg.flags.EnableAVX2 then\n_p(3, '<EnableEnhancedInstructionS" - "et>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>')\nend\nend\nlocal function floating_point(cfg)\n if cfg.flags.FloatFast then\n_p(3,'<FloatingPointModel>Fast</FloatingPointModel>')\nelseif cfg.flags.FloatStrict and not cfg.flags.Managed then\n_p(3,'<FloatingPointModel>Strict</FloatingPointModel>')\nend\nend\nlocal function debug_info(cfg)\nlocal debug_info = ''\nif cfg.flags.Symbols then\nif (action.vstudio.supports64bitEditContinue == false and cfg.platform == \"x64\")\nor cfg.flags.Managed\nor premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue\nthen\ndebug_info = \"ProgramDatabase\"\nelse\ndebug_info = \"EditAndContinue\"\nend\nend\n_p(3,'<DebugInformationFormat>%s</DebugInformationFormat>',debug_info)\nend\nlocal function minimal_build(cfg)\nif premake.config.isdebugbuild(cfg) and cfg.flags.EnableMinimalRebuild then\n_p(3,'<MinimalRebuild>true</MinimalRebuild>')\nelse\n_p(3,'<MinimalRebuild>false</MinimalRebuild>')\nend\nend\nlocal function compile_language(cfg)\nif c" - "fg.options.ForceCPP then\n_p(3,'<CompileAs>CompileAsCpp</CompileAs>')\nelse\nif cfg.language == \"C\" then\n_p(3,'<CompileAs>CompileAsC</CompileAs>')\nend\nend\nend\nlocal function forcedinclude_files(indent,cfg)\nif #cfg.forcedincludes > 0 then\n_p(indent,'<ForcedIncludeFiles>%s</ForcedIncludeFiles>'\n,premake.esc(path.translate(table.concat(cfg.forcedincludes, \";\"), '\\\\')))\nend\nend\nlocal function vs10_clcompile(cfg)\n_p(2,'<ClCompile>')\n_p(3,'<AdditionalOptions>%s %s%%(AdditionalOptions)</AdditionalOptions>'\n, table.concat(premake.esc(cfg.buildoptions), \" \")\n, iif(cfg.flags.UnsignedChar, \"/J \", \" \")\n)\n_p(3,'<Optimization>%s</Optimization>',optimisation(cfg))\ninclude_dirs(3, cfg)\npreprocessor(3, cfg)\nminimal_build(cfg)\nif not premake.config.isoptimizedbuild(cfg.flags) then\nif not cfg.flags.Managed then\n_p(3,'<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>')\nend\nif cfg.flags.ExtraWarnings then\nend\nelse\n_p(3,'<StringPooling>true</StringPooling>')\nend\nif cfg.platform == " - "\"Durango\" or cfg.flags.NoWinRT then\n_p(3, '<CompileAsWinRT>false</CompileAsWinRT>')\nend\nif cfg.platform ~= \"Durango\" then\n_p(3,'<RuntimeLibrary>%s</RuntimeLibrary>', runtime(cfg))\nend\nif cfg.flags.NoBufferSecurityCheck then\n_p(3,'<BufferSecurityCheck>false</BufferSecurityCheck>')\nend\n_p(3,'<FunctionLevelLinking>true</FunctionLevelLinking>')\nif not cfg.flags.NoMultiProcessorCompilation and not cfg.flags.EnableMinimalRebuild then\n_p(3,'<MultiProcessorCompilation>true</MultiProcessorCompilation>')\nelse\n_p(3,'<MultiProcessorCompilation>false</MultiProcessorCompilation>')\nend\nprecompiled_header(cfg)\nif cfg.flags.ExtraWarnings then\n_p(3,'<WarningLevel>Level4</WarningLevel>')\nelseif cfg.flags.MinimumWarnings then\n_p(3,'<WarningLevel>Level1</WarningLevel>')\nelse\n_p(3,'<WarningLevel>Level3</WarningLevel>')\nend\nif cfg.flags.FatalWarnings then\n_p(3,'<TreatWarningAsError>true</TreatWarningAsError>')\nend\nexceptions(cfg)\nrtti(cfg)\ncalling_convention(cfg)\nwchar_t_builtin(cfg)\nsse(cfg)\nfloat" - "ing_point(cfg)\ndebug_info(cfg)\nif cfg.flags.Symbols then\n_p(3,'<ProgramDataBaseFileName>$(OutDir)%s.pdb</ProgramDataBaseFileName>'\n, path.getbasename(cfg.buildtarget.name))\nend\nif cfg.flags.NoFramePointer then\n_p(3,'<OmitFramePointers>true</OmitFramePointers>')\nend\nif cfg.flags.UseFullPaths then\n_p(3, '<UseFullPaths>true</UseFullPaths>')\nend\ncompile_language(cfg)\nforcedinclude_files(3,cfg);\n_p(2,'</ClCompile>')\nend\nlocal function event_hooks(cfg)\nif #cfg.postbuildcommands> 0 then\n _p(2,'<PostBuildEvent>')\n_p(3,'<Command>%s</Command>',premake.esc(table.implode(cfg.postbuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'</PostBuildEvent>')\nend\nif #cfg.prebuildcommands> 0 then\n _p(2,'<PreBuildEvent>')\n_p(3,'<Command>%s</Command>',premake.esc(table.implode(cfg.prebuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'</PreBuildEvent>')\nend\nif #cfg.prelinkcommands> 0 then\n _p(2,'<PreLinkEvent>')\n_p(3,'<Command>%s</Command>',premake.esc(table.implode(cfg.prelinkcommands, \"\", \"\", \"\\r\\n" - "\")))\n_p(2,'</PreLinkEvent>')\nend\nend\nlocal function additional_options(indent,cfg)\nif #cfg.linkoptions > 0 then\n_p(indent,'<AdditionalOptions>%s %%(AdditionalOptions)</AdditionalOptions>',\ntable.concat(premake.esc(cfg.linkoptions), \" \"))\nend\nend\nlocal function link_target_machine(index,cfg)\nlocal platforms = {x32 = 'MachineX86', x64 = 'MachineX64'}\nif platforms[cfg.platform] then\n_p(index,'<TargetMachine>%s</TargetMachine>', platforms[cfg.platform])\nend\nend\nlocal function item_def_lib(cfg)\n -- The Xbox360 project files are stored in another place in the project file.\nif cfg.kind == 'StaticLib' and cfg.platform ~= \"Xbox360\" then\n_p(1,'<Lib>')\n_p(2,'<OutputFile>$(OutDir)%s</OutputFile>',cfg.buildtarget.name)\nadditional_options(2,cfg)\nlink_target_machine(2,cfg)\n_p(1,'</Lib>')\nend\nend\nlocal function import_lib(cfg)\nif cfg.kind == \"SharedLib\" then\nlocal implibname = cfg.linktarget.fullpath\n_p(3,'<ImportLibrary>%s</ImportLibrary>',iif(cfg.flags.NoImportLib, cfg.objectsdir .." - " \"\\\\\" .. path.getname(implibname), implibname))\nend\nend\nlocal function hasmasmfiles(prj)\nlocal files = vc2010.getfilegroup(prj, \"MASM\")\nreturn #files > 0\nend\nlocal function vs10_masm(prj, cfg)\nif hasmasmfiles(prj) then\n_p(2, '<MASM>')\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\nif #includedirs > 0 then\n_p(3, '<IncludePaths>%s;%%(IncludePaths)</IncludePaths>'\n, premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\'))\n)\nend\nlocal defines = table.join(cfg.defines)\ntable.insertflat(defines, iif(premake.config.isdebugbuild(cfg), \"_DEBUG\", {}))\ntable.insert(defines, iif(cfg.platform == \"x64\", \"_WIN64\", \"_WIN32\"))\ntable.insert(defines, iif(prj.kind == \"SharedLib\", \"_EXPORT=EXPORT\", \"_EXPORT=\"))\n_p(3, '<PreprocessorDefinitions>%s;%%(PreprocessorDefinitions)</PreprocessorDefinitions>'\n, premake.esc(table.concat(defines, \";\"))\n)\nif cfg.flags.FatalWarnings then\n_p(3,'<TreatWarningsAsErrors>true</TreatWarningsAsErrors>')\nend\nif cfg.flags" - ".MinimumWarnings then\n_p(3,'<WarningLevel>0</WarningLevel>')\nelse\n_p(3,'<WarningLevel>3</WarningLevel>')\nend\n_p(2, '</MASM>')\nend\nend\nfunction vc2010.link(cfg)\n_p(2,'<Link>')\n_p(3,'<SubSystem>%s</SubSystem>', iif(cfg.kind == \"ConsoleApp\", \"Console\", \"Windows\"))\n_p(3,'<GenerateDebugInformation>%s</GenerateDebugInformation>', tostring(cfg.flags.Symbols ~= nil))\nif premake.config.isoptimizedbuild(cfg.flags) then\n_p(3,'<EnableCOMDATFolding>true</EnableCOMDATFolding>')\n_p(3,'<OptimizeReferences>true</OptimizeReferences>')\nend\nif cfg.kind ~= 'StaticLib' then\nvc2010.additionalDependencies(3,cfg)\n_p(3,'<OutputFile>$(OutDir)%s</OutputFile>', cfg.buildtarget.name)\nif #cfg.libdirs > 0 then\n_p(3,'<AdditionalLibraryDirectories>%s;%%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>'\n, premake.esc(path.translate(table.concat(cfg.libdirs, ';'), '\\\\'))\n)\nend\nif vc2010.config_type(cfg) == 'Application' and not cfg.flags.WinMain and not cfg.flags.Managed then\nif cfg.flags.Unicode then" - "\n_p(3,'<EntryPointSymbol>wmainCRTStartup</EntryPointSymbol>')\nelse\n_p(3,'<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>')\nend\nend\nimport_lib(cfg)\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\n_p(3,'<ModuleDefinitionFile>%s</ModuleDefinitionFile>', deffile)\nend\nlink_target_machine(3,cfg)\nadditional_options(3,cfg)\n if cfg.flags.NoWinMD and vstudio.iswinrt() and prj.kind == \"WindowedApp\" then\n_p(3,'<GenerateWindowsMetadata>false</GenerateWindowsMetadata>' )\n end\nend\n_p(2,'</Link>')\nend\nfunction vc2010.additionalDependencies(tab,cfg)\nlocal links = premake.getlinks(cfg, \"system\", \"fullpath\")\nif #links > 0 then\n_p(tab,'<AdditionalDependencies>%s;%s</AdditionalDependencies>'\n, table.concat(links, \";\")\n, iif(cfg.platform == \"Durango\"\n, '$(XboxExtensionsDependencies)'\n, '%(AdditionalDependencies)'\n)\n)\nend\nend\nlocal function item_definitions(prj)\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(" - "prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(1,'<ItemDefinitionGroup ' ..if_config_and_platform() ..'>'\n,premake.esc(cfginfo.name))\nvs10_clcompile(cfg)\nresource_compile(cfg)\nitem_def_lib(cfg)\nvc2010.link(cfg)\nevent_hooks(cfg)\nvs10_masm(prj, cfg)\n_p(1,'</ItemDefinitionGroup>')\nend\nend\nfunction vc2010.getfilegroup(prj, group)\nlocal sortedfiles = prj.vc2010sortedfiles\nif not sortedfiles then\nsortedfiles = {\nClCompile = {},\nClInclude = {},\nMASM = {},\nNone = {},\nResourceCompile = {},\nAppxManifest = {},\nImage = {},\nDeploymentContent = {}\n}\nlocal foundAppxManifest = false\nfor file in premake.project.eachfile(prj) do\nif path.isSourceFileVS(file.name) then\ntable.insert(sortedfiles.ClCompile, file)\nelseif path.iscppheader(file.name) then\nif not table.icontains(prj.removefiles, file) then\ntable.insert(sortedfiles.ClInclude, file)\nend\nelseif path.isresourcefile(file.name) then\ntable.insert(sortedfiles.ResourceCompile, file)\nelseif path.isappxmanifest(file.name) then\nfoundAppxMani" - "fest = true\ntable.insert(sortedfiles.AppxManifest, file)\nelseif path.isasmfile(file.name) then\ntable.insert(sortedfiles.MASM, file)\nelseif file.flags and table.icontains(file.flags, \"DeploymentContent\") then\ntable.insert(sortedfiles.DeploymentContent, file)\nelse\ntable.insert(sortedfiles.None, file)\nend\nend\nif vstudio.iswinrt() and prj.kind == \"WindowedApp\" and not foundAppxManifest then\nvstudio.needAppxManifest = true\nlocal fcfg = {}\nfcfg.name = prj.name .. \"/Package.appxmanifest\"\nfcfg.vpath = premake.project.getvpath(prj, fcfg.name)\ntable.insert(sortedfiles.AppxManifest, fcfg)\nlocal logo = {}\nlogo.name = prj.name .. \"/Logo.png\"\nlogo.vpath = logo.name\ntable.insert(sortedfiles.Image, logo)\nlocal smallLogo = {}\nsmallLogo.name = prj.name .. \"/SmallLogo.png\"\nsmallLogo.vpath = smallLogo.name\ntable.insert(sortedfiles.Image, smallLogo)\nlocal storeLogo = {}\nstoreLogo.name = prj.name .. \"/StoreLogo.png\"\nstoreLogo.vpath = storeLogo.name\ntable.insert(sortedfiles.Image, storeLogo)" - "\nlocal splashScreen = {}\nsplashScreen.name = prj.name .. \"/SplashScreen.png\"\nsplashScreen.vpath = splashScreen.name\ntable.insert(sortedfiles.Image, splashScreen)\nend\nprj.vc2010sortedfiles = sortedfiles\nend\nreturn sortedfiles[group]\nend\nfunction vc2010.files(prj)\nvc2010.simplefilesgroup(prj, \"ClInclude\")\nvc2010.compilerfilesgroup(prj)\nvc2010.simplefilesgroup(prj, \"None\")\nvc2010.customtaskgroup(prj)\nvc2010.simplefilesgroup(prj, \"ResourceCompile\")\nvc2010.simplefilesgroup(prj, \"AppxManifest\")\nvc2010.deploymentcontentgroup(prj, \"Image\")\nvc2010.deploymentcontentgroup(prj, \"DeploymentContent\", \"None\")\nend\nfunction vc2010.customtaskgroup(prj)\nlocal files = { }\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal fcfg = { }\nfcfg.name = path.getrelative(prj.location,buildtask[1])\nfcfg.vpath = path.trimdots(fcfg.name)\ntable.insert(files, fcfg)\nend\nend\nif #files > 0 then\n_p(1,'<ItemGroup>')\nlocal groupedB" - "uildTasks = {}\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nif (groupedBuildTasks[buildtask[1]] == nil) then\ngroupedBuildTasks[buildtask[1]] = {}\nend\ntable.insert(groupedBuildTasks[buildtask[1]], buildtask)\nend\nend\nfor name, custombuildtask in pairs(groupedBuildTasks or {}) do\n_p(2,'<CustomBuild Include=\\\"%s\\\">', path.translate(path.getrelative(prj.location,name), \"\\\\\"))\n_p(3,'<FileType>Text</FileType>')\nlocal cmd = \"\"\nlocal outputs = \"\"\nfor _, buildtask in ipairs(custombuildtask or {}) do\nfor _, cmdline in ipairs(buildtask[4] or {}) do\ncmd = cmd .. cmdline\nlocal num = 1\nfor _, depdata in ipairs(buildtask[3] or {}) do\ncmd = string.gsub(cmd,\"%$%(\" .. num ..\"%)\", string.format(\"%s \",path.getrelative(prj.location,depdata)))\nnum = num + 1\nend\ncmd = string.gsub(cmd, \"%$%(<%)\", string.format(\"%s \",path.getrelative(prj.location,buildtask[1])))\ncmd = string.gsub(cmd, \"%$%(@%)\", string.format(\"%s \",pa" - "th.getrelative(prj.location,buildtask[2])))\ncmd = cmd .. \"\\r\\n\"\nend\noutputs = outputs .. path.getrelative(prj.location,buildtask[2]) .. \";\"\nend\n_p(3,'<Command>%s</Command>',cmd)\n_p(3,'<Outputs>%s%%(Outputs)</Outputs>',outputs)\n_p(3,'<SubType>Designer</SubType>')\n_p(3,'<Message></Message>')\n_p(2,'</CustomBuild>')\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.simplefilesgroup(prj, section, subtype)\nlocal files = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1,'<ItemGroup>')\nfor _, file in ipairs(files) do\nif subtype then\n_p(2,'<%s Include=\\\"%s\\\">', section, path.translate(file.name, \"\\\\\"))\n_p(3,'<SubType>%s</SubType>', subtype)\n_p(2,'</%s>', section)\nelse\n_p(2,'<%s Include=\\\"%s\\\" />', section, path.translate(file.name, \"\\\\\"))\nend\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.deploymentcontentgroup(prj, section, filetype)\nif filetype == nil then\nfiletype = section\nend\nlocal files = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1" - ",'<ItemGroup>')\nfor _, file in ipairs(files) do\n_p(2,'<%s Include=\\\"%s\\\">', filetype, path.translate(file.name, \"\\\\\"))\n_p(3,'<DeploymentContent>true</DeploymentContent>')\n_p(3,'<Link>%s</Link>', path.translate(file.vpath, \"\\\\\"))\n_p(2,'</%s>', filetype)\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.compilerfilesgroup(prj)\nlocal configs = prj.solution.vstudio_configs\nlocal files = vc2010.getfilegroup(prj, \"ClCompile\")\nif #files > 0 then\nlocal config_mappings = {}\nfor _, cfginfo in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nif cfg.pchheader and cfg.pchsource and not cfg.flags.NoPCH then\nconfig_mappings[cfginfo] = path.translate(cfg.pchsource, \"\\\\\")\nend\nend\n_p(1,'<ItemGroup>')\nfor _, file in ipairs(files) do\nlocal translatedpath = path.translate(file.name, \"\\\\\")\n_p(2, '<ClCompile Include=\\\"%s\\\">', translatedpath)\n_p(3, '<ObjectFileName>$(IntDir)%s\\\\</ObjectFileName>'\n, premake.esc(path.translate(path.tr" - "imdots(path.getdirectory(file.name))))\n)\nif path.iscxfile(file.name) then\n_p(3, '<CompileAsWinRT>true</CompileAsWinRT>')\n_p(3, '<RuntimeTypeInfo>true</RuntimeTypeInfo>')\n_p(3, '<PrecompiledHeader>NotUsing</PrecompiledHeader>')\nend\nif vstudio.iswinrt() and string.len(file.name) > 2 and string.sub(file.name, -2) == \".c\" then\n_p(3,'<CompileAsWinRT>FALSE</CompileAsWinRT>')\nend\nfor _, cfginfo in ipairs(configs) do\nif config_mappings[cfginfo] and translatedpath == config_mappings[cfginfo] then\n_p(3,'<PrecompiledHeader '.. if_config_and_platform() .. '>Create</PrecompiledHeader>', premake.esc(cfginfo.name))\nconfig_mappings[cfginfo] = nil --only one source file per pch\nend\nend\nlocal nopch = table.icontains(prj.nopch, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif nopch or table.icontains(cfg.nopch, file.name) then\n_p(3,'<PrecompiledHeader '.. if_config_and_platform() .. '>NotUsing</PrecompiledHeader>', premake." - "esc(vsconfig.name))\nend\nend\nlocal excluded = table.icontains(prj.excludes, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif excluded or table.icontains(cfg.excludes, file.name) then\n_p(3, '<ExcludedFromBuild '\n.. if_config_and_platform()\n.. '>true</ExcludedFromBuild>'\n, premake.esc(vsconfig.name)\n)\nend\nend\n_p(2,'</ClCompile>')\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.masmfiles(prj)\nlocal configs = prj.solution.vstudio_configs\nlocal files = vc2010.getfilegroup(prj, \"MASM\")\nif #files > 0 then\n_p(1, '<ItemGroup>')\nfor _, file in ipairs(files) do\nlocal translatedpath = path.translate(file.name, \"\\\\\")\n_p(2, '<MASM Include=\"%s\">', translatedpath)\nlocal excluded = table.icontains(prj.excludes, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif excluded or table.icontains(cfg.excludes, file.name) then\n_p(3, '" - "<ExcludedFromBuild ' .. if_config_and_platform() .. '>true</ExcludedFromBuild>'\n, premake.esc(vsconfig.name)\n)\nend\nend\n_p(2, '</MASM>')\nend\n_p(1, '</ItemGroup>')\nend\nend\nfunction vc2010.header(targets)\nio.eol = \"\\r\\n\"\n_p('<?xml version=\"1.0\" encoding=\"utf-8\"?>')\nlocal t = \"\"\nif targets then\nt = ' DefaultTargets=\"' .. targets .. '\"'\nend\n_p('<Project%s ToolsVersion=\"%s\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">', t, action.vstudio.toolsVersion)\nend\nfunction premake.vs2010_vcxproj(prj)\nlocal usemasm = hasmasmfiles(prj)\nio.indent = \" \"\nvc2010.header(\"Build\")\nvs2010_config(prj)\nvs2010_globals(prj)\n_p(1,'<Import Project=\"$(VCTargetsPath)\\\\Microsoft.Cpp.Default.props\" />')\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nvc2010.configurationPropertyGroup(cfg, cfginfo)\nend\n_p(1,'<Import Project=\"$(VCTargetsPath)\\\\Microsoft.Cpp.props\" />')\n_p(1,'<ImportGr" - "oup Label=\"ExtensionSettings\">')\nif usemasm then\n_p(2, '<Import Project=\"$(VCTargetsPath)\\\\BuildCustomizations\\\\masm.props\" />')\nend\n_p(1,'</ImportGroup>')\nimport_props(prj)\n_p(1,'<PropertyGroup Label=\"UserMacros\" />')\nvc2010.outputProperties(prj)\nitem_definitions(prj)\nvc2010.files(prj)\nvc2010.projectReferences(prj)\nvc2010.masmfiles(prj)\n_p(1,'<Import Project=\"$(VCTargetsPath)\\\\Microsoft.Cpp.targets\" />')\n_p(1,'<ImportGroup Label=\"ExtensionTargets\">')\nif usemasm then\n_p(2, '<Import Project=\"$(VCTargetsPath)\\\\BuildCustomizations\\\\masm.targets\" />')\nend\n_p(1,'</ImportGroup>')\n_p('</Project>')\nend\nfunction vc2010.projectReferences(prj)\nlocal deps = premake.getdependencies(prj)\nif #deps > 0 then\n_p(1,'<ItemGroup>')\nfor _, dep in ipairs(deps) do\nlocal deppath = path.getrelative(prj.location, vstudio.projectfile(dep))\n_p(2,'<ProjectReference Include=\\\"%s\\\">', path.translate(deppath, \"\\\\\"))\n_p(3,'<Project>{%s}</Project>', dep.uuid)\nif vstudio.iswinrt() then\n_" - "p(3,'<ReferenceOutputAssembly>false</ReferenceOutputAssembly>')\nend\n_p(2,'</ProjectReference>')\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.debugdir(cfg)\nif cfg.debugdir and not vstudio.iswinrt() then\n_p(' <LocalDebuggerWorkingDirectory>%s</LocalDebuggerWorkingDirectory>', path.translate(cfg.debugdir, '\\\\'))\n_p(' <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>')\nend\nif cfg.debugargs then\n_p(' <LocalDebuggerCommandArguments>%s</LocalDebuggerCommandArguments>', table.concat(cfg.debugargs, \" \"))\nend\nend\nfunction vc2010.debugenvs(cfg)\nif cfg.debugenvs and #cfg.debugenvs > 0 then\n_p(2,'<LocalDebuggerEnvironment>%s%s</LocalDebuggerEnvironment>',table.concat(cfg.debugenvs, \"\\n\")\n,iif(cfg.flags.DebugEnvsInherit,'\\n$(LocalDebuggerEnvironment)','')\n)\nif cfg.flags.DebugEnvsDontMerge then\n_p(2,'<LocalDebuggerMergeEnvironment>false</LocalDebuggerMergeEnvironment>')\nend\nend\nend\nfunction premake.vs2010_vcxproj_user(prj)\nio.indent = \" \"\nvc2010.header()\nfor _, cfginfo" - " in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(' <PropertyGroup '.. if_config_and_platform() ..'>', premake.esc(cfginfo.name))\nvc2010.debugdir(cfg)\nvc2010.debugenvs(cfg)\n_p(' </PropertyGroup>')\nend\n_p('</Project>')\nend\nlocal png1x1data = {\n0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, -- .PNG........IHDR\n0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x25, 0xdb, 0x56, -- .............%.V\n0xca, 0x00, 0x00, 0x00, 0x03, 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x00, 0xa7, 0x7a, 0x3d, 0xda, -- .....PLTE....z=.\n0x00, 0x00, 0x00, 0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x00, -- ....tRNS.@..f...\n0x0a, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0xe2, -- .IDAT..c`.......\n0x21, 0xbc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, -- !.3....IEN" - "D.B`.\n}\nfunction png1x1(obj, filename)\nfilename = premake.project.getfilename(obj, filename)\nlocal f, err = io.open(filename, \"wb\")\nif f then\nfor _, byte in ipairs(png1x1data) do\nf:write(string.char(byte))\nend\nf:close()\nend\nend\nfunction premake.vs2010_appxmanifest(prj)\nio.indent = \" \"\nio.eol = \"\\r\\n\"\n_p('<?xml version=\"1.0\" encoding=\"utf-8\"?>')\nif vstudio.toolset == \"v120_wp81\" then\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:m2=\"http://schemas.microsoft.com/appx/2013/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/2014/manifest\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\">')\nelseif vstudio.storeapp == \"8.1\" then\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/2013/manifest\">')\nelseif vstudio.storeapp == \"durango\" then\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:mx=\"http://schemas.microsoft.com/appx/2013/" - "xbox/manifest\" IgnorableNamespaces=\"mx\">')\nelse\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\">')\nend\n_p(1,'<Identity Name=\"' .. prj.uuid .. '\"')\n_p(2,'Publisher=\"CN=Publisher\"')\n_p(2,'Version=\"1.0.0.0\" />')\nif vstudio.toolset == \"v120_wp81\" or vstudio.storeapp == \"8.2\" then\n_p(1,'<mp:PhoneIdentity PhoneProductId=\"' .. prj.uuid .. '\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>')\nend\n_p(1, '<Properties>')\n_p(2, '<DisplayName>' .. prj.name .. '</DisplayName>')\n_p(2, '<PublisherDisplayName>PublisherDisplayName</PublisherDisplayName>')\n_p(2, '<Logo>' .. prj.name .. '\\\\StoreLogo.png</Logo>')\npng1x1(prj, \"%%/StoreLogo.png\")\n_p(2, '<Description>' .. prj.name .. '</Description>')\n_p(1,'</Properties>')\nif vstudio.storeapp == \"8.2\" then\n_p(1, '<Dependencies>')\n_p(2, '<TargetDeviceFamily Name" - "=\"Windows.Universal\" MinVersion=\"10.0.10069.0\" MaxVersionTested=\"10.0.10069.0\" />')\n_p(1, '</Dependencies>')\nelseif vstudio.storeapp == \"durango\" then\n_p(1, '<Prerequisites>')\n_p(2, '<OSMinVersion>6.2</OSMinVersion>')\n_p(2, '<OSMaxVersionTested>6.2</OSMaxVersionTested>')\n_p(1, '</Prerequisites>')\nelse\n_p(1, '<Prerequisites>')\n_p(2, '<OSMinVersion>6.3.0</OSMinVersion>')\n_p(2, '<OSMaxVersionTested>6.3.0</OSMaxVersionTested>')\n_p(1, '</Prerequisites>')\nend\n_p(1,'<Resources>')\n_p(2,'<Resource Language=\"en-us\"/>')\n_p(1,'</Resources>')\n_p(1,'<Applications>')\n_p(2,'<Application Id=\"App\"')\n_p(3,'Executable=\"$targetnametoken$.exe\"')\n_p(3,'EntryPoint=\"' .. prj.name .. '.App\">')\nif vstudio.storeapp == \"durango\" then\n_p(3, '<VisualElements')\n_p(4, 'DisplayName=\"' .. prj.name .. '\"')\n_p(4, 'Logo=\"' .. prj.name .. '\\\\Logo.png\"')\npng1x1(prj, \"%%/Logo.png\")\n_p(4, 'SmallLogo=\"' .. prj.name .. '\\\\SmallLogo.png\"')\npng1x1(prj, \"%%/SmallLogo.png\")\n_p(4, 'Description=\"' .." - " prj.name .. '\"')\n_p(4, 'ForegroundText=\"light\"')\n_p(4, 'BackgroundColor=\"transparent\">')\n_p(5, '<SplashScreen Image=\"' .. prj.name .. '\\\\SplashScreen.png\" />')\npng1x1(prj, \"%%/SplashScreen.png\")\n_p(3, '</VisualElements>')\n_p(3, '<Extensions>')\n_p(4, '<mx:Extension Category=\"xbox.system.resources\">')\n_p(4, '<mx:XboxSystemResources />')\n_p(4, '</mx:Extension>')\n_p(3, '</Extensions>')\nelse\n_p(3, '<m3:VisualElements')\n_p(4, 'DisplayName=\"' .. prj.name .. '\"')\n_p(4, 'Square150x150Logo=\"' .. prj.name .. '\\\\Logo.png\"')\npng1x1(prj, \"%%/Logo.png\")\nif vstudio.toolset == \"v120_wp81\" or vstudio.storeapp == \"8.2\" then\n_p(4, 'Square44x44Logo=\"' .. prj.name .. '\\\\SmallLogo.png\"')\npng1x1(prj, \"%%/SmallLogo.png\")\nelse\n_p(4, 'Square30x30Logo=\"' .. prj.name .. '\\\\SmallLogo.png\"')\npng1x1(prj, \"%%/SmallLogo.png\")\nend\n_p(4, 'Description=\"' .. prj.name .. '\"')\n_p(4, 'ForegroundText=\"light\"')\n_p(4, 'BackgroundColor=\"transparent\">')\n_p(4, '<m3:SplashScreen Image=\"'" - " .. prj.name .. '\\\\SplashScreen.png\"')\npng1x1(prj, \"%%/SplashScreen.png\")\n_p(3, '</m3:VisualElements>')\nend\n_p(2,'</Application>')\n_p(1,'</Applications>')\n_p('</Package>')\nend\n", + "et>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>')\nend\nend\nlocal function floating_point(cfg)\n if cfg.flags.FloatFast then\n_p(3,'<FloatingPointModel>Fast</FloatingPointModel>')\nelseif cfg.flags.FloatStrict and not cfg.flags.Managed then\n_p(3,'<FloatingPointModel>Strict</FloatingPointModel>')\nend\nend\nlocal function debug_info(cfg)\nlocal debug_info = ''\nif cfg.flags.Symbols then\nif cfg.flags.C7DebugInfo then\ndebug_info = \"OldStyle\"\nelseif (action.vstudio.supports64bitEditContinue == false and cfg.platform == \"x64\")\nor cfg.flags.Managed\nor premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue\nthen\ndebug_info = \"ProgramDatabase\"\nelse\ndebug_info = \"EditAndContinue\"\nend\nend\n_p(3,'<DebugInformationFormat>%s</DebugInformationFormat>',debug_info)\nend\nlocal function minimal_build(cfg)\nif premake.config.isdebugbuild(cfg) and cfg.flags.EnableMinimalRebuild then\n_p(3,'<MinimalRebuild>true</MinimalRebuild>')\nelse\n_p(3,'<MinimalRebuild>false</MinimalRe" + "build>')\nend\nend\nlocal function compile_language(cfg)\nif cfg.options.ForceCPP then\n_p(3,'<CompileAs>CompileAsCpp</CompileAs>')\nelse\nif cfg.language == \"C\" then\n_p(3,'<CompileAs>CompileAsC</CompileAs>')\nend\nend\nend\nlocal function forcedinclude_files(indent,cfg)\nif #cfg.forcedincludes > 0 then\n_p(indent,'<ForcedIncludeFiles>%s</ForcedIncludeFiles>'\n,premake.esc(path.translate(table.concat(cfg.forcedincludes, \";\"), '\\\\')))\nend\nend\nlocal function vs10_clcompile(cfg)\n_p(2,'<ClCompile>')\n_p(3,'<AdditionalOptions>%s %s%%(AdditionalOptions)</AdditionalOptions>'\n, table.concat(premake.esc(cfg.buildoptions), \" \")\n, iif(cfg.flags.UnsignedChar, \"/J \", \" \")\n)\n_p(3,'<Optimization>%s</Optimization>',optimisation(cfg))\ninclude_dirs(3, cfg)\npreprocessor(3, cfg)\nminimal_build(cfg)\nif not premake.config.isoptimizedbuild(cfg.flags) then\nif not cfg.flags.Managed then\n_p(3,'<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>')\nend\nif cfg.flags.ExtraWarnings then\nend\nelse\n_p(3,'<" + "StringPooling>true</StringPooling>')\nend\nif cfg.platform == \"Durango\" or cfg.flags.NoWinRT then\n_p(3, '<CompileAsWinRT>false</CompileAsWinRT>')\nend\nif cfg.platform ~= \"Durango\" then\n_p(3,'<RuntimeLibrary>%s</RuntimeLibrary>', runtime(cfg))\nend\nif cfg.flags.NoBufferSecurityCheck then\n_p(3,'<BufferSecurityCheck>false</BufferSecurityCheck>')\nend\n_p(3,'<FunctionLevelLinking>true</FunctionLevelLinking>')\nif not cfg.flags.NoMultiProcessorCompilation and not cfg.flags.EnableMinimalRebuild then\n_p(3,'<MultiProcessorCompilation>true</MultiProcessorCompilation>')\nelse\n_p(3,'<MultiProcessorCompilation>false</MultiProcessorCompilation>')\nend\nprecompiled_header(cfg)\nif cfg.flags.ExtraWarnings then\n_p(3,'<WarningLevel>Level4</WarningLevel>')\nelseif cfg.flags.MinimumWarnings then\n_p(3,'<WarningLevel>Level1</WarningLevel>')\nelse\n_p(3,'<WarningLevel>Level3</WarningLevel>')\nend\nif cfg.flags.FatalWarnings then\n_p(3,'<TreatWarningAsError>true</TreatWarningAsError>')\nend\nexceptions(cfg)\nrtti(cfg)\n" + "calling_convention(cfg)\nwchar_t_builtin(cfg)\nsse(cfg)\nfloating_point(cfg)\ndebug_info(cfg)\nif cfg.flags.Symbols then\n_p(3,'<ProgramDataBaseFileName>$(OutDir)%s.pdb</ProgramDataBaseFileName>'\n, path.getbasename(cfg.buildtarget.name))\nend\nif cfg.flags.NoFramePointer then\n_p(3,'<OmitFramePointers>true</OmitFramePointers>')\nend\nif cfg.flags.UseFullPaths then\n_p(3, '<UseFullPaths>true</UseFullPaths>')\nend\ncompile_language(cfg)\nforcedinclude_files(3,cfg);\n_p(2,'</ClCompile>')\nend\nlocal function event_hooks(cfg)\nif #cfg.postbuildcommands> 0 then\n _p(2,'<PostBuildEvent>')\n_p(3,'<Command>%s</Command>',premake.esc(table.implode(cfg.postbuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'</PostBuildEvent>')\nend\nif #cfg.prebuildcommands> 0 then\n _p(2,'<PreBuildEvent>')\n_p(3,'<Command>%s</Command>',premake.esc(table.implode(cfg.prebuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'</PreBuildEvent>')\nend\nif #cfg.prelinkcommands> 0 then\n _p(2,'<PreLinkEvent>')\n_p(3,'<Command>%s</Command>',prema" + "ke.esc(table.implode(cfg.prelinkcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'</PreLinkEvent>')\nend\nend\nlocal function additional_options(indent,cfg)\nif #cfg.linkoptions > 0 then\n_p(indent,'<AdditionalOptions>%s %%(AdditionalOptions)</AdditionalOptions>',\ntable.concat(premake.esc(cfg.linkoptions), \" \"))\nend\nend\nlocal function link_target_machine(index,cfg)\nlocal platforms = {x32 = 'MachineX86', x64 = 'MachineX64'}\nif platforms[cfg.platform] then\n_p(index,'<TargetMachine>%s</TargetMachine>', platforms[cfg.platform])\nend\nend\nlocal function item_def_lib(cfg)\n -- The Xbox360 project files are stored in another place in the project file.\nif cfg.kind == 'StaticLib' and cfg.platform ~= \"Xbox360\" then\n_p(1,'<Lib>')\n_p(2,'<OutputFile>$(OutDir)%s</OutputFile>',cfg.buildtarget.name)\nadditional_options(2,cfg)\nlink_target_machine(2,cfg)\n_p(1,'</Lib>')\nend\nend\nlocal function import_lib(cfg)\nif cfg.kind == \"SharedLib\" then\nlocal implibname = cfg.linktarget.fullpath\n_p(3,'<ImportLibrary>%s" + "</ImportLibrary>',iif(cfg.flags.NoImportLib, cfg.objectsdir .. \"\\\\\" .. path.getname(implibname), implibname))\nend\nend\nlocal function hasmasmfiles(prj)\nlocal files = vc2010.getfilegroup(prj, \"MASM\")\nreturn #files > 0\nend\nlocal function vs10_masm(prj, cfg)\nif hasmasmfiles(prj) then\n_p(2, '<MASM>')\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\nif #includedirs > 0 then\n_p(3, '<IncludePaths>%s;%%(IncludePaths)</IncludePaths>'\n, premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\'))\n)\nend\nlocal defines = table.join(cfg.defines)\ntable.insertflat(defines, iif(premake.config.isdebugbuild(cfg), \"_DEBUG\", {}))\ntable.insert(defines, iif(cfg.platform == \"x64\", \"_WIN64\", \"_WIN32\"))\ntable.insert(defines, iif(prj.kind == \"SharedLib\", \"_EXPORT=EXPORT\", \"_EXPORT=\"))\n_p(3, '<PreprocessorDefinitions>%s;%%(PreprocessorDefinitions)</PreprocessorDefinitions>'\n, premake.esc(table.concat(defines, \";\"))\n)\nif cfg.flags.FatalWarnings then\n_p(3,'<TreatWarn" + "ingsAsErrors>true</TreatWarningsAsErrors>')\nend\nif cfg.flags.MinimumWarnings then\n_p(3,'<WarningLevel>0</WarningLevel>')\nelse\n_p(3,'<WarningLevel>3</WarningLevel>')\nend\n_p(2, '</MASM>')\nend\nend\nfunction vc2010.link(cfg)\n_p(2,'<Link>')\n_p(3,'<SubSystem>%s</SubSystem>', iif(cfg.kind == \"ConsoleApp\", \"Console\", \"Windows\"))\n_p(3,'<GenerateDebugInformation>%s</GenerateDebugInformation>', tostring(cfg.flags.Symbols ~= nil))\nif premake.config.isoptimizedbuild(cfg.flags) then\n_p(3,'<EnableCOMDATFolding>true</EnableCOMDATFolding>')\n_p(3,'<OptimizeReferences>true</OptimizeReferences>')\nend\nif cfg.kind ~= 'StaticLib' then\nvc2010.additionalDependencies(3,cfg)\n_p(3,'<OutputFile>$(OutDir)%s</OutputFile>', cfg.buildtarget.name)\nif #cfg.libdirs > 0 then\n_p(3,'<AdditionalLibraryDirectories>%s;%%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>'\n, premake.esc(path.translate(table.concat(cfg.libdirs, ';'), '\\\\'))\n)\nend\nif vc2010.config_type(cfg) == 'Application' and not cfg.flags.Win" + "Main and not cfg.flags.Managed then\nif cfg.flags.Unicode then\n_p(3,'<EntryPointSymbol>wmainCRTStartup</EntryPointSymbol>')\nelse\n_p(3,'<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>')\nend\nend\nimport_lib(cfg)\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\n_p(3,'<ModuleDefinitionFile>%s</ModuleDefinitionFile>', deffile)\nend\nlink_target_machine(3,cfg)\nadditional_options(3,cfg)\n if cfg.flags.NoWinMD and vstudio.iswinrt() and prj.kind == \"WindowedApp\" then\n_p(3,'<GenerateWindowsMetadata>false</GenerateWindowsMetadata>' )\n end\nend\n_p(2,'</Link>')\nend\nfunction vc2010.additionalDependencies(tab,cfg)\nlocal links = premake.getlinks(cfg, \"system\", \"fullpath\")\nif #links > 0 then\n_p(tab,'<AdditionalDependencies>%s;%s</AdditionalDependencies>'\n, table.concat(links, \";\")\n, iif(cfg.platform == \"Durango\"\n, '$(XboxExtensionsDependencies)'\n, '%(AdditionalDependencies)'\n)\n)\nend\nend\nlocal function item_definitions(prj)\nfor _, cfginfo in ipairs(pr" + "j.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(1,'<ItemDefinitionGroup ' ..if_config_and_platform() ..'>'\n,premake.esc(cfginfo.name))\nvs10_clcompile(cfg)\nresource_compile(cfg)\nitem_def_lib(cfg)\nvc2010.link(cfg)\nevent_hooks(cfg)\nvs10_masm(prj, cfg)\n_p(1,'</ItemDefinitionGroup>')\nend\nend\nfunction vc2010.getfilegroup(prj, group)\nlocal sortedfiles = prj.vc2010sortedfiles\nif not sortedfiles then\nsortedfiles = {\nClCompile = {},\nClInclude = {},\nMASM = {},\nNone = {},\nResourceCompile = {},\nAppxManifest = {},\nImage = {},\nDeploymentContent = {}\n}\nlocal foundAppxManifest = false\nfor file in premake.project.eachfile(prj) do\nif path.isSourceFileVS(file.name) then\ntable.insert(sortedfiles.ClCompile, file)\nelseif path.iscppheader(file.name) then\nif not table.icontains(prj.removefiles, file) then\ntable.insert(sortedfiles.ClInclude, file)\nend\nelseif path.isresourcefile(file.name) then\ntable.insert(sortedfiles.ResourceCompile, fi" + "le)\nelseif path.isappxmanifest(file.name) then\nfoundAppxManifest = true\ntable.insert(sortedfiles.AppxManifest, file)\nelseif path.isasmfile(file.name) then\ntable.insert(sortedfiles.MASM, file)\nelseif file.flags and table.icontains(file.flags, \"DeploymentContent\") then\ntable.insert(sortedfiles.DeploymentContent, file)\nelse\ntable.insert(sortedfiles.None, file)\nend\nend\nif vstudio.iswinrt() and prj.kind == \"WindowedApp\" and not foundAppxManifest then\nvstudio.needAppxManifest = true\nlocal fcfg = {}\nfcfg.name = prj.name .. \"/Package.appxmanifest\"\nfcfg.vpath = premake.project.getvpath(prj, fcfg.name)\ntable.insert(sortedfiles.AppxManifest, fcfg)\nlocal logo = {}\nlogo.name = prj.name .. \"/Logo.png\"\nlogo.vpath = logo.name\ntable.insert(sortedfiles.Image, logo)\nlocal smallLogo = {}\nsmallLogo.name = prj.name .. \"/SmallLogo.png\"\nsmallLogo.vpath = smallLogo.name\ntable.insert(sortedfiles.Image, smallLogo)\nlocal storeLogo = {}\nstoreLogo.name = prj.name .. \"/StoreLogo.png\"\nstoreLogo.vpat" + "h = storeLogo.name\ntable.insert(sortedfiles.Image, storeLogo)\nlocal splashScreen = {}\nsplashScreen.name = prj.name .. \"/SplashScreen.png\"\nsplashScreen.vpath = splashScreen.name\ntable.insert(sortedfiles.Image, splashScreen)\nend\nprj.vc2010sortedfiles = sortedfiles\nend\nreturn sortedfiles[group]\nend\nfunction vc2010.files(prj)\nvc2010.simplefilesgroup(prj, \"ClInclude\")\nvc2010.compilerfilesgroup(prj)\nvc2010.simplefilesgroup(prj, \"None\")\nvc2010.customtaskgroup(prj)\nvc2010.simplefilesgroup(prj, \"ResourceCompile\")\nvc2010.simplefilesgroup(prj, \"AppxManifest\")\nvc2010.deploymentcontentgroup(prj, \"Image\")\nvc2010.deploymentcontentgroup(prj, \"DeploymentContent\", \"None\")\nend\nfunction vc2010.customtaskgroup(prj)\nlocal files = { }\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal fcfg = { }\nfcfg.name = path.getrelative(prj.location,buildtask[1])\nfcfg.vpath = path.trimdots(fcfg.name)\ntable.insert(files, fcfg)\nend" + "\nend\nif #files > 0 then\n_p(1,'<ItemGroup>')\nlocal groupedBuildTasks = {}\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nif (groupedBuildTasks[buildtask[1]] == nil) then\ngroupedBuildTasks[buildtask[1]] = {}\nend\ntable.insert(groupedBuildTasks[buildtask[1]], buildtask)\nend\nend\nfor name, custombuildtask in pairs(groupedBuildTasks or {}) do\n_p(2,'<CustomBuild Include=\\\"%s\\\">', path.translate(path.getrelative(prj.location,name), \"\\\\\"))\n_p(3,'<FileType>Text</FileType>')\nlocal cmd = \"\"\nlocal outputs = \"\"\nfor _, buildtask in ipairs(custombuildtask or {}) do\nfor _, cmdline in ipairs(buildtask[4] or {}) do\ncmd = cmd .. cmdline\nlocal num = 1\nfor _, depdata in ipairs(buildtask[3] or {}) do\ncmd = string.gsub(cmd,\"%$%(\" .. num ..\"%)\", string.format(\"%s \",path.getrelative(prj.location,depdata)))\nnum = num + 1\nend\ncmd = string.gsub(cmd, \"%$%(<%)\", string.format(\"%s \",path.getrelative(prj.location,buildtask[1]))" + ")\ncmd = string.gsub(cmd, \"%$%(@%)\", string.format(\"%s \",path.getrelative(prj.location,buildtask[2])))\ncmd = cmd .. \"\\r\\n\"\nend\noutputs = outputs .. path.getrelative(prj.location,buildtask[2]) .. \";\"\nend\n_p(3,'<Command>%s</Command>',cmd)\n_p(3,'<Outputs>%s%%(Outputs)</Outputs>',outputs)\n_p(3,'<SubType>Designer</SubType>')\n_p(3,'<Message></Message>')\n_p(2,'</CustomBuild>')\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.simplefilesgroup(prj, section, subtype)\nlocal files = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1,'<ItemGroup>')\nfor _, file in ipairs(files) do\nif subtype then\n_p(2,'<%s Include=\\\"%s\\\">', section, path.translate(file.name, \"\\\\\"))\n_p(3,'<SubType>%s</SubType>', subtype)\n_p(2,'</%s>', section)\nelse\n_p(2,'<%s Include=\\\"%s\\\" />', section, path.translate(file.name, \"\\\\\"))\nend\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.deploymentcontentgroup(prj, section, filetype)\nif filetype == nil then\nfiletype = section\nend\nlocal files" + " = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1,'<ItemGroup>')\nfor _, file in ipairs(files) do\n_p(2,'<%s Include=\\\"%s\\\">', filetype, path.translate(file.name, \"\\\\\"))\n_p(3,'<DeploymentContent>true</DeploymentContent>')\n_p(3,'<Link>%s</Link>', path.translate(file.vpath, \"\\\\\"))\n_p(2,'</%s>', filetype)\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.compilerfilesgroup(prj)\nlocal configs = prj.solution.vstudio_configs\nlocal files = vc2010.getfilegroup(prj, \"ClCompile\")\nif #files > 0 then\nlocal config_mappings = {}\nfor _, cfginfo in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nif cfg.pchheader and cfg.pchsource and not cfg.flags.NoPCH then\nconfig_mappings[cfginfo] = path.translate(cfg.pchsource, \"\\\\\")\nend\nend\n_p(1,'<ItemGroup>')\nfor _, file in ipairs(files) do\nlocal translatedpath = path.translate(file.name, \"\\\\\")\n_p(2, '<ClCompile Include=\\\"%s\\\">', translatedpath)\n_p(3, '<ObjectFileName>$(IntDir" + ")%s\\\\</ObjectFileName>'\n, premake.esc(path.translate(path.trimdots(path.getdirectory(file.name))))\n)\nif path.iscxfile(file.name) then\n_p(3, '<CompileAsWinRT>true</CompileAsWinRT>')\n_p(3, '<RuntimeTypeInfo>true</RuntimeTypeInfo>')\n_p(3, '<PrecompiledHeader>NotUsing</PrecompiledHeader>')\nend\nif vstudio.iswinrt() and string.len(file.name) > 2 and string.sub(file.name, -2) == \".c\" then\n_p(3,'<CompileAsWinRT>FALSE</CompileAsWinRT>')\nend\nfor _, cfginfo in ipairs(configs) do\nif config_mappings[cfginfo] and translatedpath == config_mappings[cfginfo] then\n_p(3,'<PrecompiledHeader '.. if_config_and_platform() .. '>Create</PrecompiledHeader>', premake.esc(cfginfo.name))\nconfig_mappings[cfginfo] = nil --only one source file per pch\nend\nend\nlocal nopch = table.icontains(prj.nopch, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif nopch or table.icontains(cfg.nopch, file.name) then\n_p(3,'<PrecompiledHeader '.. if_con" + "fig_and_platform() .. '>NotUsing</PrecompiledHeader>', premake.esc(vsconfig.name))\nend\nend\nlocal excluded = table.icontains(prj.excludes, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif excluded or table.icontains(cfg.excludes, file.name) then\n_p(3, '<ExcludedFromBuild '\n.. if_config_and_platform()\n.. '>true</ExcludedFromBuild>'\n, premake.esc(vsconfig.name)\n)\nend\nend\n_p(2,'</ClCompile>')\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.masmfiles(prj)\nlocal configs = prj.solution.vstudio_configs\nlocal files = vc2010.getfilegroup(prj, \"MASM\")\nif #files > 0 then\n_p(1, '<ItemGroup>')\nfor _, file in ipairs(files) do\nlocal translatedpath = path.translate(file.name, \"\\\\\")\n_p(2, '<MASM Include=\"%s\">', translatedpath)\nlocal excluded = table.icontains(prj.excludes, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif exc" + "luded or table.icontains(cfg.excludes, file.name) then\n_p(3, '<ExcludedFromBuild ' .. if_config_and_platform() .. '>true</ExcludedFromBuild>'\n, premake.esc(vsconfig.name)\n)\nend\nend\n_p(2, '</MASM>')\nend\n_p(1, '</ItemGroup>')\nend\nend\nfunction vc2010.header(targets)\nio.eol = \"\\r\\n\"\n_p('<?xml version=\"1.0\" encoding=\"utf-8\"?>')\nlocal t = \"\"\nif targets then\nt = ' DefaultTargets=\"' .. targets .. '\"'\nend\n_p('<Project%s ToolsVersion=\"%s\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">', t, action.vstudio.toolsVersion)\nend\nfunction premake.vs2010_vcxproj(prj)\nlocal usemasm = hasmasmfiles(prj)\nio.indent = \" \"\nvc2010.header(\"Build\")\nvs2010_config(prj)\nvs2010_globals(prj)\n_p(1,'<Import Project=\"$(VCTargetsPath)\\\\Microsoft.Cpp.Default.props\" />')\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nvc2010.configurationPropertyGroup(cfg, cfginfo)\nend\n_p(1,'<Import Project=\"" + "$(VCTargetsPath)\\\\Microsoft.Cpp.props\" />')\n_p(1,'<ImportGroup Label=\"ExtensionSettings\">')\nif usemasm then\n_p(2, '<Import Project=\"$(VCTargetsPath)\\\\BuildCustomizations\\\\masm.props\" />')\nend\n_p(1,'</ImportGroup>')\nimport_props(prj)\n_p(1,'<PropertyGroup Label=\"UserMacros\" />')\nvc2010.outputProperties(prj)\nitem_definitions(prj)\nvc2010.files(prj)\nvc2010.projectReferences(prj)\nvc2010.masmfiles(prj)\n_p(1,'<Import Project=\"$(VCTargetsPath)\\\\Microsoft.Cpp.targets\" />')\n_p(1,'<ImportGroup Label=\"ExtensionTargets\">')\nif usemasm then\n_p(2, '<Import Project=\"$(VCTargetsPath)\\\\BuildCustomizations\\\\masm.targets\" />')\nend\n_p(1,'</ImportGroup>')\n_p('</Project>')\nend\nfunction vc2010.projectReferences(prj)\nlocal deps = premake.getdependencies(prj)\nif #deps > 0 then\n_p(1,'<ItemGroup>')\nfor _, dep in ipairs(deps) do\nlocal deppath = path.getrelative(prj.location, vstudio.projectfile(dep))\n_p(2,'<ProjectReference Include=\\\"%s\\\">', path.translate(deppath, \"\\\\\"))\n_p(3,'<P" + "roject>{%s}</Project>', dep.uuid)\nif vstudio.iswinrt() then\n_p(3,'<ReferenceOutputAssembly>false</ReferenceOutputAssembly>')\nend\n_p(2,'</ProjectReference>')\nend\n_p(1,'</ItemGroup>')\nend\nend\nfunction vc2010.debugdir(cfg)\nif cfg.debugdir and not vstudio.iswinrt() then\n_p(' <LocalDebuggerWorkingDirectory>%s</LocalDebuggerWorkingDirectory>', path.translate(cfg.debugdir, '\\\\'))\n_p(' <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>')\nend\nif cfg.debugargs then\n_p(' <LocalDebuggerCommandArguments>%s</LocalDebuggerCommandArguments>', table.concat(cfg.debugargs, \" \"))\nend\nend\nfunction vc2010.debugenvs(cfg)\nif cfg.debugenvs and #cfg.debugenvs > 0 then\n_p(2,'<LocalDebuggerEnvironment>%s%s</LocalDebuggerEnvironment>',table.concat(cfg.debugenvs, \"\\n\")\n,iif(cfg.flags.DebugEnvsInherit,'\\n$(LocalDebuggerEnvironment)','')\n)\nif cfg.flags.DebugEnvsDontMerge then\n_p(2,'<LocalDebuggerMergeEnvironment>false</LocalDebuggerMergeEnvironment>')\nend\nend\nend\nfunction premake.vs2010_vcxproj" + "_user(prj)\nio.indent = \" \"\nvc2010.header()\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(' <PropertyGroup '.. if_config_and_platform() ..'>', premake.esc(cfginfo.name))\nvc2010.debugdir(cfg)\nvc2010.debugenvs(cfg)\n_p(' </PropertyGroup>')\nend\n_p('</Project>')\nend\nlocal png1x1data = {\n0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, -- .PNG........IHDR\n0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x25, 0xdb, 0x56, -- .............%.V\n0xca, 0x00, 0x00, 0x00, 0x03, 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x00, 0xa7, 0x7a, 0x3d, 0xda, -- .....PLTE....z=.\n0x00, 0x00, 0x00, 0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x00, -- ....tRNS.@..f...\n0x0a, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0xe2, -- .IDAT..c`.......\n0x21, 0xbc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x49" + ", 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, -- !.3....IEND.B`.\n}\nfunction png1x1(obj, filename)\nfilename = premake.project.getfilename(obj, filename)\nlocal f, err = io.open(filename, \"wb\")\nif f then\nfor _, byte in ipairs(png1x1data) do\nf:write(string.char(byte))\nend\nf:close()\nend\nend\nfunction premake.vs2010_appxmanifest(prj)\nio.indent = \" \"\nio.eol = \"\\r\\n\"\n_p('<?xml version=\"1.0\" encoding=\"utf-8\"?>')\nif vstudio.toolset == \"v120_wp81\" then\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:m2=\"http://schemas.microsoft.com/appx/2013/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/2014/manifest\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\">')\nelseif vstudio.storeapp == \"8.1\" then\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/2013/manifest\">')\nelseif vstudio.storeapp == \"durango\" then\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/201" + "0/manifest\" xmlns:mx=\"http://schemas.microsoft.com/appx/2013/xbox/manifest\" IgnorableNamespaces=\"mx\">')\nelse\n_p('<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\" xmlns:m3=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\">')\nend\n_p(1,'<Identity Name=\"' .. prj.uuid .. '\"')\n_p(2,'Publisher=\"CN=Publisher\"')\n_p(2,'Version=\"1.0.0.0\" />')\nif vstudio.toolset == \"v120_wp81\" or vstudio.storeapp == \"8.2\" then\n_p(1,'<mp:PhoneIdentity PhoneProductId=\"' .. prj.uuid .. '\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>')\nend\n_p(1, '<Properties>')\n_p(2, '<DisplayName>' .. prj.name .. '</DisplayName>')\n_p(2, '<PublisherDisplayName>PublisherDisplayName</PublisherDisplayName>')\n_p(2, '<Logo>' .. prj.name .. '\\\\StoreLogo.png</Logo>')\npng1x1(prj, \"%%/StoreLogo.png\")\n_p(2, '<Description>' .. prj.name .. '</Description>')\n_p(1,'</Properties>')\nif vstudio.storeapp == \"8.2\"" + " then\n_p(1, '<Dependencies>')\n_p(2, '<TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.10069.0\" MaxVersionTested=\"10.0.10069.0\" />')\n_p(1, '</Dependencies>')\nelseif vstudio.storeapp == \"durango\" then\n_p(1, '<Prerequisites>')\n_p(2, '<OSMinVersion>6.2</OSMinVersion>')\n_p(2, '<OSMaxVersionTested>6.2</OSMaxVersionTested>')\n_p(1, '</Prerequisites>')\nelse\n_p(1, '<Prerequisites>')\n_p(2, '<OSMinVersion>6.3.0</OSMinVersion>')\n_p(2, '<OSMaxVersionTested>6.3.0</OSMaxVersionTested>')\n_p(1, '</Prerequisites>')\nend\n_p(1,'<Resources>')\n_p(2,'<Resource Language=\"en-us\"/>')\n_p(1,'</Resources>')\n_p(1,'<Applications>')\n_p(2,'<Application Id=\"App\"')\n_p(3,'Executable=\"$targetnametoken$.exe\"')\n_p(3,'EntryPoint=\"' .. prj.name .. '.App\">')\nif vstudio.storeapp == \"durango\" then\n_p(3, '<VisualElements')\n_p(4, 'DisplayName=\"' .. prj.name .. '\"')\n_p(4, 'Logo=\"' .. prj.name .. '\\\\Logo.png\"')\npng1x1(prj, \"%%/Logo.png\")\n_p(4, 'SmallLogo=\"' .. prj.name .. '\\\\SmallLogo.png\"'" + ")\npng1x1(prj, \"%%/SmallLogo.png\")\n_p(4, 'Description=\"' .. prj.name .. '\"')\n_p(4, 'ForegroundText=\"light\"')\n_p(4, 'BackgroundColor=\"transparent\">')\n_p(5, '<SplashScreen Image=\"' .. prj.name .. '\\\\SplashScreen.png\" />')\npng1x1(prj, \"%%/SplashScreen.png\")\n_p(3, '</VisualElements>')\n_p(3, '<Extensions>')\n_p(4, '<mx:Extension Category=\"xbox.system.resources\">')\n_p(4, '<mx:XboxSystemResources />')\n_p(4, '</mx:Extension>')\n_p(3, '</Extensions>')\nelse\n_p(3, '<m3:VisualElements')\n_p(4, 'DisplayName=\"' .. prj.name .. '\"')\n_p(4, 'Square150x150Logo=\"' .. prj.name .. '\\\\Logo.png\"')\npng1x1(prj, \"%%/Logo.png\")\nif vstudio.toolset == \"v120_wp81\" or vstudio.storeapp == \"8.2\" then\n_p(4, 'Square44x44Logo=\"' .. prj.name .. '\\\\SmallLogo.png\"')\npng1x1(prj, \"%%/SmallLogo.png\")\nelse\n_p(4, 'Square30x30Logo=\"' .. prj.name .. '\\\\SmallLogo.png\"')\npng1x1(prj, \"%%/SmallLogo.png\")\nend\n_p(4, 'Description=\"' .. prj.name .. '\"')\n_p(4, 'ForegroundText=\"light\"')\n_p(4, 'Backgr" + "oundColor=\"transparent\">')\n_p(4, '<m3:SplashScreen Image=\"' .. prj.name .. '\\\\SplashScreen.png\"')\npng1x1(prj, \"%%/SplashScreen.png\")\n_p(3, '</m3:VisualElements>')\nend\n_p(2,'</Application>')\n_p(1,'</Applications>')\n_p('</Package>')\nend\n", /* actions/vstudio/vs2010_vcxproj_filters.lua */ "local vc2010 = premake.vstudio.vc2010\nlocal project = premake.project\nfunction vc2010.filteridgroup(prj)\nlocal filters = { }\nlocal filterfound = false\nfor file in project.eachfile(prj) do\nlocal folders = string.explode(file.vpath, \"/\", true)\nlocal path = \"\"\nfor i = 1, #folders - 1 do\nif not filterfound then\nfilterfound = true\n_p(1,'<ItemGroup>')\nend\npath = path .. folders[i]\nif not filters[path] then\nfilters[path] = true\n_p(2, '<Filter Include=\"%s\">', path)\n_p(3, '<UniqueIdentifier>{%s}</UniqueIdentifier>', os.uuid(path))\n_p(2, '</Filter>')\nend\npath = path .. \"\\\\\"\nend\nend\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal folders = string.explode(path.trimdots(path.getrelative(prj.location,buildtask[1])), \"/\", true)\nlocal path = \"\"\nfor i = 1, #folders - 1 do\nif not filterfound then\nfilterfound = true\n_p(1,'<ItemGroup>')\nend\npath = path .. folders[i]\nif not filters[path] then\nfilters[path] = tr" @@ -413,14 +412,14 @@ const char* builtin_scripts[] = { "-- Generates a FASTBuild config file for a project.\nlocal function add_trailing_backslash(dir)\nif dir:len() > 0 and dir:sub(-1) ~= \"\\\\\" then\nreturn dir..\"\\\\\"\nend\nreturn dir\nend\nlocal function compile(indentlevel, prj, cfg, commonbasepath)\nlocal firstflag = true\nfor _, cfgexclude in ipairs(cfg.excludes) do\nif path.isSourceFile(cfgexclude) then\nif firstflag then\n_p(indentlevel, '// Excluded files:')\nfirstflag = false\nend\n_p(indentlevel, \".CompilerInputFiles - '%s'\", cfgexclude)\nend\nend\nif not firstflag then\n_p('')\nend\n_p(indentlevel, \".CompilerOutputPath = '%s'\", add_trailing_backslash(cfg.objectsdir))\n_p(indentlevel, \".Defines = ''\")\nfor _, define in ipairs(cfg.defines) do\n_p(indentlevel+1, \"+ ' /D%s'\", define)\nend\nif cfg.kind == 'SharedLib' then\n_p(indentlevel+1, \"+ ' /D_WINDLL'\")\nend\n_p(indentlevel, \".IncludeDirs = ''\")\nlocal sortedincdirs = {}\nfor _, includedir in ipairs(cfg.userincludedirs) do\nif includedir ~= nil then\ntable.insert(sortedincdirs, included" "ir)\nend\nend\nfor _, includedir in ipairs(cfg.includedirs) do\nif includedir ~= nil then\ntable.insert(sortedincdirs, includedir)\nend\nend\nlocal function getpathnodecount(p)\nlocal nodefinder = string.gmatch(p, \"[^\\\\/]+\")\nlocal result = 0\nlocal node = nodefinder()\nwhile node do\nresult = result + ((node ~= '.' and 1) or 0)\nnode = nodefinder()\nend\nreturn result\nend\nlocal stepsfrombase = {}\nfor _, includedir in ipairs(sortedincdirs) do\nstepsfrombase[includedir] = getpathnodecount(path.getrelative(commonbasepath, includedir))\nend\nlocal function includesort(a, b)\nif stepsfrombase[a] == stepsfrombase[b] then\nreturn a < b\nelse\nreturn stepsfrombase[a] < stepsfrombase[b]\nend\nend\ntable.sort(sortedincdirs, includesort)\nfor _, includedir in ipairs(sortedincdirs) do\n_p(indentlevel+1, \"+ ' /I\\\"%s\\\"'\", includedir)\nend\n_p(indentlevel+1, \"+ .MSVCIncludes\")\nlocal compileroptions = {\n'\"%1\"',\n'/nologo',\n'/c',\n'/Gy',\n'/Gm-',\n'/Zc:inline',\n'/errorReport:prompt',\n'/FS',\n}\nif cfg.fl" "ags.ExtraWarnings then\ntable.insert(compileroptions, '/W4')\nend\nif (cfg.flags.NativeWChar == false or\ncfg.flags.NoNativeWChar) then\ntable.insert(compileroptions, '/Zc:wchar_t-')\nend\nif (cfg.flags.EnableMinimalRebuild or\ncfg.flags.NoMultiProcessorCompilation) then\nend\nif cfg.flags.FloatFast then\ntable.insert(compileroptions, '/fp:fast')\nelseif cfg.flags.FloatStrict then\ntable.insert(compileroptions, '/fp:strict')\nelse\ntable.insert(compileroptions, '/fp:precise')\nend\nif cfg.flags.FastCall then\ntable.insert(compileroptions, '/Gr')\nelseif cfg.flags.StdCall then\ntable.insert(compileroptions, '/Gd')\nend\nif cfg.flags.UnsignedChar then\ntable.insert(compileroptions, '/J')\nend\nif premake.config.isdebugbuild(cfg) then\nif cfg.flags.StaticRuntime then\ntable.insert(compileroptions, '/MTd')\nelse\ntable.insert(compileroptions, '/MDd')\nend\nelse\nif cfg.flags.StaticRuntime then\ntable.insert(compileroptions, '/MT')\nelse\ntable.insert(compileroptions, '/MD')\nend\nend\nif cfg.flags.Symbols then\nif" - " (premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue) then\ntable.insert(compileroptions, '/Zi')\nelse\ntable.insert(compileroptions, '/ZI')\nend\nlocal targetdir = add_trailing_backslash(cfg.buildtarget.directory)\ntable.insert(compileroptions, string.format(\"/Fd\\\"%s%s.pdb\\\"\", targetdir, cfg.buildtarget.basename))\nend\nlocal isoptimised = true\nif (cfg.flags.Optimize) then\ntable.insert(compileroptions, '/Ox')\nelseif (cfg.flags.OptimizeSize) then\ntable.insert(compileroptions, '/O1')\nelseif (cfg.flags.OptimizeSpeed) then\ntable.insert(compileroptions, '/O2')\nelse\nisoptimised = false\nend\nif isoptimised then\ntable.insert(compileroptions, '/GF')\nelse\ntable.insert(compileroptions, '/Od')\ntable.insert(compileroptions, '/RTC1')\nend\nif cfg.flags.FatalWarnings then\ntable.insert(compileroptions, '/WX')\nelse\ntable.insert(compileroptions, '/WX-')\nend\nif cfg.platform == 'x32' then\nif cfg.flags.EnableSSE2 then\ntable.insert(compileroptions, '/arch:SSE2')\nelseif cfg.flags.E" - "nableSSE then\ntable.insert(compileroptions, '/arch:SSE')\nend\nend\nif cfg.flags.NoExceptions then\nelse\nif cfg.flags.SEH then\ntable.insert(compileroptions, '/EHa')\nelse\ntable.insert(compileroptions, '/EHsc')\nend\nend\nif cfg.flags.NoRTTI then\ntable.insert(compileroptions, '/GR-')\nelse\ntable.insert(compileroptions, '/GR')\nend\nif cfg.flags.NoFramePointer then\ntable.insert(compileroptions, '/Oy-')\nelse\ntable.insert(compileroptions, '/Oy')\nend\nfor _, addloption in ipairs(cfg.buildoptions) do\ntable.insert(compileroptions, addloption)\nend\n_p(indentlevel, \".CompilerOptions = ''\")\nfor _, option in ipairs(compileroptions) do\n_p(indentlevel+1, \"+ ' %s'\", option)\nend\n_p(indentlevel+1, \"+ .IncludeDirs\")\n_p(indentlevel+1, \"+ .Defines\")\nif not cfg.flags.NoPCH and cfg.pchheader then\n_p(indentlevel, \".CompilerInputFiles - '%s'\", cfg.pchsource)\n_p(indentlevel, \".PCHInputFile = '%s'\", cfg.pchsource)\n_p(indentlevel, \".PCHOutputFile = .CompilerOutputPath + '%s.pch'\", prj.name)\n_p(indent" - "level, \".CompilerOptions + ' /Fp\\\"' + .CompilerOutputPath + '%s.pch\\\"'\", prj.name)\n_p(indentlevel, \".PCHOptions = .CompilerOptions\")\n_p(indentlevel+1, \"+ ' /Yc\\\"%s\\\"'\", cfg.pchheader)\n_p(indentlevel+1, \"+ ' /Fo\\\"%%3\\\"'\")\n_p(indentlevel, \".CompilerOptions + ' /Yu\\\"%s\\\"'\", cfg.pchheader)\nend\n_p(indentlevel+1, \"+ ' /Fo\\\"%%2\\\"'\") -- make sure the previous property is .CompilerOptions\nend\nlocal function library(prj, cfg, useconfig, commonbasepath)\n_p(1, \"Library('%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg, commonbasepath)\nlocal librarianoptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/NOLOGO',\n}\nif cfg.platform == 'x64' then\ntable.insert(librarianoptions, '/MACHINE:X64')\nelse\ntable.insert(librarianoptions, '/MACHINE:X86')\nend\n_p(2, \".LibrarianOptions = ''\")\nfor _, option in ipairs(librarianoptions) do\n_p(3, \"+ ' %s'\", option)\nend\n_p(2, \".LibrarianOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend" - "\nlocal function binary(prj, cfg, useconfig, bintype, commonbasepath)\n_p(1, \"ObjectList('%s_obj-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg, commonbasepath)\n_p(1, '}')\n_p('')\n_p(1, \"%s('%s-%s-%s')\", bintype, prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\n_p(2, '.Libraries = {')\n_p(3, \"'%s_obj-%s-%s',\", prj.name, cfg.name, cfg.platform) -- Refer to the ObjectList\nlocal sorteddeplibs = {}\nfor _, deplib in ipairs(premake.getlinks(cfg, \"dependencies\", \"basename\")) do\ntable.insert(sorteddeplibs, string.format(\"'%s-%s-%s',\", deplib, cfg.name, cfg.platform))\nend\ntable.sort(sorteddeplibs)\nfor _, deplib in ipairs(sorteddeplibs) do\n_p(3, deplib)\nend\n_p(3, '}')\n_p(2, '.LinkerLinkObjects = false')\nlocal linkeroptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/NOLOGO',\n'/errorReport:prompt',\n}\nlocal subsystemversion = '\",5.02\"'\nif cfg.platform == 'x32' then\nsubsystemversion = '\",5.01\"'\nend\nif cfg.kind == 'ConsoleApp' then\ntable.inse" - "rt(linkeroptions, '/SUBSYSTEM:CONSOLE'..subsystemversion)\nelse\ntable.insert(linkeroptions, '/SUBSYSTEM:WINDOWS'..subsystemversion)\nend\nif cfg.kind == 'SharedLib' then\ntable.insert(linkeroptions, '/DLL')\nend\nif cfg.platform == 'x64' then\ntable.insert(linkeroptions, '/MACHINE:X64')\nelse\ntable.insert(linkeroptions, '/MACHINE:X86')\nend\nfor _, libdir in ipairs(cfg.libdirs) do\ntable.insert(linkeroptions, string.format('/LIBPATH:%s', path.translate(libdir, '\\\\')))\nend\nif not cfg.flags.WinMain and (cfg.kind == 'ConsoleApp' or cfg.kind == 'WindowedApp') then\nif cfg.flags.Unicode then\ntable.insert(linkeroptions, '/ENTRY:wmainCRTStartup')\nelse\ntable.insert(linkeroptions, '/ENTRY:mainCRTStartup')\nend\nend\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\ntable.insert(linkeroptions, '/DEF:%s', deffile)\nend\nif (cfg.flags.Symbols ~= nil) then\ntable.insert(linkeroptions, '/DEBUG')\nend\nif premake.config.isoptimizedbuild(cfg.flags) then\ntable.insert(linkeroptions, '/OPT:REF')\ntable." - "insert(linkeroptions, '/OPT:ICF')\nend\ntable.insert(linkeroptions, '/INCREMENTAL'..((premake.config.isincrementallink(cfg) and '') or ':NO'))\nfor _, addloption in ipairs(cfg.linkoptions) do\ntable.insert(linkeroptions, addloption)\nend\nlocal linklibs = premake.getlinks(cfg, \"all\", \"fullpath\")\nfor _, linklib in ipairs(linklibs) do\ntable.insert(linkeroptions, path.getname(linklib))\nend\ntable.sort(linkeroptions)\n_p(2, \".LinkerOptions = ''\")\nfor _, option in ipairs(linkeroptions) do\n_p(3, \"+ ' %s'\", option)\nend\n_p(3, \"+ .MSVCLibPaths\")\n_p(2, \".LinkerOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend\nlocal function executable(prj, cfg, useconfig, commonbasepath)\nbinary(prj, cfg, useconfig, 'Executable', commonbasepath)\nend\nlocal function dll(prj, cfg, useconfig, commonbasepath)\nbinary(prj, cfg, useconfig, 'DLL', commonbasepath)\nend\nlocal function alias(prj, cfg, target)\n_p(1, \"Alias('%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\n_p(2, \".Targets = '%s" - "'\", target)\n_p(1, '}')\n_p('')\nend\nfunction premake.fastbuild.project(prj)\nio.indent = ' '\n_p('// FASTBuild project configuration file autogenerated by GENie.')\n_p('')\n_p('{')\nlocal cppfiles = {}\nfor file in premake.project.eachfile(prj) do\nif path.isSourceFile(file.name) then\ntable.insert(cppfiles, file.name)\nend\nend\nlocal commonbasepath = cppfiles[1]\nfor _, file in ipairs(cppfiles) do\ncommonbasepath = path.getcommonbasedir(commonbasepath..'/', file)\nend\n_p(1, \".CompilerInputPath = '%s/'\", commonbasepath)\n_p(1, \".CompilerInputPattern = 'ignoreall'\")\n_p(1, '.CompilerInputFiles = {')\nfor _, file in ipairs(cppfiles) do\n_p(2, \"'%s',\", file)\nend\n_p(1, '}')\n_p('')\nlocal targetkindmap = {\nConsoleApp = executable,\nWindowedApp = executable,\nSharedLib = dll,\nStaticLib = library,\n}\nlocal useconfigmap = {\nx32 = function(indentlevel)\n_p(indentlevel, 'Using(.MSVCx86Config)')\n_p('')\nend,\nx64 = function(indentlevel)\n_p(indentlevel, 'Using(.MSVCx64Config)')\n_p('')\nend,\n}\nloc" - "al nativeplatform = (os.is64bit() and 'x64') or 'x32'\nfor _, platform in ipairs(prj.solution.platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nif cfg.platform == 'Native' then\nalias(prj, cfg, string.format('%s-%s-%s', prj.name, cfg.name, nativeplatform))\nelse\ntargetkindmap[prj.kind](prj, cfg, useconfigmap[cfg.platform], commonbasepath)\nend\nend\nend\n_p('}')\nend\n", + " (cfg.flags.C7DebugInfo) then\ntable.insert(compileroptions, '/Z7')\nelse\nif (premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue) then\ntable.insert(compileroptions, '/Zi')\nelse\ntable.insert(compileroptions, '/ZI')\nend\nlocal targetdir = add_trailing_backslash(cfg.buildtarget.directory)\ntable.insert(compileroptions, string.format(\"/Fd\\\"%s%s.pdb\\\"\", targetdir, cfg.buildtarget.basename))\nend\nend\nlocal isoptimised = true\nif (cfg.flags.Optimize) then\ntable.insert(compileroptions, '/Ox')\nelseif (cfg.flags.OptimizeSize) then\ntable.insert(compileroptions, '/O1')\nelseif (cfg.flags.OptimizeSpeed) then\ntable.insert(compileroptions, '/O2')\nelse\nisoptimised = false\nend\nif isoptimised then\ntable.insert(compileroptions, '/GF')\nelse\ntable.insert(compileroptions, '/Od')\ntable.insert(compileroptions, '/RTC1')\nend\nif cfg.flags.FatalWarnings then\ntable.insert(compileroptions, '/WX')\nelse\ntable.insert(compileroptions, '/WX-')\nend\nif cfg.platform == 'x32' then\nif cfg.flag" + "s.EnableSSE2 then\ntable.insert(compileroptions, '/arch:SSE2')\nelseif cfg.flags.EnableSSE then\ntable.insert(compileroptions, '/arch:SSE')\nend\nend\nif cfg.flags.NoExceptions then\nelse\nif cfg.flags.SEH then\ntable.insert(compileroptions, '/EHa')\nelse\ntable.insert(compileroptions, '/EHsc')\nend\nend\nif cfg.flags.NoRTTI then\ntable.insert(compileroptions, '/GR-')\nelse\ntable.insert(compileroptions, '/GR')\nend\nif cfg.flags.NoFramePointer then\ntable.insert(compileroptions, '/Oy-')\nelse\ntable.insert(compileroptions, '/Oy')\nend\nfor _, addloption in ipairs(cfg.buildoptions) do\ntable.insert(compileroptions, addloption)\nend\n_p(indentlevel, \".CompilerOptions = ''\")\nfor _, option in ipairs(compileroptions) do\n_p(indentlevel+1, \"+ ' %s'\", option)\nend\n_p(indentlevel+1, \"+ .IncludeDirs\")\n_p(indentlevel+1, \"+ .Defines\")\nif not cfg.flags.NoPCH and cfg.pchheader then\n_p(indentlevel, \".CompilerInputFiles - '%s'\", cfg.pchsource)\n_p(indentlevel, \".PCHInputFile = '%s'\", cfg.pchsource)\n_p(inde" + "ntlevel, \".PCHOutputFile = .CompilerOutputPath + '%s.pch'\", prj.name)\n_p(indentlevel, \".CompilerOptions + ' /Fp\\\"' + .CompilerOutputPath + '%s.pch\\\"'\", prj.name)\n_p(indentlevel, \".PCHOptions = .CompilerOptions\")\n_p(indentlevel+1, \"+ ' /Yc\\\"%s\\\"'\", cfg.pchheader)\n_p(indentlevel+1, \"+ ' /Fo\\\"%%3\\\"'\")\n_p(indentlevel, \".CompilerOptions + ' /Yu\\\"%s\\\"'\", cfg.pchheader)\nend\n_p(indentlevel+1, \"+ ' /Fo\\\"%%2\\\"'\") -- make sure the previous property is .CompilerOptions\nend\nlocal function library(prj, cfg, useconfig, commonbasepath)\n_p(1, \"Library('%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg, commonbasepath)\nlocal librarianoptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/NOLOGO',\n}\nif cfg.platform == 'x64' then\ntable.insert(librarianoptions, '/MACHINE:X64')\nelse\ntable.insert(librarianoptions, '/MACHINE:X86')\nend\n_p(2, \".LibrarianOptions = ''\")\nfor _, option in ipairs(librarianoptions) do\n_p(3, \"+ ' %s'\", option)\nend\n_p(" + "2, \".LibrarianOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend\nlocal function binary(prj, cfg, useconfig, bintype, commonbasepath)\n_p(1, \"ObjectList('%s_obj-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg, commonbasepath)\n_p(1, '}')\n_p('')\n_p(1, \"%s('%s-%s-%s')\", bintype, prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\n_p(2, '.Libraries = {')\n_p(3, \"'%s_obj-%s-%s',\", prj.name, cfg.name, cfg.platform) -- Refer to the ObjectList\nlocal sorteddeplibs = {}\nfor _, deplib in ipairs(premake.getlinks(cfg, \"dependencies\", \"basename\")) do\ntable.insert(sorteddeplibs, string.format(\"'%s-%s-%s',\", deplib, cfg.name, cfg.platform))\nend\ntable.sort(sorteddeplibs)\nfor _, deplib in ipairs(sorteddeplibs) do\n_p(3, deplib)\nend\n_p(3, '}')\n_p(2, '.LinkerLinkObjects = false')\nlocal linkeroptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/NOLOGO',\n'/errorReport:prompt',\n}\nlocal subsystemversion = '\",5.02\"'\nif cfg.platform == 'x32' then" + "\nsubsystemversion = '\",5.01\"'\nend\nif cfg.kind == 'ConsoleApp' then\ntable.insert(linkeroptions, '/SUBSYSTEM:CONSOLE'..subsystemversion)\nelse\ntable.insert(linkeroptions, '/SUBSYSTEM:WINDOWS'..subsystemversion)\nend\nif cfg.kind == 'SharedLib' then\ntable.insert(linkeroptions, '/DLL')\nend\nif cfg.platform == 'x64' then\ntable.insert(linkeroptions, '/MACHINE:X64')\nelse\ntable.insert(linkeroptions, '/MACHINE:X86')\nend\nfor _, libdir in ipairs(cfg.libdirs) do\ntable.insert(linkeroptions, string.format('/LIBPATH:%s', path.translate(libdir, '\\\\')))\nend\nif not cfg.flags.WinMain and (cfg.kind == 'ConsoleApp' or cfg.kind == 'WindowedApp') then\nif cfg.flags.Unicode then\ntable.insert(linkeroptions, '/ENTRY:wmainCRTStartup')\nelse\ntable.insert(linkeroptions, '/ENTRY:mainCRTStartup')\nend\nend\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\ntable.insert(linkeroptions, '/DEF:%s', deffile)\nend\nif (cfg.flags.Symbols ~= nil) then\ntable.insert(linkeroptions, '/DEBUG')\nend\nif premake.confi" + "g.isoptimizedbuild(cfg.flags) then\ntable.insert(linkeroptions, '/OPT:REF')\ntable.insert(linkeroptions, '/OPT:ICF')\nend\ntable.insert(linkeroptions, '/INCREMENTAL'..((premake.config.isincrementallink(cfg) and '') or ':NO'))\nfor _, addloption in ipairs(cfg.linkoptions) do\ntable.insert(linkeroptions, addloption)\nend\nlocal linklibs = premake.getlinks(cfg, \"all\", \"fullpath\")\nfor _, linklib in ipairs(linklibs) do\ntable.insert(linkeroptions, path.getname(linklib))\nend\ntable.sort(linkeroptions)\n_p(2, \".LinkerOptions = ''\")\nfor _, option in ipairs(linkeroptions) do\n_p(3, \"+ ' %s'\", option)\nend\n_p(3, \"+ .MSVCLibPaths\")\n_p(2, \".LinkerOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend\nlocal function executable(prj, cfg, useconfig, commonbasepath)\nbinary(prj, cfg, useconfig, 'Executable', commonbasepath)\nend\nlocal function dll(prj, cfg, useconfig, commonbasepath)\nbinary(prj, cfg, useconfig, 'DLL', commonbasepath)\nend\nlocal function alias(prj, cfg, target)\n_p(1, \"Alias('" + "%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\n_p(2, \".Targets = '%s'\", target)\n_p(1, '}')\n_p('')\nend\nfunction premake.fastbuild.project(prj)\nio.indent = ' '\n_p('// FASTBuild project configuration file autogenerated by GENie.')\n_p('')\n_p('{')\nlocal cppfiles = {}\nfor file in premake.project.eachfile(prj) do\nif path.isSourceFile(file.name) then\ntable.insert(cppfiles, file.name)\nend\nend\nlocal commonbasepath = cppfiles[1]\nfor _, file in ipairs(cppfiles) do\ncommonbasepath = path.getcommonbasedir(commonbasepath..'/', file)\nend\n_p(1, \".CompilerInputPath = '%s/'\", commonbasepath)\n_p(1, \".CompilerInputPattern = 'ignoreall'\")\n_p(1, '.CompilerInputFiles = {')\nfor _, file in ipairs(cppfiles) do\n_p(2, \"'%s',\", file)\nend\n_p(1, '}')\n_p('')\nlocal targetkindmap = {\nConsoleApp = executable,\nWindowedApp = executable,\nSharedLib = dll,\nStaticLib = library,\n}\nlocal useconfigmap = {\nx32 = function(indentlevel)\n_p(indentlevel, 'Using(.MSVCx86Config)')\n_p('')\nend,\nx64 = fu" + "nction(indentlevel)\n_p(indentlevel, 'Using(.MSVCx64Config)')\n_p('')\nend,\n}\nlocal nativeplatform = (os.is64bit() and 'x64') or 'x32'\nfor _, platform in ipairs(prj.solution.platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nif cfg.platform == 'Native' then\nalias(prj, cfg, string.format('%s-%s-%s', prj.name, cfg.name, nativeplatform))\nelse\ntargetkindmap[prj.kind](prj, cfg, useconfigmap[cfg.platform], commonbasepath)\nend\nend\nend\n_p('}')\nend\n", /* actions/fastbuild/fastbuild_solution.lua */ "-- Generates a FASTBuild config file for a solution.\nfunction premake.fastbuild.solution(sln)\nio.indent = ' '\n_p('// FastBuild solution configuration file. Generated by GENie.')\n_p('//------------------------------------------------------------------------------------')\n_p('// %s', sln.name)\n_p('//------------------------------------------------------------------------------------')\n_p('#import VS140COMNTOOLS')\nlocal is64bit = os.is64bit()\nlocal target64 = (is64bit and ' amd64') or ' x86_amd64'\nlocal target32 = (is64bit and ' amd64_x86') or ''\nlocal getvcvarscontent = [[\n@set INCLUDE=\n@set LIB=\n@set CommandPromptType=\n@set PreferredToolArchitecture=\n@set Platform=\n@set Path=%SystemRoot%\\System32;%SystemRoot%;%SystemRoot%\\System32\\wbem\n@call \"%VS140COMNTOOLS%..\\..\\VC\\vcvarsall.bat\" %1\n@echo %INCLUDE%\n@echo %LIB%\n@echo %CommandPromptType%\n@echo %PreferredToolArchitecture%\n@echo %Platform%\n@echo %Path%\n]]\nlocal getvcvarsfilepath = os.getenv('TEMP')..'\\\\getvcvars.bat'\nlocal" diff --git a/README.md b/README.md index b4552b2f9d9..829c042ac7a 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ make SUBTARGET=mess for MESS build. -For Linux users we have provided you with all the [prerequisites](http://forums.bannister.org/ubbthreads.php?ubb=showflat&Number=35138). +See the [Compiling MAME](http://docs.mamedev.org/initialsetup/compilingmame.html) page on our documentation site for more information, including prerequisites for Mac OS X and popular Linux distributions. For recent versions of OSX you need to install [Xcode](https://developer.apple.com/xcode/) including command-line tools and [SDL 2.0](https://www.libsdl.org/download-2.0.php). diff --git a/bgfx/chains/hqx/hq3x.json b/bgfx/chains/hqx/hq3x.json index 5d735f40f02..8932515362d 100644 --- a/bgfx/chains/hqx/hq3x.json +++ b/bgfx/chains/hqx/hq3x.json @@ -30,7 +30,7 @@ { "name": "scaled_out", "mode": "guest", - "scale": 2, + "scale": 3, "doublebuffer": true }, { diff --git a/bgfx/chains/hqx/hq4x.json b/bgfx/chains/hqx/hq4x.json index 499fa23ac6a..720f229952d 100644 --- a/bgfx/chains/hqx/hq4x.json +++ b/bgfx/chains/hqx/hq4x.json @@ -30,7 +30,7 @@ { "name": "scaled_out", "mode": "guest", - "scale": 2, + "scale": 4, "doublebuffer": true }, { diff --git a/hash/cdi.xml b/hash/cdi.xml index bdbe439b7e6..18243f3c8b7 100644 --- a/hash/cdi.xml +++ b/hash/cdi.xml @@ -2,19 +2,17 @@ <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> <softwarelist name="cdi" description="CD-i CD-ROMs"> - <software name="frogfeas"> - <description>Frog Feast (Demo)</description> - <year>2000</year> - <publisher>Rastersoft</publisher> - <part name="cdrom" interface="cdi_cdrom"> - <diskarea name="cdrom"> - <disk name="frog feast" sha1="67f7e06f8c7157963b980ddb1d5bf7fd5f22bbc5"/> - </diskarea> - </part> - </software> - +<!-- + These are converted from old TOSEC set (I think v2009-04-05), but a double check is being performed, at + least for discs that can still be found for this set +--> <software name="3degree"> + <!-- + Origin: TOSEC + <rom name="3rd Degree (1993)(Philips)(US)[!].iso" size="666933120" crc="845f8a53" md5="1fd86945b4e1685cbe2f69fe6b2f941e"/> + <rom name="3rd Degree (1993)(Philips)(US)[!].cue" size="122" crc="3b37228f" md5="8bb7ebbf8b028da086157094ab6b44fb"/> + --> <description>3rd Degree (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -26,6 +24,19 @@ </software> <software name="7thguest" supported="no"> + <!-- + Origin: TOSEC + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 1 of 2)[!][The Game][DVC][8110033V113 50404169 02].iso" size="723771552" crc="a9e6582f" md5="13f7fee95bf4eeeb5f8c33795e9e5175"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 1 of 2)[!][The Game][DVC][8110033V113 50404169 02].cue" size="179" crc="28bbb798" md5="590acf039c69290272840e3827b0212a"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 1 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="79203644" crc="1d6e28d7" md5="2f43767bb0cf2e0ddb5d11ae1bcfd51c"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 2 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="62798444" crc="3b635644" md5="e87f36ddbdbb5f13b1d0a95356ef4fc4"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 3 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="26636444" crc="e553e7b8" md5="fc9e57f35ad2f191fbf97cb529098422"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 4 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="34221644" crc="16e372e8" md5="a8c6f66e2f86a1f607ef4c4bd3879ba3"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 5 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="15699644" crc="bee5000d" md5="77fb8c325ddcb590acba342b7b352c49"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 6 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="28753244" crc="4884df51" md5="9f0dda124909848efea8b91b6f8c3bda"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 7 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="43220396" crc="c1cd9d61" md5="753db136ab8921e581799ce0fc2f5ff8"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)[!][The Music, Die Musik][CD-Audio].cue" size="1246" crc="255b6643" md5="b7d4c344bb67aca09f91c8d3d356578e"/> + --> <description>The 7th Guest (Euro)[DVC][8110033V113 50404169 02]</description> <year>1994</year> <publisher>Philips</publisher> @@ -45,6 +56,19 @@ </software> <software name="7thguesta" cloneof="7thguest" supported="no"> + <!-- + Origin: TOSEC + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 1 of 2)[!][The Game][DVC][8111033V113 50404169 01].iso" size="723771552" crc="0be4f5a6" md5="05f52325c61aab18754b30ac991b8a2a"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 1 of 2)[!][The Game][DVC][8111033V113 50404169 01].cue" size="179" crc="27c7ff8a" md5="4a700daf37f4ee68aeb00fd74a6ddce9"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 1 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="79203644" crc="1d6e28d7" md5="2f43767bb0cf2e0ddb5d11ae1bcfd51c"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 2 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="62798444" crc="3b635644" md5="e87f36ddbdbb5f13b1d0a95356ef4fc4"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 3 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="26636444" crc="e553e7b8" md5="fc9e57f35ad2f191fbf97cb529098422"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 4 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="34221644" crc="16e372e8" md5="a8c6f66e2f86a1f607ef4c4bd3879ba3"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 5 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="15699644" crc="bee5000d" md5="77fb8c325ddcb590acba342b7b352c49"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 6 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="28753244" crc="4884df51" md5="9f0dda124909848efea8b91b6f8c3bda"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 7 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="43220396" crc="c1cd9d61" md5="753db136ab8921e581799ce0fc2f5ff8"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)[!][The Music, Die Musik][CD-Audio].cue" size="1246" crc="255b6643" md5="b7d4c344bb67aca09f91c8d3d356578e"/> + --> <description>The 7th Guest (Euro)[DVC][8111033V113 50404169 01]</description> <year>1994</year> <publisher>Philips</publisher> @@ -64,6 +88,19 @@ </software> <software name="7thguestg" cloneof="7thguest" supported="no"> + <!-- + Origin: TOSEC + <rom name="7th Guest, The (1994)(Philips)(DE)(Disc 1 of 2)[!][Das Spiel][DVC].iso" size="725182752" crc="72d1b393" md5="078e1d04bb0f6fd9d6581e6e4cab1a2e"/> + <rom name="7th Guest, The (1994)(Philips)(DE)(Disc 1 of 2)[!][Das Spiel][DVC].cue" size="155" crc="8d9f5a31" md5="b74f7587c00c64bc7c7b201771368e3d"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 1 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="79203644" crc="1d6e28d7" md5="2f43767bb0cf2e0ddb5d11ae1bcfd51c"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 2 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="62798444" crc="3b635644" md5="e87f36ddbdbb5f13b1d0a95356ef4fc4"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 3 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="26636444" crc="e553e7b8" md5="fc9e57f35ad2f191fbf97cb529098422"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 4 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="34221644" crc="16e372e8" md5="a8c6f66e2f86a1f607ef4c4bd3879ba3"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 5 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="15699644" crc="bee5000d" md5="77fb8c325ddcb590acba342b7b352c49"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 6 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="28753244" crc="4884df51" md5="9f0dda124909848efea8b91b6f8c3bda"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 7 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="43220396" crc="c1cd9d61" md5="753db136ab8921e581799ce0fc2f5ff8"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)[!][The Music, Die Musik][CD-Audio].cue" size="1246" crc="255b6643" md5="b7d4c344bb67aca09f91c8d3d356578e"/> + --> <description>The 7th Guest (Ger)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -83,6 +120,19 @@ </software> <software name="7thguestf" cloneof="7thguest" supported="no"> + <!-- + Origin: TOSEC + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 1 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="79203644" crc="1d6e28d7" md5="2f43767bb0cf2e0ddb5d11ae1bcfd51c"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 2 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="62798444" crc="3b635644" md5="e87f36ddbdbb5f13b1d0a95356ef4fc4"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 3 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="26636444" crc="e553e7b8" md5="fc9e57f35ad2f191fbf97cb529098422"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 4 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="34221644" crc="16e372e8" md5="a8c6f66e2f86a1f607ef4c4bd3879ba3"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 5 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="15699644" crc="bee5000d" md5="77fb8c325ddcb590acba342b7b352c49"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 6 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="28753244" crc="4884df51" md5="9f0dda124909848efea8b91b6f8c3bda"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)(Track 7 of 7)[!][The Music, Die Musik][CD-Audio].wav" size="43220396" crc="c1cd9d61" md5="753db136ab8921e581799ce0fc2f5ff8"/> + <rom name="7th Guest, The (1994)(Philips)(EU)(Disc 2 of 2)[!][The Music, Die Musik][CD-Audio].cue" size="1246" crc="255b6643" md5="b7d4c344bb67aca09f91c8d3d356578e"/> + <rom name="7th Guest, The (1994)(Philips)(FR)(Disc 1 of 2)[Le Jeu][DVC].iso" size="725182752" crc="b986898d" md5="aaacf2d3121fefbef2dbe160b91503f6"/> + <rom name="7th Guest, The (1994)(Philips)(FR)(Disc 1 of 2)[Le Jeu][DVC].cue" size="149" crc="c6824247" md5="0b4be404b30b97ad3ae0517bfb0411bd"/> + --> <description>The 7th Guest (Fra)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -102,6 +152,11 @@ </software> <software name="dayrace"> + <!-- + Origin: TOSEC + <rom name="A Great Day at the Races (1993)(Philips)(EU).iso" size="717712800" crc="13edce0d" md5="c2d82e4a416b8868787173669c392c68"/> + <rom name="A Great Day at the Races (1993)(Philips)(EU).cue" size="133" crc="88f73aca" md5="54d7003e6972d9aeebb5db79c8a26093"/> + --> <description>A Great Day at the Races (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -113,6 +168,11 @@ </software> <software name="dayraceu" cloneof="dayrace"> + <!-- + Origin: TOSEC + <rom name="A Great Day at the Races (1993)(Philips)(US)[!].iso" size="718065600" crc="afab74f9" md5="4eb246f383def2924f70eed02adb49e2"/> + <rom name="A Great Day at the Races (1993)(Philips)(US)[!].cue" size="136" crc="e4716db7" md5="d14c93b6570b821e2ad1c289dbdf078a"/> + --> <description>A Great Day at the Races (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -125,6 +185,11 @@ <software name="morlov"> <!-- Alt. Title: The Morlov Affair --> + <!-- + Origin: TOSEC + <rom name="affaire Morlov, L' (1996)(Titus)(EU)(en-fr)[!][The Morlov Affair][CD-i-PC].iso" size="677827584" crc="725039f3" md5="cd0d2f791d6d11c37716043b619c4520"/> + <rom name="affaire Morlov, L' (1996)(Titus)(EU)(en-fr)[!][The Morlov Affair][CD-i-PC].cue" size="163" crc="9189e7c5" md5="9788de86eaf01fc2f50ef31167c5d187"/> + --> <description>L'Affaire Morlov (Euro)[CD-i-PC]</description> <year>1996</year> <publisher>Titus</publisher> @@ -136,6 +201,11 @@ </software> <software name="alice"> + <!-- + Origin: TOSEC + <rom name="Alice in Wonderland (1992)(Philips)(US)[!].iso" size="614142480" crc="6a23c697" md5="951e18b186871810ebb7f3679a407ea8"/> + <rom name="Alice in Wonderland (1992)(Philips)(US)[!].cue" size="131" crc="6682f993" md5="a8e492e98e1f7df91e23a2413ae1afec"/> + --> <description>Alice in Wonderland (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -147,6 +217,11 @@ </software> <software name="aliced" cloneof="alice"> + <!-- + Origin: TOSEC + <rom name="Alice in Wonderland (1993)(Philips)(NL).iso" size="574334880" crc="5bd72787" md5="f66b54e2406a57b49ffd3ad56f4ece19"/> + <rom name="Alice in Wonderland (1993)(Philips)(NL).cue" size="128" crc="5193b170" md5="d77c6e5e2e0cc4d1680cecc759be6aad"/> + --> <description>Alice in Wonderland (Ned)</description> <year>1993</year> <publisher>Philips</publisher> @@ -158,6 +233,11 @@ </software> <software name="alicef" cloneof="alice"> + <!-- + Origin: TOSEC + <rom name="Alice au pays des merveilles (1992)(Philips)(FR).iso" size="569866080" crc="1316442b" md5="7a3940f31c03a69f11e3dbbf4c6afb63"/> + <rom name="Alice au pays des merveilles (1992)(Philips)(FR).cue" size="137" crc="dbdb7193" md5="0d6bf88a616d4be5b4a61b71cf586377"/> + --> <description>Alice au Pays des Merveilles (Fra)</description> <year>1992</year> <publisher>Philips</publisher> @@ -169,6 +249,11 @@ </software> <software name="arcadecl"> + <!-- + Origin: TOSEC + <rom name="Arcade Classics (1996)(Namco - Philips)(EU)[!][compilation].iso" size="28228704" crc="a0c7a4e4" md5="8b26f8fde138d86860cdfa9b6983da4b"/> + <rom name="Arcade Classics (1996)(Namco - Philips)(EU)[!][compilation].cue" size="148" crc="1ca211a5" md5="2a6f174a801d412f4f4889713bc79bdb"/> + --> <description>Arcade Classics (Euro)</description> <year>1996</year> <publisher>Namco ~ Philips</publisher> @@ -180,6 +265,11 @@ </software> <software name="archeon"> + <!-- + Origin: TOSEC + <rom name="Archeon CD-i Quiz (1994)(Dutch Electronic Publishers)(NL)(en-nl)[!].iso" size="50450400" crc="faf8d75e" md5="aeb904381861901873823ce585560ffa"/> + <rom name="Archeon CD-i Quiz (1994)(Dutch Electronic Publishers)(NL)(en-nl)[!].cue" size="156" crc="d80bd62b" md5="7be8d61e3b337d5afaf4cd67269eafde"/> + --> <description>Archeon CD-i Quiz (Ned)</description> <year>1994</year> <publisher>Dutch Electronic Publishers</publisher> @@ -191,6 +281,11 @@ </software> <software name="asterix"> + <!-- + Origin: TOSEC + <rom name="Asterix - Caesar's Challenge v3.9 (1995)(Pathe - Philips)(EU)[!].iso" size="436590000" crc="5ae23f16" md5="cd68855f3ad2cb2f5bf7304af25c152c"/> + <rom name="Asterix - Caesar's Challenge v3.9 (1995)(Pathe - Philips)(EU)[!].cue" size="153" crc="5643e0e9" md5="929bbe226d86782563f3d0d2655a208b"/> + --> <description>Asterix - Caesar's Challenge v3.9 (Euro)</description> <year>1995</year> <publisher>Pathe ~ Philips</publisher> @@ -202,6 +297,11 @@ </software> <software name="asterixd" cloneof="asterix"> + <!-- + Origin: TOSEC + <rom name="Asterix - De Uitdaging Van Caesar v3.9 (1995)(Pathe - Philips)(NL)[!].iso" size="442587600" crc="b5cae9cf" md5="2478131823418e86e5c06e8a94da6ad4"/> + <rom name="Asterix - De Uitdaging Van Caesar v3.9 (1995)(Pathe - Philips)(NL)[!].cue" size="158" crc="fc401090" md5="6e485493504cdab1e9a3c22e318b4295"/> + --> <description>Asterix - De Uitdaging Van Caesar v3.9 (Ned)</description> <year>1995</year> <publisher>Pathe ~ Philips</publisher> @@ -213,6 +313,11 @@ </software> <software name="asterixg" cloneof="asterix"> + <!-- + Origin: TOSEC + <rom name="Asterix - Die Grosse Reise v3.9 (1995)(Pathe - Philips)(DE)[!].iso" size="444528000" crc="2084ceb1" md5="358fb285070323b2b4882c04902acad0"/> + <rom name="Asterix - Die Grosse Reise v3.9 (1995)(Pathe - Philips)(DE)[!].cue" size="151" crc="d4c503dc" md5="205f69bc9e00472cef5c6cf4631ee16e"/> + --> <description>Asterix - Die Grosse Reise v3.9 (Ger)</description> <year>1995</year> <publisher>Pathe ~ Philips</publisher> @@ -224,6 +329,11 @@ </software> <software name="asterixs" cloneof="asterix"> + <!-- + Origin: TOSEC + <rom name="Asterix - El desafio de Cesar v3.9 (1995)(Pathe - Philips)(ES)[!].iso" size="439412400" crc="f00e6ef0" md5="9360e2ffe626aa1501ef315ca653dbce"/> + <rom name="Asterix - El desafio de Cesar v3.9 (1995)(Pathe - Philips)(ES)[!].cue" size="154" crc="0ad57bb6" md5="cff3f62602d2612e8df842a290eb1f91"/> + --> <description>Asterix - El Desafio de Cesar v3.9 (Spa)</description> <year>1995</year> <publisher>Pathe ~ Philips</publisher> @@ -235,6 +345,11 @@ </software> <software name="asterixi" cloneof="asterix"> + <!-- + Origin: TOSEC + <rom name="Asterix - La sfida di Cesare v3.9 (1995)(Pathe - Philips)(IT).iso" size="443116800" crc="b2ed075c" md5="31662fd62e730955022032b5560d5965"/> + <rom name="Asterix - La sfida di Cesare v3.9 (1995)(Pathe - Philips)(IT).cue" size="150" crc="9bfee00f" md5="a1eab33350d8c69fc0d3751ea84ffb0a"/> + --> <description>Asterix - La Sfida di Cesare v3.9 (Ita)</description> <year>1995</year> <publisher>Pathe ~ Philips</publisher> @@ -246,6 +361,11 @@ </software> <software name="asterixf" cloneof="asterix"> + <!-- + Origin: TOSEC + <rom name="Asterix - Le defi de Cesar v3.9 (1995)(Pathe - Philips)(FR).iso" size="498506400" crc="09e983b3" md5="9e00df4811f65c84abd3e3e22cc360e9"/> + <rom name="Asterix - Le defi de Cesar v3.9 (1995)(Pathe - Philips)(FR).cue" size="148" crc="ff2449c7" md5="9fd796ec0f2156b27e57875854ee3067"/> + --> <description>Asterix - Le Defi de Cesar v3.9 (Fra)</description> <year>1995</year> <publisher>Pathe ~ Philips</publisher> @@ -257,6 +377,11 @@ </software> <software name="atlantis" supported="no"> + <!-- + Origin: TOSEC + <rom name="Atlantis - The Last Resort v1.11 (1996)(Philips)(EU)[DVC].iso" size="598172400" crc="afa266cc" md5="b54e17fa8d07ada25ba9dd0c9216113f"/> + <rom name="Atlantis - The Last Resort v1.11 (1996)(Philips)(EU)[DVC].cue" size="146" crc="8706a12a" md5="569b273e9bf98bbd6835801970a3a9d3"/> + --> <description>Atlantis - The Last Resort v1.11 (Euro)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -269,6 +394,11 @@ </software> <software name="axisall"> + <!-- + Origin: TOSEC + <rom name="Axis and Allies (1994)(Philips)(US)[!].iso" size="559917120" crc="800a470a" md5="67aab6ac41aa8ef189d68d61f10b2867"/> + <rom name="Axis and Allies (1994)(Philips)(US)[!].cue" size="127" crc="7ab5de73" md5="5ffa0f02838118cbef6f86efa80693b1"/> + --> <description>Axis and Allies (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -280,6 +410,11 @@ </software> <software name="backgamm"> + <!-- + Origin: TOSEC + <rom name="Backgammon (1992)(Philips)(EU-US)[!].iso" size="265282080" crc="98e2f907" md5="506047283b8a77e4ad303f2658fafa7b"/> + <rom name="Backgammon (1992)(Philips)(EU-US)[!].cue" size="125" crc="31802080" md5="36e67e6645a94efc3cc352d05205ed15"/> + --> <description>Backgammon (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -291,6 +426,11 @@ </software> <software name="bship"> + <!-- + Origin: TOSEC + <rom name="Battleship (1991)(Philips)(EU-US)[!].iso" size="174871200" crc="e4afc041" md5="6a62d85cd82cd8cdcb2ffa92e398256d"/> + <rom name="Battleship (1991)(Philips)(EU-US)[!].cue" size="125" crc="54cb77fc" md5="48896c5a9dbff02719e821161b76319b"/> + --> <description>Battleship (Euro, USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -302,6 +442,11 @@ </software> <software name="bdead13" supported="no"> + <!-- + Origin: TOSEC + <rom name="Brain Dead 13 v1.07 (1997)(Philips)(EU)[DVC].iso" size="728964768" crc="32748463" md5="b82bd1a979e2709a5d189ae5bfa204bb"/> + <rom name="Brain Dead 13 v1.07 (1997)(Philips)(EU)[DVC].cue" size="133" crc="e2f6fe96" md5="fa7e8e2609f3a93c4db3889cdbc9fb9a"/> + --> <description>Brain Dead 13 v1.07 (Euro)[DVC]</description> <year>1997</year> <publisher>Philips</publisher> @@ -314,6 +459,11 @@ </software> <software name="burncycl"> + <!-- + Origin: TOSEC + <rom name="BURN-CYCLE (1994)(Philips)(EU)[!].iso" size="730390080" crc="9dd34126" md5="19a5d0135ebcf13a5a970ceb092059e5"/> + <rom name="BURN-CYCLE (1994)(Philips)(EU)[!].cue" size="122" crc="e2edfced" md5="0d30ed156073b2b2df89a7e9139ec3ce"/> + --> <description>BURN-CYCLE (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -325,6 +475,11 @@ </software> <software name="burncycls" cloneof="burncycl"> + <!-- + Origin: TOSEC + <rom name="BURN-CYCLE (1994)(Philips)(ES)[!].iso" size="739233600" crc="f7119954" md5="d7af0a5f3f22bf6d5b7274526c47ee7c"/> + <rom name="BURN-CYCLE (1994)(Philips)(ES)[!].cue" size="122" crc="53f6a1f8" md5="6c8d950c1fcf94aa9380c5ccd70ca239"/> + --> <description>BURN-CYCLE (Spa)</description> <year>1994</year> <publisher>Philips</publisher> @@ -336,6 +491,11 @@ </software> <software name="burncyclg" cloneof="burncycl"> + <!-- + Origin: TOSEC + <rom name="BURN-CYCLE (1995)(Philips)(DE)[!].iso" size="738575040" crc="81ae01d3" md5="63bde76e93b48d15ad3c3f6245343048"/> + <rom name="BURN-CYCLE (1995)(Philips)(DE)[!].cue" size="122" crc="1b34ca7c" md5="d4bed5f417516986b6be3f07957208ab"/> + --> <description>BURN-CYCLE (Ger)</description> <year>1995</year> <publisher>Philips</publisher> @@ -347,6 +507,11 @@ </software> <software name="burncycli" cloneof="burncycl"> + <!-- + Origin: TOSEC + <rom name="BURN-CYCLE (1995)(Philips)(IT).iso" size="740230848" crc="ad116c1a" md5="949d640f0f7ae41885d656f422639b8a"/> + <rom name="BURN-CYCLE (1995)(Philips)(IT).cue" size="119" crc="621387ac" md5="18057b7ab77397dac8fadb150d742647"/> + --> <description>BURN-CYCLE (Ita)</description> <year>1995</year> <publisher>Philips</publisher> @@ -358,6 +523,11 @@ </software> <software name="burncycld" cloneof="burncycl"> + <!-- + Origin: TOSEC + <rom name="BURN-CYCLE (demo) (1995)(Philips)(FR).iso" size="38808000" crc="85add07a" md5="45d849d294b17ee9f311e51e572f8d88"/> + <rom name="BURN-CYCLE (demo) (1995)(Philips)(FR).cue" size="126" crc="1d5e7b72" md5="34ece79d04c83aae4ed9e8565ba09da6"/> + --> <description>BURN-CYCLE (Fra, Demo)</description> <year>1995</year> <publisher>Philips</publisher> @@ -369,6 +539,11 @@ </software> <software name="cboxing" supported="no"> + <!-- + Origin: TOSEC + <rom name="Caesars World of Boxing (1993)(Philips)(EU)[!][DVC].iso" size="592701648" crc="25334277" md5="5d649bdebfe61c76a577fd4c513f7caf"/> + <rom name="Caesars World of Boxing (1993)(Philips)(EU)[!][DVC].cue" size="140" crc="46308319" md5="3a031fb92e58c28eb33fcc921c510a93"/> + --> <description>Caesars World of Boxing (Euro)[DVC]</description> <year>1993</year> <publisher>Philips</publisher> @@ -381,6 +556,11 @@ </software> <software name="cboxingu" cloneof="cboxing"> + <!-- + Origin: TOSEC + <rom name="Caesars World of Boxing (1993)(Philips)(US)[18621209 01].iso" size="593233200" crc="da481848" md5="cb583d4502f5716a30dfc2ff3a9f99b2"/> + <rom name="Caesars World of Boxing (1993)(Philips)(US)[18621209 01].cue" size="145" crc="f13546d6" md5="d47369f240622fac7aa42c396222142c"/> + --> <description>Caesars World of Boxing (USA)[18621209 01]</description> <year>1993</year> <publisher>Philips</publisher> @@ -392,6 +572,11 @@ </software> <software name="cboxingua" cloneof="cboxing"> + <!-- + Origin: TOSEC + <rom name="Caesars World of Boxing (1993)(Philips)(US)[18621217 03].iso" size="593056800" crc="2c1a1eac" md5="587fe0e72ed1a2bf3cf2569f3fa23d4a"/> + <rom name="Caesars World of Boxing (1993)(Philips)(US)[18621217 03].cue" size="145" crc="67714d08" md5="b523e5d77206c72e196d938ae644e800"/> + --> <description>Caesars World of Boxing (USA)[18621217 03]</description> <year>1993</year> <publisher>Philips</publisher> @@ -403,6 +588,11 @@ </software> <software name="cgambl"> + <!-- + Origin: TOSEC + <rom name="Caesars World of Gambling (1992)(Philips)(EU-US)[!].iso" size="464684640" crc="51d9f711" md5="d2394cd787fff0a6d3e9d88dcc11c5dd"/> + <rom name="Caesars World of Gambling (1992)(Philips)(EU-US)[!].cue" size="140" crc="f1aa8535" md5="b7eaa7a516128c0c4a21252f2bd06ad2"/> + --> <description>Caesars World of Gambling (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -414,6 +604,11 @@ </software> <software name="cdshoot"> + <!-- + Origin: TOSEC + <rom name="CD Shoot (1992)(Philips)(EU)(M8)[!].iso" size="636756960" crc="61d8a285" md5="23386d0e8b0135d82aece2add41a7f81"/> + <rom name="CD Shoot (1992)(Philips)(EU)(M8)[!].cue" size="124" crc="a609c1a7" md5="dd2a62d5bbc153dd814e5f1221127579"/> + --> <description>CD Shoot (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -425,6 +620,11 @@ </software> <software name="cdshootu" cloneof="cdshoot"> + <!-- + Origin: TOSEC + <rom name="CD Shoot (1992)(Philips)(US).iso" size="637109760" crc="bf6455cf" md5="2d03e4fa5b21b20118cb032e905178a6"/> + <rom name="CD Shoot (1992)(Philips)(US).cue" size="117" crc="37597325" md5="f7a1b5b7e80771693b32bfe205c32010"/> + --> <description>CD Shoot (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -436,6 +636,11 @@ </software> <software name="centrion" supported="no"> + <!-- + Origin: TOSEC + <rom name="Centurion (1995)(Philips)(NL)[DVC].iso" size="652680000" crc="77bbbf79" md5="5cfbcd608410598c513657d7495654c3"/> + <rom name="Centurion (1995)(Philips)(NL)[DVC].cue" size="123" crc="6f3087b8" md5="327dbe010737f6e50c78799ea5c226a2"/> + --> <description>Centurion (Ned)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -448,6 +653,11 @@ </software> <software name="chaosc" supported="no"> + <!-- + Origin: TOSEC + <rom name="Chaos Control v1.15 (1995)(Philips)(EU)[!][DVC].iso" size="487040400" crc="e1b0c5c0" md5="ff6996caf6f7c93f6fad489f5abca411"/> + <rom name="Chaos Control v1.15 (1995)(Philips)(EU)[!][DVC].cue" size="136" crc="e51449a5" md5="d469d1292e434615a3d1905338007d1b"/> + --> <description>Chaos Control v1.15 (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -460,6 +670,11 @@ </software> <software name="chaoscf" cloneof="chaosc" supported="no"> + <!-- + Origin: TOSEC + <rom name="Chaos Control v1.15 (1995)(Philips)(FR)[DVC].iso" size="487395552" crc="a2741721" md5="b4fe9c8fa914e9ad614ec63af96356d3"/> + <rom name="Chaos Control v1.15 (1995)(Philips)(FR)[DVC].cue" size="133" crc="abfeb0f0" md5="13928d8b61ff8ae758f32d925e4db0a2"/> + --> <description>Chaos Control v1.15 (Fra)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -472,6 +687,11 @@ </software> <software name="chaoscg" cloneof="chaosc" supported="no"> + <!-- + Origin: TOSEC + <rom name="Chaos Control v1.15 (1995)(Philips)(DE)[!][DVC].iso" size="487393200" crc="98e92db4" md5="781ac8d6b9e3615aef9cef6bca6bda5b"/> + <rom name="Chaos Control v1.15 (1995)(Philips)(DE)[!][DVC].cue" size="136" crc="767c0ba6" md5="8f48330dac70ff350654220e0121dcf2"/> + --> <description>Chaos Control v1.15 (Ger)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -484,6 +704,11 @@ </software> <software name="chaoscu" cloneof="chaosc" supported="no"> + <!-- + Origin: TOSEC + <rom name="Chaos Control v1.15 (1995)(Philips)(US)[DVC].iso" size="487393200" crc="a0595d1c" md5="5996ddf519de7c5d4d9b0bf06ab70d5e"/> + <rom name="Chaos Control v1.15 (1995)(Philips)(US)[DVC].cue" size="133" crc="6c9561ab" md5="32c1cb1f1b00c9ac7de26cc65061b58b"/> + --> <description>Chaos Control v1.15 (USA)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -496,6 +721,11 @@ </software> <software name="xmasctry" supported="no"> + <!-- + Origin: TOSEC + <rom name="Christmas Country (1996)(Creative Media)(EU)[DVC].iso" size="81325104" crc="f485d11c" md5="9927cfdf6ee2678a59f25981bd29cd70"/> + <rom name="Christmas Country (1996)(Creative Media)(EU)[DVC].cue" size="138" crc="d1ddd55f" md5="db39a4d704a5e715aca1a68548ea7c0c"/> + --> <description>Christmas Country (Euro)[DVC]</description> <year>1996</year> <publisher>Creative Media</publisher> @@ -508,6 +738,11 @@ </software> <software name="xmascris" supported="no"> + <!-- + Origin: TOSEC + <rom name="Christmas Crisis (1995)(DIMA - Philips)(EU)[!][DVC].iso" size="301114800" crc="b97c8fb9" md5="674ba5195273ce53fee9064ae0871f35"/> + <rom name="Christmas Crisis (1995)(DIMA - Philips)(EU)[!][DVC].cue" size="140" crc="eb0a6fd0" md5="17e4b818d09af8dac37672f0afab6eaf"/> + --> <description>Christmas Crisis (Euro)[DVC]</description> <year>1995</year> <publisher>DIMA ~ Philips</publisher> @@ -520,6 +755,11 @@ </software> <software name="cluedo" supported="no"> + <!-- + Origin: TOSEC + <rom name="Cluedo (1994)(Philips)(EU)[DVC].iso" size="661147200" crc="102cab6d" md5="7ce520717147b5cbe36195d39dd26f6c"/> + <rom name="Cluedo (1994)(Philips)(EU)[DVC].cue" size="120" crc="6c6c489c" md5="4946a2d62f350e27cc52eac34d473e50"/> + --> <description>Cluedo (Euro)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -532,6 +772,11 @@ </software> <software name="clue" cloneof="cluedo" supported="no"> + <!-- + Origin: TOSEC + <rom name="Clue (1994)(Philips)(US)[DVC].iso" size="661500000" crc="1b980d24" md5="330221597b61181b2668890d33d66852"/> + <rom name="Clue (1994)(Philips)(US)[DVC].cue" size="118" crc="089bdaba" md5="226c48e9c063e1a479a5250228c48603"/> + --> <description>Clue (USA)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -544,6 +789,11 @@ </software> <software name="cluedo2" supported="no"> + <!-- + Origin: TOSEC + <rom name="Cluedo - The Mysteries Continue (1995)(Philips)(EU)[DVC].iso" size="653914800" crc="961f45aa" md5="20ec20dc5cbf2091ba10f73e575e28a3"/> + <rom name="Cluedo - The Mysteries Continue (1995)(Philips)(EU)[DVC].cue" size="145" crc="3bc990c5" md5="b0da4499d6e542c290ba910f3b123cf6"/> + --> <description>Cluedo - The Mysteries Continue (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -556,6 +806,11 @@ </software> <software name="connect4"> + <!-- + Origin: TOSEC + <rom name="Connect Four v1 (1991)(Philips)(EU-US)[!].iso" size="92598240" crc="d770c1c6" md5="2ba9b2a886b87f3e80fa387b4013e86b"/> + <rom name="Connect Four v1 (1991)(Philips)(EU-US)[!].cue" size="130" crc="ae4dcc77" md5="6b89efaba29a5c768c215505009bd640"/> + --> <description>Connect Four v1 (Euro, USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -567,6 +822,13 @@ </software> <software name="crtshock" supported="no"> + <!-- + Origin: TOSEC + <rom name="Creature Shock (1996)(Philips - Virgin)(EU)(Disc 1 of 2)[DVC].iso" size="773337600" crc="d3d4a7ab" md5="ce5900c982b5b27385e19c64d6060f96"/> + <rom name="Creature Shock (1996)(Philips - Virgin)(EU)(Disc 1 of 2)[DVC].cue" size="150" crc="4526a75b" md5="2d199fddc7c802acd726e14a1d1d2067"/> + <rom name="Creature Shock (1996)(Philips - Virgin)(EU)(Disc 2 of 2)[DVC].iso" size="717418800" crc="b961f290" md5="6a2623a321d508393af170dc0e699054"/> + <rom name="Creature Shock (1996)(Philips - Virgin)(EU)(Disc 2 of 2)[DVC].cue" size="150" crc="6c4a55a6" md5="4ffad371663999cda9a4d61c8fb69a16"/> + --> <description>Creature Shock (Euro)[DVC]</description> <year>1996</year> <publisher>Philips ~ Virgin</publisher> @@ -584,6 +846,11 @@ </software> <software name="darkcstl"> + <!-- + Origin: TOSEC + <rom name="Dark Castle (1992)(Philips)(EU-US)[!].iso" size="142178400" crc="7adf9390" md5="a477aa7d5652349babcd742c40953843"/> + <rom name="Dark Castle (1992)(Philips)(EU-US)[!].cue" size="126" crc="75a6121e" md5="5229cf01176219da08dc30edd15d4664"/> + --> <description>Dark Castle (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -595,6 +862,11 @@ </software> <software name="defcrown"> + <!-- + Origin: TOSEC + <rom name="Defender of the Crown (1992)(Philips)(EU-US)[!].iso" size="301973280" crc="e3783236" md5="000f6239966734ee1db35da01759bfd5"/> + <rom name="Defender of the Crown (1992)(Philips)(EU-US)[!].cue" size="136" crc="1c3b228c" md5="aae2d577c1d62c238c4c5aaa152c9721"/> + --> <description>Defender of the Crown (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -606,6 +878,11 @@ </software> <software name="doyourem"> + <!-- + Origin: TOSEC + <rom name="Do you Remember the '60's (1996)(Philips)(EU).iso" size="207270000" crc="7c636c69" md5="85505739ed0a24296f67be6d2834228c"/> + <rom name="Do you Remember the '60's (1996)(Philips)(EU).cue" size="134" crc="e75d56e9" md5="52007c2851e5e2fb162446265f4c0111"/> + --> <description>Do you Remember the '60's (Euro)</description> <year>1996</year> <publisher>Philips</publisher> @@ -617,6 +894,11 @@ </software> <software name="domino"> + <!-- + Origin: TOSEC + <rom name="Domino - Het oudste spel, het nieuwste medium (1997)(Haarlems Uitgeef Bedrijf)(NL)[!].iso" size="184161600" crc="42a72e97" md5="2d2576f9c62465befc659732a0900701"/> + <rom name="Domino - Het oudste spel, het nieuwste medium (1997)(Haarlems Uitgeef Bedrijf)(NL)[!].cue" size="174" crc="deaf93f3" md5="d9490d31e9b1826d948f2e075199d2ae"/> + --> <description>Domino - Het Oudste Spel, Het Nieuwste Medium (Ned)</description> <year>1997</year> <publisher>Haarlems Uitgeef Bedrijf</publisher> @@ -628,6 +910,11 @@ </software> <software name="dlair" supported="no"> + <!-- + Origin: TOSEC + <rom name="Dragon's Lair (1994)(Philips)(EU)[!][DVC].iso" size="343098000" crc="1d095d3c" md5="9b37b7d8fbc7cb4b7b5cf6979a3db4e0"/> + <rom name="Dragon's Lair (1994)(Philips)(EU)[!][DVC].cue" size="130" crc="ab5e4418" md5="a0826523caa61ece818d05fca4568852"/> + --> <description>Dragon's Lair (Euro)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -640,6 +927,11 @@ </software> <software name="dlairu" cloneof="dlair" supported="no"> + <!-- + Origin: TOSEC + <rom name="Dragon's Lair (1994)(Philips)(US)[!][DVC].iso" size="343450800" crc="2476d338" md5="9a827ee811e508d217122daa19813fdd"/> + <rom name="Dragon's Lair (1994)(Philips)(US)[!][DVC].cue" size="130" crc="4fcf41b9" md5="b58e837a8a834492534e861e5d872e23"/> + --> <description>Dragon's Lair (USA)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -652,6 +944,11 @@ </software> <software name="dlair2"> + <!-- + Origin: TOSEC + <rom name="Dragon's Lair II - Time Warp (1994)(Philips)(EU).iso" size="541371600" crc="3c93bfc6" md5="3a4efcb469effa4f76dcd3537f0cf7c7"/> + <rom name="Dragon's Lair II - Time Warp (1994)(Philips)(EU).cue" size="137" crc="f70af84c" md5="0f10f9cbc80f48234d2246c7513a69fa"/> + --> <description>Dragon's Lair II - Time Warp (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -663,6 +960,11 @@ </software> <software name="dlair2u" cloneof="dlair2" supported="no"> + <!-- + Origin: TOSEC + <rom name="Dragon's Lair II - Time Warp (1994)(Philips)(US)[!][DVC][13920805 02].iso" size="541724400" crc="ef3f1bae" md5="9e92307552829ccd78c024cf1321f342"/> + <rom name="Dragon's Lair II - Time Warp (1994)(Philips)(US)[!][DVC][13920805 02].cue" size="158" crc="0360e28f" md5="7ee708c3c70f3cf90ad3ef97aa7dca69"/> + --> <description>Dragon's Lair II - Time Warp (USA)[DVC][13920805 02]</description> <year>1994</year> <publisher>Philips</publisher> @@ -675,6 +977,11 @@ </software> <software name="dlair2ua" cloneof="dlair2" supported="no"> + <!-- + Origin: TOSEC + <rom name="Dragon's Lair II - Time Warp (1994)(Philips)(US)[DVC][13920805 01].iso" size="541724400" crc="3de1ea0a" md5="1d1a0b55d2dabc8ade73f3d60178422e"/> + <rom name="Dragon's Lair II - Time Warp (1994)(Philips)(US)[DVC][13920805 01].cue" size="155" crc="a5fb684e" md5="2ef9707eb8dcbfda1b7b6ea2d65d527f"/> + --> <description>Dragon's Lair II - Time Warp (USA)[DVC][13920805 01]</description> <year>1994</year> <publisher>Philips</publisher> @@ -687,6 +994,11 @@ </software> <software name="drugwars" supported="no"> + <!-- + Origin: TOSEC + <rom name="Drug Wars (1996)(Philips)(EU)[DVC].iso" size="355269600" crc="7fe17c09" md5="081a5aedc0a20e48d344393342f239aa"/> + <rom name="Drug Wars (1996)(Philips)(EU)[DVC].cue" size="123" crc="abfe7f57" md5="79b02860fdf5965c8fda74268afc5d47"/> + --> <description>Drug Wars (Euro)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -699,6 +1011,11 @@ </software> <software name="earthc"> + <!-- + Origin: TOSEC + <rom name="Earth Command - The Future of Our World is in Your Hands v1.05 (1994)(Philips)(EU)[!].iso" size="751863840" crc="4f9539d0" md5="1dcc309d90ac90daa3a2ea27862e96f0"/> + <rom name="Earth Command - The Future of Our World is in Your Hands v1.05 (1994)(Philips)(EU)[!].cue" size="174" crc="9d5929b7" md5="8a7e8878c53e2429ea64e1a7e0e03311"/> + --> <description>Earth Command - The Future of Our World is in Your Hands v1.05 (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -710,6 +1027,11 @@ </software> <software name="earthcd" cloneof="earthc"> + <!-- + Origin: TOSEC + <rom name="Earth Command - De toekomst van de wereld ligt in jouw handen v1.05 (1994)(Philips)(NL)[!].iso" size="766822560" crc="f8c86de7" md5="5c76c6fc3b85b3394c8a8fa8c0d36e74"/> + <rom name="Earth Command - De toekomst van de wereld ligt in jouw handen v1.05 (1994)(Philips)(NL)[!].cue" size="179" crc="ec6782a0" md5="50c99c6f62d3efba1ae3548ea816f7d6"/> + --> <description>Earth Command - De Toekomst van de Wereld Ligt in Jouw Handen v1.05 (Ned)</description> <year>1994</year> <publisher>Philips</publisher> @@ -721,6 +1043,11 @@ </software> <software name="earthcg" cloneof="earthc"> + <!-- + Origin: TOSEC + <rom name="Earth Command - Die zukunft unserer welt liegt in ihrer hand v1.05 (1994)(Philips)(DE)[!].iso" size="754968480" crc="14805d05" md5="7affdc60d6356ff8e79a2c35b7ef1c39"/> + <rom name="Earth Command - Die zukunft unserer welt liegt in ihrer hand v1.05 (1994)(Philips)(DE)[!].cue" size="178" crc="3886de6e" md5="c5f85b0259c9639782cd4be3dd556e3f"/> + --> <description>Earth Command - Die Zukunft Unserer welt Liegt in Ihrer Hand v1.05 (Ger)</description> <year>1994</year> <publisher>Philips</publisher> @@ -732,6 +1059,11 @@ </software> <software name="earthcu" cloneof="earthc"> + <!-- + Origin: TOSEC + <rom name="Earth Command - The Future of Our World is in Your Hands v1.05 (1994)(Philips)(US).iso" size="752216640" crc="3bccae1f" md5="2c481f0ffca3cbb2a9ea35acdcb9f749"/> + <rom name="Earth Command - The Future of Our World is in Your Hands v1.05 (1994)(Philips)(US).cue" size="171" crc="11130987" md5="2beb2215d042e092f058086b56862613"/> + --> <description>Earth Command - The Future of Our World is in Your Hands v1.05 (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -743,6 +1075,11 @@ </software> <software name="earthcf" cloneof="earthc"> + <!-- + Origin: TOSEC + <rom name="Earth Command v1.05 (1994)(Philips)(FR).iso" size="754625088" crc="cc48b0f4" md5="088dea33c94c0b72c99deec85dfeefef"/> + <rom name="Earth Command v1.05 (1994)(Philips)(FR).cue" size="128" crc="978581b8" md5="7fa2a026bda675e34145a801e4dfe626"/> + --> <description>Earth Command v1.05 (Fra)</description> <year>1994</year> <publisher>Philips</publisher> @@ -754,6 +1091,11 @@ </software> <software name="effacer"> + <!-- + Origin: TOSEC + <rom name="Effacer - Hangman of the 25th Century (1994)(Philips)(US).iso" size="694968960" crc="6d5ee31d" md5="428008ea69a034321cb138a59e571cff"/> + <rom name="Effacer - Hangman of the 25th Century (1994)(Philips)(US).cue" size="146" crc="adb280b4" md5="b565bea537237e812b6f2ddf93ae0a7c"/> + --> <description>Effacer - Hangman of the 25th Century (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -765,6 +1107,11 @@ </software> <software name="cybrcity"> + <!-- + Origin: TOSEC + <rom name="Escape from CyberCity (1992)(Philips)(EU-US)[!].iso" size="459275040" crc="5d5496cb" md5="ddb39ad3f8122e87d8a7f1b22764d021"/> + <rom name="Escape from CyberCity (1992)(Philips)(EU-US)[!].cue" size="136" crc="b832ef3c" md5="4b8743ce175e7af3ddbce05ae1b5bc0c"/> + --> <description>Escape from CyberCity (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -776,6 +1123,11 @@ </software> <software name="familyg1"> + <!-- + Origin: TOSEC + <rom name="Family Games I (1995)(Philips)(EU)[!][compilation].iso" size="210974400" crc="5cdc1af0" md5="149c8b6d9076ae963e7050fe10747f4e"/> + <rom name="Family Games I (1995)(Philips)(EU)[!][compilation].cue" size="139" crc="02bacf39" md5="5923c64defd29f9125b9179af936f361"/> + --> <description>Family Games I (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -787,6 +1139,11 @@ </software> <software name="familyg2"> + <!-- + Origin: TOSEC + <rom name="Family Games II - Junk Food Jive (1995)(Philips)(EU)[!][compilation].iso" size="436590000" crc="3579d874" md5="041850e4ca77569bb0f71749e14aa3b6"/> + <rom name="Family Games II - Junk Food Jive (1995)(Philips)(EU)[!][compilation].cue" size="157" crc="94557560" md5="507701886ab05538d44e14398c762290"/> + --> <description>Family Games II - Junk Food Jive (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -798,6 +1155,11 @@ </software> <software name="flashb"> + <!-- + Origin: TOSEC + <rom name="Flashback (1995)(Philips)(EU)(M7)[!].iso" size="259484400" crc="d5c68797" md5="d2871941b140ead3d2086c674956d138"/> + <rom name="Flashback (1995)(Philips)(EU)(M7)[!].cue" size="125" crc="4226257b" md5="e81801fb137ff811e3d6d24436706ad9"/> + --> <description>Flashback (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -809,6 +1171,11 @@ </software> <software name="girlclub"> + <!-- + Origin: TOSEC + <rom name="Girl's Club - The Fantasy Dating Game (1993)(Philips)(US)[!].iso" size="727497120" crc="87de299f" md5="2a1c076fd797e756a5b3f9336ca36933"/> + <rom name="Girl's Club - The Fantasy Dating Game (1993)(Philips)(US)[!].cue" size="149" crc="f5b2780a" md5="81b4f414bb0e0fc6f076efaa57a83cd1"/> + --> <description>Girl's Club - The Fantasy Dating Game (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -820,6 +1187,11 @@ </software> <software name="golden1"> + <!-- + Origin: TOSEC + <rom name="Golden Oldies I (1997)(SPC Vision)(EU)[compilation].iso" size="50450400" crc="17895dc3" md5="fbdc81bf48f2df1df65a25480b0dac14"/> + <rom name="Golden Oldies I (1997)(SPC Vision)(EU)[compilation].cue" size="140" crc="6819b1e7" md5="06ac1d9ad603b1828cf28adf64d4af83"/> + --> <description>Golden Oldies I (Euro)</description> <year>1997</year> <publisher>SPC Vision</publisher> @@ -831,6 +1203,11 @@ </software> <software name="golden2"> + <!-- + Origin: TOSEC + <rom name="Golden Oldies II (1997)(SPC Vision)(EU)[!][compilation].iso" size="45158400" crc="ed59db14" md5="0d763bc33dede451fe6b3c13fa286286"/> + <rom name="Golden Oldies II (1997)(SPC Vision)(EU)[!][compilation].cue" size="144" crc="1ad27d7e" md5="794a95508ffd5b0e1a45e8dbe621c199"/> + --> <description>Golden Oldies II (Euro)</description> <year>1997</year> <publisher>SPC Vision</publisher> @@ -842,6 +1219,11 @@ </software> <software name="guignols" supported="no"> + <!-- + Origin: TOSEC + <rom name="Guignols de l'Info, Les - Le jeu! (1996)(CANAL+ - Philips)(FR)[DVC].iso" size="711955104" crc="2e51ccbb" md5="dcc83715a12081b3aa6aacb447ab3314"/> + <rom name="Guignols de l'Info, Les - Le jeu! (1996)(CANAL+ - Philips)(FR)[DVC].cue" size="156" crc="9259a34c" md5="db71924c1146437f8b572e20c8bf5cdc"/> + --> <description>Les Guignols de l'Info - Le Jeu! (Fra)[DVC]</description> <year>1996</year> <publisher>CANAL+ ~ Philips</publisher> @@ -854,6 +1236,11 @@ </software> <software name="hierog"> + <!-- + Origin: TOSEC + <rom name="Hieroglyph (1994)(ZYX-Music)(DE).iso" size="29287104" crc="f967b685" md5="a7d1613a1c6d6833ea4fe1003ca7ace7"/> + <rom name="Hieroglyph (1994)(ZYX-Music)(DE).cue" size="121" crc="ff195633" md5="12bd2c7c456fdc6330b5e967f4cd9dcb"/> + --> <description>Hieroglyph (Ger)</description> <year>1994</year> <publisher>ZYX-Music</publisher> @@ -865,6 +1252,11 @@ </software> <software name="hotmario"> + <!-- + Origin: TOSEC + <rom name="Hotel Mario (1994)(Philips)(EU)[!].iso" size="366794400" crc="8305fbca" md5="eaba42fc6572a66cb91ceeb976595485"/> + <rom name="Hotel Mario (1994)(Philips)(EU)[!].cue" size="123" crc="0a437951" md5="df72c8ced1f5d36a38c5ca2e9330062b"/> + --> <description>Hotel Mario (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -876,6 +1268,11 @@ </software> <software name="hotmariou" cloneof="hotmario"> + <!-- + Origin: TOSEC + <rom name="Hotel Mario (1994)(Philips)(US)[!].iso" size="367147200" crc="072c0573" md5="6a9b2d5267342714640d37758e70902c"/> + <rom name="Hotel Mario (1994)(Philips)(US)[!].cue" size="123" crc="93bc01a3" md5="70acc9b1edc779e95bd8248a4d7b6da4"/> + --> <description>Hotel Mario (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -887,6 +1284,11 @@ </software> <software name="inca"> + <!-- + Origin: TOSEC + <rom name="Inca (1993)(Coktel Vision - Philips)(EU)(M4)[!][en-de-fr-nl][8100126 50341 698 01].iso" size="631594320" crc="c159df01" md5="f45b2fa9f8b9aa2eb9ff69b49214f550"/> + <rom name="Inca (1993)(Coktel Vision - Philips)(EU)(M4)[!][en-de-fr-nl][8100126 50341 698 01].cue" size="171" crc="e0dce744" md5="e219428900bec6a3cf653e310936ed53"/> + --> <description>Inca (Euro)[8100126 50341 698 01]</description> <year>1993</year> <publisher>Coktel Vision ~ Philips</publisher> @@ -898,6 +1300,11 @@ </software> <software name="incaa" cloneof="inca"> + <!-- + Origin: TOSEC + <rom name="Inca (1993-04-21)(Coktel Vision - Philips)(EU)(M4)[en-de-fr-nl][FPD Testing - Phase 1].iso" size="622268640" crc="7dc74192" md5="603e428a96ba0901a380d8a17128b037"/> + <rom name="Inca (1993-04-21)(Coktel Vision - Philips)(EU)(M4)[en-de-fr-nl][FPD Testing - Phase 1].cue" size="175" crc="1462417f" md5="16f7c59c0c1b1be6e2d5c8b6c23cd3f9"/> + --> <description>Inca (Euro)[FPD Testing - Phase 1]</description> <year>1993</year> <publisher>Coktel Vision ~ Philips</publisher> @@ -909,6 +1316,11 @@ </software> <software name="incab" cloneof="inca"> + <!-- + Origin: TOSEC + <rom name="Inca (1994)(Coktel Vision - Philips)(EU)(M4)[!][en-de-fr-nl][8100126V206 50399445 01].iso" size="620234160" crc="f4f2cda1" md5="ac269214a5f4c85c26f2a31f1f71f854"/> + <rom name="Inca (1994)(Coktel Vision - Philips)(EU)(M4)[!][en-de-fr-nl][8100126V206 50399445 01].cue" size="174" crc="9a4746f9" md5="2575e20a341efcbe383f1e115fcb836d"/> + --> <description>Inca (Euro)[8100126V206 50399445 01]</description> <year>1994</year> <publisher>Coktel Vision ~ Philips</publisher> @@ -920,6 +1332,11 @@ </software> <software name="incac" cloneof="inca"> + <!-- + Origin: TOSEC + <rom name="Inca (1994)(Coktel Vision - Philips)(EU)(M4)[!][es-fr-it-pt].iso" size="632245824" crc="79b58a14" md5="e7f94261cb0a7a957c16a8c7ac54e8a0"/> + <rom name="Inca (1994)(Coktel Vision - Philips)(EU)(M4)[!][es-fr-it-pt].cue" size="149" crc="0e67376d" md5="555754d8341d70f62651b28d220be9b7"/> + --> <description>Inca (Euro)</description> <year>1994</year> <publisher>Coktel Vision ~ Philips</publisher> @@ -931,6 +1348,11 @@ </software> <software name="tennisop"> + <!-- + Origin: TOSEC + <rom name="International Tennis Open (1993)(Pathe - Philips)(EU-US)(en-fr)[!].iso" size="368499600" crc="3aee0a76" md5="06dbde0d51fa9cd25d51b50cca3eb610"/> + <rom name="International Tennis Open (1993)(Pathe - Philips)(EU-US)(en-fr)[!].cue" size="155" crc="659d6b27" md5="8819fcdc5ed1a1b47a3b3f0c432ca76c"/> + --> <description>International Tennis Open (Euro, USA)</description> <year>1993</year> <publisher>Pathe ~ Philips</publisher> @@ -942,6 +1364,11 @@ </software> <software name="tennisops" cloneof="tennisop"> + <!-- + Origin: TOSEC + <rom name="International Tennis Open v2.01 (1993)(Pathe - Philips)(ES)(en-es).iso" size="369381600" crc="f9719857" md5="7fc5240019e610a12dbd3f1d65e44b33"/> + <rom name="International Tennis Open v2.01 (1993)(Pathe - Philips)(ES)(en-es).cue" size="155" crc="d819858d" md5="f6dd037d330ced629a640aa49afb33d4"/> + --> <description>International Tennis Open v2.01 (Spa)</description> <year>1993</year> <publisher>Pathe ~ Philips</publisher> @@ -953,6 +1380,11 @@ </software> <software name="tennisopg" cloneof="tennisop"> + <!-- + Origin: TOSEC + <rom name="International Tennis Open v3.01 (1993)(Pathe - Philips)(DE)(en-de)[!].iso" size="354034800" crc="506b751a" md5="bfaa49c875b845c9fb83cb28e4867bcf"/> + <rom name="International Tennis Open v3.01 (1993)(Pathe - Philips)(DE)(en-de)[!].cue" size="158" crc="b1f8c342" md5="e3a4d966e430b8102694aabcd873b815"/> + --> <description>International Tennis Open v3.01 (Ger)</description> <year>1993</year> <publisher>Pathe ~ Philips</publisher> @@ -964,6 +1396,11 @@ </software> <software name="tennisopg2" cloneof="tennisop"> + <!-- + Origin: TOSEC + <rom name="International Tennis Open v3.01 (1994)(Pathe - Philips)(DE)(en-de)[2 players].iso" size="361620000" crc="1252d3bf" md5="d6445067269524d58cf105733294ceac"/> + <rom name="International Tennis Open v3.01 (1994)(Pathe - Philips)(DE)(en-de)[2 players].cue" size="166" crc="4cf78f91" md5="aa0dfa77c893d85e95fe62f02e327393"/> + --> <description>International Tennis Open v3.01 (Ger)[2 players]</description> <year>1994</year> <publisher>Pathe ~ Philips</publisher> @@ -975,6 +1412,11 @@ </software> <software name="tennisopi2" cloneof="tennisop"> + <!-- + Origin: TOSEC + <rom name="International Tennis Open v1.01 (1994)(Pathe - Philips)(IT)(en-it)[2 players].iso" size="347331600" crc="c2aaa0bd" md5="c34615d2168fdcc3047cdcff5782aa24"/> + <rom name="International Tennis Open v1.01 (1994)(Pathe - Philips)(IT)(en-it)[2 players].cue" size="166" crc="373239e5" md5="f4f36457cb15c43f7abaef7ce197e018"/> + --> <description>International Tennis Open v1.01 (Ita)[2 players]</description> <year>1994</year> <publisher>Pathe ~ Philips</publisher> @@ -986,6 +1428,11 @@ </software> <software name="tennisop2" cloneof="tennisop"> + <!-- + Origin: TOSEC + <rom name="International Tennis Open v3.03 (1994)(Pathe - Philips)(EU)(en-fr)[!][2 players].iso" size="375202800" crc="3a92072b" md5="b2af7886107582bc410fca16640820e2"/> + <rom name="International Tennis Open v3.03 (1994)(Pathe - Philips)(EU)(en-fr)[!][2 players].cue" size="169" crc="f3c91081" md5="2aa0c852635bde74c23f395fe9fb0e16"/> + --> <description>International Tennis Open v3.03 (Euro)[2 players]</description> <year>1994</year> <publisher>Pathe ~ Philips</publisher> @@ -997,6 +1444,11 @@ </software> <software name="tennisopu" cloneof="tennisop"> + <!-- + Origin: TOSEC + <rom name="International Tennis Open v3.03 (1994)(Philips)(US)(en-fr)[!][2 players].iso" size="375555600" crc="e4d7b648" md5="0fede7e0d126849305f00769f0e0611e"/> + <rom name="International Tennis Open v3.03 (1994)(Philips)(US)(en-fr)[!][2 players].cue" size="161" crc="7cd5fe58" md5="89a41a875cc784f0cf2e27fddab7be2f"/> + --> <description>International Tennis Open v3.03 (USA)[2 players]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1008,6 +1460,11 @@ </software> <software name="jeopardy"> + <!-- + Origin: TOSEC + <rom name="Jeopardy! (1994)(Philips)(US)[!].iso" size="471517200" crc="ce2f0dca" md5="035bdaae80a17570ce23f03386b80d9b"/> + <rom name="Jeopardy! (1994)(Philips)(US)[!].cue" size="121" crc="48300f43" md5="cab05b0f30b77fa6444cf72d2ef6c884"/> + --> <description>Jeopardy! (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1019,6 +1476,11 @@ </software> <software name="jigsaw"> + <!-- + Origin: TOSEC + <rom name="Jigsaw - The Ultimate Electronic Challenge (1992)(Philips)(US)[!].iso" size="320471760" crc="8e747b9d" md5="691335249e4676b5309847aeacfcf63a"/> + <rom name="Jigsaw - The Ultimate Electronic Challenge (1992)(Philips)(US)[!].cue" size="154" crc="5894dcf9" md5="dd65249127322944a532ea758363052a"/> + --> <description>Jigsaw - The Ultimate Electronic Challenge (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -1030,6 +1492,11 @@ </software> <software name="jokersjr"> + <!-- + Origin: TOSEC + <rom name="Joker's Wild! Jr., The (1994)(Philips)(US).iso" size="619340400" crc="6edc4b2d" md5="85fe9c651f7629221cbcd1cc3bba11b5"/> + <rom name="Joker's Wild! Jr., The (1994)(Philips)(US).cue" size="131" crc="9ca79461" md5="f9fe542c75cfdb62437c3ee3488e27c9"/> + --> <description>The Joker's Wild! Jr. (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1041,6 +1508,11 @@ </software> <software name="jokers"> + <!-- + Origin: TOSEC + <rom name="Joker's Wild!, The (1994)(Philips)(US)[!].iso" size="647388000" crc="633d2fec" md5="40c77801cbfba93d42d4bc00fec79a68"/> + <rom name="Joker's Wild!, The (1994)(Philips)(US)[!].cue" size="130" crc="5082d284" md5="7581ed503c07f1121eedb41667ff2f21"/> + --> <description>The Joker's Wild! (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1052,6 +1524,11 @@ </software> <software name="kether"> + <!-- + Origin: TOSEC + <rom name="Kether v3.11 (1994)(Philips)(EU)(en-fr)[!].iso" size="383140800" crc="91b489ef" md5="703af6cf94291517f0142c67423e709d"/> + <rom name="Kether v3.11 (1994)(Philips)(EU)(en-fr)[!].cue" size="131" crc="5b880612" md5="9b2ed88fe396a81eecbf8c21448d1d50"/> + --> <description>Kether v3.11 (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1063,6 +1540,11 @@ </software> <software name="kethero" cloneof="kether"> + <!-- + Origin: TOSEC + <rom name="Kether v3.09 (1993)(Philips)(EU)(en-fr).iso" size="383140800" crc="71ea2cfd" md5="8c194c11187d4af8a1f93ca043b03569"/> + <rom name="Kether v3.09 (1993)(Philips)(EU)(en-fr).cue" size="128" crc="abd8d1f7" md5="187cd92e21589b09e7bb4b3bb6b940f7"/> + --> <description>Kether v3.09 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1074,6 +1556,11 @@ </software> <software name="ketheroa" cloneof="kether"> + <!-- + Origin: TOSEC + <rom name="Kether v3.09 (1993)(Philips)(EU)(en-fr)[a].iso" size="383140800" crc="8898aa27" md5="1da7ade02f9e043b6ea342a19353b3e7"/> + <rom name="Kether v3.09 (1993)(Philips)(EU)(en-fr)[a].cue" size="131" crc="497ee0ce" md5="ec7fa47d4f1edbeb82f2dc40f3e5ef45"/> + --> <description>Kether v3.09 (Euro, Alt)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1085,6 +1572,11 @@ </software> <software name="ketherd" cloneof="kether"> + <!-- + Origin: TOSEC + <rom name="Kether v3.12 (1994)(Philips)(NL)(en-nl).iso" size="390020400" crc="ff4616fb" md5="a85eebe8c2d5d942323c8ac03ca0b4cb"/> + <rom name="Kether v3.12 (1994)(Philips)(NL)(en-nl).cue" size="128" crc="5e60a729" md5="c2b000e6e34a94399de74f1d853a5bfb"/> + --> <description>Kether v3.12 (Ned)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1096,6 +1588,11 @@ </software> <software name="kethergo" cloneof="kether"> + <!-- + Origin: TOSEC + <rom name="Kether v3.08 (1993)(Philips)(DE)(en-de).iso" size="388609200" crc="96296ef4" md5="efec1072e1a891083d0145837c14ca99"/> + <rom name="Kether v3.08 (1993)(Philips)(DE)(en-de).cue" size="128" crc="20d9e4b7" md5="4dd362f25173509f45efb6162a9e3701"/> + --> <description>Kether v3.08 (Ger)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1107,6 +1604,11 @@ </software> <software name="ketherg" cloneof="kether"> + <!-- + Origin: TOSEC + <rom name="Kether v3.11 (1994)(Philips)(DE)(en-de)[!].iso" size="388609200" crc="3694d45f" md5="1840d0d1b49c7be020ed1574326915cf"/> + <rom name="Kether v3.11 (1994)(Philips)(DE)(en-de)[!].cue" size="131" crc="3e7d12e3" md5="de750ca42b18cf20d313b847db54ec47"/> + --> <description>Kether v3.11 (Ger)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1118,6 +1620,11 @@ </software> <software name="ketheru" cloneof="kether"> + <!-- + Origin: TOSEC + <rom name="Kether v3.11 (1994)(Philips)(US)(en-fr).iso" size="383493600" crc="0902eae7" md5="139ffcced2b51d6e481348a79d3988af"/> + <rom name="Kether v3.11 (1994)(Philips)(US)(en-fr).cue" size="128" crc="f8623602" md5="0f0cfbfdd5aa2a1659660f938c902044"/> + --> <description>Kether v3.11 (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1129,6 +1636,11 @@ </software> <software name="kingdom" supported="no"> + <!-- + Origin: TOSEC + <rom name="Kingdom - Shadoan (1996)(Philips)(EU)[!][DVC].iso" size="764141280" crc="04c59103" md5="a75ce8cf25ced8dc3fdcfee91867362c"/> + <rom name="Kingdom - Shadoan (1996)(Philips)(EU)[!][DVC].cue" size="134" crc="5e24f8f3" md5="0431327c49427a1ec7dde1ceecdd9e4d"/> + --> <description>Kingdom - Shadoan (Euro)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -1141,6 +1653,11 @@ </software> <software name="kingdomu" cloneof="kingdom" supported="no"> + <!-- + Origin: TOSEC + <rom name="Kingdom - The Far Reaches (1995)(Philips)(US)[!][DVC].iso" size="675870720" crc="7da8143b" md5="0e8f27625642137ca97fbbb9ab3fab89"/> + <rom name="Kingdom - The Far Reaches (1995)(Philips)(US)[!][DVC].cue" size="142" crc="e250bc59" md5="6f8469681107a2ce459eca3caece3f8b"/> + --> <description>Kingdom - The Far Reaches (USA)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -1153,6 +1670,11 @@ </software> <software name="angedemn"> + <!-- + Origin: TOSEC + <rom name="L'Ange et le Demon (1993)(Philips)(FR).iso" size="714420000" crc="36c98b33" md5="9ca168ae656a21a749c9a9b93c93e800"/> + <rom name="L'Ange et le Demon (1993)(Philips)(FR).cue" size="127" crc="78f21f81" md5="03a6ce40f32fded05c1690e90d55733b"/> + --> <description>L'Ange et le Demon (Fra)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1164,6 +1686,11 @@ </software> <software name="labyrint" supported="no"> + <!-- + Origin: TOSEC + <rom name="Labyrinth of Crete (1995)(Philips)(EU)[DVC].iso" size="507331104" crc="f1a9bbce" md5="a8077543759dc2c9e9043ac0f6846a4a"/> + <rom name="Labyrinth of Crete (1995)(Philips)(EU)[DVC].cue" size="132" crc="b02dc638" md5="390788263a53c94b83fa814b47013f27"/> + --> <description>Labyrinth of Crete (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -1176,6 +1703,11 @@ </software> <software name="lasrlord"> + <!-- + Origin: TOSEC + <rom name="Laser Lords (1992)(Philips)(US)[07420911 01].iso" size="684319104" crc="951cbe95" md5="dc780dc791c327427525b2bb55c17610"/> + <rom name="Laser Lords (1992)(Philips)(US)[07420911 01].cue" size="133" crc="141cf558" md5="c871880273517ad7cbbd241c833361d9"/> + --> <description>Laser Lords (USA)[07420911 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -1187,6 +1719,11 @@ </software> <software name="lasrlorda" cloneof="lasrlord"> + <!-- + Origin: TOSEC + <rom name="Laser Lords (1992)(Philips)(US)[3106900742 50273 097 01].iso" size="684326160" crc="e6a3da55" md5="af032244d76598c615241d759de0c25a"/> + <rom name="Laser Lords (1992)(Philips)(US)[3106900742 50273 097 01].cue" size="145" crc="360ffe22" md5="379d126446c4267c61a38a2692779fb0"/> + --> <description>Laser Lords (USA)[3106900742 50273 097 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -1198,6 +1735,11 @@ </software> <software name="lastboun"> + <!-- + Origin: TOSEC + <rom name="Last Bounty Hunter, The (1996)(Philips)(EU).iso" size="340875360" crc="9c4691e5" md5="34eb5ad2fe5a2bb059111c1d8b841a03"/> + <rom name="Last Bounty Hunter, The (1996)(Philips)(EU).cue" size="132" crc="68e1bbbf" md5="904f004cb6cf41429636d0d2a7996f4e"/> + --> <description>The Last Bounty Hunter (Euro)</description> <year>1996</year> <publisher>Philips</publisher> @@ -1209,6 +1751,11 @@ </software> <software name="lemmings"> + <!-- + Origin: TOSEC + <rom name="Lemmings (1994)(Philips)(EU)[!].iso" size="136886400" crc="21ef2122" md5="a8b3f337c0851adb80abd39bb3390805"/> + <rom name="Lemmings (1994)(Philips)(EU)[!].cue" size="120" crc="302d9064" md5="596954207631f86d08f5af82d33f1733"/> + --> <description>Lemmings (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1220,6 +1767,11 @@ </software> <software name="lingo"> + <!-- + Origin: TOSEC + <rom name="Lingo v1.07 (1995)(Philips)(NL)[!].iso" size="142178400" crc="ebe953aa" md5="745e523cfac66c4a072e5ae67b7d15a7"/> + <rom name="Lingo v1.07 (1995)(Philips)(NL)[!].cue" size="123" crc="ba7e8f63" md5="7b06eee6a1ad004470dd1990955c3704"/> + --> <description>Lingo v1.07 (Ned)</description> <year>1995</year> <publisher>Philips</publisher> @@ -1231,6 +1783,11 @@ </software> <software name="linkfoe"> + <!-- + Origin: TOSEC + <rom name="Link - The Faces of Evil (1993)(Philips)(EU)[!].iso" size="601580448" crc="10e2b735" md5="cfd2f5463bb9291a698d7c91af1548ce"/> + <rom name="Link - The Faces of Evil (1993)(Philips)(EU)[!].cue" size="136" crc="7a1839e0" md5="4fd331a55009e4da5f282e7e77312b94"/> + --> <description>Link - The Faces of Evil (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1242,6 +1799,11 @@ </software> <software name="linkfoef" cloneof="linkfoe"> + <!-- + Origin: TOSEC + <rom name="Link - The Faces of Evil (1993)(Philips)(FR).iso" size="601571040" crc="b405f9a5" md5="5c65e1f130833806d7dcb67b193f09fe"/> + <rom name="Link - The Faces of Evil (1993)(Philips)(FR).cue" size="133" crc="68043ac1" md5="fd00eaec8de4452799338e4a4094be70"/> + --> <description>Link - The Faces of Evil (Fra)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1253,6 +1815,11 @@ </software> <software name="linkfoed" cloneof="linkfoe"> + <!-- + Origin: TOSEC + <rom name="Link - De Gezichten Van Het Kwaad (1993)(Philips)(NL)[!].iso" size="601618080" crc="0883ca07" md5="8bc74ea8b3f352743dba3ea7c0e673ad"/> + <rom name="Link - De Gezichten Van Het Kwaad (1993)(Philips)(NL)[!].cue" size="145" crc="52ffb1e7" md5="2e74b4a4b642f27306efc9a5ca2d87e0"/> + --> <description>Link - De Gezichten Van Het Kwaad (Ned)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1264,6 +1831,11 @@ </software> <software name="linkfoeg" cloneof="linkfoe"> + <!-- + Origin: TOSEC + <rom name="Link - Die Fratzen des Boesen (1993)(Philips)(DE)[!].iso" size="601618080" crc="68ca5365" md5="e09e1dadc854bdb19ed2523a7fe8cc0d"/> + <rom name="Link - Die Fratzen des Boesen (1993)(Philips)(DE)[!].cue" size="141" crc="2f8cf98d" md5="215103ca70695fcd9c0727c9af4cd0ef"/> + --> <description>Link - Die Fratzen des Boesen (Ger)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1275,6 +1847,11 @@ </software> <software name="litildvl" supported="no"> + <!-- + Origin: TOSEC + <rom name="Litil Divil (1994)(Philips)(EU)[!][DVC].iso" size="578944800" crc="4250912d" md5="e1a87a3d9ff9b11a0845be1777a32c24"/> + <rom name="Litil Divil (1994)(Philips)(EU)[!][DVC].cue" size="128" crc="6933897d" md5="6211059288ff0bd73e0a5b2ee4d4e119"/> + --> <description>Litil Divil (Euro)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1287,6 +1864,11 @@ </software> <software name="litildvlu" cloneof="litildvl" supported="no"> + <!-- + Origin: TOSEC + <rom name="Litil Divil (1994)(Philips)(US)[!][DVC].iso" size="579297600" crc="17055940" md5="6d3e3b9921793d82e6dca15c939a66c7"/> + <rom name="Litil Divil (1994)(Philips)(US)[!][DVC].cue" size="128" crc="c1bf1a54" md5="8190ea9ddc4a07880c9c372613f49dfd"/> + --> <description>Litil Divil (USA)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1299,6 +1881,11 @@ </software> <software name="lordrsun"> + <!-- + Origin: TOSEC + <rom name="Lords of the Rising Sun (1992)(Philips)(US)[!].iso" size="314685840" crc="26a40823" md5="27fcd09e96852463874371888a9b006e"/> + <rom name="Lords of the Rising Sun (1992)(Philips)(US)[!].cue" size="135" crc="b4c2c6a6" md5="3cf2851f48cb82306819530f4e5be75c"/> + --> <description>Lords of the Rising Sun (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -1310,6 +1897,11 @@ </software> <software name="losteden" supported="no"> + <!-- + Origin: TOSEC + <rom name="Lost Eden (1995)(Philips)(EU)[!][DVC].iso" size="760813200" crc="c5d53d49" md5="5d1f8602f0db52d3c39f3bcfe689ac56"/> + <rom name="Lost Eden (1995)(Philips)(EU)[!][DVC].cue" size="126" crc="0c41540f" md5="224892cca685786ddb33006452fcdea2"/> + --> <description>Lost Eden (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -1322,6 +1914,11 @@ </software> <software name="lostedeng" cloneof="losteden" supported="no"> + <!-- + Origin: TOSEC + <rom name="Lost Eden (1995)(Philips)(DE)[!][DVC].iso" size="768222000" crc="728c4c48" md5="134c324e4e288c30d65930e08937f2cc"/> + <rom name="Lost Eden (1995)(Philips)(DE)[!][DVC].cue" size="126" crc="8e1c510a" md5="0fdfbd52a1522fa2af7f90d7787b0771"/> + --> <description>Lost Eden (Ger)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -1334,6 +1931,11 @@ </software> <software name="lostedend" cloneof="losteden" supported="no"> + <!-- + Origin: TOSEC + <rom name="Lost Eden (1995)(Philips)(NL)(M4)[!][DVC].iso" size="760636800" crc="ac80c308" md5="06f340e6a34a751822839e27538c0249"/> + <rom name="Lost Eden (1995)(Philips)(NL)(M4)[!][DVC].cue" size="130" crc="0d5bdc07" md5="cf4713b425456f2df002c1727fc17b02"/> + --> <description>Lost Eden (Ned)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -1346,6 +1948,11 @@ </software> <software name="lostride" supported="no"> + <!-- + Origin: TOSEC + <rom name="Lost Ride, The (1998)(Philips)(EU)[DVC].iso" size="299355504" crc="9fb543ed" md5="c35db1ef0919fa20406220e12ee48e0e"/> + <rom name="Lost Ride, The (1998)(Philips)(EU)[DVC].cue" size="128" crc="212c79c1" md5="0660faee78a7b901d78cff3a17fd2219"/> + --> <description>The Lost Ride (Euro)[DVC]</description> <year>1998</year> <publisher>Philips</publisher> @@ -1358,6 +1965,11 @@ </software> <software name="maddog2" supported="no"> + <!-- + Origin: TOSEC + <rom name="Mad Dog II - the Lost Gold (1995)(Philips)(EU)[DVC].iso" size="345344160" crc="0654dab0" md5="6ccbcb8222893e21319b9707922a2de6"/> + <rom name="Mad Dog II - the Lost Gold (1995)(Philips)(EU)[DVC].cue" size="140" crc="63321173" md5="10fb64470e93dd665d5e242cb07f04d8"/> + --> <description>Mad Dog II - The Lost Gold (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -1370,6 +1982,11 @@ </software> <software name="maddog2f" cloneof="maddog2" supported="no"> + <!-- + Origin: TOSEC + <rom name="Mad Dog 2 - le Tresor Perdu (1996)(Philips)(FR)[DVC].iso" size="351036000" crc="e739c62a" md5="3b22a3992b7e59635d4d7d0637a5a150"/> + <rom name="Mad Dog 2 - le Tresor Perdu (1996)(Philips)(FR)[DVC].cue" size="141" crc="13a2a411" md5="5197f303dac362a80b14785d77e2efc7"/> + --> <description>Mad Dog 2 - Le Tresor Perdu (Fra)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -1382,6 +1999,11 @@ </software> <software name="maddog" supported="no"> + <!-- + Origin: TOSEC + <rom name="Mad Dog McCree (1994)(Philips)(EU)[!][DVC].iso" size="459797184" crc="8718894d" md5="22398305e2a1da0719431e561746f881"/> + <rom name="Mad Dog McCree (1994)(Philips)(EU)[!][DVC].cue" size="131" crc="86cecc68" md5="6dfc53147c3c20954a51132112bdbb96"/> + --> <description>Mad Dog McCree (Euro)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1394,6 +2016,11 @@ </software> <software name="maddogu" cloneof="maddog" supported="no"> + <!-- + Origin: TOSEC + <rom name="Mad Dog McCree (1994)(Philips)(US)[DVC][05820818 N01].iso" size="460145280" crc="3a6f046f" md5="d1d634a1334fdb0f06be34af87a68702"/> + <rom name="Mad Dog McCree (1994)(Philips)(US)[DVC][05820818 N01].cue" size="142" crc="eb9e8ab0" md5="c195ee2c1d1c45a11e9864c6ee3646de"/> + --> <description>Mad Dog McCree (USA)[DVC][05820818 N01]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1406,6 +2033,11 @@ </software> <software name="maddogua" cloneof="maddog" supported="no"> + <!-- + Origin: TOSEC + <rom name="Mad Dog McCree (1994)(Philips)(US)[DVC][05820826 01].iso" size="460145280" crc="2d69679c" md5="d4f14f6d2d7122fbf7a2302d23961d42"/> + <rom name="Mad Dog McCree (1994)(Philips)(US)[DVC][05820826 01].cue" size="141" crc="17b0ab15" md5="f5aa70bd1f0dd37edef15712d65febf7"/> + --> <description>Mad Dog McCree (USA)[DVC][05820826 01]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1418,6 +2050,11 @@ </software> <software name="magicera"> + <!-- + Origin: TOSEC + <rom name="Magic Eraser (1994)(ZYX-Music)(DE).iso" size="453705504" crc="69a4d0e9" md5="cc4e01ce2ea016d7399425b76f6a9cae"/> + <rom name="Magic Eraser (1994)(ZYX-Music)(DE).cue" size="123" crc="ae42b051" md5="4f86654260fbe5bbfea59fe0d0346ab1"/> + --> <description>Magic Eraser (Ger)</description> <year>1994</year> <publisher>ZYX-Music</publisher> @@ -1429,6 +2066,11 @@ </software> <software name="makingrd" supported="no"> + <!-- + Origin: TOSEC + <rom name="Making the Grade v0.90 (1994)(Philips)(EU)[pre-release][DVC].iso" size="746701200" crc="9e05bb27" md5="f9fd6acc2dbf2cfbf1d7c39660a855f7"/> + <rom name="Making the Grade v0.90 (1994)(Philips)(EU)[pre-release][DVC].cue" size="149" crc="3854464d" md5="4593a9ebf00835c59c4b71b464c06aa0"/> + --> <description>Making the Grade v0.90 (Euro, Pre-Release)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1441,6 +2083,13 @@ </software> <software name="marcpolo"> + <!-- + Origin: TOSEC + <rom name="Marco Polo (1995)(Philips)(EU)(Disc 1 of 2)[!][The Game].iso" size="710362800" crc="59c003f0" md5="0dc3fd4b79f80e41ff3fa78d8c4ca1a0"/> + <rom name="Marco Polo (1995)(Philips)(EU)(Disc 1 of 2)[!][The Game].cue" size="145" crc="086bc3f7" md5="219709ce3d2344251cfae651ebc3c091"/> + <rom name="Marco Polo (1995)(Philips)(EU)(Disc 2 of 2)[!][The Documentation].iso" size="206564400" crc="3c0c58b6" md5="08f348bf10f45cdf80988d92fe481685"/> + <rom name="Marco Polo (1995)(Philips)(EU)(Disc 2 of 2)[!][The Documentation].cue" size="154" crc="7176f2c0" md5="7d5cf2e75cc224c13a1dcd76d02968e5"/> + --> <description>Marco Polo (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -1459,6 +2108,13 @@ </software> <software name="marcpolof" cloneof="marcpolo"> + <!-- + Origin: TOSEC + <rom name="Marco Polo (1995)(Philips)(FR)(Disc 1 of 2)[Le Jeu].iso" size="666086400" crc="08537379" md5="7b84a74e7b16d9fad91ad8790441460c"/> + <rom name="Marco Polo (1995)(Philips)(FR)(Disc 1 of 2)[Le Jeu].cue" size="140" crc="7ac6d4d7" md5="f640b2d45a5d79f92775091b2bd04b7f"/> + <rom name="Marco Polo (1995)(Philips)(FR)(Disc 2 of 2)[La Documentation].iso" size="210798000" crc="3bf5f340" md5="d83880698c9bb947542d653ebf0699f1"/> + <rom name="Marco Polo (1995)(Philips)(FR)(Disc 2 of 2)[La Documentation].cue" size="150" crc="be32f493" md5="abbfd3197ff6ff98669a61246faecece"/> + --> <description>Marco Polo (Fra)</description> <year>1995</year> <publisher>Philips</publisher> @@ -1477,6 +2133,11 @@ </software> <software name="mlabyrnt" supported="no"> + <!-- + Origin: TOSEC + <rom name="Master Labyrinth v1.06 (1995)(Pack-In-Video)(EU)[DVC].iso" size="686019600" crc="ac7a7b27" md5="7d331f64c9c0dfa70c1b32e0a24d4c8e"/> + <rom name="Master Labyrinth v1.06 (1995)(Pack-In-Video)(EU)[DVC].cue" size="142" crc="74737f6f" md5="8a89de65ceebe5fb12286c46ff138df0"/> + --> <description>Master Labyrinth v1.06 (Euro)[DVC]</description> <year>1995</year> <publisher>Pack-In Video</publisher> @@ -1489,6 +2150,11 @@ </software> <software name="megamaze"> + <!-- + Origin: TOSEC + <rom name="Mega Maze v1.06 (1994)(Philips)(EU)[!].iso" size="89775840" crc="39661973" md5="4aee20d05830458603939660121e5835"/> + <rom name="Mega Maze v1.06 (1994)(Philips)(EU)[!].cue" size="127" crc="b796b39d" md5="9f84388c710935dd685173b63082f454"/> + --> <description>Mega Maze v1.06 (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1500,6 +2166,11 @@ </software> <software name="megamazeu" cloneof="megamaze"> + <!-- + Origin: TOSEC + <rom name="Mega Maze v1.06 (1994)(Philips)(US).iso" size="90128640" crc="7e859367" md5="a737066da4b4afacb3f8e1630d97f5ff"/> + <rom name="Mega Maze v1.06 (1994)(Philips)(US).cue" size="124" crc="ba27089e" md5="8204c6eb3a11712ddbc3df7edcef5658"/> + --> <description>Mega Maze v1.06 (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1511,6 +2182,11 @@ </software> <software name="merlinapo" cloneof="merlinap"> + <!-- + Origin: TOSEC + <rom name="Merlin's Apprentice v1.1 (1995)(Philips)(EU)[!].iso" size="309546720" crc="1faab5b3" md5="45444f2b7a2edc348691a5484b6fb1c2"/> + <rom name="Merlin's Apprentice v1.1 (1995)(Philips)(EU)[!].cue" size="136" crc="68cb6544" md5="b62e302e25cdf86566095684abcd5626"/> + --> <description>Merlin's Apprentice v1.1 (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -1522,6 +2198,11 @@ </software> <software name="merlinap"> + <!-- + Origin: TOSEC + <rom name="Merlin's Apprentice v1.2 (1995)(Philips)(US).iso" size="309899520" crc="2aaf7924" md5="7b59e7addb5f1710d5d510561bc26406"/> + <rom name="Merlin's Apprentice v1.2 (1995)(Philips)(US).cue" size="133" crc="cb6f9cd3" md5="227301b2d30ffbc2bb04376b84e6697b"/> + --> <description>Merlin's Apprentice v1.2 (USA)</description> <year>1995</year> <publisher>Philips</publisher> @@ -1533,6 +2214,11 @@ </software> <software name="micromac"> + <!-- + Origin: TOSEC + <rom name="Micro Machines (1995)(Philips)(EU)[!].iso" size="309052800" crc="f4595dfb" md5="e15cde43227725681274813ae50fe45f"/> + <rom name="Micro Machines (1995)(Philips)(EU)[!].cue" size="126" crc="a1eb0a1e" md5="692a355cf11bef71d041fff9ffe0eaba"/> + --> <description>Micro Machines (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -1544,6 +2230,11 @@ </software> <software name="micromacd" cloneof="micromac"> + <!-- + Origin: TOSEC + <rom name="Micro Machines (demo) (1995)(Philips)(EU)[!].iso" size="142006704" crc="3279a3b1" md5="a539bce5e006a24ae30bd1a397881b8c"/> + <rom name="Micro Machines (demo) (1995)(Philips)(EU)[!].cue" size="133" crc="f100ef51" md5="0652ac416b2735d6cfcef05396ace12c"/> + --> <description>Micro Machines (Euro, Demo)</description> <year>1995</year> <publisher>Philips</publisher> @@ -1555,6 +2246,11 @@ </software> <software name="mutntrap" supported="no"> + <!-- + Origin: TOSEC + <rom name="Mutant Rampage - Bodyslam (1994)(Philips)(EU)[!][DVC].iso" size="660888480" crc="294e1d5e" md5="d97d9b4a672708cf9a6e18be7f1e3349"/> + <rom name="Mutant Rampage - Bodyslam (1994)(Philips)(EU)[!][DVC].cue" size="142" crc="8d7e02ea" md5="282250ca5b4a35854c408a02742fba61"/> + --> <description>Mutant Rampage - Bodyslam (Euro)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1567,6 +2263,11 @@ </software> <software name="mutntrapu" cloneof="mutntrap" supported="no"> + <!-- + Origin: TOSEC + <rom name="Mutant Rampage - Bodyslam (1994)(Philips)(US)[DVC].iso" size="661241280" crc="408f4330" md5="9b7caf8d43937d1c4ab89a13591b14fa"/> + <rom name="Mutant Rampage - Bodyslam (1994)(Philips)(US)[DVC].cue" size="139" crc="33c3acc9" md5="a7ad44260e841878b9735e82abfd0b0e"/> + --> <description>Mutant Rampage - Bodyslam (USA)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1579,6 +2280,11 @@ </software> <software name="myst"> + <!-- + Origin: TOSEC + <rom name="Myst (1996)(Philips)(EU)[!].iso" size="775694304" crc="aa334f1b" md5="28dc3bfe524c6ad5310768a87f9d4698"/> + <rom name="Myst (1996)(Philips)(EU)[!].cue" size="116" crc="640be95d" md5="76eb681e0eeda99d8d099b10149fe1d8"/> + --> <description>Myst (Euro)</description> <year>1996</year> <publisher>Philips</publisher> @@ -1590,6 +2296,11 @@ </software> <software name="mystmidw"> + <!-- + Origin: TOSEC + <rom name="Mystic Midway - Phantom Express (1993)(Philips)(EU)[!].iso" size="446821200" crc="714fcc66" md5="24a5f476df4be299e41ba64c6b43b4c3"/> + <rom name="Mystic Midway - Phantom Express (1993)(Philips)(EU)[!].cue" size="143" crc="2cc6a6d3" md5="9d13464f4570767b8a143885688f955d"/> + --> <description>Mystic Midway - Phantom Express (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1601,6 +2312,11 @@ </software> <software name="mystmidwu" cloneof="mystmidw"> + <!-- + Origin: TOSEC + <rom name="Mystic Midway - Rest in Pieces (1992)(Philips)(EU-US)[!].iso" size="195145440" crc="16febb9d" md5="bd693f7ec0b5216a336ae63cf42de8a9"/> + <rom name="Mystic Midway - Rest in Pieces (1992)(Philips)(EU-US)[!].cue" size="145" crc="ef17bc46" md5="792d2ab8268357d75fd3d6d38b5afacf"/> + --> <description>Mystic Midway - Rest in Pieces (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -1612,6 +2328,11 @@ </software> <software name="mystmidwj" cloneof="mystmidw"> + <!-- + Origin: TOSEC + <rom name="Mystic Midway - Rest in Pieces (1992)(Philips)(JP).iso" size="195145440" crc="409fb07b" md5="5fab65f36334ffc86e4f38a75a03cbaf"/> + <rom name="Mystic Midway - Rest in Pieces (1992)(Philips)(JP).cue" size="139" crc="ee61fa58" md5="9a8593e5e51eccb525c536c3a599c9e1"/> + --> <description>Mystic Midway - Rest in Pieces (JP)</description> <year>1992</year> <publisher>Philips</publisher> @@ -1623,6 +2344,11 @@ </software> <software name="nfl9495"> + <!-- + Origin: TOSEC + <rom name="NFL Football Trivia Challenge '94-'95 Edition (1994)(Philips)(EU)[!].iso" size="652750560" crc="7e04d235" md5="dbc9bfa8e5f8dffc52b2c01c65f51bd6"/> + <rom name="NFL Football Trivia Challenge '94-'95 Edition (1994)(Philips)(EU)[!].cue" size="157" crc="e16dad6f" md5="ab973cb52843888f515e2c7ee4a506e0"/> + --> <description>NFL Football Trivia Challenge '94-'95 Edition (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1634,6 +2360,11 @@ </software> <software name="nfltriv"> + <!-- + Origin: TOSEC + <rom name="NFL Football Trivia Challenge (1993)(Philips)(US)[!].iso" size="656019840" crc="eff6a9d3" md5="80b3c8a05ebcfcf90e6196eebea6c2a2"/> + <rom name="NFL Football Trivia Challenge (1993)(Philips)(US)[!].cue" size="141" crc="3117fe02" md5="92bd9a681320e7c5678d500c9e68773c"/> + --> <description>NFL Football Trivia Challenge (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1645,6 +2376,11 @@ </software> <software name="nflhoff" supported="no"> + <!-- + Origin: TOSEC + <rom name="NFL Hall of Fame Football (1994)(Philips)(EU)[!][DVC].iso" size="770515200" crc="866f0304" md5="0985e6f3addefdfd9dfeaae68a13f211"/> + <rom name="NFL Hall of Fame Football (1994)(Philips)(EU)[!][DVC].cue" size="142" crc="03691268" md5="9f5ffa8dff4aaea2128a20ddda1235df"/> + --> <description>NFL Hall of Fame Football (Euro)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1657,6 +2393,11 @@ </software> <software name="othello"> + <!-- + Origin: TOSEC + <rom name="Othello (1993)(Philips)(EU)[!].iso" size="685306944" crc="e1b7c685" md5="e5983dd09590a5b60a55eaecea3dfddc"/> + <rom name="Othello (1993)(Philips)(EU)[!].cue" size="119" crc="bfa18f45" md5="229adaefd51bd90582cc776c01054153"/> + --> <description>Othello (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1668,6 +2409,11 @@ </software> <software name="pacpanic"> + <!-- + Origin: TOSEC + <rom name="Pac-Panic (1995)(Namco - Philips)(EU)[!].iso" size="67208400" crc="905a0608" md5="2b1e49aee1dabccf321005eeefd6a68b"/> + <rom name="Pac-Panic (1995)(Namco - Philips)(EU)[!].cue" size="129" crc="5daa0b30" md5="1b52a50cc36a9fa14791638558ba302c"/> + --> <description>Pac-Panic (Euro)</description> <year>1995</year> <publisher>Namco ~ Philips</publisher> @@ -1679,6 +2425,11 @@ </software> <software name="palmsprg"> + <!-- + Origin: TOSEC + <rom name="Palm Springs Open, The (1991)(Philips)(EU-US)[!].iso" size="266787360" crc="02a9d271" md5="780161e564efa150499c762603202f9b"/> + <rom name="Palm Springs Open, The (1991)(Philips)(EU-US)[!].cue" size="137" crc="c740909a" md5="2723d399c55bfdffefc62b0df7df4936"/> + --> <description>The Palm Springs Open (Euro, USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -1690,6 +2441,11 @@ </software> <software name="palmsprgg" cloneof="palmsprg"> + <!-- + Origin: TOSEC + <rom name="Palm Springs Open, Die (1992)(Philips)(DE)[!].iso" size="267257760" crc="0b8d8be6" md5="ad5c7c9262da8f2bc1aa2e504452434e"/> + <rom name="Palm Springs Open, Die (1992)(Philips)(DE)[!].cue" size="134" crc="0a53c553" md5="cf6791735248d2158936448b1056b0cd"/> + --> <description>Die Palm Springs Open (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -1701,6 +2457,11 @@ </software> <software name="palmsprgf" cloneof="palmsprg"> + <!-- + Origin: TOSEC + <rom name="L'Open de Palm Springs (1992)(Philips)(FR).iso" size="266787360" crc="18273d60" md5="8fe688a1c30817c23a65a012e50ab49d"/> + <rom name="L'Open de Palm Springs (1992)(Philips)(FR).cue" size="131" crc="89c48183" md5="65ee6d2b3dfd42d5d1ad92aa33f17703"/> + --> <description>L'Open de Palm Springs (Fra)</description> <year>1992</year> <publisher>Philips</publisher> @@ -1712,6 +2473,11 @@ </software> <software name="palmsprgi" cloneof="palmsprg"> + <!-- + Origin: TOSEC + <rom name="Palm Springs Open, The (1992)(Philips)(IT).iso" size="266787360" crc="afe12ab6" md5="746269a55df0824f8af3699d72922263"/> + <rom name="Palm Springs Open, The (1992)(Philips)(IT).cue" size="131" crc="8e079d84" md5="964c98a565b66aa73ef1910214105c35"/> + --> <description>The Palm Springs Open (Ita)</description> <year>1992</year> <publisher>Philips</publisher> @@ -1723,6 +2489,11 @@ </software> <software name="palmsprgu" cloneof="palmsprg"> + <!-- + Origin: TOSEC + <rom name="Palm Springs Open, The (1991)(Philips)(US)[!].iso" size="266787360" crc="d9288802" md5="197d4e46841e4be451060690c56f4d86"/> + <rom name="Palm Springs Open, The (1991)(Philips)(US)[!].cue" size="134" crc="3c87e89d" md5="61cf626ac10e5388032f06fc5c6517dd"/> + --> <description>The Palm Springs Open (USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -1734,6 +2505,11 @@ </software> <software name="pinball"> + <!-- + Origin: TOSEC + <rom name="Pinball (1992)(Philips)(US)[!][3106900342 50238 037 03].iso" size="88552800" crc="0f949411" md5="0bc117af3a3f025bd0245330c289cacd"/> + <rom name="Pinball (1992)(Philips)(US)[!][3106900342 50238 037 03].cue" size="144" crc="7412cbe9" md5="129e3c6cd580e87b80ba37adc478ef13"/> + --> <description>Pinball (USA)[3106900342 50238 037 03]</description> <year>1992</year> <publisher>Philips</publisher> @@ -1745,6 +2521,11 @@ </software> <software name="pinballa" cloneof="pinball"> + <!-- + Origin: TOSEC + <rom name="Pinball (1992)(Philips)(US)[!][3106900342 50238 037 04].iso" size="88552800" crc="d2624005" md5="bcc182252239030542dc0b1d2a7c7e8d"/> + <rom name="Pinball (1992)(Philips)(US)[!][3106900342 50238 037 04].cue" size="144" crc="c0b3663b" md5="81cc5491ccd630e828cef995454950c0"/> + --> <description>Pinball (USA)[3106900342 50238 037 04]</description> <year>1992</year> <publisher>Philips</publisher> @@ -1756,6 +2537,11 @@ </software> <software name="powerhit"> + <!-- + Origin: TOSEC + <rom name="Power Hitter (1992)(Philips)(EU)[!].iso" size="396645984" crc="4577593c" md5="5f443bb8950887337149fe5ef6b1e411"/> + <rom name="Power Hitter (1992)(Philips)(EU)[!].cue" size="124" crc="3d7df9fa" md5="2a952b024a941907bf6507fcea17ffe8"/> + --> <description>Power Hitter (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -1767,6 +2553,11 @@ </software> <software name="powerhitu" cloneof="powerhit"> + <!-- + Origin: TOSEC + <rom name="Power Hitter (1993)(Philips)(US)[08120804 01].iso" size="396664800" crc="c99e8ff7" md5="7f16fcff3911d0a6ada991dedc142baf"/> + <rom name="Power Hitter (1993)(Philips)(US)[08120804 01].cue" size="134" crc="aa747913" md5="ce3f1e1158ff7407889082e94e58d9b9"/> + --> <description>Power Hitter (USA)[08120804 01]</description> <year>1993</year> <publisher>Philips</publisher> @@ -1778,6 +2569,11 @@ </software> <software name="powerhitua" cloneof="powerhit"> + <!-- + Origin: TOSEC + <rom name="Power Hitter (1993)(Philips)(US)[08120908 01].iso" size="396923520" crc="c747cdaa" md5="265f0e06cf492c517d42315adf48adf0"/> + <rom name="Power Hitter (1993)(Philips)(US)[08120908 01].cue" size="134" crc="957b5ea6" md5="be76e38f52195ca9af5444ee7395a01c"/> + --> <description>Power Hitter (USA)[08120908 01]</description> <year>1993</year> <publisher>Philips</publisher> @@ -1789,6 +2585,11 @@ </software> <software name="riserobo" supported="no"> + <!-- + Origin: TOSEC + <rom name="Rise of the Robots (1995)(Philips)(EU)[!][DVC].iso" size="305877600" crc="ae6a3fe4" md5="3c18191ff226d4cb7d281b5505b01762"/> + <rom name="Rise of the Robots (1995)(Philips)(EU)[!][DVC].cue" size="135" crc="fd521d09" md5="8433fa9da591c2a109d7d9ee3b5dce01"/> + --> <description>Rise of the Robots (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -1801,6 +2602,11 @@ </software> <software name="sargon"> + <!-- + Origin: TOSEC + <rom name="Sargon Chess (1992)(Philips)(US)[!][690 030-2 50253 278 01].iso" size="396170880" crc="1b60a603" md5="6735cd5ec37ac322f60587316b1f5d1f"/> + <rom name="Sargon Chess (1992)(Philips)(US)[!][690 030-2 50253 278 01].cue" size="148" crc="74b6b89b" md5="07876c5f49bcf00d3f55ff10f895323d"/> + --> <description>Sargon Chess (USA)[690 030-2 50253 278 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -1812,6 +2618,11 @@ </software> <software name="sargona" cloneof="sargon"> + <!-- + Origin: TOSEC + <rom name="Sargon Chess (1992)(Philips)(US)[03020320 01].iso" size="396335520" crc="7c2b904b" md5="8a6d24ce2097ece8f4c52d9f99c48096"/> + <rom name="Sargon Chess (1992)(Philips)(US)[03020320 01].cue" size="134" crc="77704a4d" md5="510b4877211ef47713285be419281fbd"/> + --> <description>Sargon Chess (USA)[03020320 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -1823,6 +2634,11 @@ </software> <software name="scotland"> + <!-- + Origin: TOSEC + <rom name="Scotland Yard - Interactive v1.03 (1994)(Philips)(EU).iso" size="545781600" crc="1ee1a0aa" md5="738d7b3867e844baf51c679017fa5f50"/> + <rom name="Scotland Yard - Interactive v1.03 (1994)(Philips)(EU).cue" size="142" crc="57fb2ad8" md5="b25b49d2dee8f2d3e874569bbdabcc53"/> + --> <description>Scotland Yard - Interactive v1.03 (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1834,6 +2650,11 @@ </software> <software name="scotlandf" cloneof="scotland"> + <!-- + Origin: TOSEC + <rom name="Scotland Yard - Interactif v1.04 (1994)(Philips)(FR).iso" size="552308400" crc="c7fe1a0f" md5="fc390a08ae6440dbf6d659976427af31"/> + <rom name="Scotland Yard - Interactif v1.04 (1994)(Philips)(FR).cue" size="141" crc="cf03df57" md5="d974bb951295ad0c7802b1f57faab5f3"/> + --> <description>Scotland Yard - Interactif v1.04 (Fra)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1845,6 +2666,11 @@ </software> <software name="scotlang" cloneof="scotland"> + <!-- + Origin: TOSEC + <rom name="Scotland Yard - Interactive v1.09 (1993)(Philips)(DE)[!].iso" size="607698000" crc="637fb9ac" md5="e0c5d4c573c8fe7aacfd534f9bd15665"/> + <rom name="Scotland Yard - Interactive v1.09 (1993)(Philips)(DE)[!].cue" size="145" crc="e0f14bb8" md5="acabb55d610aced9736459332453d73d"/> + --> <description>Scotland Yard - Interactive v1.09 (Ger)</description> <year>1993</year> <publisher>Philips</publisher> @@ -1856,6 +2682,11 @@ </software> <software name="secretm"> + <!-- + Origin: TOSEC + <rom name="Secret Mission v1.03 (1996)(Philips)(EU)[!].iso" size="636274800" crc="e3b34073" md5="d2a6052fbc21584979972e990e2286e0"/> + <rom name="Secret Mission v1.03 (1996)(Philips)(EU)[!].cue" size="132" crc="3bf76e26" md5="cf9a90fa7c46469bff55c4fb824c8749"/> + --> <description>Secret Mission v1.03 (Euro)</description> <year>1996</year> <publisher>Philips</publisher> @@ -1867,6 +2698,11 @@ </software> <software name="secretmg" cloneof="secretm"> + <!-- + Origin: TOSEC + <rom name="Secret Mission v1.03 (1996)(Philips)(DE).iso" size="630630000" crc="7ab16741" md5="7d22f5cef76fdecdf086188b04c9f898"/> + <rom name="Secret Mission v1.03 (1996)(Philips)(DE).cue" size="129" crc="459e0a85" md5="d654d95b87e2b0812715d50931e325f7"/> + --> <description>Secret Mission v1.03 (Ger)</description> <year>1996</year> <publisher>Philips</publisher> @@ -1878,6 +2714,11 @@ </software> <software name="secretmd" cloneof="secretm"> + <!-- + Origin: TOSEC + <rom name="Secret Mission v1.03 (1996)(Philips)(NL).iso" size="636274800" crc="459823cf" md5="d7e9006cbccd4250384a177d7b022716"/> + <rom name="Secret Mission v1.03 (1996)(Philips)(NL).cue" size="129" crc="cd542a44" md5="8cb7fd33797733ee40202b8e10f9a8ee"/> + --> <description>Secret Mission v1.03 (Ned)</description> <year>1996</year> <publisher>Philips</publisher> @@ -1889,6 +2730,11 @@ </software> <software name="shaolin"> + <!-- + Origin: TOSEC + <rom name="Shaolin's Road (1995)(Philips)(EU)(en-fr).iso" size="610167600" crc="a16916f4" md5="243c5c7330074ab456f03cf4b352cfd9"/> + <rom name="Shaolin's Road (1995)(Philips)(EU)(en-fr).cue" size="130" crc="2a447f65" md5="b4263cd50fe8bfe445174af9ae7935c2"/> + --> <description>Shaolin's Road (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -1900,6 +2746,11 @@ </software> <software name="spaceace" supported="no"> + <!-- + Origin: TOSEC + <rom name="Space Ace (1994)(Philips)(EU)[!][DVC].iso" size="455112000" crc="50eae148" md5="3e94ed78689a7894b78dc7a9f280d8cc"/> + <rom name="Space Ace (1994)(Philips)(EU)[!][DVC].cue" size="126" crc="5be74642" md5="b1dfcc5b3536123de55df9aac4186cc0"/> + --> <description>Space Ace (Euro)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1912,6 +2763,11 @@ </software> <software name="spaceaceu" cloneof="spaceace" supported="no"> + <!-- + Origin: TOSEC + <rom name="Space Ace (1994)(Philips)(US)[!][DVC].iso" size="455464800" crc="ac8515f2" md5="50bc0d56c61386ac26835ddce1cf5b96"/> + <rom name="Space Ace (1994)(Philips)(US)[!][DVC].cue" size="126" crc="b1e1c2d0" md5="ae2721e534ac5ee3524b2a60219e5ccf"/> + --> <description>Space Ace (USA)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -1924,6 +2780,11 @@ </software> <software name="sportfrk"> + <!-- + Origin: TOSEC + <rom name="Sport Freaks (1996)(Philips)(NL).iso" size="43575504" crc="bffbbcf4" md5="8b26116db0cdf4896b838cd2e29025c7"/> + <rom name="Sport Freaks (1996)(Philips)(NL).cue" size="121" crc="d23d73c3" md5="de2d82e170188aa185e9da7e5e6de471"/> + --> <description>Sport Freaks (Ned)</description> <year>1996</year> <publisher>Philips</publisher> @@ -1935,6 +2796,11 @@ </software> <software name="striker"> + <!-- + Origin: TOSEC + <rom name="Striker Pro (1994)(Philips)(EU)(M6)[!].iso" size="77968800" crc="360c3520" md5="f5cbc328811a7669723df0ef53da0c3f"/> + <rom name="Striker Pro (1994)(Philips)(EU)(M6)[!].cue" size="127" crc="38eefc6c" md5="23482b15b3c0a240f5a50a729c26f09d"/> + --> <description>Striker Pro (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1946,6 +2812,11 @@ </software> <software name="strikeru" cloneof="striker"> + <!-- + Origin: TOSEC + <rom name="Striker Pro (1994)(Philips)(US)(M6).iso" size="78321600" crc="fd53186e" md5="c735a511a13606812f1da3b53b7751e8"/> + <rom name="Striker Pro (1994)(Philips)(US)(M6).cue" size="124" crc="ff2fa254" md5="368777ad895c488c80ef88db518c72ac"/> + --> <description>Striker Pro (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -1957,6 +2828,11 @@ </software> <software name="spokrliv"> + <!-- + Origin: TOSEC + <rom name="Strip Poker Live (1995)(Green Pig Production)(EU).iso" size="642801600" crc="1b0b6bef" md5="6e5c2dca00deebea23930ef47c534785"/> + <rom name="Strip Poker Live (1995)(Green Pig Production)(EU).cue" size="138" crc="997875a1" md5="1a666532c3f493c73ef2c9f863bee558"/> + --> <description>Strip Poker Live (Euro)</description> <year>1995</year> <publisher>Green Pig Production</publisher> @@ -1968,6 +2844,11 @@ </software> <software name="strippok"> + <!-- + Origin: TOSEC + <rom name="Strip-Poker Pro (1994)(Hot Stage)(FR)(en-fr).iso" size="488886720" crc="546b44b3" md5="e95cce1f2aea162b523084120f281992"/> + <rom name="Strip-Poker Pro (1994)(Hot Stage)(FR)(en-fr).cue" size="133" crc="a94f3f9c" md5="3c2b2e98e3ed85b28434d776e9ef2f61"/> + --> <description>Strip-Poker Pro (Fra)</description> <year>1994</year> <publisher>Hot Stage</publisher> @@ -1979,6 +2860,11 @@ </software> <software name="tangram"> + <!-- + Origin: TOSEC + <rom name="Tangram - The Ultimate Chinese Game (1992)(Philips)(EU)(M8)[!].iso" size="671025600" crc="59e0ff7b" md5="4675252d28d2e62cd1e71234da0867f8"/> + <rom name="Tangram - The Ultimate Chinese Game (1992)(Philips)(EU)(M8)[!].cue" size="151" crc="8efcfa3c" md5="98d2e0c89ce32970b9555008249c0763"/> + --> <description>Tangram - The Ultimate Chinese Game (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -1990,6 +2876,11 @@ </software> <software name="tetris"> + <!-- + Origin: TOSEC + <rom name="Tetris (1992)(Philips)(EU-US)[!].iso" size="599548320" crc="77c17e6b" md5="2c9681af3cf698fc94129d53f036a975"/> + <rom name="Tetris (1992)(Philips)(EU-US)[!].cue" size="121" crc="488eac0e" md5="7e5f620e8f46792a3fbd9538069c1d70"/> + --> <description>Tetris (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -2001,6 +2892,11 @@ </software> <software name="tetsuo" supported="no"> + <!-- + Origin: TOSEC + <rom name="Tetsuo Gaiden (1997)(New Frontier)(EU)[DVC].iso" size="179227104" crc="88918656" md5="bccbe53d222e3c3ba8bfbc3ca0791bb4"/> + <rom name="Tetsuo Gaiden (1997)(New Frontier)(EU)[DVC].cue" size="132" crc="c20cebfa" md5="0317960e2d54881a67f8cf68a02ca11c"/> + --> <description>Tetsuo Gaiden (Euro)[DVC]</description> <year>1997</year> <publisher>New Frontier</publisher> @@ -2013,6 +2909,11 @@ </software> <software name="texttile"> + <!-- + Origin: TOSEC + <rom name="TextTiles v1 (1992)(Philips)(US)[!].iso" size="338899680" crc="1128ceac" md5="e3a6f9ec5d9c8a2affd7ec7dbe693155"/> + <rom name="TextTiles v1 (1992)(Philips)(US)[!].cue" size="124" crc="5b1e7321" md5="32286350ced6beb02e678cfceb9bd03d"/> + --> <description>TextTiles v1 (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -2024,6 +2925,16 @@ </software> <software name="tparad" supported="no"> + <!-- + Origin: TOSEC + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 1 of 2)[!][The Game][DVC].iso" size="737528400" crc="40ea9f1d" md5="b4c320f607d0d508efb5078ff874c2cd"/> + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 1 of 2)[!][The Game][DVC].cue" size="159" crc="117c406d" md5="90f9e7dc5a905c8f583ca1558c7808b0"/> + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 2 of 2)(Track 1 of 4)[!][The Episode][DVC].iso" size="7938000" crc="b9b92407" md5="9a6d999195010590f6133d9aba254c07"/> + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 2 of 2)(Track 2 of 4)[!][The Episode][DVC].iso" size="1587600" crc="8840413a" md5="86531540b54f4aa10176cd2cceae63b9"/> + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 2 of 2)(Track 3 of 4)[!][The Episode][DVC].iso" size="1411200" crc="9e1762b7" md5="1761f2aa42df745b7a816a61e7cb0050"/> + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 2 of 2)(Track 4 of 4)[!][The Episode][DVC].iso" size="705282480" crc="1783c937" md5="13e4ddceb72920dfdf48f12be9056bbe"/> + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 2 of 2)[!][The Episode][DVC].cue" size="698" crc="225a39e2" md5="abdc4a2bbff5b70609891725081456d7"/> + --> <description>Thunder in Paradise (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -2043,6 +2954,16 @@ </software> <software name="tparadu" cloneof="tparad" supported="no"> + <!-- + Origin: TOSEC + <rom name="Thunder in Paradise (1995)(Philips)(US)(Disc 1 of 2)[!][The Game][DVC].iso" size="737881200" crc="f44fefca" md5="48f76261ed0c6d89a229ad6888ce631e"/> + <rom name="Thunder in Paradise (1995)(Philips)(US)(Disc 1 of 2)[!][The Game][DVC].cue" size="159" crc="1aa1c2d7" md5="e717d1f0a2870d23a78e656b5d7dbf06"/> + <rom name="Thunder in Paradise (1995)(Philips)(US)(Disc 2 of 2)(Track 1 of 4)[!][The Episode][DVC].iso" size="7761600" crc="a1594454" md5="daf18ae63970a4ac45cd80bebb263581"/> + <rom name="Thunder in Paradise (1995)(Philips)(US)(Disc 2 of 2)(Track 2 of 4)[!][The Episode][DVC].iso" size="1415904" crc="31a22ce3" md5="caad91b46ed185190920a37d0355967a"/> + <rom name="Thunder in Paradise (1995)(Philips)(US)(Disc 2 of 2)(Track 3 of 4)[!][The Episode][DVC].iso" size="1415904" crc="c754e02b" md5="fdb50208bc10c168cc871f285d943f50"/> + <rom name="Thunder in Paradise (1995)(Philips)(US)(Disc 2 of 2)(Track 4 of 4)[!][The Episode][DVC].iso" size="709857120" crc="a448c8ba" md5="6387a95a6b0cb3e82b5838b20d1e585f"/> + <rom name="Thunder in Paradise (1995)(Philips)(US)(Disc 2 of 2)[!][The Episode][DVC].cue" size="698" crc="816a1a0c" md5="a1935ebbd3eb453e2a129d88c289c59d"/> + --> <description>Thunder in Paradise (USA)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -2062,6 +2983,16 @@ </software> <software name="tparadg" cloneof="tparad" supported="no"> + <!-- + Origin: TOSEC + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 2 of 2)(Track 1 of 4)[!][The Episode][DVC].iso" size="7938000" crc="b9b92407" md5="9a6d999195010590f6133d9aba254c07"/> + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 2 of 2)(Track 2 of 4)[!][The Episode][DVC].iso" size="1587600" crc="8840413a" md5="86531540b54f4aa10176cd2cceae63b9"/> + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 2 of 2)(Track 3 of 4)[!][The Episode][DVC].iso" size="1411200" crc="9e1762b7" md5="1761f2aa42df745b7a816a61e7cb0050"/> + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 2 of 2)(Track 4 of 4)[!][The Episode][DVC].iso" size="705282480" crc="1783c937" md5="13e4ddceb72920dfdf48f12be9056bbe"/> + <rom name="Thunder in Paradise (1995)(Philips)(EU)(Disc 2 of 2)[!][The Episode][DVC].cue" size="698" crc="225a39e2" md5="abdc4a2bbff5b70609891725081456d7"/> + <rom name="Thunder in Paradise (1996)(Philips)(DE)(Disc 1 of 2)[Das Spiel][DVC].iso" size="764870400" crc="0c860e3c" md5="9bfdbbad2631d1a58a82aedabea347b5"/> + <rom name="Thunder in Paradise (1996)(Philips)(DE)(Disc 1 of 2)[Das Spiel][DVC].cue" size="157" crc="65cc06ad" md5="a757f65607fb21bce4cac95c62d6986e"/> + --> <description>Thunder in Paradise (Ger)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -2082,6 +3013,11 @@ </software> <software name="noahark"> + <!-- + Origin: TOSEC + <rom name="Ultimate Noah's Ark, The (1994)(Philips)(EU)[!].iso" size="581626080" crc="8d5b0d37" md5="8da882bbc0e800d8d76fdce69a4315f9"/> + <rom name="Ultimate Noah's Ark, The (1994)(Philips)(EU)[!].cue" size="136" crc="62a9e356" md5="77c627fc6b4ef0c3e2ea424aa5e19966"/> + --> <description>The Ultimate Noah's Ark (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -2093,6 +3029,11 @@ </software> <software name="noaharku" cloneof="noahark"> + <!-- + Origin: TOSEC + <rom name="Ultimate Noah's Ark, The (1994)(Philips)(US).iso" size="581978880" crc="4f6a4978" md5="7ea2a062e1c037c6cd4ad0fca8a830d3"/> + <rom name="Ultimate Noah's Ark, The (1994)(Philips)(US).cue" size="133" crc="483d363f" md5="afb9d0106bdbe29c6863bcf61a8fc092"/> + --> <description>The Ultimate Noah's Ark (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -2104,6 +3045,11 @@ </software> <software name="ultracdi" supported="no"> + <!-- + Origin: TOSEC + <rom name="Ultra CD-i Soccer (1997)(Philips)(EU)[DVC].iso" size="18522000" crc="cd1bf857" md5="f78e506c613d249329ff65fc9dcfd3b0"/> + <rom name="Ultra CD-i Soccer (1997)(Philips)(EU)[DVC].cue" size="131" crc="4deaf83e" md5="11746e2a93744feed71fd662d80e9897"/> + --> <description>Ultra CD-i Soccer (Euro)[DVC]</description> <year>1997</year> <publisher>Philips</publisher> @@ -2116,9 +3062,15 @@ </software> <software name="vegasgrl"> - <description>Vegas Girls (Euro)[access code 1234]</description> + <!-- + Origin: TOSEC + <rom name="Vegas Girls (1995)(Status)(EU)[adult, access code 1234].iso" size="584413200" crc="4075ee3e" md5="7781d0ca9fc690d4121a3720fc58f385"/> + <rom name="Vegas Girls (1995)(Status)(EU)[adult, access code 1234].cue" size="144" crc="d0273f19" md5="e11c1ae9d15d75afd0788a645bcdf280"/> + --> + <description>Vegas Girls (Euro)</description> <year>1995</year> <publisher>Status</publisher> + <info name="usage" value="Access code 1234" /> <part name="cdrom" interface="cdi_cdrom"> <diskarea name="cdrom"> <disk name="vegas girls (1995)(status)(eu)[adult, access code 1234]" sha1="bd613b4be11eaa6104c69947b2c6b1e52083d82c"/> @@ -2127,6 +3079,11 @@ </software> <software name="videogp"> + <!-- + Origin: TOSEC + <rom name="Video Grand Prix Speedway (1993)(Philips)(FR).iso" size="662374944" crc="63dae044" md5="f0fa8f517b7a361c57c51a0e14408f41"/> + <rom name="Video Grand Prix Speedway (1993)(Philips)(FR).cue" size="134" crc="99e4e08c" md5="1bb8bc2d1d49066e7009599960f599f9"/> + --> <description>Video Grand Prix Speedway (Fra)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2138,6 +3095,11 @@ </software> <software name="videospd"> + <!-- + Origin: TOSEC + <rom name="Video Speedway - The Ultimate Racing Experience (1993)(Philips)(EU)[!].iso" size="648531072" crc="8ae682ba" md5="5de8062543fced40a607e457b17904e4"/> + <rom name="Video Speedway - The Ultimate Racing Experience (1993)(Philips)(EU)[!].cue" size="159" crc="695acc27" md5="406edd59a59e080884caa020518228bf"/> + --> <description>Video Speedway - The Ultimate Racing Experience (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2149,6 +3111,11 @@ </software> <software name="videospdu" cloneof="videospd"> + <!-- + Origin: TOSEC + <rom name="Video Speedway - The Ultimate Racing Experience (1993)(Philips)(US).iso" size="648883872" crc="ab34d35e" md5="3b27859d4a13a036b7ab5f2a1d95fcca"/> + <rom name="Video Speedway - The Ultimate Racing Experience (1993)(Philips)(US).cue" size="156" crc="d88bb724" md5="2bcfa7b04ff577244081d222d6a37e22"/> + --> <description>Video Speedway - The Ultimate Racing Experience (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2160,6 +3127,11 @@ </software> <software name="voetbal" supported="no"> + <!-- + Origin: TOSEC + <rom name="Voetbal v1.04 (1994)(Philips)(NL)[DVC].iso" size="766458000" crc="e26ad47f" md5="f4cac8185326c248e510c3bd65496a55"/> + <rom name="Voetbal v1.04 (1994)(Philips)(NL)[DVC].cue" size="127" crc="65c7a8fb" md5="0efca0738e2ab63487ec23bb560701ef"/> + --> <description>Voetbal v1.04 (Ned)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -2172,9 +3144,15 @@ </software> <software name="voyeur"> - <description>Voyeur ...Don't Get Caught (Euro)[access code 3333]</description> + <!-- + Origin: TOSEC + <rom name="Voyeur ...don't get caught (1993)(Philips)(EU)[!][adult, access code 3333].iso" size="787626000" crc="c9641bec" md5="027e110498d6a27329556a659635e6b4"/> + <rom name="Voyeur ...don't get caught (1993)(Philips)(EU)[!][adult, access code 3333].cue" size="163" crc="23776073" md5="a696105b24c7a384f9da25973601243b"/> + --> + <description>Voyeur ...Don't Get Caught (Euro)</description> <year>1993</year> <publisher>Philips</publisher> + <info name="usage" value="Access code 3333" /> <part name="cdrom" interface="cdi_cdrom"> <diskarea name="cdrom"> <disk name="voyeur ...don't get caught (1993)(philips)(eu)[!][adult, access code 3333]" sha1="8f68bab3336b932481bfe0fe7163814d8f528d23"/> @@ -2183,9 +3161,15 @@ </software> <software name="voyeuru" cloneof="voyeur"> - <description>Voyeur ...Don't Get Caught (USA)[access code 3333][11220909 01]</description> + <!-- + Origin: TOSEC + <rom name="Voyeur ...don't get caught (1993)(Philips)(US)[adult, access code 3333][11220909 01].iso" size="787978800" crc="39614b9f" md5="220613e7474033a6096176a4ddab7bdb"/> + <rom name="Voyeur ...don't get caught (1993)(Philips)(US)[adult, access code 3333][11220909 01].cue" size="173" crc="63eafbb8" md5="72702ed8b67228f34821c72c180ee94c"/> + --> + <description>Voyeur ...Don't Get Caught (USA)[11220909 01]</description> <year>1993</year> <publisher>Philips</publisher> + <info name="usage" value="Access code 3333" /> <part name="cdrom" interface="cdi_cdrom"> <diskarea name="cdrom"> <disk name="voyeur ...don't get caught (1993)(philips)(us)[adult, access code 3333][11220909 01]" sha1="755ddaa5c1787a04af329f234bbbe88eb9fca54d"/> @@ -2194,9 +3178,15 @@ </software> <software name="voyeurua" cloneof="voyeur"> - <description>Voyeur ...Don't Get Caught (USA)[access code 3333][11220928 03]</description> + <!-- + Origin: TOSEC + <rom name="Voyeur ...don't get caught (1993)(Philips)(US)[adult, access code 3333][11220928 03].iso" size="788331600" crc="634bf6ee" md5="5c0b71ad35d0f6a503ce3ab9bc414a56"/> + <rom name="Voyeur ...don't get caught (1993)(Philips)(US)[adult, access code 3333][11220928 03].cue" size="173" crc="c79535c1" md5="e4caa5909ee5237c7a4a6d75832382d5"/> + --> + <description>Voyeur ...Don't Get Caught (USA)[11220928 03]</description> <year>1993</year> <publisher>Philips</publisher> + <info name="usage" value="Access code 3333" /> <part name="cdrom" interface="cdi_cdrom"> <diskarea name="cdrom"> <disk name="voyeur ...don't get caught (1993)(philips)(us)[adult, access code 3333][11220928 03]" sha1="807b674c7281f93805944093a240538754493792"/> @@ -2205,9 +3195,15 @@ </software> <software name="voyeurg" cloneof="voyeur"> - <description>Voyeur ...Lass Dich Nicht Erwischen! (Ger)[access code 3333]</description> + <!-- + Origin: TOSEC + <rom name="Voyeur ...lass Dich nicht erwischen! (1995)(Philips)(DE)[!][adult, access code 3333].iso" size="786920400" crc="f334e33a" md5="308ffcce6dee262ae0eeb776dbf70d9b"/> + <rom name="Voyeur ...lass Dich nicht erwischen! (1995)(Philips)(DE)[!][adult, access code 3333].cue" size="173" crc="f7a880e0" md5="3869e369ad7522014e6bacb57743df2e"/> + --> + <description>Voyeur ...Lass Dich Nicht Erwischen! (Ger)</description> <year>1995</year> <publisher>Philips</publisher> + <info name="usage" value="Access code 3333" /> <part name="cdrom" interface="cdi_cdrom"> <diskarea name="cdrom"> <disk name="voyeur ...lass dich nicht erwischen! (1995)(philips)(de)[!][adult, access code 3333]" sha1="5aadbe13fc19a892837bca715a5e38f572aeb762"/> @@ -2216,9 +3212,15 @@ </software> <software name="voyeurf" cloneof="voyeur"> - <description>Voyeur ...Soyez Prudent (Fra)[access code 3333]</description> + <!-- + Origin: TOSEC + <rom name="Voyeur ...soyez prudent (1995)(Philips)(FR)[adult, access code 3333].iso" size="786744000" crc="2829d6cd" md5="3e0c70f0495c76b90c40d2b3fbbda15b"/> + <rom name="Voyeur ...soyez prudent (1995)(Philips)(FR)[adult, access code 3333].cue" size="157" crc="1f4156af" md5="59d9168057de4eace34c247507c4e9de"/> + --> + <description>Voyeur ...Soyez Prudent (Fra)</description> <year>1995</year> <publisher>Philips</publisher> + <info name="usage" value="Access code 3333" /> <part name="cdrom" interface="cdi_cdrom"> <diskarea name="cdrom"> <disk name="voyeur ...soyez prudent (1995)(philips)(fr)[adult, access code 3333]" sha1="9a6abac469376d70ddea3275795ec89a1b2f0e36"/> @@ -2227,6 +3229,11 @@ </software> <software name="wackyglf"> + <!-- + Origin: TOSEC + <rom name="Wacky World of Minature Golf, The - With Eugene Levy (1993)(Philips)(EU).iso" size="753792480" crc="b00e9bbb" md5="291fc7e5874e27e13cd4bd90a8b6a6ff"/> + <rom name="Wacky World of Minature Golf, The - With Eugene Levy (1993)(Philips)(EU).cue" size="161" crc="6159bb9c" md5="cede0576e8da465a4afc81397a8c12e0"/> + --> <description>The Wacky World of Minature Golf - With Eugene Levy (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2238,6 +3245,11 @@ </software> <software name="wackyglfu" cloneof="wackyglf"> + <!-- + Origin: TOSEC + <rom name="Wacky World of Minature Golf, The - With Eugene Levy (1993)(Philips)(US)[!].iso" size="754145280" crc="c37eb424" md5="42ffb8f2608963508a1d93215dcece8f"/> + <rom name="Wacky World of Minature Golf, The - With Eugene Levy (1993)(Philips)(US)[!].cue" size="164" crc="57fdea4d" md5="ff3de2655e10d9fb81efc4028b8829fe"/> + --> <description>The Wacky World of Minature Golf - With Eugene Levy (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2249,6 +3261,11 @@ </software> <software name="whackbub"> + <!-- + Origin: TOSEC + <rom name="Whack a Bubble (1997)(New Frontier)(EU).iso" size="182931504" crc="78b18a68" md5="157ffefc5ba34994ab2c9e671521a964"/> + <rom name="Whack a Bubble (1997)(New Frontier)(EU).cue" size="128" crc="b96d77a7" md5="3f3f7fec80fe4a1928cc0487fe7b14e7"/> + --> <description>Whack a Bubble (Euro)</description> <year>1997</year> <publisher>New Frontier</publisher> @@ -2260,6 +3277,11 @@ </software> <software name="whoshot" supported="no"> + <!-- + Origin: TOSEC + <rom name="Who Shot Johnny Rock (1995)(Philips)(EU)[DVC].iso" size="347649120" crc="15f3ed92" md5="6a4357a8dbfffd33f5f622f2e2813440"/> + <rom name="Who Shot Johnny Rock (1995)(Philips)(EU)[DVC].cue" size="134" crc="5fbe3c7c" md5="dcc2749ec4452768c1d0c74147653ee8"/> + --> <description>Who Shot Johnny Rock (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -2272,6 +3294,11 @@ </software> <software name="whoshotu" cloneof="whoshot" supported="no"> + <!-- + Origin: TOSEC + <rom name="Who Shot Johnny Rock (1995)(Philips)(US)[DVC].iso" size="348001920" crc="dff73cff" md5="7edb61abb311bec170721fcf366191f5"/> + <rom name="Who Shot Johnny Rock (1995)(Philips)(US)[DVC].cue" size="134" crc="46f7fa83" md5="0d4eece1e39b3f799bd9524aa963284a"/> + --> <description>Who Shot Johnny Rock (USA)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -2284,6 +3311,11 @@ </software> <software name="wimbledn"> + <!-- + Origin: TOSEC + <rom name="Wimbledon Challenge - The official Wimbledon quiz game (1993)(Philips)(EU)(M6).iso" size="498506400" crc="5ae8987a" md5="119dc4b578702a79ccba2a02efa464be"/> + <rom name="Wimbledon Challenge - The official Wimbledon quiz game (1993)(Philips)(EU)(M6).cue" size="167" crc="677764a7" md5="5cb77f58c3e5765e8c3bc97585ad44eb"/> + --> <description>Wimbledon Challenge - The Official Wimbledon Quiz Game (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2295,6 +3327,11 @@ </software> <software name="wordplay"> + <!-- + Origin: TOSEC + <rom name="Wordplay (1994)(Philips)(EU).iso" size="539960400" crc="8b1f3dac" md5="ae2d8d34b158d7a94b80f7bddcf8466c"/> + <rom name="Wordplay (1994)(Philips)(EU).cue" size="117" crc="43487bf2" md5="9ca0552c63800ee2ed049e9a7d93d561"/> + --> <description>Wordplay (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -2306,6 +3343,11 @@ </software> <software name="worldglf" supported="no"> + <!-- + Origin: TOSEC + <rom name="World Cup Golf (1995)(Philips)(EU)[!][DVC].iso" size="744231600" crc="1b672a8a" md5="6c1eb9cca72cd7874b8f8282340e78e5"/> + <rom name="World Cup Golf (1995)(Philips)(EU)[!][DVC].cue" size="131" crc="6465e717" md5="3fffb5634d0ba1013f3843ef5fc56358"/> + --> <description>World Cup Golf (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -2318,6 +3360,11 @@ </software> <software name="intdetec" supported="no"> + <!-- + Origin: TOSEC + <rom name="Zaak van Sam, De - Interactieve Detective (1997)(NOB-Interactive)(NL)[DVC].iso" size="691843152" crc="fe875ec5" md5="93bf0e301ed6e62d73cc7d428750c515"/> + <rom name="Zaak van Sam, De - Interactieve Detective (1997)(NOB-Interactive)(NL)[DVC].cue" size="163" crc="ddcb3b18" md5="8bef0498047574bbf644eb32ac3dcb6e"/> + --> <description>De Zaak van Sam - Interactieve Detective (Ned)[DVC]</description> <year>1997</year> <publisher>NOB-Interactive</publisher> @@ -2330,6 +3377,11 @@ </software> <software name="zeldgam"> + <!-- + Origin: TOSEC + <rom name="Zelda - The Wand of Gamelon (1993)(Philips)(EU)[!].iso" size="624484224" crc="fe0a5371" md5="5a5139eab642e51e7c934fc960285240"/> + <rom name="Zelda - The Wand of Gamelon (1993)(Philips)(EU)[!].cue" size="139" crc="3ba3ed50" md5="36df0fd24be9a6c5fb9e468c258727b6"/> + --> <description>Zelda - The Wand of Gamelon (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2341,6 +3393,11 @@ </software> <software name="zeldgamd" cloneof="zeldgam"> + <!-- + Origin: TOSEC + <rom name="Zelda - De toverstaf van Gamelon (1993)(Philips)(NL).iso" size="624479520" crc="373dfd32" md5="fcdf031e90f05d87b4c43b06fdda4aaa"/> + <rom name="Zelda - De toverstaf van Gamelon (1993)(Philips)(NL).cue" size="141" crc="10de4270" md5="6ef52cc3560ad5332ddc2bbc36240813"/> + --> <description>Zelda - De toverstaf van Gamelon (Ned)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2352,6 +3409,11 @@ </software> <software name="zeldgamg" cloneof="zeldgam"> + <!-- + Origin: TOSEC + <rom name="Zelda - Der Zauberstab von Gamelon (1993)(Philips)(DE).iso" size="624479520" crc="b9f12bf8" md5="dd1b03cab0bfaf718eaed5523c368836"/> + <rom name="Zelda - Der Zauberstab von Gamelon (1993)(Philips)(DE).cue" size="143" crc="cf2d59cb" md5="434c2eaa5d87bac3400166ddf6cfc58e"/> + --> <description>Zelda - Der Zauberstab von Gamelon (Ger)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2363,6 +3425,11 @@ </software> <software name="zeldgamf" cloneof="zeldgam"> + <!-- + Origin: TOSEC + <rom name="Zelda - The Wand of Gamelon (1993)(Philips)(FR).iso" size="624479520" crc="1b28af0c" md5="0d0ea2f88d2478f69fdd816573695c83"/> + <rom name="Zelda - The Wand of Gamelon (1993)(Philips)(FR).cue" size="136" crc="ec1856f1" md5="10653a70c87e98b99c9f33aa9d6e9c96"/> + --> <description>Zelda - The Wand of Gamelon (Fra)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2374,6 +3441,11 @@ </software> <software name="zeldgamu" cloneof="zeldgam"> + <!-- + Origin: TOSEC + <rom name="Zelda - The Wand of Gamelon (1993)(Philips)(US).iso" size="624837024" crc="babb1e67" md5="3f8b9b549eee249187e06f5de4b7e91d"/> + <rom name="Zelda - The Wand of Gamelon (1993)(Philips)(US).cue" size="136" crc="a0b7b7e2" md5="9e9cc770bcb8f803a3d1fd80e8956f19"/> + --> <description>Zelda - The Wand of Gamelon (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2385,6 +3457,11 @@ </software> <software name="zeldaadv"> + <!-- + Origin: TOSEC + <rom name="Zelda's Adventure (1995)(Philips)(EU).iso" size="517204800" crc="af26eded" md5="4e9a8db4358c4a6d6e1f3bea18caa881"/> + <rom name="Zelda's Adventure (1995)(Philips)(EU).cue" size="126" crc="ed60fe2e" md5="806ef0853f1bde93339dbc985fc70801"/> + --> <description>Zelda's Adventure (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -2396,6 +3473,11 @@ </software> <software name="zenith"> + <!-- + Origin: TOSEC + <rom name="Zenith (1997)(Philips)(EU).iso" size="37048704" crc="4e4e7300" md5="a5e9d9e3faa528668afa4326a0e81a4c"/> + <rom name="Zenith (1997)(Philips)(EU).cue" size="115" crc="74300fce" md5="8206c66d02cba6bc95601c4f0bbb3514"/> + --> <description>Zenith (Euro)</description> <year>1997</year> <publisher>Philips</publisher> @@ -2407,6 +3489,11 @@ </software> <software name="zombie"> + <!-- + Origin: TOSEC + <rom name="Zombie Dinos from Planet Zeltoid (1992)(Philips)(EU).iso" size="802149600" crc="61d67d51" md5="b8a68a30802f7f99660f939f82ba1426"/> + <rom name="Zombie Dinos from Planet Zeltoid (1992)(Philips)(EU).cue" size="141" crc="04356058" md5="7e7bd9e312788ea5c65da7dfd6a4ca65"/> + --> <description>Zombie Dinos from Planet Zeltoid (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -2418,6 +3505,11 @@ </software> <software name="zombief" cloneof="zombie"> + <!-- + Origin: TOSEC + <rom name="Zombie Dinos de la Planete Zeltoide (1993)(Philips)(FR).iso" size="788178720" crc="829aa89e" md5="b3290801655a61be409d85a5f3cea429"/> + <rom name="Zombie Dinos de la Planete Zeltoide (1993)(Philips)(FR).cue" size="144" crc="abf54d5a" md5="f8bec83cf2ecf683c9e38bbf5f4d877c"/> + --> <description>Zombie Dinos de la Planete Zeltoide (Fra)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2429,6 +3521,11 @@ </software> <software name="zombieu" cloneof="zombie"> + <!-- + Origin: TOSEC + <rom name="Zombie Dinos from Planet Zeltoid (1992)(Philips)(US)[!].iso" size="787049760" crc="48dc0cda" md5="80c8360de7f0c91b859312a035f508c5"/> + <rom name="Zombie Dinos from Planet Zeltoid (1992)(Philips)(US)[!].cue" size="144" crc="cd0b4c5f" md5="ba08fb9b7d3fdb245072eb9ab01db903"/> + --> <description>Zombie Dinos from Planet Zeltoid (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -2440,6 +3537,11 @@ </software> <software name="zombied" cloneof="zombie"> + <!-- + Origin: TOSEC + <rom name="Zombie Dinos van de Planeet Zeltoid (1993)(Philips)(NL).iso" size="787802400" crc="c255ba7c" md5="cfd7aba798598f21d8e3f8d2a6444185"/> + <rom name="Zombie Dinos van de Planeet Zeltoid (1993)(Philips)(NL).cue" size="144" crc="20b64d8a" md5="abf9c60693519f0bb7478b3b0039c732"/> + --> <description>Zombie Dinos van de Planeet Zeltoid (Ned)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2451,6 +3553,11 @@ </software> <software name="zombieg" cloneof="zombie"> + <!-- + Origin: TOSEC + <rom name="Zombie Dinos vom Planeten Zeltoid (1994)(Philips)(DE)[!].iso" size="787237920" crc="ab81812c" md5="d1e33b8b3f6695fe78b628edd3af3cfe"/> + <rom name="Zombie Dinos vom Planeten Zeltoid (1994)(Philips)(DE)[!].cue" size="145" crc="9c451673" md5="625933ca0058d98442463e7dfd09859c"/> + --> <description>Zombie Dinos vom Planeten Zeltoid (Ger)</description> <year>1994</year> <publisher>Philips</publisher> @@ -2465,6 +3572,11 @@ <!-- Non-games (multimedia, educational etc.) --> <software name="1995anv" supported="no"> + <!-- + Origin: TOSEC + <rom name="1995 - All the News and Views (1995)(Philips)(EU)[!][DVC].iso" size="663092304" crc="76edd8db" md5="1a4432e7acbb1a6d856bbe21a1105dc6"/> + <rom name="1995 - All the News and Views (1995)(Philips)(EU)[!][DVC].cue" size="146" crc="019b1a22" md5="33bb25df4dd1855723a62eb3cbbdce8d"/> + --> <description>1995 - All the News and Views (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -2477,6 +3589,11 @@ </software> <software name="achildo" cloneof="achild"> + <!-- + Origin: TOSEC + <rom name="A Child is Born v1.0 (1993)(Philips)(EU).iso" size="615400800" crc="e0bc8efa" md5="cfa6536231f449241ff2987455f85b6a"/> + <rom name="A Child is Born v1.0 (1993)(Philips)(EU).cue" size="129" crc="f4123da4" md5="8ec9aaf8530efbd4503596e5459ca1a0"/> + --> <description>A Child is Born v1.0 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2488,6 +3605,11 @@ </software> <software name="achild"> + <!-- + Origin: TOSEC + <rom name="A Child is Born v1.0 (1994)(Philips)(US).iso" size="615753600" crc="321b3d44" md5="86f59239e31de4091eac4afb6c181c83"/> + <rom name="A Child is Born v1.0 (1994)(Philips)(US).cue" size="129" crc="65c29211" md5="d140a192f61b1dddd352dc696af055d8"/> + --> <description>A Child is Born v1.0 (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -2499,6 +3621,12 @@ </software> <software name="parktour"> + <!-- + Origin: TOSEC + <rom name="A National Parks Tour (1992)(Philips)(US)(Track 1 of 2)[!].iso" size="493743600" crc="06298e77" md5="a3bd84e191fb33d0820f71d4485658be"/> + <rom name="A National Parks Tour (1992)(Philips)(US)(Track 2 of 2)[!].wav" size="250664444" crc="17d052fd" md5="79349eb98c09c8e01f8f8fbe6150af42"/> + <rom name="A National Parks Tour (1992)(Philips)(US)[!].cue" size="285" crc="5fa91543" md5="020251724b0239720fa5ffa7361f8bb8"/> + --> <description>A National Parks Tour (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -2510,6 +3638,11 @@ </software> <software name="nightnyl" supported="no"> + <!-- + Origin: TOSEC + <rom name="A Night in Nylon City (1995)(ICDI - Sofidoc)(EU)[DVC].iso" size="594115200" crc="aff7bfad" md5="e4d0735688cde2117250bb3769028d0b"/> + <rom name="A Night in Nylon City (1995)(ICDI - Sofidoc)(EU)[DVC].cue" size="142" crc="c6f02fcb" md5="6d19080f00339b0d6ab0832ce0758924"/> + --> <description>A Night in Nylon City (Euro)[DVC]</description> <year>1995</year> <publisher>ICDI ~ Sofidoc</publisher> @@ -2522,6 +3655,11 @@ </software> <software name="sesamel"> + <!-- + Origin: TOSEC + <rom name="A Visit To Sesame Street - Letters (1992)(Philips)(EU-US)[!].iso" size="673448160" crc="256c2a7b" md5="2a04c233ffa967fadfd7010bb0b5e10a"/> + <rom name="A Visit To Sesame Street - Letters (1992)(Philips)(EU-US)[!].cue" size="149" crc="188edd6c" md5="08770b305623e0c5908f8eb821dda6e9"/> + --> <description>A Visit To Sesame Street - Letters (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -2533,6 +3671,11 @@ </software> <software name="sesamen"> + <!-- + Origin: TOSEC + <rom name="A Visit To Sesame Street - Numbers (1991)(Philips)(US)[!][3106900632 01].iso" size="621186720" crc="4f10b161" md5="e5756a5e91f7cafa8edfe869336f13ed"/> + <rom name="A Visit To Sesame Street - Numbers (1991)(Philips)(US)[!][3106900632 01].cue" size="161" crc="ca9c1fe8" md5="3d99429387a5845e36c5c37e4f6eca1f"/> + --> <description>A Visit To Sesame Street - Numbers (USA)[3106900632 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -2544,6 +3687,11 @@ </software> <software name="sesamena"> + <!-- + Origin: TOSEC + <rom name="A Visit To Sesame Street - Numbers (1992)(Philips)(US)[3106900192 50239 141 01].iso" size="621186720" crc="5a292995" md5="7f1dac8342d80f3f0848b29b26aed859"/> + <rom name="A Visit To Sesame Street - Numbers (1992)(Philips)(US)[3106900192 50239 141 01].cue" size="168" crc="127575fe" md5="5124ed757fb9a4365a9be07ddd36659d"/> + --> <description>A Visit To Sesame Street - Numbers (USA)[3106900192 50239 141 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -2555,6 +3703,11 @@ </software> <software name="valpuebl"> + <!-- + Origin: TOSEC + <rom name="A Visit to the Valley of Puebla and the Amparo Museum (1992)(Philips)(US)[!].iso" size="553684320" crc="60435e6b" md5="4050ef85631489fea44010d68af203fb"/> + <rom name="A Visit to the Valley of Puebla and the Amparo Museum (1992)(Philips)(US)[!].cue" size="165" crc="8ef64c04" md5="9abaab7ae0449edf90d0b6888201f251"/> + --> <description>A Visit to the Valley of Puebla and the Amparo Museum (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -2566,6 +3719,11 @@ </software> <software name="ach0104g" supported="no"> + <!-- + Origin: TOSEC + <rom name="Accent Health - Information for Healthy Living - January 2004 - General CDi 1-04 (2004)(CNN)(US)[DVC].iso" size="645275904" crc="33bb3215" md5="fe00a0a69b2a76272065fa71881afd25"/> + <rom name="Accent Health - Information for Healthy Living - January 2004 - General CDi 1-04 (2004)(CNN)(US)[DVC].cue" size="190" crc="0648f046" md5="c1cd30670de98e93ab5b0d48816f8797"/> + --> <description>Accent Health - Information for Healthy Living - January 2004 - General CDi 1-04 (USA)[DVC]</description> <year>2004</year> <publisher>CNN</publisher> @@ -2578,6 +3736,11 @@ </software> <software name="ach1104s" supported="no"> + <!-- + Origin: TOSEC + <rom name="Accent Health - Information for Healthy Living - November 2004 - 50 + Silver CDi 1104 (2004)(CNN)(US)[DVC].iso" size="622520304" crc="5363bc00" md5="7ed29523018a53c055c8d4baebce7ec5"/> + <rom name="Accent Health - Information for Healthy Living - November 2004 - 50 + Silver CDi 1104 (2004)(CNN)(US)[DVC].cue" size="195" crc="2474ed9f" md5="c13b9e73859ca4fabec8c8622875d6f8"/> + --> <description>Accent Health - Information for Healthy Living - November 2004 - 50 + Silver CDi 1104 (USA)[DVC]</description> <year>2004</year> <publisher>CNN</publisher> @@ -2590,6 +3753,11 @@ </software> <software name="ach1104g" supported="no"> + <!-- + Origin: TOSEC + <rom name="Accent Health - Information for Healthy Living - November 2004 - General CDi 11-04 (2004)(CNN)(US)[DVC].iso" size="609643104" crc="4b5fd9ec" md5="ef32feccb82f7764b54701113baa42b7"/> + <rom name="Accent Health - Information for Healthy Living - November 2004 - General CDi 11-04 (2004)(CNN)(US)[DVC].cue" size="192" crc="c6b7b5df" md5="0803ab44b9f3d94593cd2011275bfd08"/> + --> <description>Accent Health - Information for Healthy Living - November 2004 - General CDi 11-04 (USA)[DVC]</description> <year>2004</year> <publisher>CNN</publisher> @@ -2602,6 +3770,11 @@ </software> <software name="ach1004g" supported="no"> + <!-- + Origin: TOSEC + <rom name="Accent Health - Information for Healthy Living - October 2004 - General CDi 10-04 (2004)(CNN)(US)[DVC].iso" size="616699104" crc="558d0e4e" md5="93c7719c4cfd5de2fc3e479bdc461f9f"/> + <rom name="Accent Health - Information for Healthy Living - October 2004 - General CDi 10-04 (2004)(CNN)(US)[DVC].cue" size="191" crc="cbe56100" md5="070cf94e5a6cb66c032eb1329dd3bf6d"/> + --> <description>Accent Health - Information for Healthy Living - October 2004 - General CDi 10-04 (USA)[DVC]</description> <year>2004</year> <publisher>CNN</publisher> @@ -2614,6 +3787,11 @@ </software> <software name="actcollg"> + <!-- + Origin: TOSEC + <rom name="ACT College Search (1992)(Philips)(US).iso" size="627348960" crc="f9f5ed18" md5="85e813d1d3023d3a549f36a89652f567"/> + <rom name="ACT College Search (1992)(Philips)(US).cue" size="127" crc="b20c8658" md5="0cf398518999758e08e0100e2fbd0b39"/> + --> <description>ACT College Search (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -2625,6 +3803,11 @@ </software> <software name="adiasce1"> + <!-- + Origin: TOSEC + <rom name="ADI Accompagnement Scolaire - Francais-Maths CE1 (1994)(Coktel Vision)(FR).iso" size="629973792" crc="cd4e03c7" md5="d8057404766a85dfc89dd35733efd1c0"/> + <rom name="ADI Accompagnement Scolaire - Francais-Maths CE1 (1994)(Coktel Vision)(FR).cue" size="163" crc="a2059838" md5="b2d9219dcd518f1af072b862c0210c76"/> + --> <description>ADI Accompagnement Scolaire - Français-Maths CE1 (Fra)</description> <year>1994</year> <publisher>Coktel Vision</publisher> @@ -2636,6 +3819,11 @@ </software> <software name="adiasce2"> + <!-- + Origin: TOSEC + <rom name="ADI Accompagnement Scolaire - Francais-Maths CE2 (1994)(Coktel Vision)(FR).iso" size="629973792" crc="ee58dd77" md5="bc2c8ef63eccc4d6a4f7a4951047381a"/> + <rom name="ADI Accompagnement Scolaire - Francais-Maths CE2 (1994)(Coktel Vision)(FR).cue" size="163" crc="8f73dae5" md5="557da55cf4f373b42bc4c4ff80d9d50a"/> + --> <description>ADI Accompagnement Scolaire - Français-Maths CE2 (Fra)</description> <year>1994</year> <publisher>Coktel Vision</publisher> @@ -2647,6 +3835,11 @@ </software> <software name="adiascm1"> + <!-- + Origin: TOSEC + <rom name="ADI Accompagnement Scolaire - Francais-Maths CM1 (1994)(Coktel Vision)(FR).iso" size="558472992" crc="cfe472c2" md5="c4182bc2b50c07fbf0e4d0ee178115d2"/> + <rom name="ADI Accompagnement Scolaire - Francais-Maths CM1 (1994)(Coktel Vision)(FR).cue" size="163" crc="71bcd233" md5="27a62218ffd5350cf754b75c584b8c54"/> + --> <description>ADI Accompagnement Scolaire - Français-Maths CM1 (Fra)</description> <year>1994</year> <publisher>Coktel Vision</publisher> @@ -2658,6 +3851,11 @@ </software> <software name="adiascm2"> + <!-- + Origin: TOSEC + <rom name="ADI Accompagnement Scolaire - Francais-Maths CM2 (1994)(Coktel Vision)(FR).iso" size="558472992" crc="01c11339" md5="4f6cf73abfd91807f97531a7f9e97acb"/> + <rom name="ADI Accompagnement Scolaire - Francais-Maths CM2 (1994)(Coktel Vision)(FR).cue" size="163" crc="5cca90ee" md5="898dafdd85b900dc8a6c51f3ce75f63e"/> + --> <description>ADI Accompagnement Scolaire - Français-Maths CM2 (Fra)</description> <year>1994</year> <publisher>Coktel Vision</publisher> @@ -2669,6 +3867,11 @@ </software> <software name="aidsawar"> + <!-- + Origin: TOSEC + <rom name="AIDS Awareness (1994)(Multimedia Software)(US).iso" size="227026800" crc="c89bdeae" md5="ab43f583f74c33a196155206ce4f3a68"/> + <rom name="AIDS Awareness (1994)(Multimedia Software)(US).cue" size="135" crc="2b9e8f82" md5="38ffd63c11a8beda6678b323daaefc96"/> + --> <description>AIDS Awareness (USA)</description> <year>1994</year> <publisher>Multimedia Software</publisher> @@ -2680,6 +3883,11 @@ </software> <software name="aimsbird" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - A First Look at Birds (1995)(AIMS Multimedia)(US)[DVC].iso" size="194040000" crc="d05f2deb" md5="3d4a6b48de44bf6e1a9a72142fba9298"/> + <rom name="AIMS - A First Look at Birds (1995)(AIMS Multimedia)(US)[DVC].cue" size="150" crc="4b8ad760" md5="c51359888b926cfe81c460f300c641f7"/> + --> <description>AIMS - A First Look at Birds [DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2692,6 +3900,11 @@ </software> <software name="aimsmaml" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - A First Look at Mammals (1995)(AIMS Multimedia)(US)[DVC].iso" size="191570400" crc="10f4fa2c" md5="8c76e9bc604a2862dd20aab9e05050c4"/> + <rom name="AIMS - A First Look at Mammals (1995)(AIMS Multimedia)(US)[DVC].cue" size="152" crc="33e5cf6b" md5="fb189111a1b2ae785f93f759bb7994a0"/> + --> <description>AIMS - A First Look at Mammals (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2704,6 +3917,11 @@ </software> <software name="aimstree" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - A First Look at Trees (1995)(AIMS Multimedia)(US)[DVC].iso" size="182221200" crc="76ff33da" md5="cc5e004220590f7c474cf9611db5e0c3"/> + <rom name="AIMS - A First Look at Trees (1995)(AIMS Multimedia)(US)[DVC].cue" size="150" crc="cc672f40" md5="521511efc5ab82738042abf651c2ce9b"/> + --> <description>AIMS - A First Look at Trees (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2716,6 +3934,11 @@ </software> <software name="aimsanim" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Animal Communities (1995)(AIMS Multimedia)(US)[DVC].iso" size="204094800" crc="a4477b82" md5="f30aa32f1e193222ea178a943e82f958"/> + <rom name="AIMS - Animal Communities (1995)(AIMS Multimedia)(US)[DVC].cue" size="147" crc="c439dc7b" md5="59f53be08a64d9a442244fdf96613033"/> + --> <description>AIMS - Animal Communities (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2728,6 +3951,11 @@ </software> <software name="aimstide" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Animal Life in a Tidepool (1995)(AIMS Multimedia)(US)[DVC].iso" size="180633600" crc="20a9e660" md5="c291451a953e243cc2481776e966b147"/> + <rom name="AIMS - Animal Life in a Tidepool (1995)(AIMS Multimedia)(US)[DVC].cue" size="154" crc="72233411" md5="d2ccdab142e099709e4ccb4edeb5aee3"/> + --> <description>AIMS - Animal Life in a Tidepool (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2740,6 +3968,11 @@ </software> <software name="aimsbeav" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Beavers and How they Live (1995)(AIMS Multimedia)(US)[DVC].iso" size="237787200" crc="4f005d3e" md5="f71389482b336a11a52e7bfd1dc6f636"/> + <rom name="AIMS - Beavers and How they Live (1995)(AIMS Multimedia)(US)[DVC].cue" size="154" crc="34feb957" md5="623fa30e0825c0078ac33a00b5de497d"/> + --> <description>AIMS - Beavers and How they Live (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2752,6 +3985,11 @@ </software> <software name="aimsbees" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Bees and How they Live (1995)(AIMS Multimedia)(US)[DVC].iso" size="219265200" crc="9be3b9e0" md5="0ac966530320465c29316859fd1d7af2"/> + <rom name="AIMS - Bees and How they Live (1995)(AIMS Multimedia)(US)[DVC].cue" size="151" crc="1055149a" md5="94e8ab1abbe9cbe2031c76b6f0c73ce0"/> + --> <description>AIMS - Bees and How they Live (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2764,6 +4002,11 @@ </software> <software name="aimsecos" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Ecosystems - Nature in Balance (1995)(AIMS Multimedia)(US)[DVC].iso" size="187866000" crc="bdfa07c4" md5="666feecdb84a21ba4b3c137ff892a749"/> + <rom name="AIMS - Ecosystems - Nature in Balance (1995)(AIMS Multimedia)(US)[DVC].cue" size="159" crc="9a3d74d0" md5="84bb129ae60af161945acd4241f28cf8"/> + --> <description>AIMS - Ecosystems - Nature in Balance (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2776,6 +4019,11 @@ </software> <software name="aimsevol" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Evolution - Change Through Natural Selection (1995)(AIMS Multimedia)(US)[DVC].iso" size="228438000" crc="865808ee" md5="edc0c6e9d29d4dbb726c58e201a3876f"/> + <rom name="AIMS - Evolution - Change Through Natural Selection (1995)(AIMS Multimedia)(US)[DVC].cue" size="173" crc="895e8b80" md5="83d1e602e2242cabf1f1fdc642741b02"/> + --> <description>AIMS - Evolution - Change Through Natural Selection (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2788,6 +4036,11 @@ </software> <software name="aimsexpl" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Exploring our Solar System (1995)(AIMS Multimedia)(US)[DVC].iso" size="244666800" crc="2fb4f799" md5="440be3895d8c90e96b278320ee92a8f0"/> + <rom name="AIMS - Exploring our Solar System (1995)(AIMS Multimedia)(US)[DVC].cue" size="155" crc="ac23a74c" md5="801a4f8a28168d8e5731ba60cb19ef55"/> + --> <description>AIMS - Exploring our Solar System (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2800,6 +4053,11 @@ </software> <software name="aimsfrog" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Frogs and How they Live (1995)(AIMS Multimedia)(US)[DVC].iso" size="200743200" crc="dabff4bf" md5="ea2208b47ed9a9e1b7b640cebf0ed440"/> + <rom name="AIMS - Frogs and How they Live (1995)(AIMS Multimedia)(US)[DVC].cue" size="152" crc="3eabe7b2" md5="c7dc1410e23c90531417e9887bfad014"/> + --> <description>AIMS - Frogs and How they Live (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2812,6 +4070,11 @@ </software> <software name="aimssurv" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - How Animals Survive (1995)(AIMS Multimedia)(US)[DVC].iso" size="219441600" crc="22d7064a" md5="7881f0f96cad4c10eb177025bc294461"/> + <rom name="AIMS - How Animals Survive (1995)(AIMS Multimedia)(US)[DVC].cue" size="148" crc="c1944ad3" md5="c615c57b3b4e0e307da72460287b4381"/> + --> <description>AIMS - How Animals Survive (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2824,6 +4087,11 @@ </software> <software name="aimsclas" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - How we Classify Animals (1995)(AIMS Multimedia)(US)[DVC].iso" size="208328400" crc="023295df" md5="b079d804b02f4a4e1917558698cbe859"/> + <rom name="AIMS - How we Classify Animals (1995)(AIMS Multimedia)(US)[DVC].cue" size="152" crc="ef415601" md5="a970cfc4fb0ad42a923cd515bc8d2551"/> + --> <description>AIMS - How we Classify Animals (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2836,6 +4104,11 @@ </software> <software name="aimsinse" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Insects Reproduction and Metamorphosis (1995)(AIMS Multimedia)(US)[DVC].iso" size="255780000" crc="4fdb3c0c" md5="74f89c427bd35b61625acfac9569fc7f"/> + <rom name="AIMS - Insects Reproduction and Metamorphosis (1995)(AIMS Multimedia)(US)[DVC].cue" size="167" crc="91542912" md5="fee979a3ddadb016d8e4989aa893232a"/> + --> <description>AIMS - Insects Reproduction and Metamorphosis (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2848,6 +4121,11 @@ </software> <software name="aimsecol" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Learning About Ecology (1995)(AIMS Multimedia)(US)[DVC].iso" size="191394000" crc="c83aeb9c" md5="5079096e9e91691a99ddaaf86f5c9c3e"/> + <rom name="AIMS - Learning About Ecology (1995)(AIMS Multimedia)(US)[DVC].cue" size="151" crc="a3497726" md5="0c9de34c3f034ba8df5998c282912249"/> + --> <description>AIMS - Learning About Ecology (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2860,6 +4138,11 @@ </software> <software name="aimstemp" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Temperature, Pressure and Humidity (1995)(AIMS Multimedia)(US)[DVC].iso" size="199332000" crc="f5fa6118" md5="dfecf601128f32ac77e09756b48f47b7"/> + <rom name="AIMS - Temperature, Pressure and Humidity (1995)(AIMS Multimedia)(US)[DVC].cue" size="163" crc="5de93e5c" md5="1855045d37670cd5b4fe5e3725650170"/> + --> <description>AIMS - Temperature, Pressure and Humidity (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2872,6 +4155,11 @@ </software> <software name="aims4yw" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - The Civil War - Four Years of War and it's Aftermath (1995)(AIMS Multimedia)(US)[DVC].iso" size="277124400" crc="f0b3c3a8" md5="19e74ac00be19442e282a2e678ba45c5"/> + <rom name="AIMS - The Civil War - Four Years of War and it's Aftermath (1995)(AIMS Multimedia)(US)[DVC].cue" size="181" crc="875b333f" md5="8c5b691f8038148246ba35d473f6f3f3"/> + --> <description>AIMS - The Civil War - Four Years of War and its Aftermath (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2884,6 +4172,11 @@ </software> <software name="aimswarb" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - The Civil War - The South Secedes and War Begins (1995)(AIMS Multimedia)(US)[DVC].iso" size="247665600" crc="4a0ce200" md5="b7cedbe01d83aa7445d6e55d48f0c8e1"/> + <rom name="AIMS - The Civil War - The South Secedes and War Begins (1995)(AIMS Multimedia)(US)[DVC].cue" size="177" crc="e62aa55e" md5="7fed34eb5574b0fa1d61b139c5f00472"/> + --> <description>AIMS - The Civil War - The South Secedes and War Begins (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2896,6 +4189,11 @@ </software> <software name="aimswind" supported="no"> + <!-- + Origin: TOSEC + <rom name="AIMS - Winds, Fronts and Storms (1995)(AIMS Multimedia)(US)[DVC].iso" size="221029200" crc="7c079fd5" md5="a344e896e02c83643e6adef08d5c49ec"/> + <rom name="AIMS - Winds, Fronts and Storms (1995)(AIMS Multimedia)(US)[DVC].cue" size="153" crc="1f91383f" md5="8bd9e03fd4faf601542c38e37ad4749e"/> + --> <description>AIMS - Winds, Fronts and Storms (USA)[DVC]</description> <year>1995</year> <publisher>AIMS Multimedia</publisher> @@ -2908,6 +4206,11 @@ </software> <software name="funfair"> + <!-- + Origin: TOSEC + <rom name="All the Fun of the Fair - Engels voor kinderen (1993)(Philips)(NL)[!].iso" size="733993344" crc="9119f710" md5="a8cda264951a93d08c102ad2dcc07198"/> + <rom name="All the Fun of the Fair - Engels voor kinderen (1993)(Philips)(NL)[!].cue" size="158" crc="1315a095" md5="5fb507aae3a3f99df0f1195583476f72"/> + --> <description>All the Fun of the Fair - Engels voor kinderen (Ned)</description> <year>1993</year> <publisher>Philips</publisher> @@ -2919,6 +4222,11 @@ </software> <software name="allesovr"> + <!-- + Origin: TOSEC + <rom name="Alles over CD-i - Apr-Mei 1995 (1995)(Philips)(NL).iso" size="566954304" crc="f9fb32c9" md5="f342bceebc4c9161f3bbe9eb87fa3e69"/> + <rom name="Alles over CD-i - Apr-Mei 1995 (1995)(Philips)(NL).cue" size="139" crc="d58764d1" md5="d14093cb6f40b1bc1903d9a7f97b2396"/> + --> <description>Alles over CD-i - Apr-Mei 1995 (Ned)</description> <year>1995</year> <publisher>Philips</publisher> @@ -2930,6 +4238,11 @@ </software> <software name="allesovro" cloneof="allesovr"> + <!-- + Origin: TOSEC + <rom name="Alles over CD-i - Aug-Sep 1994 (1994)(Philips)(NL)[!].iso" size="544375104" crc="2e5f49df" md5="348be59f585bf1187c9d052ce141e6be"/> + <rom name="Alles over CD-i - Aug-Sep 1994 (1994)(Philips)(NL)[!].cue" size="142" crc="9c67b6a4" md5="aaac47604919c45c22715f767ce96c1b"/> + --> <description>Alles over CD-i - Aug-Sep 1994 (Ned)</description> <year>1994</year> <publisher>Philips</publisher> @@ -2941,6 +4254,11 @@ </software> <software name="amstrdam"> + <!-- + Origin: TOSEC + <rom name="Amsterdamse Effectenbeurs Interactief, De (1996)(Philips)(NL).iso" size="328456800" crc="77adcb70" md5="6d9eb80fc57d40d9f3e47f41af7cac98"/> + <rom name="Amsterdamse Effectenbeurs Interactief, De (1996)(Philips)(NL).cue" size="150" crc="793097ce" md5="d85f4d5dfca616cf931501818b1aa135"/> + --> <description>De Amsterdamse Effectenbeurs Interactief (Ned)</description> <year>1996</year> <publisher>Philips</publisher> @@ -2952,6 +4270,11 @@ </software> <software name="andrewll" supported="no"> + <!-- + Origin: TOSEC + <rom name="Andrew Lloyd Webber - The Premiere Collection Encore (1993)(Philips - PolyGram)(PAL)(EU)[!][DVC].iso" size="626572800" crc="baa61bed" md5="44e82d69a8101f33c54898f3a0d9ad4a"/> + <rom name="Andrew Lloyd Webber - The Premiere Collection Encore (1993)(Philips - PolyGram)(PAL)(EU)[!][DVC].cue" size="185" crc="4b08709a" md5="e43857c51c69cc0a1ca6272f0aac2503"/> + --> <description>Andrew Lloyd Webber - The Premiere Collection Encore (Euro)[DVC]</description> <year>1993</year> <publisher>Philips ~ PolyGram</publisher> @@ -2964,6 +4287,11 @@ </software> <software name="andrewllu" cloneof="andrewll" supported="no"> + <!-- + Origin: TOSEC + <rom name="Andrew Lloyd Webber - The Premiere Collection Encore (1993)(Philips - PolyGram)(US)[DVC].iso" size="622515600" crc="ab681274" md5="f76f0df0e87f354df52b7f672929af08"/> + <rom name="Andrew Lloyd Webber - The Premiere Collection Encore (1993)(Philips - PolyGram)(US)[DVC].cue" size="177" crc="acdd79ca" md5="f3eb5d4d6c838b831d15dc2fadaa258d"/> + --> <description>Andrew Lloyd Webber - The Premiere Collection Encore (USA)[DVC]</description> <year>1993</year> <publisher>Philips ~ PolyGram</publisher> @@ -2976,6 +4304,11 @@ </software> <software name="annewill"> + <!-- + Origin: TOSEC + <rom name="Anne Willan presents The Food of France (1992)(Philips)(EU).iso" size="618634800" crc="c9d36704" md5="e823103b30822f3e420b62d87d5e310d"/> + <rom name="Anne Willan presents The Food of France (1992)(Philips)(EU).cue" size="148" crc="c64cae3f" md5="8de00d16053d307ce4059053b65b86b9"/> + --> <description>Anne Willan presents The Food of France (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -2987,6 +4320,11 @@ </software> <software name="annewillu" cloneof="annewill"> + <!-- + Origin: TOSEC + <rom name="Anne Willan presents The Food of France (1992)(Philips)(US)[!].iso" size="606286800" crc="638b6975" md5="bdc2746a16cc8b4ba06ed118e4ba07c9"/> + <rom name="Anne Willan presents The Food of France (1992)(Philips)(US)[!].cue" size="151" crc="fc33a260" md5="a441ab5d482100b888e4b130333caec5"/> + --> <description>Anne Willan presents The Food of France (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -2998,6 +4336,11 @@ </software> <software name="aroundat" supported="no"> + <!-- + Origin: TOSEC + <rom name="Around Atlanta - The Olympic City (1996)(Philips)(EU)[DVC].iso" size="634158000" crc="c0506ae4" md5="3989d89ed466e4e7a94e4b12a342dd2d"/> + <rom name="Around Atlanta - The Olympic City (1996)(Philips)(EU)[DVC].cue" size="147" crc="95e65dfb" md5="ff3e5b6517ad491f9c5c96e3d8bc2ce5"/> + --> <description>Around Atlanta - The Olympic City (Euro)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -3010,6 +4353,11 @@ </software> <software name="aroundho"> + <!-- + Origin: TOSEC + <rom name="Around Hollywood - auf den spuren der stars (1995)(Philips)(DE).iso" size="557781504" crc="044dac9b" md5="e4f87676fc996dadf0cefaafcb015e1d"/> + <rom name="Around Hollywood - auf den spuren der stars (1995)(Philips)(DE).cue" size="152" crc="fb138dc8" md5="91cd6d540e24c35eabd1ee0ac26d5458"/> + --> <description>Around Hollywood - auf den spuren der stars (Ger)</description> <year>1995</year> <publisher>Philips</publisher> @@ -3021,6 +4369,11 @@ </software> <software name="artczars"> + <!-- + Origin: TOSEC + <rom name="Art of the Czars, The - St. Petersburg and the Treasures of the Hermitage (1992)(Philips)(EU-US)[!].iso" size="715125600" crc="1fa37178" md5="0aff4bc920d311de3aabc0b5de98789f"/> + <rom name="Art of the Czars, The - St. Petersburg and the Treasures of the Hermitage (1992)(Philips)(EU-US)[!].cue" size="188" crc="f7e2aba6" md5="d878f4717384ac662f388d066a4e3651"/> + --> <description>The Art of the Czars - St. Petersburg and the Treasures of the Hermitage (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -3032,6 +4385,11 @@ </software> <software name="astronom"> + <!-- + Origin: TOSEC + <rom name="Astronomie Flammarion - Etoiles et Galaxies (1994)(Philips)(FR).iso" size="527012640" crc="c6e88f0f" md5="49f222ee0974b289be62b4b96e939039"/> + <rom name="Astronomie Flammarion - Etoiles et Galaxies (1994)(Philips)(FR).cue" size="152" crc="c67751cb" md5="d097a35c3e1d191bc04572908452c550"/> + --> <description>Astronomie Flammarion - Etoiles et Galaxies (Fra)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3043,6 +4401,11 @@ </software> <software name="audiovid"> + <!-- + Origin: TOSEC + <rom name="Audio-Video Products '92-'93 on CD-Interactive v2 (1992)(Philips)(EU).iso" size="686012544" crc="1ad82c61" md5="3012fdbb08f6f1e87c0501910a6fdbe0"/> + <rom name="Audio-Video Products '92-'93 on CD-Interactive v2 (1992)(Philips)(EU).cue" size="158" crc="9c21035d" md5="68a778a9ad8c10088c330b5f1a817796"/> + --> <description>Audio-Video Products '92-'93 on CD-Interactive v2 (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -3054,6 +4417,11 @@ </software> <software name="bandeann"> + <!-- + Origin: TOSEC + <rom name="Bande Annonce, la - automne-hiver 95-96 (1996)(Philips)(FR).iso" size="679492800" crc="c1650dd3" md5="7c5525ea21471bbe2b533b569654bab0"/> + <rom name="Bande Annonce, la - automne-hiver 95-96 (1996)(Philips)(FR).cue" size="148" crc="8b1fcf9a" md5="020b46efe3b6a485f98aafd16364b897"/> + --> <description>La Bande Annonce - Automne-Hiver 95-96 (Fra)</description> <year>1996</year> <publisher>Philips</publisher> @@ -3065,6 +4433,11 @@ </software> <software name="barriors"> + <!-- + Origin: TOSEC + <rom name="barrio mas divertido de Richard Scarry, El (1992)(Philips)(ES).iso" size="243079200" crc="0d83f53b" md5="dc3a95a0835e164002fa13579589f8f8"/> + <rom name="barrio mas divertido de Richard Scarry, El (1992)(Philips)(ES).cue" size="151" crc="80ba556b" md5="a272002ac2332caa56f66520cd98fd97"/> + --> <description>El Barrio Mas Divertido de Richard Scarry (Spa)</description> <year>1992</year> <publisher>Philips</publisher> @@ -3076,6 +4449,11 @@ </software> <software name="beauty"> + <!-- + Origin: TOSEC + <rom name="Beauty & the Beast (1992)(Philips)(US).iso" size="589352400" crc="a1b20e7b" md5="ca56f868d4b051187e1ad49d03c1dfa8"/> + <rom name="Beauty & the Beast (1992)(Philips)(US).cue" size="127" crc="0551d814" md5="0ad2997d13e841ff62cb152a5a78158f"/> + --> <description>Beauty and the Beast (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -3087,6 +4465,11 @@ </software> <software name="beautyg" cloneof="beauty"> + <!-- + Origin: TOSEC + <rom name="Schone und das Tier, Die (1993)(Philips)(DE)[!].iso" size="664498800" crc="dbd1ee21" md5="9259a8523edc72788752b20415cea01a"/> + <rom name="Schone und das Tier, Die (1993)(Philips)(DE)[!].cue" size="136" crc="ebc1ac80" md5="4632f3290377bb3ebf1ce2e855f10052"/> + --> <description>Die Schöne und das Tier (Ger)</description> <year>1993</year> <publisher>Philips</publisher> @@ -3098,6 +4481,11 @@ </software> <software name="berenst"> + <!-- + Origin: TOSEC + <rom name="Berenstain Bears, The - On Their Own and You On Your Own (1993)(Philips)(US)[!].iso" size="658560000" crc="0e86b90f" md5="82d724bec9ac61be19ff4975e0a03677"/> + <rom name="Berenstain Bears, The - On Their Own and You On Your Own (1993)(Philips)(US)[!].cue" size="168" crc="fec5c8b7" md5="0cf7be5cf3adf2401a86fa55a4a56380"/> + --> <description>The Berenstain Bears - On Their Own and You On Your Own (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -3109,6 +4497,11 @@ </software> <software name="berenstf" cloneof="berenst"> + <!-- + Origin: TOSEC + <rom name="Berenstain Bears, The - Les Ours Berenstain Comme des Grands (1994)(Philips)(FR).iso" size="650680800" crc="31b60fa8" md5="436a9e2cbdaf100375aaba63d0f653eb"/> + <rom name="Berenstain Bears, The - Les Ours Berenstain Comme des Grands (1994)(Philips)(FR).cue" size="169" crc="55a47634" md5="c9b11f60f5bde4bf793d8514d99d99dc"/> + --> <description>The Berenstain Bears - Les Ours Berenstain Comme des Grands (Fra)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3120,6 +4513,11 @@ </software> <software name="berenstg" cloneof="berenst"> + <!-- + Origin: TOSEC + <rom name="Berenstain-Baren, Die - Selbst ist der bar - mach mit - ist gar nicht schwer! (1993)(Philips)(DE).iso" size="656748960" crc="dc586612" md5="2a1e4ca5754d00ffb96d772a21be3407"/> + <rom name="Berenstain-Baren, Die - Selbst ist der bar - mach mit - ist gar nicht schwer! (1993)(Philips)(DE).cue" size="186" crc="f0c1fbb4" md5="6494466bb74af2f4eab8c20b305957c0"/> + --> <description>Die Berenstain-Baren - Selbst ist der bar - mach mit - ist gar nicht schwer! (Ger)</description> <year>1993</year> <publisher>Philips</publisher> @@ -3131,6 +4529,11 @@ </software> <software name="berenstd" cloneof="berenst"> + <!-- + Origin: TOSEC + <rom name="Bij de Berenstain Beren, Thuis - Thuis en bij jou (1993)(Philips)(NL)[!].iso" size="654161760" crc="64bbf684" md5="774ce193d67c2d20736584695d716c1b"/> + <rom name="Bij de Berenstain Beren, Thuis - Thuis en bij jou (1993)(Philips)(NL)[!].cue" size="161" crc="81774525" md5="2b6f4ba78195021d5f65eea0f4f7d3e4"/> + --> <description>Thuis Bij de Berenstain Beren - Thuis en bij jou (Ned)</description> <year>1993</year> <publisher>Philips</publisher> @@ -3142,6 +4545,11 @@ </software> <software name="bertelsg"> + <!-- + Origin: TOSEC + <rom name="Bertelsmann Universal Lexikon (1995)(Pathe - Philips)(DE)[!].iso" size="735588000" crc="4fe58c8d" md5="fd58d6b147505688cb20d01c50fd4a66"/> + <rom name="Bertelsmann Universal Lexikon (1995)(Pathe - Philips)(DE)[!].cue" size="149" crc="7179167b" md5="d7eee28d4b0851a8c1099e1d044d6690"/> + --> <description>Bertelsmann Universal Lexikon (Ger)</description> <year>1995</year> <publisher>Pathe ~ Philips</publisher> @@ -3153,6 +4561,11 @@ </software> <software name="bertelsgdvc" cloneof="bertelsg" supported="no"> + <!-- + Origin: TOSEC + <rom name="Bertelsmann Universal Lexikon (1995)(Pathe - Philips)(DE)[!][DVC].iso" size="776983200" crc="a2724fbc" md5="370de8a16494241462c4b54881de32d9"/> + <rom name="Bertelsmann Universal Lexikon (1995)(Pathe - Philips)(DE)[!][DVC].cue" size="154" crc="25047121" md5="7b3a3878585980ce5ab872b01b58358c"/> + --> <description>Bertelsmann Universal Lexikon (Ger)[DVC]</description> <year>1995</year> <publisher>Pathe ~ Philips</publisher> @@ -3165,6 +4578,11 @@ </software> <software name="bertelsgd" cloneof="bertelsg"> + <!-- + Origin: TOSEC + <rom name="Bertelsmann Universal Lexikon - Demo-Disk (1994)(Pathe - Philips)(DE).iso" size="163699200" crc="5fb7cb02" md5="8262478e247dfde44a99e4294918fb8b"/> + <rom name="Bertelsmann Universal Lexikon - Demo-Disk (1994)(Pathe - Philips)(DE).cue" size="158" crc="b74f86e1" md5="aee3d31c42741b7d67aadd5ae13407f5"/> + --> <description>Bertelsmann Universal Lexikon - Demo-Disk (Ger)</description> <year>1994</year> <publisher>Pathe ~ Philips</publisher> @@ -3176,6 +4594,11 @@ </software> <software name="bestbabs" supported="no"> + <!-- + Origin: TOSEC + <rom name="Best of Baby Songs, The - Featuring the songs of Hop Palmer (1993)(Philips)(US)[DVC].iso" size="571183200" crc="47eec089" md5="480351d20594d62a427d1499496179ed"/> + <rom name="Best of Baby Songs, The - Featuring the songs of Hop Palmer (1993)(Philips)(US)[DVC].cue" size="173" crc="d0838eb1" md5="7511dfb1bf6d85e6c2251df1b89bf03f"/> + --> <description>The Best of Baby Songs - Featuring the Songs of Hop Palmer (USA)[DVC]</description> <year>1993</year> <publisher>Philips</publisher> @@ -3188,6 +4611,11 @@ </software> <software name="bestdraw"> + <!-- + Origin: TOSEC + <rom name="Best of Draw-50 with Lee Ames, The (1993)(Philips)(US)[!].iso" size="427240800" crc="121f5792" md5="b8333a8018351cc54c4e7c9fadeaea6d"/> + <rom name="Best of Draw-50 with Lee Ames, The (1993)(Philips)(US)[!].cue" size="146" crc="fd373532" md5="fdc5d4b5947540014c8c663b59b72dd7"/> + --> <description>The Best of Draw-50 with Lee Ames (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -3199,6 +4627,11 @@ </software> <software name="bestmanf" supported="no"> + <!-- + Origin: TOSEC + <rom name="Best Of Manfred Deix Vol. 1, The (1994)(Philips)(AT)[DVC].iso" size="461109600" crc="c5e7f489" md5="a55b2df550a41914eab660899edf4172"/> + <rom name="Best Of Manfred Deix Vol. 1, The (1994)(Philips)(AT)[DVC].cue" size="146" crc="585d0360" md5="2ff82dcdc8ee6baa96e4b83e8639ef37"/> + --> <description>The Best Of Manfred Deix Vol. 1 (Aut)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -3211,6 +4644,11 @@ </software> <software name="breastsa"> + <!-- + Origin: TOSEC + <rom name="Breast Self-Examination - Auto-examen Del Seno (1994)(Media Inc)(US)(en-es).iso" size="605233104" crc="73e24542" md5="0a591f16cf3398a3fae5572a9062d602"/> + <rom name="Breast Self-Examination - Auto-examen Del Seno (1994)(Media Inc)(US)(en-es).cue" size="164" crc="3858ae1e" md5="41f038ae82490d27c7b8ecfeada1b8dd"/> + --> <description>Breast Self-Examination - Auto-examen Del Seno (USA)</description> <year>1994</year> <publisher>Media Inc</publisher> @@ -3222,6 +4660,11 @@ </software> <software name="brerrabb"> + <!-- + Origin: TOSEC + <rom name="Brer Rabbit and the Wonderful Tar Baby (1991)(Philips)(US)[!].iso" size="549838800" crc="15a171b0" md5="f2bb1591f82978e760c158a96382f7fc"/> + <rom name="Brer Rabbit and the Wonderful Tar Baby (1991)(Philips)(US)[!].cue" size="150" crc="59272074" md5="d5ad183c548effad4e02f7f29d3d055e"/> + --> <description>Brer Rabbit and the Wonderful Tar Baby (USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -3233,6 +4676,11 @@ </software> <software name="bryanada"> + <!-- + Origin: TOSEC + <rom name="Bryan Adams - Waking up the Neighbours (1992)(Philips)(EU).iso" size="429886800" crc="4bff15f4" md5="013ed9b4fa2bbd951c1003620289a25d"/> + <rom name="Bryan Adams - Waking up the Neighbours (1992)(Philips)(EU).cue" size="147" crc="43984fe7" md5="844448ff74f63dade6f07cd285962684"/> + --> <description>Bryan Adams - Waking up the Neighbours (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -3244,6 +4692,21 @@ </software> <software name="burncycm"> + <!-- + Origin: TOSEC + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)(Track 01 of 11)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].wav" size="100783244" crc="71c32a53" md5="84cdc3277207a9fb6eb840764c5f5dd5"/> + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)(Track 02 of 11)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].wav" size="43829564" crc="2467aca0" md5="de6b2497b773154f265132611e60fe69"/> + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)(Track 03 of 11)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].wav" size="52691900" crc="c16633bd" md5="cfe7f0658c3ace4342f4aa236b8745ff"/> + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)(Track 04 of 11)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].wav" size="72006524" crc="4fdf188a" md5="d08616cd6f13bdc5e05ea07a38b02750"/> + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)(Track 05 of 11)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].wav" size="49591964" crc="6239d3f6" md5="a14dddc50ecf31a23f75277350ac4d8e"/> + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)(Track 06 of 11)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].wav" size="75122924" crc="c6f91387" md5="5ab2ad5a775b99c36c1c68d6b5852a33"/> + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)(Track 07 of 11)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].wav" size="54147788" crc="92cae7db" md5="bda8875f5685dc0db55051974febf5d5"/> + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)(Track 08 of 11)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].wav" size="83679500" crc="83ad232e" md5="28273eb58ef47daa76e24ae2b29c73fb"/> + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)(Track 09 of 11)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].wav" size="47287004" crc="4983839c" md5="2d7e62ad32d644d0aae4e62e40c34000"/> + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)(Track 10 of 11)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].wav" size="46016924" crc="62b11b8a" md5="423bd2441e551b9589d711a8942c4ae5"/> + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)(Track 11 of 11)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].wav" size="64496588" crc="286bfb9c" md5="296a10f365419f52f456d20d44a0fe1d"/> + <rom name="BURN-CYCLE - The Music (1994)(Philips)(EU)[!][BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio].cue" size="2025" crc="d9b2c99f" md5="770bd530e661cbcc8d12c2b218f2a9d4"/> + --> <description>BURN-CYCLE - The Music (Euro)[BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio]</description> <year>1994</year> <publisher>Philips</publisher> @@ -3255,6 +4718,11 @@ </software> <software name="camnsntg"> + <!-- + Origin: TOSEC + <rom name="camino de Santiago, El - La milenaria ruta de las estrellas (1995)(ANAYAtouring - Philips)(ES)(en-es).iso" size="634687200" crc="ab2283c7" md5="a27e93419cc7d408bc855a299e8ad439"/> + <rom name="camino de Santiago, El - La milenaria ruta de las estrellas (1995)(ANAYAtouring - Philips)(ES)(en-es).cue" size="190" crc="19134a5d" md5="e9c31a68b587337c1fea3929d7750044"/> + --> <description>El Camino de Santiago - La milenaria ruta de las estrellas (Spa)</description> <year>1995</year> <publisher>ANAYAtouring - Philips</publisher> @@ -3266,6 +4734,11 @@ </software> <software name="camnsntgcc" cloneof="camnsntg"> + <!-- + Origin: TOSEC + <rom name="camino de Santiago, El - La milenaria ruta de las estrellas (1995)(ANAYAtouring - Philips)(ES)(en-es)[compilation Cultura].iso" size="634687200" crc="5d4eb95e" md5="55c8bc8bd0beabddbd809d7571e59dfe"/> + <rom name="camino de Santiago, El - La milenaria ruta de las estrellas (1995)(ANAYAtouring - Philips)(ES)(en-es)[compilation Cultura].cue" size="211" crc="1d704dd4" md5="3a4b16cbde56c537fd60852d00651e98"/> + --> <description>El Camino de Santiago - La milenaria ruta de las estrellas (Compilation Cultura) (Spa)</description> <year>1995</year> <publisher>ANAYAtouring - Philips</publisher> @@ -3277,6 +4750,11 @@ </software> <software name="cartoonc" supported="no"> + <!-- + Origin: TOSEC + <rom name="Cartoon Carnival (1993)(Philips)(EU-US)[!][DVC enhanced].iso" size="641084640" crc="304a68f5" md5="fdbbade3ab06126d651b69cf2682f928"/> + <rom name="Cartoon Carnival (1993)(Philips)(EU-US)[!][DVC enhanced].cue" size="145" crc="9edc0699" md5="e6102a0ebf0e095defd7019e57d9b02f"/> + --> <description>Cartoon Carnival (Euro, USA)[DVC enhanced]</description> <year>1994</year> <publisher>Philips</publisher> @@ -3289,6 +4767,11 @@ </software> <software name="cartoonj"> + <!-- + Origin: TOSEC + <rom name="Cartoon Jukebox (1991)(Philips)(US)[310690001-2 50228 730 01].iso" size="505044960" crc="d2e7f30f" md5="7ed082c017cf40d24166689e26429367"/> + <rom name="Cartoon Jukebox (1991)(Philips)(US)[310690001-2 50228 730 01].cue" size="150" crc="e39ed7ca" md5="e2f59dda998c9d3bf4e2b5e15799992f"/> + --> <description>Cartoon Jukebox (USA)[310690001-2 50228 730 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -3300,6 +4783,11 @@ </software> <software name="cartoonja" cloneof="cartoonj"> + <!-- + Origin: TOSEC + <rom name="Cartoon Jukebox (1991)(Philips)(US)[3106900012 01!].iso" size="505044960" crc="fcb30f82" md5="7106410553e5b87bbbeb90afd0425f0e"/> + <rom name="Cartoon Jukebox (1991)(Philips)(US)[3106900012 01!].cue" size="140" crc="6b0662b5" md5="7e619ef9daca136976ba0384c6ede872"/> + --> <description>Cartoon Jukebox (USA)[3106900012 01!]</description> <year>1991</year> <publisher>Philips</publisher> @@ -3311,6 +4799,11 @@ </software> <software name="cartoonjg" cloneof="cartoonj"> + <!-- + Origin: TOSEC + <rom name="Cartoon Jukebox (1992)(Philips)(DE).iso" size="537737760" crc="85f592ee" md5="42c551c293c480e2f1a4aff2bb733a5c"/> + <rom name="Cartoon Jukebox (1992)(Philips)(DE).cue" size="124" crc="5e1dc2bf" md5="0198b68f9587c241c803b0c7ef46f44f"/> + --> <description>Cartoon Jukebox (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -3322,6 +4815,29 @@ </software> <software name="cdidemon" supported="no"> + <!-- + Origin: TOSEC + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 01 of 19)[!][DVC].iso" size="3704400" crc="1ad04cc4" md5="23b8969b9d24f522141d2900b83bd97c"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 02 of 19)[!][DVC].iso" size="64541232" crc="783b619b" md5="97c656b71146839ede9a4477cbe926e8"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 03 of 19)[!][DVC].iso" size="48825168" crc="df0b84fa" md5="49e88222da9efea4aa718874b6dc90eb"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 04 of 19)[!][DVC].iso" size="11477760" crc="212b4813" md5="bccc6e1066fa6c208d64f9fa7c286f90"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 05 of 19)[!][DVC].iso" size="27302016" crc="c58818b4" md5="042b733ab0850f45b4b8e1d0db698e1a"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 06 of 19)[!][DVC].iso" size="4377072" crc="4825c8c4" md5="bb2294c0aa28cb3565a639dbf60ba14a"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 07 of 19)[!][DVC].iso" size="11188464" crc="44b330c8" md5="3114d3837841a64061d55b09dc426260"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 08 of 19)[!][DVC].iso" size="11242560" crc="fd808838" md5="2839a7f389a400ace826222c281e4725"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 09 of 19)[!][DVC].iso" size="6500928" crc="dd727fe2" md5="b24c329f6bd143b676360aabef7df3b8"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 10 of 19)[!][DVC].iso" size="15156288" crc="211ae341" md5="24ddd443da99b1c8de0121184316135d"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 11 of 19)[!][DVC].iso" size="18790128" crc="b7e8ef1e" md5="ee0678ee3f49ec8b9a265582d8c1f089"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 12 of 19)[!][DVC].iso" size="5962320" crc="bd739b18" md5="0e2ed7f594dc787ff39955b60920eb5f"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 13 of 19)[!][DVC].iso" size="19721520" crc="9e414432" md5="adadaecb10ae3f347394ce3c3d99f093"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 14 of 19)[!][DVC].iso" size="21527856" crc="00babc11" md5="024c37fa739e3fd59c541fe8ae2e2633"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 15 of 19)[!][DVC].iso" size="12338592" crc="ba0a3f7a" md5="cc84c896fb18fe84c0a6f84570dc7ff3"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 16 of 19)[!][DVC].iso" size="5136768" crc="fd2889e9" md5="2247f24482431acc7f255938b647a004"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 17 of 19)[!][DVC].iso" size="11150832" crc="3b9322a5" md5="b8ce7b314041d98a08be51c4db339b33"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 18 of 19)[!][DVC].iso" size="11261376" crc="df516d38" md5="2d0b4ff48ab2a25e21117d095f1e6a90"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)(Track 19 of 19)[!][DVC].iso" size="14605920" crc="afa27ed4" md5="0d8f96398fed57acfe8a0607daa80a38"/> + <rom name="CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (1996)(Philips)(NL)[!][DVC].cue" size="3403" crc="a3a4d59e" md5="e611e8ea7d996acd21faf06f426215b6"/> + --> <description>CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (Ned)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -3334,6 +4850,11 @@ </software> <software name="cdifullm"> + <!-- + Origin: TOSEC + <rom name="CD-I Full Motion Video Update (1993)(Philips)(US).iso" size="461641152" crc="18ba2d38" md5="a7bbcffda2b65060a6979e58e21b4734"/> + <rom name="CD-I Full Motion Video Update (1993)(Philips)(US).cue" size="138" crc="73f877f9" md5="b9532e2ba626a708005df392fe610c07"/> + --> <description>CD-I Full Motion Video Update (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -3345,6 +4866,11 @@ </software> <software name="cdiimgew"> + <!-- + Origin: TOSEC + <rom name="CD-i im gewerblichen Einsatz... (1997)(Philips)(DE).iso" size="731888304" crc="5bb4582d" md5="3ddccaac39a0cbcfc5ebb89bc6d66d09"/> + <rom name="CD-i im gewerblichen Einsatz... (1997)(Philips)(DE).cue" size="140" crc="73f2bc26" md5="07e46d65030a9fe6a91ca59840d33163"/> + --> <description>CD-i im gewerblichen Einsatz... (Ger)</description> <year>1997</year> <publisher>Philips</publisher> @@ -3356,6 +4882,11 @@ </software> <software name="cdimaus"> + <!-- + Origin: TOSEC + <rom name="CD-i mit der Maus, Die - Auf dem Bauernhof (1995)(Philips)(DE).iso" size="765046800" crc="b6218747" md5="638f9e03d5e5a6ab5d013bb64ef8f7e7"/> + <rom name="CD-i mit der Maus, Die - Auf dem Bauernhof (1995)(Philips)(DE).cue" size="151" crc="063c6cd1" md5="7c8343b0b3d3c29f96e2b76b25102ca7"/> + --> <description>Die CD-i mit der Maus - Auf dem Bauernhof (Ger)</description> <year>1995</year> <publisher>Philips</publisher> @@ -3367,6 +4898,11 @@ </software> <software name="sampfa94"> + <!-- + Origin: TOSEC + <rom name="cd-i Title Sampler - Fall '94 (1994)(Philips)(US).iso" size="578415600" crc="16aa3437" md5="3adeef14da496a3e686772501c638c5a"/> + <rom name="cd-i Title Sampler - Fall '94 (1994)(Philips)(US).cue" size="138" crc="5b3ead71" md5="ae04d1327ff5af02a8b0793149d169a8"/> + --> <description>CD-i Title Sampler - Fall '94 (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3378,6 +4914,11 @@ </software> <software name="sampsu94"> + <!-- + Origin: TOSEC + <rom name="cd-i Title Sampler - Summer '94 (1994)(Philips)(US).iso" size="369381600" crc="90a912df" md5="888414135e8b048e0998c739c50ee573"/> + <rom name="cd-i Title Sampler - Summer '94 (1994)(Philips)(US).cue" size="140" crc="fd60b788" md5="68111e63d7f28f452deaa6abd3922d52"/> + --> <description>CD-i Title Sampler - Summer '94 (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3389,6 +4930,11 @@ </software> <software name="sampwi94"> + <!-- + Origin: TOSEC + <rom name="cd-i Title Sampler - Winter '94 (1994)(Philips)(US).iso" size="548780400" crc="ed0bac79" md5="2d821cfaec82c751e0a371c4e2d9db72"/> + <rom name="cd-i Title Sampler - Winter '94 (1994)(Philips)(US).cue" size="140" crc="0b1d8566" md5="d8193ac9427cda8b4db2f7f55ff68024"/> + --> <description>CD-i Title Sampler - Winter '94 (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3400,6 +4946,11 @@ </software> <software name="cdiworld"> + <!-- + Origin: TOSEC + <rom name="CD-I World - Erste europaische Ausgabe - Demo Disc (1994)(Hinweise)(DE).iso" size="324046800" crc="8447e748" md5="7ae7961350c52b02c1b6324e40b39573"/> + <rom name="CD-I World - Erste europaische Ausgabe - Demo Disc (1994)(Hinweise)(DE).cue" size="160" crc="f1eff471" md5="d59d395383c56381a06d26b53d48d2ee"/> + --> <description>CD-I World - Erste europaische Ausgabe - Demo Disc (Ger)</description> <year>1994</year> <publisher>Hinweise</publisher> @@ -3411,6 +4962,11 @@ </software> <software name="cdonlin1" supported="no"> + <!-- + Origin: TOSEC + <rom name="CD-Online - Issue 01 - Internet on TV (1995)(CD-Online)(EU)[DVC].iso" size="770167104" crc="1d881af1" md5="1c5cccfccdf2e9b5ea5511b746958d37"/> + <rom name="CD-Online - Issue 01 - Internet on TV (1995)(CD-Online)(EU)[DVC].cue" size="153" crc="59816b23" md5="5bcdc9e887e8786c15c0184aa9c65279"/> + --> <description>CD-Online - Issue 01 - Internet on TV (Euro)[DVC]</description> <year>1995</year> <publisher>CD-Online</publisher> @@ -3423,6 +4979,11 @@ </software> <software name="cdonlin2" supported="no"> + <!-- + Origin: TOSEC + <rom name="CD-Online - Issue 02 - The Internet Game Issue (1996)(CD-Online)(EU)[DVC].iso" size="700670208" crc="1c678370" md5="bae8292855e491914c1e0e3752014a63"/> + <rom name="CD-Online - Issue 02 - The Internet Game Issue (1996)(CD-Online)(EU)[DVC].cue" size="162" crc="b92882b2" md5="244438f2d03a9b472d56999fa927b6d1"/> + --> <description>CD-Online - Issue 02 - The Internet Game Issue (Euro)[DVC]</description> <year>1996</year> <publisher>CD-Online</publisher> @@ -3435,6 +4996,11 @@ </software> <software name="cdonli97" supported="no"> + <!-- + Origin: TOSEC + <rom name="CD-Online Disc 97-10 (1997)(CD-Online)(EU)(M3)[DVC].iso" size="653213904" crc="c5b6ef47" md5="183794664159bb4864f668766308594f"/> + <rom name="CD-Online Disc 97-10 (1997)(CD-Online)(EU)(M3)[DVC].cue" size="140" crc="41bdaeda" md5="82399da73c1ce69e5b9827007af466ef"/> + --> <description>CD-Online Disc 97-10 (Euro)[DVC]</description> <year>1997</year> <publisher>CD-Online</publisher> @@ -3447,6 +5013,11 @@ </software> <software name="cdi450tu"> + <!-- + Origin: TOSEC + <rom name="CDI 450 - Tutorial Disc (1994)(Philips)(EU)(M6)[!].iso" size="532904400" crc="59163833" md5="b706cb7d4ccb69fb479f8cd9c4fa4c90"/> + <rom name="CDI 450 - Tutorial Disc (1994)(Philips)(EU)(M6)[!].cue" size="139" crc="44181152" md5="89449714345864cc89ff688e221422c8"/> + --> <description>CDI 450 - Tutorial Disc (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3458,6 +5029,11 @@ </software> <software name="cdi470tu"> + <!-- + Origin: TOSEC + <rom name="CDI 470 - Tutorial Disc (1995)(Philips)(EU)(M11).iso" size="564127200" crc="732d62cc" md5="9019a1367b916ace7338fc8e04ff0223"/> + <rom name="CDI 470 - Tutorial Disc (1995)(Philips)(EU)(M11).cue" size="137" crc="4f24043a" md5="94e10da59ab1ad2940ec629a1ae34903"/> + --> <description>CDI 470 - Tutorial Disc (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -3469,6 +5045,11 @@ </software> <software name="cmt"> + <!-- + Origin: TOSEC + <rom name="Children's Musical Theatre (1992)(Philips)(US)[00821015 01].iso" size="628666080" crc="7ee79faa" md5="427af58c344567c2fdbc72930870608b"/> + <rom name="Children's Musical Theatre (1992)(Philips)(US)[00821015 01].cue" size="148" crc="6728fec0" md5="fd314e1fe3488360556301d0e0de486a"/> + --> <description>Children's Musical Theatre (USA)[00821015 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -3480,6 +5061,11 @@ </software> <software name="cmta" cloneof="cmt"> + <!-- + Origin: TOSEC + <rom name="Children's Musical Theatre (1992)(Philips)(US)[0082914 01].iso" size="569536800" crc="279fd119" md5="52e32c7a7076e6a07a650e25101aab4e"/> + <rom name="Children's Musical Theatre (1992)(Philips)(US)[0082914 01].cue" size="147" crc="7df3f349" md5="fdd2565f96d73d231c9a722921b46e47"/> + --> <description>Children's Musical Theatre (USA)[0082914 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -3491,6 +5077,11 @@ </software> <software name="children"> + <!-- + Origin: TOSEC + <rom name="Children's Musical Theatre (1992)(Philips)(US)[3106900082 50268 090 01].iso" size="628666080" crc="232729cb" md5="7dd671476ca00ab15525d08e6b36295d"/> + <rom name="Children's Musical Theatre (1992)(Philips)(US)[3106900082 50268 090 01].cue" size="160" crc="7cf4fec1" md5="df6c9047f1a400445ef0fab117c8b8aa"/> + --> <description>Children's Musical Theatre (USA)[3106900082 50268 090 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -3502,6 +5093,11 @@ </software> <software name="cisterci"> + <!-- + Origin: TOSEC + <rom name="Cistercian Architecture (1994)(Philips)(EU)(M3)[!].iso" size="753757200" crc="9a39e0d2" md5="238c333a27d044a3b6ca65ac5d4671a0"/> + <rom name="Cistercian Architecture (1994)(Philips)(EU)(M3)[!].cue" size="139" crc="f3e98ec5" md5="283ed3f4f4662a16c204edb44a0c6bd2"/> + --> <description>Cistercian Architecture (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3513,6 +5109,11 @@ </software> <software name="classicj"> + <!-- + Origin: TOSEC + <rom name="Classical Jukebox (1991)(Philips)(EU-US)[!].iso" size="636851040" crc="3a56937d" md5="eaed9df6c345ce161b3d122f6afae9a1"/> + <rom name="Classical Jukebox (1991)(Philips)(EU-US)[!].cue" size="132" crc="d8dd4349" md5="9f68d7dabe1eb2fb7fc1dd5521231d03"/> + --> <description>Classical Jukebox (Euro, USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -3524,6 +5125,11 @@ </software> <software name="comprend"> + <!-- + Origin: TOSEC + <rom name="Comprendre le CD-I - Understanding CD-I (1995)(Philips)(EU)(en-fr).iso" size="624985200" crc="41fb7c9a" md5="ab9a02e58b2d4228d3f49a2b84e6f41c"/> + <rom name="Comprendre le CD-I - Understanding CD-I (1995)(Philips)(EU)(en-fr).cue" size="155" crc="1ba43c9f" md5="4b40d972fec692e38bcb2a1f9d70b46b"/> + --> <description>Comprendre le CD-I - Understanding CD-I (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -3535,6 +5141,11 @@ </software> <software name="comptondvc" cloneof="compton" supported="no"> + <!-- + Origin: TOSEC + <rom name="Compton's Interactive Encyclopedia (1995)(Compton's NewMedia)(EU)[DVC enhanced].iso" size="728729568" crc="f8b5b911" md5="5c6648134eda8e50b1c1e136e175494b"/> + <rom name="Compton's Interactive Encyclopedia (1995)(Compton's NewMedia)(EU)[DVC enhanced].cue" size="168" crc="8e13d8d3" md5="e18e364a2502d262cda9795feefab61e"/> + --> <description>Compton's Interactive Encyclopedia (Euro)[DVC enhanced]</description> <year>1995</year> <publisher>Compton's NewMedia</publisher> @@ -3547,6 +5158,11 @@ </software> <software name="compton"> + <!-- + Origin: TOSEC + <rom name="Compton's Interactive Encyclopedia - CD-Interactive (1992)(Compton's NewMedia)(EU)[!].iso" size="690288480" crc="07267176" md5="34a676613e20aab4c585ed569a6b529c"/> + <rom name="Compton's Interactive Encyclopedia - CD-Interactive (1992)(Compton's NewMedia)(EU)[!].cue" size="174" crc="36a19ec5" md5="eb0b5439d9284515d74e0935fa4742cd"/> + --> <description>Compton's Interactive Encyclopedia - CD-Interactive (Euro)</description> <year>1992</year> <publisher>Compton's NewMedia</publisher> @@ -3558,6 +5174,11 @@ </software> <software name="comptonu" cloneof="compton"> + <!-- + Origin: TOSEC + <rom name="Compton's Interactive Encyclopedia - CD-Interactive (1992)(Compton's NewMedia)(US)[!].iso" size="690641280" crc="bb9d21cb" md5="196a7454d67806d20ca6b8e937106325"/> + <rom name="Compton's Interactive Encyclopedia - CD-Interactive (1992)(Compton's NewMedia)(US)[!].cue" size="174" crc="fcac48b8" md5="c565e81650f058ff4a31052454e4c03a"/> + --> <description>Compton's Interactive Encyclopedia - CD-Interactive (USA)</description> <year>1992</year> <publisher>Compton's NewMedia</publisher> @@ -3569,6 +5190,11 @@ </software> <software name="coxford"> + <!-- + Origin: TOSEC + <rom name="Concise Oxford Dictionary & Oxford Thesaurus, The (1995)(Oxford University Press - Philips)(EU)[!].iso" size="627454800" crc="49cafc39" md5="a7c9a3046c5ba9da7bb4b66172d6d772"/> + <rom name="Concise Oxford Dictionary & Oxford Thesaurus, The (1995)(Oxford University Press - Philips)(EU)[!].cue" size="187" crc="8e0584a6" md5="abde1376a2d7ef5469b6b6b4cc251864"/> + --> <description>The Concise Oxford Dictionary & Oxford Thesaurus (Euro)</description> <year>1995</year> <publisher>Oxford University Press ~ Philips</publisher> @@ -3580,6 +5206,11 @@ </software> <software name="coololdj"> + <!-- + Origin: TOSEC + <rom name="Cool Oldies Jukebox (1991)(Mercury - Philips)(US)[!].iso" size="625984800" crc="0365be66" md5="32e86c72e48efbcbb7576a353606ba2a"/> + <rom name="Cool Oldies Jukebox (1991)(Mercury - Philips)(US)[!].cue" size="141" crc="4cdc161f" md5="615cf927ae9cd90d36e2f82ecb9b2156"/> + --> <description>Cool Oldies Jukebox (USA)</description> <year>1991</year> <publisher>Mercury ~ Philips</publisher> @@ -3591,6 +5222,55 @@ </software> <software name="cosmopol" supported="no"> + <!-- + Origin: TOSEC + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 01 of 45)[DVC].iso" size="19876752" crc="eade88dd" md5="0f3f5459356db4d2b2ecfdc73d489c19"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 02 of 45)[DVC].iso" size="1253616" crc="e1f82147" md5="19fb0feed49f917d6ea6864493504e38"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 03 of 45)[DVC].iso" size="1253616" crc="1ecfea30" md5="3392ce11610771e95132595b480eede7"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 04 of 45)[DVC].iso" size="3782016" crc="9cd89761" md5="e3a09d11ff5fe4c8b48e37737b29f468"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 05 of 45)[DVC].iso" size="15537312" crc="f19cdd39" md5="ec2ec9c0816ed9b07a11ee1e7180ac49"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 06 of 45)[DVC].iso" size="5840016" crc="ef609bf7" md5="a69064ff73f4a0d0cbe82367b7379613"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 07 of 45)[DVC].iso" size="1244208" crc="852bebc1" md5="12a2cae92d6d2a904fa0038f3b3fe706"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 08 of 45)[DVC].iso" size="52762416" crc="557b0cf2" md5="1826506c4d8f27f5efb3862e6191c47e"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 09 of 45)[DVC].iso" size="1244208" crc="8812fa3f" md5="d1b405c59f6f207da11babd077647e48"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 10 of 45)[DVC].iso" size="61417776" crc="908fd152" md5="94e63c48cfe3760934427c853501ae85"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 11 of 45)[DVC].iso" size="1246560" crc="377ca60f" md5="f864fdd1936cf3cbff585c06535fe218"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 12 of 45)[DVC].iso" size="32645760" crc="195be764" md5="e1c207112871fb2385084b7e75a1c86a"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 13 of 45)[DVC].iso" size="1246560" crc="43a070e9" md5="a0f3cd4be3997c4f0b6949f85b11ed6f"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 14 of 45)[DVC].iso" size="31599120" crc="96dc0ebe" md5="c2c05fd0e5d08054c6b17f6404a4f9bb"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 15 of 45)[DVC].iso" size="1246560" crc="385a2fb7" md5="ec5af9932538e36e040b80923dbdb1cb"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 16 of 45)[DVC].iso" size="35113008" crc="9c30121d" md5="01012affafaca9b757ec2e7096ac878a"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 17 of 45)[DVC].iso" size="6726720" crc="1f80c712" md5="f3eece5e778acfb1ec797dfc313e7971"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 18 of 45)[DVC].iso" size="1246560" crc="7858459b" md5="1db2bcb884bd10bd592b99e862ce3cc2"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 19 of 45)[DVC].iso" size="49417872" crc="c80ba9ec" md5="0da58bbb5c42ea0245db1f93bce960a7"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 20 of 45)[DVC].iso" size="1246560" crc="8fc68ad3" md5="d92122667069c5a67e844fd4b1e166a0"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 21 of 45)[DVC].iso" size="40929504" crc="a368965c" md5="7c2da40bb1b4b25f3853a8e040c6fbbe"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 22 of 45)[DVC].iso" size="4948608" crc="6db86302" md5="633c94606ea9f8fc36233c217c232c29"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 23 of 45)[DVC].iso" size="1246560" crc="a947bfa3" md5="cb460ff6a9e95c54812526163c3c84d1"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 24 of 45)[DVC].iso" size="37942464" crc="520997f7" md5="cfcd51bc45ad16b2d41b9e1374cbfa62"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 25 of 45)[DVC].iso" size="1248912" crc="87f0c030" md5="063f1e89ede5503b6336d09b2bcfb9bc"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 26 of 45)[DVC].iso" size="40757808" crc="cb3f33f0" md5="a756ab028b16e5f9c81d7ce2023834a7"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 27 of 45)[DVC].iso" size="6533856" crc="10e55eeb" md5="013014ad20f9e2c94328772ff21f0c89"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 28 of 45)[DVC].iso" size="1248912" crc="3a6d934a" md5="81c338def319ed3effa60c4114284e5b"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 29 of 45)[DVC].iso" size="85394064" crc="978e31ef" md5="6c1399eb5ffe559485bfa846e9e062db"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 30 of 45)[DVC].iso" size="10607520" crc="214f461b" md5="54d785019f890cbd788b999c528f17a0"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 31 of 45)[DVC].iso" size="1246560" crc="a0c0c0d9" md5="7161ed9d68c97061ec576442ba4f00eb"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 32 of 45)[DVC].iso" size="42724080" crc="4f2684ef" md5="0a4fd165f7abd365f66da473a12b804a"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 33 of 45)[DVC].iso" size="1246560" crc="4b800277" md5="159725facbaf77cf656098078356c80d"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 34 of 45)[DVC].iso" size="41458704" crc="e1b23e3a" md5="cdabf826290801d354c8baa7667db889"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 35 of 45)[DVC].iso" size="15539664" crc="9380011f" md5="d330801fae0860e51b0ebb8810a53e08"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 36 of 45)[DVC].iso" size="1246560" crc="bc55ab52" md5="6553e0720de9acfa3fa8ededb9e0c40d"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 37 of 45)[DVC].iso" size="40238016" crc="eb97cd7a" md5="cada98928c2946a50252640b882da42a"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 38 of 45)[DVC].iso" size="1244208" crc="2abef5af" md5="178f11d68a949e5c11575b1b0e0d6a30"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 39 of 45)[DVC].iso" size="43415568" crc="0a6b5026" md5="2c292d4891636c67dca05353f586441f"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 40 of 45)[DVC].iso" size="4607568" crc="92f26f81" md5="fdcf80488db6096ad823db46e9be987f"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 41 of 45)[DVC].iso" size="1246560" crc="df26087f" md5="6d504c9de997349cad7faa950dfc186e"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 42 of 45)[DVC].iso" size="22400448" crc="2bc905c1" md5="874831b856eccad0230bb40604b23f31"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 43 of 45)[DVC].iso" size="1248912" crc="960c17b5" md5="ae3615645417e203323a7e8d264df898"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 44 of 45)[DVC].iso" size="1248912" crc="27fc318f" md5="ac1b4c8ac7ad144eae94fdca1846bde6"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)(Track 45 of 45)[DVC].iso" size="1601712" crc="82c5f88e" md5="b7dd0f21c143545c6aa5872c821e993b"/> + <rom name="Cosmopolitan Interactive - Tonetics (1995)(Philips)(US)[DVC].cue" size="7337" crc="492b28bb" md5="251729665c3f6e63a2221e0704e5f3d1"/> + --> <description>Cosmopolitan Interactive - Tonetics (USA)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -3603,6 +5283,11 @@ </software> <software name="crayonf"> + <!-- + Origin: TOSEC + <rom name="Crayon Factory, The (1995)(Philips)(EU).iso" size="631700160" crc="82d658f7" md5="422f4424dc23bc59bb61cd3dd92f3e67"/> + <rom name="Crayon Factory, The (1995)(Philips)(EU).cue" size="128" crc="46fa1420" md5="392f1c1ab91b95959598e4634405e035"/> + --> <description>The Crayon Factory (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -3614,6 +5299,11 @@ </software> <software name="crayonfu" cloneof="crayonf"> + <!-- + Origin: TOSEC + <rom name="Crayon Factory, The (1994)(Philips)(US).iso" size="605357760" crc="bcefd453" md5="89dc153371b02f57dedc7888bf6c6e19"/> + <rom name="Crayon Factory, The (1994)(Philips)(US).cue" size="128" crc="b37f2018" md5="667385e2bdeb89a77245b089ada21a12"/> + --> <description>The Crayon Factory (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3625,6 +5315,11 @@ </software> <software name="creatcar"> + <!-- + Origin: TOSEC + <rom name="Create your own Caricature with Spitting Image (1992)(Philips)(EU)[!][8110001 50274 188 01].iso" size="384034560" crc="bfdc8ff2" md5="f6f11cabed8cd0d56bf503fb50e83438"/> + <rom name="Create your own Caricature with Spitting Image (1992)(Philips)(EU)[!][8110001 50274 188 01].cue" size="180" crc="6db89956" md5="94f879aee37934548a4027bfc31ee226"/> + --> <description>Create your own Caricature with Spitting Image (Euro)[8110001 50274 188 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -3636,6 +5331,11 @@ </software> <software name="creatcara" cloneof="creatcar"> + <!-- + Origin: TOSEC + <rom name="Create your own Caricature with Spitting Image (1992)(Philips)(EU)[8110001 50274 188 02].iso" size="384034560" crc="dcf8a4c9" md5="d86e05d75c85d8380da1873336e224af"/> + <rom name="Create your own Caricature with Spitting Image (1992)(Philips)(EU)[8110001 50274 188 02].cue" size="177" crc="8be57f93" md5="841133a30556b9bb0b0aa9fd58f98220"/> + --> <description>Create your own Caricature with Spitting Image (Euro)[8110001 50274 188 02]</description> <year>1992</year> <publisher>Philips</publisher> @@ -3647,6 +5347,11 @@ </software> <software name="cruised"> + <!-- + Origin: TOSEC + <rom name="Cruise Directory (1994)(Barclays - Philips)(GB).iso" size="446115600" crc="6f6ef0d9" md5="ef6b96aaa4ba69f9fba83c63a7938d73"/> + <rom name="Cruise Directory (1994)(Barclays - Philips)(GB).cue" size="136" crc="798fdc0a" md5="4daa43266aa95f2ff2c8703b0aa42148"/> + --> <description>Cruise Directory (UK)</description> <year>1994</year> <publisher>Barclays ~ Philips</publisher> @@ -3658,6 +5363,11 @@ </software> <software name="dansen" supported="no"> + <!-- + Origin: TOSEC + <rom name="Dansen! (1996)(Philips)(NL)[!][DVC].iso" size="622162800" crc="a95f2c9c" md5="644b204f7fbf353c055e015b5f654fa0"/> + <rom name="Dansen! (1996)(Philips)(NL)[!][DVC].cue" size="124" crc="4a67c0cd" md5="ea02376b2326c38f60a257428bf2d47e"/> + --> <description>Dansen! (Ned)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -3670,6 +5380,11 @@ </software> <software name="davegrus"> + <!-- + Origin: TOSEC + <rom name="Dave Grusin - The Gershwin Connection (1993)(Philips)(US)[!].iso" size="553425600" crc="af843b2b" md5="03f15bc119a666eff28d1b9c7d98ba5c"/> + <rom name="Dave Grusin - The Gershwin Connection (1993)(Philips)(US)[!].cue" size="149" crc="0d50d629" md5="588f678d4727efd5fdbd16d84bec4d17"/> + --> <description>Dave Grusin - The Gershwin Connection (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -3681,6 +5396,11 @@ </software> <software name="dgbcne" supported="no"> + <!-- + Origin: TOSEC + <rom name="Destination Great Britain - Central and Northern England (1994)(World of Wonders)(US)[DVC].iso" size="649333104" crc="3870e124" md5="865e329ec0dd75ddcc30f0297d23d6b7"/> + <rom name="Destination Great Britain - Central and Northern England (1994)(World of Wonders)(US)[DVC].cue" size="179" crc="8f545fab" md5="04ff34101b6d6b56ec4b95254cdab69a"/> + --> <description>Destination Great Britain - Central and Northern England (USA)[DVC]</description> <year>1994</year> <publisher>World of Wonders</publisher> @@ -3693,6 +5413,11 @@ </software> <software name="dgbewc" supported="no"> + <!-- + Origin: TOSEC + <rom name="Destination Great Britain - England's West Country (1994)(World of Wonders)(US)[DVC].iso" size="541199904" crc="3b2cbde0" md5="bfabd6159d7ff206781f43f31bd2d30b"/> + <rom name="Destination Great Britain - England's West Country (1994)(World of Wonders)(US)[DVC].cue" size="173" crc="6788d43e" md5="96e699a0987fdd8978e7438d6b4c4a07"/> + --> <description>Destination Great Britain - England's West Country (USA)[DVC]</description> <year>1994</year> <publisher>World of Wonders</publisher> @@ -3705,6 +5430,11 @@ </software> <software name="dgblse" supported="no"> + <!-- + Origin: TOSEC + <rom name="Destination Great Britain - London & Southern England (1995)(World of Wonders)(US)[DVC].iso" size="596942304" crc="2a4933e2" md5="35b65342228bed8b6d14bee9748adc29"/> + <rom name="Destination Great Britain - London & Southern England (1995)(World of Wonders)(US)[DVC].cue" size="176" crc="3ef01162" md5="77376f87001464ab399f4860912b4194"/> + --> <description>Destination Great Britain - London & Southern England (USA)[DVC]</description> <year>1995</year> <publisher>World of Wonders</publisher> @@ -3717,6 +5447,11 @@ </software> <software name="dgbw" supported="no"> + <!-- + Origin: TOSEC + <rom name="Destination Great Britain - Wales (1994)(World of Wonders)(US)[DVC].iso" size="659211504" crc="679e4bf7" md5="cb1d266f2844866707b53add457a803a"/> + <rom name="Destination Great Britain - Wales (1994)(World of Wonders)(US)[DVC].cue" size="156" crc="2a808fa1" md5="9f6caebd9fa40523583b416360342975"/> + --> <description>Destination Great Britain - Wales (USA)[DVC]</description> <year>1994</year> <publisher>World of Wonders</publisher> @@ -3729,6 +5464,11 @@ </software> <software name="dsfne"> + <!-- + Origin: TOSEC + <rom name="Discover Sports Fishing - Northern Edition (1995)(World of Wonders)(US).iso" size="637690704" crc="983fb3cb" md5="0512c5b7c06258d3a0de2d37029e9f4b"/> + <rom name="Discover Sports Fishing - Northern Edition (1995)(World of Wonders)(US).cue" size="160" crc="eb84e9a0" md5="864ccb124227feb5a78bb1d45c5e5966"/> + --> <description>Discover Sports Fishing - Northern Edition (USA)</description> <year>1995</year> <publisher>World of Wonders</publisher> @@ -3740,6 +5480,11 @@ </software> <software name="discplac"> + <!-- + Origin: TOSEC + <rom name="Discovery - Your Place in the World (1997)(Educational Management Group)(US).iso" size="743173200" crc="efc4d02a" md5="fb70c3a60f2e39dc17c87720317b0323"/> + <rom name="Discovery - Your Place in the World (1997)(Educational Management Group)(US).cue" size="165" crc="54e191fd" md5="517186f843a4cd00dbf24c90e930f136"/> + --> <description>Discovery - Your Place in the World (USA)</description> <year>1997</year> <publisher>Educational Management Group</publisher> @@ -3751,6 +5496,11 @@ </software> <software name="ditwas94" supported="no"> + <!-- + Origin: TOSEC + <rom name="Dit Was 1994 - Wereldnieuws Overzicht (1995)(Philips)(NL)[!][DVC].iso" size="505562400" crc="104f1a60" md5="bc9081baed779b34eb81b27aac5ee6a2"/> + <rom name="Dit Was 1994 - Wereldnieuws Overzicht (1995)(Philips)(NL)[!][DVC].cue" size="154" crc="01fa4b7c" md5="0b96b43a9261cc852362535806842339"/> + --> <description>Dit Was 1994 - Wereldnieuws Overzicht (Ned)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -3763,6 +5513,11 @@ </software> <software name="ditwas95" supported="no"> + <!-- + Origin: TOSEC + <rom name="Dit Was 1995 - Wereldnieuws Overzicht (1996)(Philips)(NL)[DVC].iso" size="663621504" crc="e65fad70" md5="7cbb70bcc8033bd6eee8ef821c5801e2"/> + <rom name="Dit Was 1995 - Wereldnieuws Overzicht (1996)(Philips)(NL)[DVC].cue" size="151" crc="457f6a95" md5="afe4a3bdab95d288790a92535c347998"/> + --> <description>Dit Was 1995 - Wereldnieuws Overzicht (Ned)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -3775,6 +5530,11 @@ </software> <software name="domststp"> + <!-- + Origin: TOSEC + <rom name="Dom zu St. Stephan in Wien, Der (1995)(Philips)(AT).iso" size="686024304" crc="5d079016" md5="fb7007fd0a301e4392db594f4ecccb3f"/> + <rom name="Dom zu St. Stephan in Wien, Der (1995)(Philips)(AT).cue" size="140" crc="dd31862d" md5="512f7f78b28e782083d9f5db7df730e0"/> + --> <description>Der Dom zu St. Stephan in Wien (Aut)</description> <year>1995</year> <publisher>Philips</publisher> @@ -3786,6 +5546,11 @@ </software> <software name="downhome"> + <!-- + Origin: TOSEC + <rom name="Downhome Blues, The (1994)(Philips)(US).iso" size="751887360" crc="4e7acfef" md5="f93a7108ce86239ac30824b339f89a2f"/> + <rom name="Downhome Blues, The (1994)(Philips)(US).cue" size="128" crc="616b5ad1" md5="09281c9575d01e26eba7f5b4b0dc1aa9"/> + --> <description>The Downhome Blues (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3797,6 +5562,11 @@ </software> <software name="dutch17"> + <!-- + Origin: TOSEC + <rom name="Dutch Masters of the Seventeenth Century (1992)(Philips)(EU).iso" size="663946080" crc="ff3cbfd4" md5="f717ba907ffa6271272da889530edade"/> + <rom name="Dutch Masters of the Seventeenth Century (1992)(Philips)(EU).cue" size="149" crc="034f2cf5" md5="6048a558b4de6e65b022b7a147e46d5b"/> + --> <description>Dutch Masters of the Seventeenth Century (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -3808,6 +5578,11 @@ </software> <software name="dutch17u" cloneof="dutch17"> + <!-- + Origin: TOSEC + <rom name="Dutch Masters of the Seventeenth Century (1992)(Philips)(US).iso" size="663950784" crc="3e180f90" md5="a963639aeec06690bc7cf4c6d62661ab"/> + <rom name="Dutch Masters of the Seventeenth Century (1992)(Philips)(US).cue" size="149" crc="0a94df50" md5="d155bb4f0cd8151e109a002c9660d273"/> + --> <description>Dutch Masters of the Seventeenth Century (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -3819,6 +5594,11 @@ </software> <software name="ezplay"> + <!-- + Origin: TOSEC + <rom name="E-Z Play Today Keyboard - Now Anyone Can Learn To Play Keyboard! (1994)(Philips)(EU).iso" size="614507040" crc="5bafd23e" md5="305c12578672bec0e3fe2ab73422bb01"/> + <rom name="E-Z Play Today Keyboard - Now Anyone Can Learn To Play Keyboard! (1994)(Philips)(EU).cue" size="173" crc="f28498bd" md5="ec33136afddb808714a1a34cf9f6a307"/> + --> <description>E-Z Play Today Keyboard - Now Anyone Can Learn To Play Keyboard! (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3830,6 +5610,11 @@ </software> <software name="earth"> + <!-- + Origin: TOSEC + <rom name="Earth - The Changing Environment (1995)(World of Wonders)(US).iso" size="753938304" crc="fde88f74" md5="b7ca7a98d13541a9d4ac659a2146b1e3"/> + <rom name="Earth - The Changing Environment (1995)(World of Wonders)(US).cue" size="150" crc="355951db" md5="4d8e7573cb8e8f1a1b1a9155f4a128bd"/> + --> <description>Earth - The Changing Environment (USA)</description> <year>1995</year> <publisher>World of Wonders</publisher> @@ -3841,6 +5626,11 @@ </software> <software name="kindenst"> + <!-- + Origin: TOSEC + <rom name="Ein Kind Entsteht (1994)(Philips)(DE).iso" size="604722720" crc="eef69693" md5="d260d51ee4e3b7d1076bc9c9c74f1a05"/> + <rom name="Ein Kind Entsteht (1994)(Philips)(DE).cue" size="126" crc="dc881c32" md5="b1dad6fd049d33b75e6c1fc01b581590"/> + --> <description>Ein Kind Entsteht (Ger)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3852,6 +5642,11 @@ </software> <software name="emperor"> + <!-- + Origin: TOSEC + <rom name="Emperor's New Clothes, The (1992)(Philips)(US)[!].iso" size="546487200" crc="ec91fd4e" md5="3aed26a28f58e8ff3cac1316f7b0e24b"/> + <rom name="Emperor's New Clothes, The (1992)(Philips)(US)[!].cue" size="138" crc="c10c0d4c" md5="c988826b459a321b31e9980086833b9d"/> + --> <description>The Emperor's New Clothes (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -3864,6 +5659,11 @@ <software name="encyclop"> <!-- Alt. Title: Dictionnaire Hachette Multimedia --> + <!-- + Origin: TOSEC + <rom name="Encyclopaedia Hachette (1994)(Philips)(EU)[!][aka Dictionnaire Hachette Multimedia].iso" size="762541920" crc="d120e13c" md5="69329a22dae1ea1ad876d3a79250cda3"/> + <rom name="Encyclopaedia Hachette (1994)(Philips)(EU)[!][aka Dictionnaire Hachette Multimedia].cue" size="172" crc="c0269b57" md5="6acc3297657dcd4c2b00d816820ef643"/> + --> <description>Encyclopaedia Hachette (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -3875,6 +5675,11 @@ </software> <software name="enkhuize"> + <!-- + Origin: TOSEC + <rom name="Enkhuizer Almanak 1997 - 402 Jaargang (1996)(Philips)(NL).iso" size="271787712" crc="d5183f33" md5="5e0f1ffff4994646f2313c9c29694ccb"/> + <rom name="Enkhuizer Almanak 1997 - 402 Jaargang (1996)(Philips)(NL).cue" size="146" crc="460497d2" md5="0ba7a59e3edb24006b265ff0a5150637"/> + --> <description>Enkhuizer Almanak 1997 - 402 Jaargang (Ned)</description> <year>1996</year> <publisher>Philips</publisher> @@ -3886,6 +5691,13 @@ </software> <software name="clapton" supported="no"> + <!-- + Origin: TOSEC + <rom name="Eric Clapton - The Cream Of Eric Clapton (1994)(Philips - PolyGram)(PAL)(EU)(Disc 1 of 2)[DVC].iso" size="533080800" crc="b36a5836" md5="ddde2cd3622805694fea03cd89f9e9b0"/> + <rom name="Eric Clapton - The Cream Of Eric Clapton (1994)(Philips - PolyGram)(PAL)(EU)(Disc 1 of 2)[DVC].cue" size="183" crc="d3f51d39" md5="db8684760f818d8fc4ab9657f260d644"/> + <rom name="Eric Clapton - The Cream Of Eric Clapton (1994)(Philips - PolyGram)(PAL)(EU)(Disc 2 of 2)[DVC].iso" size="324928800" crc="3f34a336" md5="12d5f1fe47a6cb686752de1e28c55633"/> + <rom name="Eric Clapton - The Cream Of Eric Clapton (1994)(Philips - PolyGram)(PAL)(EU)(Disc 2 of 2)[DVC].cue" size="183" crc="fa99efc4" md5="21bcdf65d53d1b16b1f7eeb68d1d8452"/> + --> <description>Eric Clapton - The Cream Of Eric Clapton (Euro)[DVC]</description> <year>1994</year> <publisher>Philips ~ PolyGram</publisher> @@ -3903,6 +5715,11 @@ </software> <software name="essentia"> + <!-- + Origin: TOSEC + <rom name="Essentials - The New Shape of Home Shopping by Freemans (1994)(Barclays - Philips)(GB).iso" size="273596400" crc="e7fd3dc0" md5="5687ce1418456d926546b0be3b4c2b43"/> + <rom name="Essentials - The New Shape of Home Shopping by Freemans (1994)(Barclays - Philips)(GB).cue" size="175" crc="7d1a796a" md5="ee7b4a3ca521266019f69042a2e264a4"/> + --> <description>Essentials - The New Shape of Home Shopping by Freemans (UK)</description> <year>1994</year> <publisher>Barclays ~ Philips</publisher> @@ -3914,6 +5731,11 @@ </software> <software name="europrty"> + <!-- + Origin: TOSEC + <rom name="European Party (1994)(Giunti Multimedia - Philips)(EU).iso" size="562186800" crc="f2317c96" md5="681b3ac4439a83c098275d4e5f1bc01b"/> + <rom name="European Party (1994)(Giunti Multimedia - Philips)(EU).cue" size="143" crc="665684c9" md5="7181b232ede04240bb14874070d14bc8"/> + --> <description>European Party (Euro)</description> <year>1994</year> <publisher>Giunti Multimedia ~ Philips</publisher> @@ -3925,6 +5747,11 @@ </software> <software name="explwrld"> + <!-- + Origin: TOSEC + <rom name="Exploration - The World Around You (1997)(Educational Management Group)(US).iso" size="585123504" crc="6a71310b" md5="45acfe5196bfd8c61fdef810009f667b"/> + <rom name="Exploration - The World Around You (1997)(Educational Management Group)(US).cue" size="164" crc="f906dc1d" md5="5a3a742b79b483ffd440ab64bdf5b5d6"/> + --> <description>Exploration - The World Around You (USA)</description> <year>1997</year> <publisher>Educational Management Group</publisher> @@ -3936,6 +5763,11 @@ </software> <software name="explspac"> + <!-- + Origin: TOSEC + <rom name="Explorations of Space (1994)(Educational Management Group)(US).iso" size="685495104" crc="e708f634" md5="c4351f5cebc042d8c9826999ffdfc2c6"/> + <rom name="Explorations of Space (1994)(Educational Management Group)(US).cue" size="151" crc="0b92faf7" md5="28b47e2b1d11e18b5efd958fecb8f8d6"/> + --> <description>Explorations of Space (USA)</description> <year>1994</year> <publisher>Educational Management Group</publisher> @@ -3947,6 +5779,11 @@ </software> <software name="facekitc"> + <!-- + Origin: TOSEC + <rom name="Face Kitchen (1992)(Philips)(EU).iso" size="366034704" crc="931e31d4" md5="cd7acd858fe78fd1e0d323eb302cccce"/> + <rom name="Face Kitchen (1992)(Philips)(EU).cue" size="121" crc="73104a83" md5="993ddffa1ff884d1d3a9c76b458bff68"/> + --> <description>Face Kitchen (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -3958,6 +5795,11 @@ </software> <software name="famillep"> + <!-- + Origin: TOSEC + <rom name="famille Papyrus, La (1994)(Hachette Livre)(FR).iso" size="173721072" crc="c8645200" md5="ca7c59d9de6550dcf3ccd715f6dc3b02"/> + <rom name="famille Papyrus, La (1994)(Hachette Livre)(FR).cue" size="135" crc="9a31820b" md5="4fbc857ae07120594aacd659ccf0f019"/> + --> <description>La Famille Papyrus (Fra)</description> <year>1994</year> <publisher>Hachette Livre</publisher> @@ -3969,6 +5811,12 @@ </software> <software name="filmmaana" cloneof="filmmaan" supported="no"> + <!-- + Origin: TOSEC + <rom name="Filmmaand, de - Highlights-Previews-Filmclips (1995-05)(Philips)(NL)(Track 1 of 2)[a][DVC].iso" size="5292000" crc="8f34c144" md5="3a70fb52489e890936764308512a7907"/> + <rom name="Filmmaand, de - Highlights-Previews-Filmclips (1995-05)(Philips)(NL)(Track 2 of 2)[a][DVC].iso" size="320629344" crc="7c383b45" md5="084ac15d21fe93dc171a4ca32816f958"/> + <rom name="Filmmaand, de - Highlights-Previews-Filmclips (1995-05)(Philips)(NL)[a][DVC].cue" size="356" crc="60ab42eb" md5="355cbdd036a0a64e3c0010d71481c4e7"/> + --> <description>De Filmmaand - Highlights-Previews-Filmclips (Ned, Alt)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -3981,6 +5829,12 @@ </software> <software name="filmmaan" supported="no"> + <!-- + Origin: TOSEC + <rom name="Filmmaand, de - Highlights-Previews-Filmclips (1995-05)(Philips)(NL)(Track 1 of 2)[DVC].iso" size="5292000" crc="db855d2f" md5="bd20e4175e7b08d816bbeded745e1d16"/> + <rom name="Filmmaand, de - Highlights-Previews-Filmclips (1995-05)(Philips)(NL)(Track 2 of 2)[DVC].iso" size="320629344" crc="42831457" md5="fb91b597fe7d6f978cbff1f8b3760ea7"/> + <rom name="Filmmaand, de - Highlights-Previews-Filmclips (1995-05)(Philips)(NL)[DVC].cue" size="350" crc="e26e6137" md5="d48cc645b033b767d8afd0f521a8e7ba"/> + --> <description>De Filmmaand - Highlights-Previews-Filmclips (Ned)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -3993,6 +5847,17 @@ </software> <software name="fishtv"> + <!-- + Origin: TOSEC + <rom name="Fish TV - Living Screens (1997)(Daedalus)(EU)(Track 1 of 7).iso" size="6703200" crc="b7f08a3e" md5="afa8bac99aaef06f741c8fffcf28d15e"/> + <rom name="Fish TV - Living Screens (1997)(Daedalus)(EU)(Track 2 of 7).iso" size="53472720" crc="021b1d1d" md5="defe101b151a0d0b03854f754ae48b5b"/> + <rom name="Fish TV - Living Screens (1997)(Daedalus)(EU)(Track 3 of 7).iso" size="103412736" crc="5c89a69b" md5="5cc9276c4add46200bebdbf1cac93003"/> + <rom name="Fish TV - Living Screens (1997)(Daedalus)(EU)(Track 4 of 7).iso" size="127572480" crc="c0f30f14" md5="e063e60c2fca0a1a8e4a0814217661f7"/> + <rom name="Fish TV - Living Screens (1997)(Daedalus)(EU)(Track 5 of 7).iso" size="121922976" crc="3224d4c2" md5="a3715fe647c207eec76e61a98e5f463d"/> + <rom name="Fish TV - Living Screens (1997)(Daedalus)(EU)(Track 6 of 7).iso" size="116988480" crc="8a8093b1" md5="ae2bed0c0992817744074e96a4338743"/> + <rom name="Fish TV - Living Screens (1997)(Daedalus)(EU)(Track 7 of 7).iso" size="127925280" crc="6431c173" md5="74345c9105f7a6d55f6a10603649197c"/> + <rom name="Fish TV - Living Screens (1997)(Daedalus)(EU).cue" size="1024" crc="ec7ee9f1" md5="9495a7536bbf9bc6aa25b7d167394a56"/> + --> <description>Fish TV - Living Screens (Euro)</description> <year>1997</year> <publisher>Daedalus</publisher> @@ -4004,6 +5869,11 @@ </software> <software name="flintjet"> + <!-- + Origin: TOSEC + <rom name="Flintstones & Jetsons - Timewarp (1994)(Philips)(EU).iso" size="719359200" crc="01609c94" md5="d4d79716dccc43a76381604f18b9ac61"/> + <rom name="Flintstones & Jetsons - Timewarp (1994)(Philips)(EU).cue" size="141" crc="5b82266b" md5="4ff23a329f60ea14e7ce2a0686986ec8"/> + --> <description>Flintstones & Jetsons - Timewarp (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -4015,6 +5885,11 @@ </software> <software name="flintjetu" cloneof="flintjet"> + <!-- + Origin: TOSEC + <rom name="Flintstones & Jetsons - Timewarp (1994)(Philips)(US).iso" size="719712000" crc="ccd43662" md5="10dbf4850cd357f1e89a597684dabf44"/> + <rom name="Flintstones & Jetsons - Timewarp (1994)(Philips)(US).cue" size="141" crc="5259d5ce" md5="7281ee49b3345de67aecc425dbd88756"/> + --> <description>Flintstones & Jetsons - Timewarp (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -4026,6 +5901,12 @@ </software> <software name="flowers"> + <!-- + Origin: TOSEC + <rom name="Flowers of Robert Mapplethorpe, The (1992)(Philips)(US)(Track 1 of 2)[!][Photo CD].iso" size="511030800" crc="fbf3915f" md5="22ae24fd51d368f534b3963aed4a8350"/> + <rom name="Flowers of Robert Mapplethorpe, The (1992)(Philips)(US)(Track 2 of 2)[!][Photo CD].wav" size="218030444" crc="73b4776b" md5="ac291bb92f9033e9a90cb8572de02a6c"/> + <rom name="Flowers of Robert Mapplethorpe, The (1992)(Philips)(US)[!][Photo CD].cue" size="333" crc="5d4e0813" md5="7d75fbaa2960289a5f4a17e591db0b76"/> + --> <description>The Flowers of Robert Mapplethorpe (USA)[Photo CD]</description> <year>1992</year> <publisher>Philips</publisher> @@ -4037,6 +5918,11 @@ </software> <software name="football" supported="no"> + <!-- + Origin: TOSEC + <rom name="Football - l'histoire, les regles, les vedettes, le jeu de penalties v1.04 (1994)(Philips)(FR)[!][DVC].iso" size="764517600" crc="1895810b" md5="98d026bb71ab819b96d20c50af14bac0"/> + <rom name="Football - l'histoire, les regles, les vedettes, le jeu de penalties v1.04 (1994)(Philips)(FR)[!][DVC].cue" size="191" crc="7d6b44cd" md5="b0980f1f51f71cdc28745ce867c85184"/> + --> <description>Football - L'histoire, les regles, les vedettes, le jeu de penalties v1.04 (Fra)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -4049,6 +5935,11 @@ </software> <software name="frenchim"> + <!-- + Origin: TOSEC + <rom name="French Impressionists, The (1992)(Philips)(US)[!].iso" size="743161440" crc="37733e06" md5="e0e7ddd2b746a5550375b0f78a207756"/> + <rom name="French Impressionists, The (1992)(Philips)(US)[!].cue" size="138" crc="c3cb90b3" md5="bfca5dca346672968ffb939be6aaf94a"/> + --> <description>The French Impressionists (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4060,6 +5951,11 @@ </software> <software name="frenchimd" cloneof="frenchim"> + <!-- + Origin: TOSEC + <rom name="Franse Impressionisten, De (1991)(Philips)(NL)[!].iso" size="743772960" crc="58d99f2d" md5="15e1508d73a9a4a5b3c37d89dcd437c5"/> + <rom name="Franse Impressionisten, De (1991)(Philips)(NL)[!].cue" size="138" crc="3925e7d5" md5="408b0969cf7d34fd7f5fc1bf68c16bc8"/> + --> <description>De Franse Impressionisten (Ned)</description> <year>1991</year> <publisher>Philips</publisher> @@ -4071,6 +5967,11 @@ </software> <software name="frenchimf" cloneof="frenchim"> + <!-- + Origin: TOSEC + <rom name="Impressionnistes Francais, Les (1992)(Philips)(FR).iso" size="742126560" crc="7ff96a04" md5="8d2c829b8a1b28c9502b787a099cf6ef"/> + <rom name="Impressionnistes Francais, Les (1992)(Philips)(FR).cue" size="139" crc="38553e22" md5="95a80ff99085213bc681d842800ea212"/> + --> <description>Les Impressionnistes Français (Fra)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4082,6 +5983,11 @@ </software> <software name="fullswin"> + <!-- + Origin: TOSEC + <rom name="Full Swing, The (1993)(Xdra)(EU).iso" size="520203600" crc="bca6b548" md5="a7fcf9357633e33e5fa106ca4150ce57"/> + <rom name="Full Swing, The (1993)(Xdra)(EU).cue" size="121" crc="454ced84" md5="fa5121137103683f36a3936f9177de10"/> + --> <description>The Full Swing (Euro)</description> <year>1993</year> <publisher>Xdra</publisher> @@ -4093,6 +5999,11 @@ </software> <software name="gardenin"> + <!-- + Origin: TOSEC + <rom name="Gardening by Choice - Flowers & Foliage (1992)(Philips)(US)[!].iso" size="529693920" crc="2a7c3df4" md5="d29f5f22adcd4c77ebabf69dc6211956"/> + <rom name="Gardening by Choice - Flowers & Foliage (1992)(Philips)(US)[!].cue" size="151" crc="7824592f" md5="647e59529750612b781e4f5b1f07d99e"/> + --> <description>Gardening by Choice - Flowers & Foliage (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4104,6 +6015,11 @@ </software> <software name="gateshea"> + <!-- + Origin: TOSEC + <rom name="Gateshead 1900 - A Guide to Tyneside 100 Years Ago (1995)(Xdra)(EU).iso" size="637161504" crc="0402b86e" md5="c894ce07f4b8c0848d84fa82316b284a"/> + <rom name="Gateshead 1900 - A Guide to Tyneside 100 Years Ago (1995)(Xdra)(EU).cue" size="156" crc="40432f1e" md5="2fe7440054c77172e0289e8f446d56e6"/> + --> <description>Gateshead 1900 - A Guide to Tyneside 100 Years Ago (Euro)</description> <year>1995</year> <publisher>Xdra</publisher> @@ -4115,6 +6031,12 @@ </software> <software name="gettinga"> + <!-- + Origin: TOSEC + <rom name="Getting Ahead - Making Time (1994)(Temple Millar Multimedia - Xdra)(EU)(Track 1 of 2)[!][CD-i-PC].iso" size="261958704" crc="1e4655d5" md5="006657c613ddce75dcb58ea540c8645e"/> + <rom name="Getting Ahead - Making Time (1994)(Temple Millar Multimedia - Xdra)(EU)(Track 2 of 2)[!][CD-i-PC].wav" size="376795148" crc="3576d879" md5="d2fa76c544f819f5ddbe7e742603b746"/> + <rom name="Getting Ahead - Making Time (1994)(Temple Millar Multimedia - Xdra)(EU)[!][CD-i-PC].cue" size="363" crc="3a4f2123" md5="3ed5329375d9ae86b331b9b4bab4d81a"/> + --> <description>Getting Ahead - Making Time (Euro)[CD-i-PC]</description> <year>1994</year> <publisher>Temple Millar Multimedia ~ Xdra</publisher> @@ -4126,6 +6048,11 @@ </software> <software name="gnomes"> + <!-- + Origin: TOSEC + <rom name="Gnomes v2.10 (1995)(Philips)(US)[!].iso" size="733123104" crc="ecd412a2" md5="54c3bbf4fcf97cdba13b4951484f4489"/> + <rom name="Gnomes v2.10 (1995)(Philips)(US)[!].cue" size="124" crc="ac6d915c" md5="a8dfa6028c5498e4e9b5ce78322249a7"/> + --> <description>Gnomes v2.10 (USA)</description> <year>1995</year> <publisher>Philips</publisher> @@ -4137,6 +6064,11 @@ </software> <software name="goldoldj"> + <!-- + Origin: TOSEC + <rom name="Golden Oldies Jukebox (1991)(Philips)(US)[!][310690006-2 50240 109 01].iso" size="625984800" crc="41787623" md5="f554117e674e96b882a7a85f0a05c390"/> + <rom name="Golden Oldies Jukebox (1991)(Philips)(US)[!][310690006-2 50240 109 01].cue" size="159" crc="389cf80e" md5="8378c651214e5894d7d5625289233898"/> + --> <description>Golden Oldies Jukebox (USA)[310690006-2 50240 109 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -4148,6 +6080,11 @@ </software> <software name="goldoldja" cloneof="goldoldj"> + <!-- + Origin: TOSEC + <rom name="Golden Oldies Jukebox (1991)(Philips)(US)[0062919 01].iso" size="625984800" crc="519c776b" md5="7b08fd8cd35dd7903dbfe07a2dda33e7"/> + <rom name="Golden Oldies Jukebox (1991)(Philips)(US)[0062919 01].cue" size="142" crc="780df72b" md5="139b5fb1c6d8d330d479758b15c70d7b"/> + --> <description>Golden Oldies Jukebox (USA)[0062919 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -4159,6 +6096,19 @@ </software> <software name="glfmyway"> + <!-- + Origin: TOSEC + <rom name="Golf My Way (1994)(Philips)(US)(Disc 1 of 5)[Part I].iso" size="626925600" crc="0a35703d" md5="9a8facfd8a14a1492268d5ac0952d01f"/> + <rom name="Golf My Way (1994)(Philips)(US)(Disc 1 of 5)[Part I].cue" size="141" crc="15ddb01c" md5="58760db88013820fbb1e4168bc853054"/> + <rom name="Golf My Way (1994)(Philips)(US)(Disc 2 of 5)[Part I].iso" size="734353200" crc="06ac2a4e" md5="c1ce553a2e4aca3848dbb0f7bf8ecf4e"/> + <rom name="Golf My Way (1994)(Philips)(US)(Disc 2 of 5)[Part I].cue" size="141" crc="ca4ffefa" md5="6470e421835403e1b358c2f3d91d8b0f"/> + <rom name="Golf My Way (1994)(Philips)(US)(Disc 3 of 5)[Part II].iso" size="499741200" crc="becdd78d" md5="da3343d9d994354b2fa4a83614e579e2"/> + <rom name="Golf My Way (1994)(Philips)(US)(Disc 3 of 5)[Part II].cue" size="142" crc="7e1d45d4" md5="7672600ba0b97c643b1a30530ef93d84"/> + <rom name="Golf My Way (1994)(Philips)(US)(Disc 4 of 5)[Part II].iso" size="550368000" crc="0a7eabee" md5="d351d449e28d988351c726f13a404193"/> + <rom name="Golf My Way (1994)(Philips)(US)(Disc 4 of 5)[Part II].cue" size="142" crc="63325eec" md5="f657f7fc8b9e43925105b4b47fd2dc9f"/> + <rom name="Golf My Way (1994)(Philips)(US)(Disc 5 of 5)[Part II].iso" size="471340800" crc="da68c77a" md5="d7b0bdc9e059625c3b7373a7213a56a2"/> + <rom name="Golf My Way (1994)(Philips)(US)(Disc 5 of 5)[Part II].cue" size="142" crc="ed70efd2" md5="be5213b1e4d2b4784b97ce9f47cdd84d"/> + --> <description>Golf My Way (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -4190,6 +6140,11 @@ </software> <software name="golftips"> + <!-- + Origin: TOSEC + <rom name="Golf Tips - Customised golf instruction (1993)(Xdra)(EU)(en-ja).iso" size="417009600" crc="16ee5e0a" md5="3e1f463727d407c684a3fe98839b1593"/> + <rom name="Golf Tips - Customised golf instruction (1993)(Xdra)(EU)(en-ja).cue" size="152" crc="83e9cc14" md5="8d5036c35edfd14f0f8daf67d5ac6ff5"/> + --> <description>Golf Tips - Customised Golf Instruction (Euro)</description> <year>1993</year> <publisher>Xdra</publisher> @@ -4201,6 +6156,11 @@ </software> <software name="goyagrab"> + <!-- + Origin: TOSEC + <rom name="Goya Grabador - Luces Y Sombras (1995)(Philips)(ES)(M3).iso" size="538196400" crc="b4ef86d0" md5="b77aebbe032653beb2763d044aa597f2"/> + <rom name="Goya Grabador - Luces Y Sombras (1995)(Philips)(ES)(M3).cue" size="144" crc="281dfa2c" md5="590c102b109503298589bf1bc88e6998"/> + --> <description>Goya Grabador - Luces y Sombras (Spa)</description> <year>1995</year> <publisher>Philips</publisher> @@ -4212,6 +6172,12 @@ </software> <software name="granprix"> + <!-- + Origin: TOSEC + <rom name="Grand Prix Special (1994)(Xdra)(EU)(Track 1 of 2).iso" size="345567600" crc="42df9bee" md5="d3dc1f362740fcd03d90229e12146618"/> + <rom name="Grand Prix Special (1994)(Xdra)(EU)(Track 2 of 2).wav" size="410482844" crc="69503dba" md5="a54599d4205d30a460cfcd11ad92fd48"/> + <rom name="Grand Prix Special (1994)(Xdra)(EU).cue" size="267" crc="537510fe" md5="e092359209d8119cf9973a0d1683a3b5"/> + --> <description>Grand Prix Special (Euro)</description> <year>1994</year> <publisher>Xdra</publisher> @@ -4223,6 +6189,11 @@ </software> <software name="greatag" supported="no"> + <!-- + Origin: TOSEC + <rom name="Great American Golf 2 (1994)(Xdra)(EU)[DVC].iso" size="491450400" crc="5d02ac06" md5="4d055435319cd9beab75af127d44fd51"/> + <rom name="Great American Golf 2 (1994)(Xdra)(EU)[DVC].cue" size="132" crc="ef1005ce" md5="36ff4af2ff9a1d5fefc36b90c83baa5b"/> + --> <description>Great American Golf 2 (Euro)[DVC]</description> <year>1994</year> <publisher>Xdra</publisher> @@ -4235,6 +6206,11 @@ </software> <software name="greatbg"> + <!-- + Origin: TOSEC + <rom name="Great British Golf - Middle Ages - 1940 (1992)(Philips)(EU)[!].iso" size="588305760" crc="b176b5ad" md5="1262e879424db6bf6909cee55f4d9413"/> + <rom name="Great British Golf - Middle Ages - 1940 (1992)(Philips)(EU)[!].cue" size="151" crc="d69cd1cf" md5="4c4f95b39376d77a8f38dd43d3ba8be9"/> + --> <description>Great British Golf - Middle Ages - 1940 (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4246,6 +6222,11 @@ </software> <software name="vangogh"> + <!-- + Origin: TOSEC + <rom name="Harvest of the Sun - Vincent Van Gogh Revisited (1991)(Philips)(US)[!][028294 01].iso" size="603111600" crc="05228ff9" md5="acf7dacd2a60341cb8bc5c0507582ba3"/> + <rom name="Harvest of the Sun - Vincent Van Gogh Revisited (1991)(Philips)(US)[!][028294 01].cue" size="170" crc="29dae4c8" md5="ebcdb4bab5a8aff1aa4e39541ba6d926"/> + --> <description>Harvest of the Sun - Vincent Van Gogh Revisited (USA)[028294 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -4257,6 +6238,11 @@ </software> <software name="vangogha" cloneof="vangogh"> + <!-- + Origin: TOSEC + <rom name="Harvest of the Sun - Vincent Van Gogh Revisited (1992)(Philips)(US)[310690028-2 50239 148 01].iso" size="615024480" crc="36c793bf" md5="1d4f740b02ccb7e947e26f4e6e93a002"/> + <rom name="Harvest of the Sun - Vincent Van Gogh Revisited (1992)(Philips)(US)[310690028-2 50239 148 01].cue" size="182" crc="3d62d564" md5="4f353f550b0ab9581ae3a5c91a490689"/> + --> <description>Harvest of the Sun - Vincent Van Gogh Revisited (USA)[310690028-2 50239 148 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -4268,6 +6254,11 @@ </software> <software name="vangoghb" cloneof="vangogh"> + <!-- + Origin: TOSEC + <rom name="Harvest of the Sun - Vincent Van Gogh Revisited (1992)(Philips)(US)[310690028-2 50239 148 02].iso" size="615024480" crc="02b0f13d" md5="543924ec2b979d02d51b503ee6155a08"/> + <rom name="Harvest of the Sun - Vincent Van Gogh Revisited (1992)(Philips)(US)[310690028-2 50239 148 02].cue" size="182" crc="3c3ff3b5" md5="321a485f137871874725ab38ffb59671"/> + --> <description>Harvest of the Sun - Vincent Van Gogh Revisited (USA)[310690028-2 50239 148 02]</description> <year>1992</year> <publisher>Philips</publisher> @@ -4279,6 +6270,11 @@ </software> <software name="vangoghf" cloneof="vangogh"> + <!-- + Origin: TOSEC + <rom name="Harvest of the Sun - Van Gogh - Une Moisson de soleils (1992)(Philips)(FR)[!].iso" size="618975840" crc="c9934e98" md5="d870270f1d0f4bb9c4b64baf329610e1"/> + <rom name="Harvest of the Sun - Van Gogh - Une Moisson de soleils (1992)(Philips)(FR)[!].cue" size="166" crc="0d3af5da" md5="ca4ec85fcd7639dcdabac40e47397346"/> + --> <description>Harvest of the Sun - Van Gogh - Une Moisson de soleils (Fra)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4290,6 +6286,11 @@ </software> <software name="vangoghd" cloneof="vangogh"> + <!-- + Origin: TOSEC + <rom name="Oogst van de Zon - leven en kunst van Vincent van Gogh (1992)(Philips)(NL)[!].iso" size="618975840" crc="04e4a47a" md5="03a3c0504137227ddd22283c19ad43a9"/> + <rom name="Oogst van de Zon - leven en kunst van Vincent van Gogh (1992)(Philips)(NL)[!].cue" size="166" crc="5d7fa83e" md5="ef04327b7f28270c0e6445eefab081f4"/> + --> <description>Oogst van de Zon - leven en kunst van Vincent van Gogh (Ned)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4301,6 +6302,11 @@ </software> <software name="vangoghg" cloneof="vangogh"> + <!-- + Origin: TOSEC + <rom name="Ernte der Sonne - Vincent Van Gogh (1992)(Philips)(DE).iso" size="651527520" crc="19131c00" md5="8b62350c2a90dffb1a4278667f515a5b"/> + <rom name="Ernte der Sonne - Vincent Van Gogh (1992)(Philips)(DE).cue" size="143" crc="b0a16c65" md5="c533fe4c31756b33147e2082ab398b8e"/> + --> <description>Ernte der Sonne - Vincent Van Gogh (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4312,6 +6318,11 @@ </software> <software name="vangoghs" cloneof="vangogh"> + <!-- + Origin: TOSEC + <rom name="cosecha del Sol, La - Vincent Van Gogh Revivido (1992)(Philips)(ES)[!].iso" size="651997920" crc="5517b374" md5="8649ab562186a4a93ae74e2820b4d762"/> + <rom name="cosecha del Sol, La - Vincent Van Gogh Revivido (1992)(Philips)(ES)[!].cue" size="159" crc="c0383479" md5="8a19730f06b72232123e136a787a2a9f"/> + --> <description>La Cosecha del Sol - Vincent Van Gogh Revivido (Spa)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4323,6 +6334,11 @@ </software> <software name="hauntedh"> + <!-- + Origin: TOSEC + <rom name="Haunted House (1996)(Philips)(EU).iso" size="557400480" crc="05e678ac" md5="29f4fa3da465474807d878bb1c7a01bd"/> + <rom name="Haunted House (1996)(Philips)(EU).cue" size="122" crc="70b76cb3" md5="10c6377f43b1b23dedb663e5db636a84"/> + --> <description>Haunted House (Euro)</description> <year>1996</year> <publisher>Philips</publisher> @@ -4335,6 +6351,15 @@ <!-- TODO: check if the part_id used are 'names' for the disk, or anything else... --> <software name="help"> + <!-- + Origin: TOSEC + <rom name="Help! Opleiding Bedrijfshulpverlener voor de supermarkt (1996)(-)(NL)(Disc 1 of 3)[Inleiding EHBO2 Toets].iso" size="505919904" crc="0991cbf6" md5="15289b75adf5b32ce41d0bfd4de6f869"/> + <rom name="Help! Opleiding Bedrijfshulpverlener voor de supermarkt (1996)(-)(NL)(Disc 1 of 3)[Inleiding EHBO2 Toets].cue" size="194" crc="7782318a" md5="40af00b69ea1e7de7a32b12fb6e06b1a"/> + <rom name="Help! Opleiding Bedrijfshulpverlener voor de supermarkt (1996)(-)(NL)(Disc 2 of 3)[EHBO1].iso" size="536084304" crc="27738f17" md5="a18690a61933ef83d05a305648abaa06"/> + <rom name="Help! Opleiding Bedrijfshulpverlener voor de supermarkt (1996)(-)(NL)(Disc 2 of 3)[EHBO1].cue" size="178" crc="d75c8364" md5="f674573dc7a50858ca4e30496cc114d8"/> + <rom name="Help! Opleiding Bedrijfshulpverlener voor de supermarkt (1996)(-)(NL)(Disc 3 of 3)[Brand Ontruiming].iso" size="540670704" crc="3ab4fb4d" md5="f0a890cc316654e6341b7b8df1685325"/> + <rom name="Help! Opleiding Bedrijfshulpverlener voor de supermarkt (1996)(-)(NL)(Disc 3 of 3)[Brand Ontruiming].cue" size="189" crc="98e5ae6b" md5="7d630584aec4226d954a817b0b1e21f1"/> + --> <description>Help! Opleiding Bedrijfshulpverlener voor de Supermarkt (Ned)</description> <year>1996</year> <publisher><unknown></publisher> @@ -4359,6 +6384,11 @@ </software> <software name="henrides" supported="no"> + <!-- + Origin: TOSEC + <rom name="Henri Des - Les Betises (1993)(Philips)(FR)[DVC].iso" size="665557200" crc="645ec304" md5="60878a55974a9d755364bc1bfd091ee4"/> + <rom name="Henri Des - Les Betises (1993)(Philips)(FR)[DVC].cue" size="137" crc="86a8ff06" md5="309a3412d89c63612d04a455a0cfdcff"/> + --> <description>Henri Des - Les Betises (Fra)[DVC]</description> <year>1993</year> <publisher>Philips</publisher> @@ -4371,6 +6401,11 @@ </software> <software name="hetstaat"> + <!-- + Origin: TOSEC + <rom name="Het staat in de Sterren (1996)(Philips)(NL).iso" size="734000400" crc="310411c4" md5="47f85c20a1d989c31034185e61657cbc"/> + <rom name="Het staat in de Sterren (1996)(Philips)(NL).cue" size="132" crc="8b5843a4" md5="5f87ee699939a6812fbb74e479213fba"/> + --> <description>Het staat in de Sterren (Ned)</description> <year>1996</year> <publisher>Philips</publisher> @@ -4382,6 +6417,11 @@ </software> <software name="hieperde"> + <!-- + Origin: TOSEC + <rom name="Hieperdepiep, ik lees! - 10 leesspelletjes (1996)(Philips)(NL).iso" size="397958400" crc="5674ed9e" md5="97751bf72f19aeb909deb04b7f3414c9"/> + <rom name="Hieperdepiep, ik lees! - 10 leesspelletjes (1996)(Philips)(NL).cue" size="151" crc="2ecaa3b2" md5="fb58460e24b81458ea549859d9f27e90"/> + --> <description>Hieperdepiep, ik lees! - 10 leesspelletjes (Ned)</description> <year>1996</year> <publisher>Philips</publisher> @@ -4393,6 +6433,17 @@ </software> <software name="histarte"> + <!-- + Origin: TOSEC + <rom name="Historia Universal del ARTE - La aventura de la expresion humana (1996)(Salvat Multimedia)(ES)(Disc 1 of 4).iso" size="577361904" crc="95b1e340" md5="9db1883fa8a684a919b1d6ff2a9658ff"/> + <rom name="Historia Universal del ARTE - La aventura de la expresion humana (1996)(Salvat Multimedia)(ES)(Disc 1 of 4).cue" size="196" crc="24d60014" md5="3453972c77f7b4fecf314f3b9e7291f0"/> + <rom name="Historia Universal del ARTE - La aventura de la expresion humana (1996)(Salvat Multimedia)(ES)(Disc 2 of 4).iso" size="266192304" crc="c04c60c1" md5="3ead0c3737bab98e27f4966a6222dbd2"/> + <rom name="Historia Universal del ARTE - La aventura de la expresion humana (1996)(Salvat Multimedia)(ES)(Disc 2 of 4).cue" size="196" crc="68652abd" md5="92b746bc5d3239f951faf47ff207fc6a"/> + <rom name="Historia Universal del ARTE - La aventura de la expresion humana (1996)(Salvat Multimedia)(ES)(Disc 3 of 4).iso" size="375560304" crc="253ca70e" md5="badeb67a2085b1c7459a421ec29a21b7"/> + <rom name="Historia Universal del ARTE - La aventura de la expresion humana (1996)(Salvat Multimedia)(ES)(Disc 3 of 4).cue" size="196" crc="e524cee5" md5="3bc3db63ac79fa8c4b5cbb21fbb8b8e9"/> + <rom name="Historia Universal del ARTE - La aventura de la expresion humana (1996)(Salvat Multimedia)(ES)(Disc 4 of 4).iso" size="577538304" crc="a9c8ca08" md5="57f2414a55500964f2e593a979a34f51"/> + <rom name="Historia Universal del ARTE - La aventura de la expresion humana (1996)(Salvat Multimedia)(ES)(Disc 4 of 4).cue" size="196" crc="f1037fef" md5="e9c8b4aec730dc76304637bf26d6c476"/> + --> <description>Historia Universal del ARTE - La aventura de la expresion humana (Spa)</description> <year>1996</year> <publisher>Salvat Multimedia</publisher> @@ -4419,6 +6470,11 @@ </software> <software name="hitkara1"> + <!-- + Origin: TOSEC + <rom name="Hit Karaoke Volume 1 - Nostalgie (1996)(Philips)(FR).iso" size="332342304" crc="6088c9e5" md5="c60a57d611dac8474a6a0c600c849366"/> + <rom name="Hit Karaoke Volume 1 - Nostalgie (1996)(Philips)(FR).cue" size="141" crc="41243b96" md5="8384dab9b6e38c210e248ba61f247363"/> + --> <description>Hit Karaoke Volume 1 - Nostalgie (Fra)</description> <year>1996</year> <publisher>Philips</publisher> @@ -4430,6 +6486,11 @@ </software> <software name="hitkara2"> + <!-- + Origin: TOSEC + <rom name="Hit Karaoke Volume 2 - Annees 80-90 (1996)(Philips)(FR).iso" size="427774704" crc="20229462" md5="baed73b54a13637ed840adfb22226f79"/> + <rom name="Hit Karaoke Volume 2 - Annees 80-90 (1996)(Philips)(FR).cue" size="144" crc="24d5920e" md5="46fe802c8db00c035c5d77ec4b9cc07d"/> + --> <description>Hit Karaoke Volume 2 - Annees 80-90 (Fra)</description> <year>1996</year> <publisher>Philips</publisher> @@ -4441,6 +6502,11 @@ </software> <software name="hitkara3"> + <!-- + Origin: TOSEC + <rom name="Hit Karaoke Volume 3 - Gold's (1996)(Philips)(FR).iso" size="306940704" crc="69ed09dc" md5="4811bdc462b9b212c3c6adc7d8e899ee"/> + <rom name="Hit Karaoke Volume 3 - Gold's (1996)(Philips)(FR).cue" size="138" crc="bda8eaa7" md5="ff42e34b7239a90fc36f6b93f1f3e746"/> + --> <description>Hit Karaoke Volume 3 - Gold's (Fra)</description> <year>1996</year> <publisher>Philips</publisher> @@ -4452,6 +6518,11 @@ </software> <software name="hitkara5"> + <!-- + Origin: TOSEC + <rom name="Hit Karaoke Volume 5 - Top Club (1996)(Philips)(FR).iso" size="355803504" crc="3be0095c" md5="e5633315e65bf84cb50dca37651a193c"/> + <rom name="Hit Karaoke Volume 5 - Top Club (1996)(Philips)(FR).cue" size="140" crc="7481f3bb" md5="5fc7343ce479c714e7979ba7c5d2cb72"/> + --> <description>Hit Karaoke Volume 5 - Top Club (Fra)</description> <year>1996</year> <publisher>Philips</publisher> @@ -4463,6 +6534,11 @@ </software> <software name="hollands"> + <!-- + Origin: TOSEC + <rom name="Hollandse Meesters uit de Zeventiende Eeuw (1992)(Philips)(NL)[!].iso" size="751534560" crc="4a01c1a7" md5="8fa0418236bdcf29edf1a28104b40ba5"/> + <rom name="Hollandse Meesters uit de Zeventiende Eeuw (1992)(Philips)(NL)[!].cue" size="154" crc="91de9e6d" md5="87482ff4d5b3860f1af34758284dea34"/> + --> <description>Hollandse Meesters uit de Zeventiende Eeuw (Ned)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4474,6 +6550,11 @@ </software> <software name="hondenli" supported="no"> + <!-- + Origin: TOSEC + <rom name="Hondenliefde (1995)(AVRO)(NL)[DVC].iso" size="738057600" crc="2e4a7424" md5="ee2e613a3a140a790a9ae3150dc832a7"/> + <rom name="Hondenliefde (1995)(AVRO)(NL)[DVC].cue" size="123" crc="e0d93f18" md5="82bb06397cbba8e7e23666e1883289c3"/> + --> <description>Hondenliefde (Ned)[DVC]</description> <year>1995</year> <publisher>AVRO</publisher> @@ -4486,6 +6567,11 @@ </software> <software name="camel"> + <!-- + Origin: TOSEC + <rom name="How the Camel got it's Hump (1992)(Philips)(US)(en-es)[!].iso" size="452466000" crc="072034be" md5="b57ba972fc8c6233f0f75b87778ce75a"/> + <rom name="How the Camel got it's Hump (1992)(Philips)(US)(en-es)[!].cue" size="146" crc="feb9594b" md5="469ba0b2af9b86cbea2475f2ad634611"/> + --> <description>How the Camel got its Hump (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4497,6 +6583,11 @@ </software> <software name="rhino"> + <!-- + Origin: TOSEC + <rom name="How the Rhinoceros got his Skin (1992)(Philips)(US)(en-es)[3106900232 02!].iso" size="427064400" crc="0cef10ee" md5="d8746415866dac7cb7d3ed7bcf5f2012"/> + <rom name="How the Rhinoceros got his Skin (1992)(Philips)(US)(en-es)[3106900232 02!].cue" size="163" crc="05bfd2e3" md5="f9991c467d9247ceff1f6bde56682f7a"/> + --> <description>How the Rhinoceros Got His Skin (USA)[3106900232 02!]</description> <year>1992</year> <publisher>Philips</publisher> @@ -4508,6 +6599,11 @@ </software> <software name="rhinog" cloneof="rhino"> + <!-- + Origin: TOSEC + <rom name="Wie das Rhinozeros zu seiner Haut kam (1993)(Philips)(DE)[!].iso" size="498859200" crc="9c5d688f" md5="b0127e16375582cd91eaedc4b654faf9"/> + <rom name="Wie das Rhinozeros zu seiner Haut kam (1993)(Philips)(DE)[!].cue" size="149" crc="81dd6c9c" md5="79828f9049e14d3c677eeeefe76353b5"/> + --> <description>Wie das Rhinozeros zu seiner Haut kam (Ger)</description> <year>1993</year> <publisher>Philips</publisher> @@ -4519,6 +6615,11 @@ </software> <software name="rhinoa" cloneof="rhino"> + <!-- + Origin: TOSEC + <rom name="How the Rhinoceros got his Skin (1992)(Philips)(US)(en-es)[3106900232 50237 962 01].iso" size="427417200" crc="c848065a" md5="5bdd5c81e4da887628cae4566b0de5cd"/> + <rom name="How the Rhinoceros got his Skin (1992)(Philips)(US)(en-es)[3106900232 50237 962 01].cue" size="172" crc="02a6455a" md5="f05a7028096f61c657eea98445bf6b60"/> + --> <description>How the Rhinoceros got his Skin (USA)[3106900232 50237 962 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -4530,6 +6631,12 @@ </software> <software name="howphoto"> + <!-- + Origin: TOSEC + <rom name="How to Photograph Nature (1993)(Philips)(US)(Track 1 of 2)[!][CD-i-Photo CD].iso" size="490392000" crc="e3c64107" md5="c9b23be5e796b517f29b77a358f7deaf"/> + <rom name="How to Photograph Nature (1993)(Philips)(US)(Track 2 of 2)[!][CD-i-Photo CD].wav" size="230202044" crc="c92dbd5b" md5="d816d1ef2c27d4f10be7e0ba7b8f274e"/> + <rom name="How to Photograph Nature (1993)(Philips)(US)[!][CD-i-Photo CD].cue" size="321" crc="7a10ddfa" md5="59c7d8e28bb242bf0c0c6a33491b03fc"/> + --> <description>How to Photograph Nature (USA)[CD-i-Photo CD]</description> <year>1993</year> <publisher>Philips</publisher> @@ -4541,6 +6648,11 @@ </software> <software name="ikmiklet" supported="no"> + <!-- + Origin: TOSEC + <rom name="ik, mik, Letterland - een leesavontuur met maan roos vis (1996)(Philips)(NL)[!][DVC].iso" size="679144704" crc="7c5681db" md5="bd97aa35f752542f333578ae875850d7"/> + <rom name="ik, mik, Letterland - een leesavontuur met maan roos vis (1996)(Philips)(NL)[!][DVC].cue" size="173" crc="74bf1ec2" md5="f57850e3ef257752b6aa46613cc0fa43"/> + --> <description>Ik, Mik, Letterland - een leesavontuur met maan roos vis (Ned)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -4553,6 +6665,14 @@ </software> <software name="imaginat" supported="no"> + <!-- + Origin: TOSEC + <rom name="Imagination in Motion - A New Era in 3D Chill Out Video (1996)(AIMS Multimedia)(EU)(Track 1 of 4)[DVC].iso" size="292711104" crc="305e83eb" md5="c62e5a3b3f7217a5245f137714f8a116"/> + <rom name="Imagination in Motion - A New Era in 3D Chill Out Video (1996)(AIMS Multimedia)(EU)(Track 2 of 4)[DVC].iso" size="130604208" crc="5b332341" md5="0fe475936b48caaab0c5364c64770056"/> + <rom name="Imagination in Motion - A New Era in 3D Chill Out Video (1996)(AIMS Multimedia)(EU)(Track 3 of 4)[DVC].iso" size="98685216" crc="09602ae0" md5="42b6990f3adfe21ebb367a37ae17e7bc"/> + <rom name="Imagination in Motion - A New Era in 3D Chill Out Video (1996)(AIMS Multimedia)(EU)(Track 4 of 4)[DVC].iso" size="58705920" crc="91e0b664" md5="3e52fb9bd80b8683cfa918ff2702d48c"/> + <rom name="Imagination in Motion - A New Era in 3D Chill Out Video (1996)(AIMS Multimedia)(EU)[DVC].cue" size="758" crc="1a35ce39" md5="0421bbd0873598fd5ba79a22f090bd11"/> + --> <description>Imagination in Motion - A New Era in 3D Chill Out Video (Euro)[DVC]</description> <year>1996</year> <publisher>AIMS Multimedia</publisher> @@ -4565,6 +6685,11 @@ </software> <software name="interdec" supported="no"> + <!-- + Origin: TOSEC + <rom name="Interactive Math - Decimals v1.0 (1994)(Gulliver Ritchie Associates)(US)[DVC].iso" size="676498704" crc="6cbc3692" md5="fa424cc6500cafb222ab87ca47c7285e"/> + <rom name="Interactive Math - Decimals v1.0 (1994)(Gulliver Ritchie Associates)(US)[DVC].cue" size="166" crc="e742cc7d" md5="be0f4ef9b69ac964070d8aec12f72c91"/> + --> <description>Interactive Math - Decimals v1.0 (USA)[DVC]</description> <year>1994</year> <publisher>Gulliver Ritchie Associates</publisher> @@ -4577,6 +6702,11 @@ </software> <software name="interper"> + <!-- + Origin: TOSEC + <rom name="Interactive Math - Percentages v1.0 (1994)(Gulliver Ritchie Associates)(US).iso" size="665385504" crc="1801d8ae" md5="402192767b8f37d3ffb50fa5b59c6eb9"/> + <rom name="Interactive Math - Percentages v1.0 (1994)(Gulliver Ritchie Associates)(US).cue" size="164" crc="31bab77b" md5="524287a34ea12b6739c5f55243131ab0"/> + --> <description>Interactive Math - Percentages v1.0 (USA)</description> <year>1994</year> <publisher>Gulliver Ritchie Associates</publisher> @@ -4588,6 +6718,11 @@ </software> <software name="internet" supported="no"> + <!-- + Origin: TOSEC + <rom name="Internetten op je TV! - Demo Disc (1996)(Philips)(NL)[!][DVC][8140154].iso" size="263899104" crc="03bcac37" md5="b24dfb9727382b32bcf40b2fb5c669a6"/> + <rom name="Internetten op je TV! - Demo Disc (1996)(Philips)(NL)[!][DVC][8140154].cue" size="159" crc="1e6175c9" md5="f8ed81ba517ab5f9013401db362e6b5c"/> + --> <description>Internetten op je TV! - Demo Disc (Ned)[DVC][8140154]</description> <year>1996</year> <publisher>Philips</publisher> @@ -4600,6 +6735,11 @@ </software> <software name="interneta" cloneof="internet" supported="no"> + <!-- + Origin: TOSEC + <rom name="Internetten op je TV! - Demo Disc (1996)(Philips)(NL)[DVC][8100330].iso" size="335164704" crc="a97dfe80" md5="d33a215410666d1d542429244b7e69a9"/> + <rom name="Internetten op je TV! - Demo Disc (1996)(Philips)(NL)[DVC][8100330].cue" size="156" crc="16c58550" md5="455bbe5ab2afb0f84710b4fbc6f80c42"/> + --> <description>Internetten op je TV! - Demo Disc (Ned)[DVC][8100330]</description> <year>1996</year> <publisher>Philips</publisher> @@ -4612,6 +6752,11 @@ </software> <software name="jinvente"> + <!-- + Origin: TOSEC + <rom name="J'invente mes histoires 2 - Reves d'etoiles (1992)(Philips)(FR).iso" size="206105760" crc="31a69b85" md5="40b6ff6335ac6a46c3bcf7e3ffb04afe"/> + <rom name="J'invente mes histoires 2 - Reves d'etoiles (1992)(Philips)(FR).cue" size="152" crc="97044266" md5="86ccc33dd53c45e1e9fd0b15b970d112"/> + --> <description>J'invente mes histoires 2 - Rêves d'étoiles (Fra)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4623,6 +6768,11 @@ </software> <software name="jazzgian"> + <!-- + Origin: TOSEC + <rom name="Jazz Giants - From Big Band to Bossa Nova (1992)(Philips)(US)[!].iso" size="582566880" crc="aa24906b" md5="2c2e43c7f14542551871a589581364e5"/> + <rom name="Jazz Giants - From Big Band to Bossa Nova (1992)(Philips)(US)[!].cue" size="153" crc="b042ed7e" md5="e887d69932001490bb9904303be5b5d9"/> + --> <description>Jazz Giants - From Big Band to Bossa Nova (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -4634,6 +6784,11 @@ </software> <software name="jazzgianf" cloneof="jazzgian"> + <!-- + Origin: TOSEC + <rom name="Jazz - Les Geants de Big Band a la Bossa Nova (1993)(Philips)(FR).iso" size="548509920" crc="657f6ef6" md5="4f5bc7e91a4799c18d824f9752d8bdf0"/> + <rom name="Jazz - Les Geants de Big Band a la Bossa Nova (1993)(Philips)(FR).cue" size="154" crc="10754419" md5="edd9b2aecc0cd3304cfa314f3eb82c95"/> + --> <description>Jazz - Les Geants de Big Band à la Bossa Nova (Fra)</description> <year>1993</year> <publisher>Philips</publisher> @@ -4645,6 +6800,13 @@ </software> <software name="jour94" supported="no"> + <!-- + Origin: TOSEC + <rom name="Journal interactif '94 et Le Jeu des Stars de l'info, Le (1995)(Philips)(FR)(Disc 1 of 2)[Journal interactif][DVC].iso" size="721146720" crc="ea822c23" md5="561f493eab93ead0dc1387db40302ecc"/> + <rom name="Journal interactif '94 et Le Jeu des Stars de l'info, Le (1995)(Philips)(FR)(Disc 1 of 2)[Journal interactif][DVC].cue" size="203" crc="d92b86cf" md5="5ad1b9528818f2701b30caf1394a76f2"/> + <rom name="Journal interactif '94 et Le Jeu des Stars de l'info, Le (1995)(Philips)(FR)(Disc 2 of 2)[Jeu des Stars de l'info][DVC].iso" size="539007840" crc="a2c48358" md5="175424ae9404e89f783ca412816bc33a"/> + <rom name="Journal interactif '94 et Le Jeu des Stars de l'info, Le (1995)(Philips)(FR)(Disc 2 of 2)[Jeu des Stars de l'info][DVC].cue" size="208" crc="1fe6bd65" md5="7d304a34c8401e34eb367fcb65d6197c"/> + --> <description>Le Journal Interactif '94 et Le Jeu des Stars de l'info (Fra)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -4664,6 +6826,13 @@ </software> <software name="jour95" supported="no"> + <!-- + Origin: TOSEC + <rom name="Journal interactif 1995 et Le Jeu des Stars de l'info, Le (1995)(Philips)(FR)(Disc 1 of 2)[Journal interactif][DVC].iso" size="733339488" crc="92189640" md5="50b33e44bf412fb7204373ddff709d28"/> + <rom name="Journal interactif 1995 et Le Jeu des Stars de l'info, Le (1995)(Philips)(FR)(Disc 1 of 2)[Journal interactif][DVC].cue" size="204" crc="e06dc07a" md5="ba6a5119af71b9b2d091a88edb45afc8"/> + <rom name="Journal interactif 1995 et Le Jeu des Stars de l'info, Le (1995)(Philips)(FR)(Disc 2 of 2)[Jeu des Stars de l'info][DVC].iso" size="608048448" crc="21396e5d" md5="4309e3df225e17bbb0ecd3b266939e61"/> + <rom name="Journal interactif 1995 et Le Jeu des Stars de l'info, Le (1995)(Philips)(FR)(Disc 2 of 2)[Jeu des Stars de l'info][DVC].cue" size="209" crc="032d4128" md5="bb224f39feeea2a0eebb8b40fbe3aa27"/> + --> <description>Le Journal interactif 1995 et Le Jeu des Stars de l'info (Fra)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -4683,6 +6852,11 @@ </software> <software name="joysexu" cloneof="joysex" supported="no"> + <!-- + Origin: TOSEC + <rom name="Joy of Sex, The v3.01 (1994)(Philips)(US)[DVC].iso" size="735411600" crc="e323ffb3" md5="ca7148ec8ed8d55b724e9e248afc81ea"/> + <rom name="Joy of Sex, The v3.01 (1994)(Philips)(US)[DVC].cue" size="135" crc="e9814a4d" md5="b65b45f80c2cc7a62ed2420d62bb6671"/> + --> <description>The Joy of Sex v3.01 (USA)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -4695,6 +6869,11 @@ </software> <software name="joysex" supported="no"> + <!-- + Origin: TOSEC + <rom name="Joy of Sex, The v3.03 (1993)(Philips)(EU)[!][DVC].iso" size="725886000" crc="fbcd7f45" md5="8e7ccf5080a4a46652c22594f05d009d"/> + <rom name="Joy of Sex, The v3.03 (1993)(Philips)(EU)[!][DVC].cue" size="138" crc="20b33050" md5="a169eee09d8c458b50e975ada2fcf909"/> + --> <description>The Joy of Sex v3.03 (Euro)[DVC]</description> <year>1993</year> <publisher>Philips</publisher> @@ -4707,6 +6886,11 @@ </software> <software name="karaokec"> + <!-- + Origin: TOSEC + <rom name="Karaoke Collection Nr. 5 (1993)(Giunti Multimedia)(IT).iso" size="510501600" crc="7bb782df" md5="bd11a8996d41b788053f197b8bcc6b96"/> + <rom name="Karaoke Collection Nr. 5 (1993)(Giunti Multimedia)(IT).cue" size="143" crc="8b0b66da" md5="eb24e565f318446c2d91bb677347e84e"/> + --> <description>Karaoke Collection Nr. 5 (Ita)</description> <year>1993</year> <publisher>Giunti Multimedia</publisher> @@ -4718,6 +6902,11 @@ </software> <software name="karaoke1"> + <!-- + Origin: TOSEC + <rom name="Karaoke Klassics 1 - Family Favorites (1993)(Philips)(EU)(M6).iso" size="634158000" crc="ff6d92dc" md5="61a726faa2212505611b35bd6a65bcca"/> + <rom name="Karaoke Klassics 1 - Family Favorites (1993)(Philips)(EU)(M6).cue" size="150" crc="40060201" md5="b05a1791e4881ebd20eff85a24e6a391"/> + --> <description>Karaoke Klassics 1 - Family Favorites (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -4729,6 +6918,11 @@ </software> <software name="karaoke2"> + <!-- + Origin: TOSEC + <rom name="Karaoke Klassics 2 - Greatest Love Duets Volume 1 (1993)(Philips)(EU)(M6).iso" size="520380000" crc="37956a2e" md5="dec3e4ad911ca9cf0239754b4444da58"/> + <rom name="Karaoke Klassics 2 - Greatest Love Duets Volume 1 (1993)(Philips)(EU)(M6).cue" size="162" crc="520a3c46" md5="098b3aeef6f722498835b14343837af2"/> + --> <description>Karaoke Klassics 2 - Greatest Love Duets Volume 1 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -4740,6 +6934,11 @@ </software> <software name="karaoke3"> + <!-- + Origin: TOSEC + <rom name="Karaoke Klassics 3 - Male Standards Volume 1 (1993)(Philips)(EU)(M6).iso" size="416480400" crc="8a5af29a" md5="e3c18473cd7355a1e09c2a88fa106fae"/> + <rom name="Karaoke Klassics 3 - Male Standards Volume 1 (1993)(Philips)(EU)(M6).cue" size="157" crc="31664d6c" md5="160c4f4c75d0995afad82d8a3642dc02"/> + --> <description>Karaoke Klassics 3 - Male Standards Volume 1 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -4751,6 +6950,11 @@ </software> <software name="karaoke4"> + <!-- + Origin: TOSEC + <rom name="Karaoke Klassics 4 - Contemporary Pop Female Volume 1 (1993)(Philips)(EU)(M6).iso" size="520203600" crc="b0e920c6" md5="a578d31b6d5a20d86f2b01b55d115a27"/> + <rom name="Karaoke Klassics 4 - Contemporary Pop Female Volume 1 (1993)(Philips)(EU)(M6).cue" size="166" crc="b2988e9b" md5="a8c061e8bb90558d90ab564eddfdcad3"/> + --> <description>Karaoke Klassics 4 - Contemporary Pop Female Volume 1 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -4762,6 +6966,11 @@ </software> <software name="karaoke5"> + <!-- + Origin: TOSEC + <rom name="Karaoke Klassics 5 - Special Occasions (1994)(Philips)(EU)(M6).iso" size="345043104" crc="e797a30b" md5="9d5394593eb7ff80e80733fe2937fd82"/> + <rom name="Karaoke Klassics 5 - Special Occasions (1994)(Philips)(EU)(M6).cue" size="151" crc="2d0447ef" md5="59b748ea7c66841932bba72253dc4ba4"/> + --> <description>Karaoke Klassics 5 - Special Occasions (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -4773,6 +6982,11 @@ </software> <software name="kathy" supported="no"> + <!-- + Origin: TOSEC + <rom name="Kathy Smith - Personal Trainer (1995)(Philips)(EU)[DVC].iso" size="758872800" crc="8b0ab266" md5="df05aaebae641fc006321a2a4da3155c"/> + <rom name="Kathy Smith - Personal Trainer (1995)(Philips)(EU)[DVC].cue" size="144" crc="238a8d68" md5="041d1fe22cc0aadc127fb797bc887222"/> + --> <description>Kathy Smith - Personal Trainer (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -4785,6 +6999,11 @@ </software> <software name="kathyu" cloneof="kathy" supported="no"> + <!-- + Origin: TOSEC + <rom name="Kathy Smith - Personal Trainer (1995)(Philips)(US)[DVC].iso" size="759225600" crc="6a473663" md5="36db197dd654e993d0baaf0418fc4e29"/> + <rom name="Kathy Smith - Personal Trainer (1995)(Philips)(US)[DVC].cue" size="144" crc="5f80455f" md5="450fe2b5c76e2751a3e3603d44b1de20"/> + --> <description>Kathy Smith - Personal Trainer (USA)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -4797,6 +7016,13 @@ </software> <software name="bonjovi" supported="no"> + <!-- + Origin: TOSEC + <rom name="Keep The Faith - An Evening with Bon Jovi (1993)(Philips - PolyGram)(PAL)(EU)(Disc 1 of 2)[!][DVC].iso" size="441529200" crc="96f197ec" md5="0380984f4cca534438638f5ee5524847"/> + <rom name="Keep The Faith - An Evening with Bon Jovi (1993)(Philips - PolyGram)(PAL)(EU)(Disc 1 of 2)[!][DVC].cue" size="187" crc="0f4d1db8" md5="e96e59be12c3602703df1ecf7a01b385"/> + <rom name="Keep The Faith - An Evening with Bon Jovi (1993)(Philips - PolyGram)(PAL)(EU)(Disc 2 of 2)[!][DVC].iso" size="475398000" crc="d08590b1" md5="ff516b9a99ba31ccc97098ec1032cd01"/> + <rom name="Keep The Faith - An Evening with Bon Jovi (1993)(Philips - PolyGram)(PAL)(EU)(Disc 2 of 2)[!][DVC].cue" size="187" crc="d0df535e" md5="381b17a7a19d8225e8ea80da8d78c5c7"/> + --> <description>Keep The Faith - An Evening with Bon Jovi (Euro)[DVC]</description> <year>1993</year> <publisher>Philips ~ PolyGram</publisher> @@ -4814,6 +7040,24 @@ </software> <software name="kinderd" supported="no"> + <!-- + Origin: TOSEC + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 01 of 14)[DVC].iso" size="4939200" crc="efa7c767" md5="55ba5fa0e7a3fd571d66837dfe646e93"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 02 of 14)[DVC].iso" size="32156544" crc="51cf30e6" md5="dcdf68bbb123cddb49a5e88f4938ebe1"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 03 of 14)[DVC].iso" size="53131680" crc="5b2d9226" md5="aa20ef04480aa1f90e7432477b9655a2"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 04 of 14)[DVC].iso" size="43582560" crc="12ece7dd" md5="0caf82a8983eecafa20819aef732bb0a"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 05 of 14)[DVC].iso" size="32556384" crc="31ab55d6" md5="3084fb424ef21c3ee96d59f5b8607e16"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 06 of 14)[DVC].iso" size="30216144" crc="da505ebd" md5="726a099f64794de59a04789b47fdd6da"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 07 of 14)[DVC].iso" size="46245024" crc="aa922d11" md5="cadefa0475af55f28658368a653099ce"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 08 of 14)[DVC].iso" size="16809744" crc="c2fc0d33" md5="255789b764558d9a7a797264520e197e"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 09 of 14)[DVC].iso" size="24752448" crc="2b6f3451" md5="858f9ba0bae486f3256d6ed6165f786c"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 10 of 14)[DVC].iso" size="45172512" crc="d605b18a" md5="cfec86ecaf38a05615e8fac68443e519"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 11 of 14)[DVC].iso" size="13869744" crc="e0da3581" md5="b9dda588329cd8b9cf43d1b71926df29"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 12 of 14)[DVC].iso" size="25620336" crc="29f0271a" md5="68523f2e4821f85f93dcbab58bf116e1"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 13 of 14)[DVC].iso" size="42350112" crc="08b1f96a" md5="c1fbcd06e40b9e3940c7827e4e91eef7"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)(Track 14 of 14)[DVC].iso" size="22275792" crc="4cc3ebf4" md5="79dd38c21bcbe5aa3ae2d9fa06014766"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)[DVC].cue" size="2634" crc="5e5517b2" md5="30f073fc2c193f6c5feae9bb36c31a05"/> + --> <description>De Kinderdisc met het complete verhaal ijsbeer in de tropen (Ned)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -4826,6 +7070,11 @@ </software> <software name="kinderda" cloneof="kinderd" supported="no"> + <!-- + Origin: TOSEC + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)[a][DVC].iso" size="433678224" crc="12b01104" md5="b8b8cd2b2874542f108ea9c901b2147f"/> + <rom name="Kinderdisc met het complete verhaal ijsbeer in de tropen, De (1995)(Philips)(NL)[a][DVC].cue" size="177" crc="852f5506" md5="f95bc7573c14301f735cbcf669d7dc08"/> + --> <description>De Kinderdisc met het complete verhaal ijsbeer in de tropen (Ned, Alt)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -4838,6 +7087,11 @@ </software> <software name="kiss"> + <!-- + Origin: TOSEC + <rom name="Kiss v1.07 (1994)(Philips)(EU).iso" size="760813200" crc="309e761e" md5="a45106a8afcfd375b567dc2e75bb04d3"/> + <rom name="Kiss v1.07 (1994)(Philips)(EU).cue" size="119" crc="cc0c51df" md5="9407afe4157081461ea9f22aac14bddc"/> + --> <description>Kiss v1.07 (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -4849,6 +7103,11 @@ </software> <software name="kultur"> + <!-- + Origin: TOSEC + <rom name="Kulturberg naturtal - eine tirolreise auf cd-i (1994)(Philips)(AT).iso" size="458463600" crc="52046aa7" md5="d61920c1bd770018decad5dd6092fe19"/> + <rom name="Kulturberg naturtal - eine tirolreise auf cd-i (1994)(Philips)(AT).cue" size="155" crc="c7f9fec7" md5="099f482654614bf931f07bf79458dfca"/> + --> <description>Kulturberg Naturtal - Eine Tirolreise auf cd-i (Aut)</description> <year>1994</year> <publisher>Philips</publisher> @@ -4860,6 +7119,11 @@ </software> <software name="kunstscg"> + <!-- + Origin: TOSEC + <rom name="Kunstschaetze der Russischen Zaren, Die - St. Petersburg und die sammlungen der eremitage (1993)(Philips)(DE).iso" size="650351520" crc="420933cd" md5="bc2d9f4f3dca9a984bac2e003f325afc"/> + <rom name="Kunstschaetze der Russischen Zaren, Die - St. Petersburg und die sammlungen der eremitage (1993)(Philips)(DE).cue" size="198" crc="0e023c84" md5="573da6bd3487a2bd0739bfce6e6546a6"/> + --> <description>Die Kunstschaetze der Russischen Zaren - St. Petersburg und die sammlungen der eremitage (Ger)</description> <year>1993</year> <publisher>Philips</publisher> @@ -4871,6 +7135,11 @@ </software> <software name="kunstscd"> + <!-- + Origin: TOSEC + <rom name="Kunstschatten Van Rusluand, De - St. Petersburg en de Collectie van de Hermitage (1993)(Philips)(NL)[!].iso" size="643765920" crc="77786a87" md5="d7e607eebf5702f2f17bb0a9b448f5ae"/> + <rom name="Kunstschatten Van Rusluand, De - St. Petersburg en de Collectie van de Hermitage (1993)(Philips)(NL)[!].cue" size="192" crc="89492ea3" md5="d9386c45bd5f700afb7d70019268c6c8"/> + --> <description>De Kunstschatten Van Rusluand - St. Petersburg en de Collectie van de Hermitage (Ned)</description> <year>1993</year> <publisher>Philips</publisher> @@ -4882,6 +7151,11 @@ </software> <software name="kursbuch"> + <!-- + Origin: TOSEC + <rom name="Kursbuch Gesundheit (1995)(Philips)(DE).iso" size="730296000" crc="1bcae707" md5="d04b582262adf4b9528b15953b7c6269"/> + <rom name="Kursbuch Gesundheit (1995)(Philips)(DE).cue" size="128" crc="d15122e2" md5="4277ce107b031be19959beb1bfa34784"/> + --> <description>Kursbuch Gesundheit (Ger)</description> <year>1995</year> <publisher>Philips</publisher> @@ -4893,6 +7167,15 @@ </software> <software name="langg1"> + <!-- + Origin: TOSEC + <rom name="Language Director - Deutsch Level 1 (1993)(Philips)(EU)(Disc 1 of 3).iso" size="411012000" crc="fea0de7f" md5="0beb062f77520725aa097674e1b1b306"/> + <rom name="Language Director - Deutsch Level 1 (1993)(Philips)(EU)(Disc 1 of 3).cue" size="157" crc="b59013a3" md5="3aa670dcb610feaf2ab34ebadb96dca3"/> + <rom name="Language Director - Deutsch Level 1 (1993)(Philips)(EU)(Disc 2 of 3).iso" size="382435200" crc="c5d90d70" md5="4c75f2488c1c302061e0b157c046f20f"/> + <rom name="Language Director - Deutsch Level 1 (1993)(Philips)(EU)(Disc 2 of 3).cue" size="157" crc="f923390a" md5="b590a84915d928c0bfc57075c309a7cf"/> + <rom name="Language Director - Deutsch Level 1 (1993)(Philips)(EU)(Disc 3 of 3)[Guided Tour].iso" size="260366400" crc="71801910" md5="3ab527ce64fb6cd35e54be465073fcb8"/> + <rom name="Language Director - Deutsch Level 1 (1993)(Philips)(EU)(Disc 3 of 3)[Guided Tour].cue" size="170" crc="67d909d9" md5="dbc1fd0a68c14b881beba6d1aa6f864c"/> + --> <description>Language Director - Deutsch Level 1 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -4915,6 +7198,15 @@ </software> <software name="langg2"> + <!-- + Origin: TOSEC + <rom name="Language Director - Deutsch Level 2 (1993)(Philips)(EU)(Disc 1 of 3).iso" size="498506400" crc="6258d5c2" md5="d1d7337cd562cff724858295586d537c"/> + <rom name="Language Director - Deutsch Level 2 (1993)(Philips)(EU)(Disc 1 of 3).cue" size="157" crc="19deb8cd" md5="d1a9c146482d02fa83b0d63d13f99c98"/> + <rom name="Language Director - Deutsch Level 2 (1993)(Philips)(EU)(Disc 2 of 3).iso" size="289825200" crc="1af88ab5" md5="06a9719351a6f54fdc8f385b6037ecfd"/> + <rom name="Language Director - Deutsch Level 2 (1993)(Philips)(EU)(Disc 2 of 3).cue" size="157" crc="556d9264" md5="7c9b3e470178d8f3f2f90bf42b2e4857"/> + <rom name="Language Director - Deutsch Level 2 (1993)(Philips)(EU)(Disc 3 of 3)[Guided Tour].iso" size="288237600" crc="20bac270" md5="b5b52ef1c923ba2ac57624706f7cbb55"/> + <rom name="Language Director - Deutsch Level 2 (1993)(Philips)(EU)(Disc 3 of 3)[Guided Tour].cue" size="170" crc="adf21797" md5="6d6286a84ef2c892e9f4a22c84630a68"/> + --> <description>Language Director - Deutsch Level 2 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -4937,6 +7229,15 @@ </software> <software name="langg3"> + <!-- + Origin: TOSEC + <rom name="Language Director - Deutsch Level 3 (1994)(Philips)(EU)(Disc 1 of 3).iso" size="535903200" crc="83bd7ec4" md5="be4b4f022eaa5c21d0fe0dcec4f38ed9"/> + <rom name="Language Director - Deutsch Level 3 (1994)(Philips)(EU)(Disc 1 of 3).cue" size="157" crc="01cf2019" md5="08e9200ebc0387f759a1fda9edf55e23"/> + <rom name="Language Director - Deutsch Level 3 (1994)(Philips)(EU)(Disc 2 of 3).iso" size="557424000" crc="773a5a1f" md5="04d615afd22fccec29ab4634e599ff31"/> + <rom name="Language Director - Deutsch Level 3 (1994)(Philips)(EU)(Disc 2 of 3).cue" size="157" crc="4d7c0ab0" md5="2cb5e86b5542f56ffc549380aea538ad"/> + <rom name="Language Director - Deutsch Level 3 (1994)(Philips)(EU)(Disc 3 of 3)[Guided Tour].iso" size="116776800" crc="975eccfa" md5="ad34b6d17f211c7df58400ceeae046a8"/> + <rom name="Language Director - Deutsch Level 3 (1994)(Philips)(EU)(Disc 3 of 3)[Guided Tour].cue" size="170" crc="f5794192" md5="a1e5f2501e5383209e648a98836f3229"/> + --> <description>Language Director - Deutsch Level 3 (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -4959,6 +7260,15 @@ </software> <software name="lange1"> + <!-- + Origin: TOSEC + <rom name="Language Director - English Level 1 (1993)(Philips)(EU)(Disc 1 of 3)[!].iso" size="406425600" crc="bfe9f3b9" md5="358bbf5c12ceef4acb7ebe3d5875e59a"/> + <rom name="Language Director - English Level 1 (1993)(Philips)(EU)(Disc 1 of 3)[!].cue" size="160" crc="e3981466" md5="3dcdac62cbfdad494790d5fd1857cebe"/> + <rom name="Language Director - English Level 1 (1993)(Philips)(EU)(Disc 2 of 3)[!].iso" size="469929600" crc="748c057a" md5="4f39e5791b2620c390195c47ef29da3b"/> + <rom name="Language Director - English Level 1 (1993)(Philips)(EU)(Disc 2 of 3)[!].cue" size="160" crc="08325cdb" md5="285b30357b77caa3f4db01aad54c346f"/> + <rom name="Language Director - English Level 1 (1993)(Philips)(EU)(Disc 3 of 3)[!][Guided Tour].iso" size="406602000" crc="11d3a79b" md5="5896c47e51fe082d8834492b887dc927"/> + <rom name="Language Director - English Level 1 (1993)(Philips)(EU)(Disc 3 of 3)[!][Guided Tour].cue" size="173" crc="29f06965" md5="0b2bf27bb7442d15cbf7059387c3e28a"/> + --> <description>Language Director - English Level 1 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -4981,6 +7291,15 @@ </software> <software name="lange2"> + <!-- + Origin: TOSEC + <rom name="Language Director - English Level 2 (1993)(Philips)(EU)(Disc 1 of 3).iso" size="503974800" crc="d0a34011" md5="31f332702c04e97aa6b049b50bcf2612"/> + <rom name="Language Director - English Level 2 (1993)(Philips)(EU)(Disc 1 of 3).cue" size="157" crc="30c26ce7" md5="1da2c1b6b310bea2362a0112dc2e169a"/> + <rom name="Language Director - English Level 2 (1993)(Philips)(EU)(Disc 2 of 3).iso" size="270244800" crc="6c5d0b92" md5="d350dd16a13a08560605fe983a369273"/> + <rom name="Language Director - English Level 2 (1993)(Philips)(EU)(Disc 2 of 3).cue" size="157" crc="7c71464e" md5="5f253e5d016d35c1fd2722601122acd0"/> + <rom name="Language Director - English Level 2 (1993)(Philips)(EU)(Disc 3 of 3)[Guided Tour].iso" size="284533200" crc="eed1ba59" md5="bf72f29331ec3b8ae9e46c4cc80e4e9c"/> + <rom name="Language Director - English Level 2 (1993)(Philips)(EU)(Disc 3 of 3)[Guided Tour].cue" size="170" crc="6ccd4ac1" md5="40d2d41ec5ef3a1bb4ef1d4a19e336d8"/> + --> <description>Language Director - English Level 2 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -5003,6 +7322,15 @@ </software> <software name="langs1"> + <!-- + Origin: TOSEC + <rom name="Language Director - Espanol Level 1 (1994)(Philips)(EU)(Disc 1 of 3).iso" size="349977600" crc="ef0c1389" md5="820304b20bcf0b6813509b9a6bbfb16e"/> + <rom name="Language Director - Espanol Level 1 (1994)(Philips)(EU)(Disc 1 of 3).cue" size="157" crc="443bd897" md5="ebb891976d61045b04eff671332c2649"/> + <rom name="Language Director - Espanol Level 1 (1994)(Philips)(EU)(Disc 2 of 3).iso" size="607698000" crc="8ff979be" md5="3010361dfc22320f50b91d32dea8f68f"/> + <rom name="Language Director - Espanol Level 1 (1994)(Philips)(EU)(Disc 2 of 3).cue" size="157" crc="0888f23e" md5="a42864f25c96b6400fd40d382b5e4991"/> + <rom name="Language Director - Espanol Level 1 (1994)(Philips)(EU)(Disc 3 of 3)[Guided Tour].iso" size="271479600" crc="c9d69ff9" md5="ad85e93d6577a270a2f22547e307f1e0"/> + <rom name="Language Director - Espanol Level 1 (1994)(Philips)(EU)(Disc 3 of 3)[Guided Tour].cue" size="170" crc="acfd28d5" md5="3b1d803ddcf5c987c90b59a4f0b3bad6"/> + --> <description>Language Director - Espanol Level 1 (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -5025,6 +7353,15 @@ </software> <software name="langf1"> + <!-- + Origin: TOSEC + <rom name="Language Director - Francais Level 1 (1993)(Philips)(EU)(Disc 1 of 3).iso" size="446821200" crc="7e7a4e84" md5="9600df4ea1c3b591a4bcad6bb8e18805"/> + <rom name="Language Director - Francais Level 1 (1993)(Philips)(EU)(Disc 1 of 3).cue" size="158" crc="c863e9f1" md5="b0e3d924a7f948f65fa5fdac1ce14bb7"/> + <rom name="Language Director - Francais Level 1 (1993)(Philips)(EU)(Disc 2 of 3).iso" size="484570800" crc="833ccd92" md5="0e74752636d7ecc4fa9271310e8d142a"/> + <rom name="Language Director - Francais Level 1 (1993)(Philips)(EU)(Disc 2 of 3).cue" size="158" crc="84d0c358" md5="4804ff0aef1bc563c6fd1fa9b19a05fc"/> + <rom name="Language Director - Francais Level 1 (1993)(Philips)(EU)(Disc 3 of 3)[Guided Tour].iso" size="251017200" crc="835558ba" md5="a1e0ec565b5446f98739012fa173e968"/> + <rom name="Language Director - Francais Level 1 (1993)(Philips)(EU)(Disc 3 of 3)[Guided Tour].cue" size="171" crc="b32382d3" md5="16c2ac242781a56d185eb33ed90afc9d"/> + --> <description>Language Director - Français Level 1 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -5047,6 +7384,15 @@ </software> <software name="langf2"> + <!-- + Origin: TOSEC + <rom name="Language Director - Francais Level 2 (1993)(Philips)(EU)(Disc 1 of 3).iso" size="499564800" crc="83229de1" md5="223955a81f028bd6ebf9607948708aa5"/> + <rom name="Language Director - Francais Level 2 (1993)(Philips)(EU)(Disc 1 of 3).cue" size="158" crc="642d429f" md5="e0f6392be9165c37271cf20bef49ca09"/> + <rom name="Language Director - Francais Level 2 (1993)(Philips)(EU)(Disc 2 of 3).iso" size="316285200" crc="fa51d90e" md5="bd73420a6b54644a44e0cd5158f144d7"/> + <rom name="Language Director - Francais Level 2 (1993)(Philips)(EU)(Disc 2 of 3).cue" size="158" crc="289e6836" md5="359dc1ba5bead915fad249036779c6dc"/> + <rom name="Language Director - Francais Level 2 (1993)(Philips)(EU)(Disc 3 of 3)[Guided Tour].iso" size="287708400" crc="eeeb828e" md5="b64af6860120166241922aca378fd782"/> + <rom name="Language Director - Francais Level 2 (1993)(Philips)(EU)(Disc 3 of 3)[Guided Tour].cue" size="171" crc="79089c9d" md5="8ac928c14256d49ea178901d372e744b"/> + --> <description>Language Director - Français Level 2 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -5069,6 +7415,15 @@ </software> <software name="langf3"> + <!-- + Origin: TOSEC + <rom name="Language Director - Francais Level 3 (1994)(Philips)(EU)(Disc 1 of 3).iso" size="530434800" crc="54e32a6c" md5="9b1500e62413b16ea30f3be83b621af8"/> + <rom name="Language Director - Francais Level 3 (1994)(Philips)(EU)(Disc 1 of 3).cue" size="158" crc="7c3cda4b" md5="1b89b16f67eda7d3ece270e57264e8ba"/> + <rom name="Language Director - Francais Level 3 (1994)(Philips)(EU)(Disc 2 of 3).iso" size="597996000" crc="7a63aff0" md5="11922bed9aa9dc597248f9419e51deb6"/> + <rom name="Language Director - Francais Level 3 (1994)(Philips)(EU)(Disc 2 of 3).cue" size="158" crc="308ff0e2" md5="38ef4b575da98659373fbb29dcd13ce9"/> + <rom name="Language Director - Francais Level 3 (1994)(Philips)(EU)(Disc 3 of 3)[Guided Tour].iso" size="120834000" crc="8083a63a" md5="e0ed24c12169eb68f36c63f4bd7a7dac"/> + <rom name="Language Director - Francais Level 3 (1994)(Philips)(EU)(Disc 3 of 3)[Guided Tour].cue" size="171" crc="2183ca98" md5="701a934a5cbe1c46e1afc4dfe1dbef68"/> + --> <description>Language Director - Français Level 3 (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -5091,6 +7446,11 @@ </software> <software name="mpython" supported="no"> + <!-- + Origin: TOSEC + <rom name="Live Without Monty Python (1994)(Philips)(EU)[DVC].iso" size="622162800" crc="1cd371ab" md5="98a9cfa0c859af66160601ecaad8f115"/> + <rom name="Live Without Monty Python (1994)(Philips)(EU)[DVC].cue" size="139" crc="df1cccc2" md5="e227a2a66ebbc8ab642a60c07b4f2041"/> + --> <description>Live Without Monty Python (Euro)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -5103,6 +7463,11 @@ </software> <software name="mpythonu" cloneof="mpython" supported="no"> + <!-- + Origin: TOSEC + <rom name="Live Without Monty Python (1994)(Philips)(US)[DVC].iso" size="622515600" crc="c7c6745a" md5="daead227eaa446c239c9b3979da08ca6"/> + <rom name="Live Without Monty Python (1994)(Philips)(US)[DVC].cue" size="139" crc="a31604f5" md5="8147428690d510a25887c6323e84b478"/> + --> <description>Live Without Monty Python (USA)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -5115,6 +7480,13 @@ </software> <software name="loving" supported="no"> + <!-- + Origin: TOSEC + <rom name="Loving for a Lifetime (1994)(Extraware - Interlance - Meteor Film)(EU)(Disc 1 of 2)[DVC].iso" size="668556000" crc="991233e8" md5="a8422bb44eae22005c5ebfbc13f09d98"/> + <rom name="Loving for a Lifetime (1994)(Extraware - Interlance - Meteor Film)(EU)(Disc 1 of 2)[DVC].cue" size="177" crc="54dc1c7c" md5="b84fca8b9336a31508741c37cf9b656c"/> + <rom name="Loving for a Lifetime (1995)(Extraware - Interlance - Meteor Film)(EU)(Disc 2 of 2)[DVC].iso" size="609462000" crc="f1d5d97b" md5="84d67eeaababced08d6ac681c7b97e45"/> + <rom name="Loving for a Lifetime (1995)(Extraware - Interlance - Meteor Film)(EU)(Disc 2 of 2)[DVC].cue" size="177" crc="e8e356ff" md5="d85faebdeeca9b455f9aba71b962b2a7"/> + --> <description>Loving for a Lifetime (Euro)[DVC]</description> <year>1994</year> <publisher>Extraware ~ Interlance ~ Meteor Film</publisher> @@ -5132,6 +7504,13 @@ </software> <software name="lovingg" cloneof="loving"> + <!-- + Origin: TOSEC + <rom name="Loving for a Lifetime - Sex, Lust und Leben (1994)(Extraware - Interlance - Meteor Film)(DE)(Disc 1 of 2).iso" size="657442800" crc="7c04bfc5" md5="74390554359688026345fae0797d6cfd"/> + <rom name="Loving for a Lifetime - Sex, Lust und Leben (1994)(Extraware - Interlance - Meteor Film)(DE)(Disc 1 of 2).cue" size="194" crc="2218189f" md5="f16929386146073f8398ddd6a431baec"/> + <rom name="Loving for a Lifetime - Sex, Lust und Leben (1994)(Extraware - Interlance - Meteor Film)(DE)(Disc 2 of 2).iso" size="605934000" crc="e748643f" md5="0ac96b05a7d10b55139ba3340ed957fc"/> + <rom name="Loving for a Lifetime - Sex, Lust und Leben (1994)(Extraware - Interlance - Meteor Film)(DE)(Disc 2 of 2).cue" size="194" crc="6eab3236" md5="08c5d525103d2d7ea68b294f653e0764"/> + --> <description>Loving for a Lifetime - Sex, Lust und Leben (Ger)</description> <year>1994</year> <publisher>Extraware ~ Interlance ~ Meteor Film</publisher> @@ -5148,6 +7527,11 @@ </software> <software name="timemach"> + <!-- + Origin: TOSEC + <rom name="Machine a remonter le temps, La (1994)(Philips)(FR).iso" size="673024800" crc="f46e6f29" md5="fe9d5fc7fa1bdb54675af79c835c4045"/> + <rom name="Machine a remonter le temps, La (1994)(Philips)(FR).cue" size="140" crc="58a50056" md5="d484cfca00ec3759440bf04f80683745"/> + --> <description>La Machine à Remonter le Temps (Fra)</description> <year>1994</year> <publisher>Philips</publisher> @@ -5159,6 +7543,11 @@ </software> <software name="maest600"> + <!-- + Origin: TOSEC + <rom name="maestri olandesi del Seicento, I (1995)(Philips)(IT).iso" size="725756640" crc="1638df63" md5="13ef143a1b3cf558f02e3df4dd6aac1e"/> + <rom name="maestri olandesi del Seicento, I (1995)(Philips)(IT).cue" size="141" crc="eb732504" md5="a3380a477ba5e9867dc69e76008884ca"/> + --> <description>I Maestri Olandesi del Seicento (Ita)</description> <year>1995</year> <publisher>Philips</publisher> @@ -5170,6 +7559,11 @@ </software> <software name="malschu1"> + <!-- + Origin: TOSEC + <rom name="Malschule 1 (1992)(Philips)(DE)[!][Escuela de Pintura I (Es), Schilderschool I (Nl)].iso" size="488486880" crc="e83ff991" md5="8c4f41ba9f0df38fb6d6b864e7db07ad"/> + <rom name="Malschule 1 (1992)(Philips)(DE)[!][Escuela de Pintura I (Es), Schilderschool I (Nl)].cue" size="173" crc="f794ebb6" md5="b779a56ad2e6ee96f8dbc7630968584f"/> + --> <description>Malschule 1 (Ger) ~ Escuela de Pintura I (Spa) ~ Schilderschool I (Ned)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5181,6 +7575,11 @@ </software> <software name="malstift"> + <!-- + Origin: TOSEC + <rom name="Malstiftfabrik, Die (1995)(Philips)(DE).iso" size="627795840" crc="e261c166" md5="57e470dd73c2c2783c253d3d136b6199"/> + <rom name="Malstiftfabrik, Die (1995)(Philips)(DE).cue" size="128" crc="efee8ee3" md5="7f14c8dcdeb1f3af1181c3f20e38be02"/> + --> <description>Die Malstiftfabrik (Ger)</description> <year>1995</year> <publisher>Philips</publisher> @@ -5192,6 +7591,11 @@ </software> <software name="mathtr1" supported="no"> + <!-- + Origin: TOSEC + <rom name="Mathtrak K1 (1994)(InterROM)(US)[DVC].iso" size="679144704" crc="db8cb38d" md5="b5dab88b6d93f5a1937a64f4262606e1"/> + <rom name="Mathtrak K1 (1994)(InterROM)(US)[DVC].cue" size="126" crc="e7194abd" md5="f4023053b903dadf1a22bb360ecb6332"/> + --> <description>Mathtrak K1 (USA)[DVC]</description> <year>1994</year> <publisher>InterROM</publisher> @@ -5204,6 +7608,11 @@ </software> <software name="mathtr2" supported="no"> + <!-- + Origin: TOSEC + <rom name="Mathtrak K2 (1994)(InterROM)(US)[DVC].iso" size="566777904" crc="cc1ccb05" md5="5e12996d2b2ca4ddabd957e80ae3410f"/> + <rom name="Mathtrak K2 (1994)(InterROM)(US)[DVC].cue" size="126" crc="ca6f0860" md5="34180a459d0ec80b54927576029f125f"/> + --> <description>Mathtrak K2 (USA)[DVC]</description> <year>1994</year> <publisher>InterROM</publisher> @@ -5216,6 +7625,11 @@ </software> <software name="maxmagic"> + <!-- + Origin: TOSEC + <rom name="Max Magic (1994)(Philips)(EU).iso" size="564889248" crc="74ff3b66" md5="c45c4181ea475fce3a18155195476f5d"/> + <rom name="Max Magic (1994)(Philips)(EU).cue" size="118" crc="6be79213" md5="ccc1fafbf4ea7ee5e6d29fb15ceb1751"/> + --> <description>Max Magic (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -5227,6 +7641,11 @@ </software> <software name="maxmagica" cloneof="maxmagic"> + <!-- + Origin: TOSEC + <rom name="Max Magic (1994)(Philips)(EU)[a].iso" size="564889248" crc="455402f4" md5="9e8df0f698ad568dfab4a0b3794dfd4c"/> + <rom name="Max Magic (1994)(Philips)(EU)[a].cue" size="121" crc="8aa7a989" md5="057123c8ce32b72dc70085b70a5a8da8"/> + --> <description>Max Magic (Euro, Alt)</description> <year>1994</year> <publisher>Philips</publisher> @@ -5238,6 +7657,11 @@ </software> <software name="maxmagicu" cloneof="maxmagic"> + <!-- + Origin: TOSEC + <rom name="Max Magic (1994)(Philips)(US).iso" size="565232640" crc="51d974d7" md5="c66412198dfd1940ffdd53919651d009"/> + <rom name="Max Magic (1994)(Philips)(US).cue" size="118" crc="623c61b6" md5="b1da8db4d2ecb25b3c79f11631349582"/> + --> <description>Max Magic (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -5249,6 +7673,11 @@ </software> <software name="memorywo"> + <!-- + Origin: TOSEC + <rom name="Memory Works, The - For Names and Faces (1997)(Compact Disc Incorporated)(US).iso" size="245097216" crc="96ad6358" md5="cc4590bc9c0d03139b9505a3d212a619"/> + <rom name="Memory Works, The - For Names and Faces (1997)(Compact Disc Incorporated)(US).cue" size="166" crc="a4af9df2" md5="b421c9242b0e64ff6c65b99942cb02b0"/> + --> <description>The Memory Works - For Names and Faces (USA)</description> <year>1997</year> <publisher>Compact Disc Incorporated</publisher> @@ -5260,6 +7689,11 @@ </software> <software name="lilmonst"> + <!-- + Origin: TOSEC + <rom name="Mercer Mayer's Little Monster at School (1994)(Philips)(EU).iso" size="685819680" crc="c18d6d11" md5="d69998e071cf1eaa340544284d4f5654"/> + <rom name="Mercer Mayer's Little Monster at School (1994)(Philips)(EU).cue" size="148" crc="4d15be61" md5="4dc988873e6edbc7f481442d77bcb61a"/> + --> <description>Mercer Mayer's Little Monster at School (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -5271,6 +7705,11 @@ </software> <software name="lilmonstu" cloneof="lilmonst"> + <!-- + Origin: TOSEC + <rom name="Mercer Mayer's Little Monster at School (1994)(Philips)(US).iso" size="686172480" crc="5b62d999" md5="490de5a26e1e1842dcfad4c2bee8aeb2"/> + <rom name="Mercer Mayer's Little Monster at School (1994)(Philips)(US).cue" size="148" crc="44ce4dc4" md5="4b9e96c02c44fea62bb3ae8ceb3b5d46"/> + --> <description>Mercer Mayer's Little Monster at School (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -5282,6 +7721,11 @@ </software> <software name="methlang"> + <!-- + Origin: TOSEC + <rom name="Methode de Langues Multimedia, La - Je parle l'Allemand (1996)(Infogrames)(FR).iso" size="103233984" crc="20a9f31d" md5="038b5fa42aa08565c25be8cc5cac974f"/> + <rom name="Methode de Langues Multimedia, La - Je parle l'Allemand (1996)(Infogrames)(FR).cue" size="167" crc="278213c9" md5="651c2632cea6c7669e1f4867752005a3"/> + --> <description>La Methode de Langues Multimedia - Je parle l'Allemand (Fra)</description> <year>1996</year> <publisher>Infogrames</publisher> @@ -5293,6 +7737,11 @@ </software> <software name="mondrian"> + <!-- + Origin: TOSEC + <rom name="Mondriaan (1995)(Zoutewelle Multimedia)(NL)(en-nl)[CD-i-PC].iso" size="651802704" crc="0427e97d" md5="3b77eafa7af9277ae5ac1b054c077cbc"/> + <rom name="Mondriaan (1995)(Zoutewelle Multimedia)(NL)(en-nl)[CD-i-PC].cue" size="148" crc="5fa384bc" md5="b4024a79ca923d57cc5ab7b3329050b8"/> + --> <description>Mondriaan (Ned)[CD-i-PC]</description> <year>1995</year> <publisher>Zoutewelle Multimedia</publisher> @@ -5304,6 +7753,11 @@ </software> <software name="mpysthky" supported="no"> + <!-- + Origin: TOSEC + <rom name="Monty Python's Invasion from the Planet Skyron (1995)(Philips)(EU)[DVC].iso" size="514029600" crc="ca8a2b5c" md5="21c28cb5892b63c1e440c35e64eba4d8"/> + <rom name="Monty Python's Invasion from the Planet Skyron (1995)(Philips)(EU)[DVC].cue" size="160" crc="799dd692" md5="6028812f886d468e024f07d08bb8e3af"/> + --> <description>Monty Python's Invasion from the Planet Skyron (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -5316,6 +7770,11 @@ </software> <software name="mpythbit" supported="no"> + <!-- + Origin: TOSEC + <rom name="Monty Python's More Naughty Bits (1994)(Philips)(EU)(M4)[DVC].iso" size="697662000" crc="12f148fb" md5="cfe839d863da468c78c1e4c99d1cd720"/> + <rom name="Monty Python's More Naughty Bits (1994)(Philips)(EU)(M4)[DVC].cue" size="150" crc="613d4b0c" md5="7eb85a7d60eee339efacc95650df0a7b"/> + --> <description>Monty Python's More Naughty Bits (Euro)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -5328,6 +7787,11 @@ </software> <software name="mpythbitu" cloneof="mpythbit" supported="no"> + <!-- + Origin: TOSEC + <rom name="Monty Python's More Naughty Bits (1995)(Daedalus)(US)(M4)[!][DVC].iso" size="698014800" crc="df586c75" md5="dfda4b8fbe7f3b36ae7b7a17677da944"/> + <rom name="Monty Python's More Naughty Bits (1995)(Daedalus)(US)(M4)[!][DVC].cue" size="154" crc="35f0db4e" md5="d16a54d8a57257971f0dac0a45254427"/> + --> <description>Monty Python's More Naughty Bits (USA)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -5340,6 +7804,11 @@ </software> <software name="moses"> + <!-- + Origin: TOSEC + <rom name="Moses - The Exodus (1992)(Philips)(US).iso" size="657924960" crc="a94f586d" md5="b7f5b7b19934ec124c563dfdaa09f364"/> + <rom name="Moses - The Exodus (1992)(Philips)(US).cue" size="127" crc="39842199" md5="c1e8e2524f1f821894c905c193cc98af"/> + --> <description>Moses - The Exodus (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5351,6 +7820,11 @@ </software> <software name="mgoosehp"> + <!-- + Origin: TOSEC + <rom name="Mother Goose - Hidden Pictures (1991)(Philips)(US)[!][0152911 01].iso" size="275724960" crc="ce706205" md5="ee1476983d81e600333ef0badb945279"/> + <rom name="Mother Goose - Hidden Pictures (1991)(Philips)(US)[!][0152911 01].cue" size="154" crc="242475dd" md5="5f49bbdecc80c00afc8a9792e362197f"/> + --> <description>Mother Goose - Hidden Pictures (USA)[0152911 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -5362,6 +7836,11 @@ </software> <software name="mgoosehpa" cloneof="mgoosehp"> + <!-- + Origin: TOSEC + <rom name="Mother Goose - Hidden Pictures (1991)(Philips)(US)[3106900152 50228 843 03].iso" size="275724960" crc="26e14371" md5="0ee1011bfca09da20a7373ed605c37c2"/> + <rom name="Mother Goose - Hidden Pictures (1991)(Philips)(US)[3106900152 50228 843 03].cue" size="164" crc="1eb24b63" md5="19540ff39f0564ece29acb03c2a8227b"/> + --> <description>Mother Goose - Hidden Pictures (USA)[3106900152 50228 843 03]</description> <year>1991</year> <publisher>Philips</publisher> @@ -5373,6 +7852,11 @@ </software> <software name="mgooserc"> + <!-- + Origin: TOSEC + <rom name="Mother Goose - Rhymes to Color (1991)(Philips)(US)[3106900162 50228 839 01].iso" size="281087520" crc="6b4db38e" md5="0e8fadd8796c87b1139f19f4f2eaec1a"/> + <rom name="Mother Goose - Rhymes to Color (1991)(Philips)(US)[3106900162 50228 839 01].cue" size="164" crc="fe494b5c" md5="6b8e36f3bde0ad916a148aa60ebb2e0b"/> + --> <description>Mother Goose - Rhymes to Color (USA)[3106900162 50228 839 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -5384,6 +7868,11 @@ </software> <software name="mgooserca" cloneof="mgooserc"> + <!-- + Origin: TOSEC + <rom name="Mother Goose - Rhymes to Color (1991)(Philips)(US)[MGRTC392 03!].iso" size="281087520" crc="365ad751" md5="af33b8e5b87a123044001addec1f075a"/> + <rom name="Mother Goose - Rhymes to Color (1991)(Philips)(US)[MGRTC392 03!].cue" size="153" crc="e2aa7475" md5="922fd382c7f573922bd0b234130aa973"/> + --> <description>Mother Goose - Rhymes to Color (USA)[MGRTC392 03!]</description> <year>1991</year> <publisher>Philips</publisher> @@ -5395,6 +7884,11 @@ </software> <software name="muzzyfr" supported="no"> + <!-- + Origin: TOSEC + <rom name="Muzzy - Learn French the Fun Way (1994)(Philips)(EU)[DVC].iso" size="790801200" crc="bde33c63" md5="53391588340386aa04d12b66d9ec353f"/> + <rom name="Muzzy - Learn French the Fun Way (1994)(Philips)(EU)[DVC].cue" size="146" crc="6b286d17" md5="3bad10f96ba56ee6050cb627db7e47aa"/> + --> <description>Muzzy - Learn French the Fun Way (Euro)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -5407,6 +7901,11 @@ </software> <software name="muzzyfru" cloneof="muzzyfr" supported="no"> + <!-- + Origin: TOSEC + <rom name="Muzzy - Learn French the Fun Way (1994)(Philips)(US)[DVC].iso" size="791154000" crc="3e6e6811" md5="707adb70b906774a20e1db126bf792d2"/> + <rom name="Muzzy - Learn French the Fun Way (1994)(Philips)(US)[DVC].cue" size="146" crc="1722a520" md5="127a720f2d2fac2aacc15c7b1c6cd799"/> + --> <description>Muzzy - Learn French the Fun Way (USA)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -5419,6 +7918,11 @@ </software> <software name="namethat"> + <!-- + Origin: TOSEC + <rom name="Name That Tune (1993)(Philips)(US)[!].iso" size="703953600" crc="13dbc567" md5="8318140ece341bc1c284863176d30d64"/> + <rom name="Name That Tune (1993)(Philips)(US)[!].cue" size="126" crc="4cdadad3" md5="5dfb8b164e0be4ed3508e84ba057095f"/> + --> <description>Name That Tune (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -5430,6 +7934,11 @@ </software> <software name="nederlnd" supported="no"> + <!-- + Origin: TOSEC + <rom name="Nederlands Elftal Compleet - Alles over de Europese Kampioenschappen (1996)(Philips)(NL)[!][DVC].iso" size="412604304" crc="9b6721c0" md5="7f9a0b4437aab75cf6be9a0403d6fcd9"/> + <rom name="Nederlands Elftal Compleet - Alles over de Europese Kampioenschappen (1996)(Philips)(NL)[!][DVC].cue" size="185" crc="b036513f" md5="bf183b2b3dc218d87f6260e00efbbb30"/> + --> <description>Nederlands Elftal Compleet - Alles over de Europese Kampioenschappen (Ned)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -5442,6 +7951,11 @@ </software> <software name="nederl95" supported="no"> + <!-- + Origin: TOSEC + <rom name="Nederlands Film Festival '95 - 15 Jaar Gouden Kalf (1995)(Philips)(NL)[!][DVC].iso" size="656384400" crc="1deb6f0b" md5="96bcf12e593ea75818fcf93be7a9a130"/> + <rom name="Nederlands Film Festival '95 - 15 Jaar Gouden Kalf (1995)(Philips)(NL)[!][DVC].cue" size="167" crc="4e69ef64" md5="8f87565b5575987c490be3d1c3372dbd"/> + --> <description>Nederlands Film Festival '95 - 15 Jaar Gouden Kalf (Ned)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -5454,6 +7968,11 @@ </software> <software name="nfl100gt"> + <!-- + Origin: TOSEC + <rom name="NFL 100 Greatest Touchdowns (1996)(Philips)(EU)[!].iso" size="633276000" crc="81a722ce" md5="013f007690e0e3f6a91ddaedb13ce480"/> + <rom name="NFL 100 Greatest Touchdowns (1996)(Philips)(EU)[!].cue" size="139" crc="95e67d39" md5="bcbe9c629c2da587ef152d91fdbb8432"/> + --> <description>NFL 100 Greatest Touchdowns (Euro)</description> <year>1996</year> <publisher>Philips</publisher> @@ -5465,6 +7984,11 @@ </software> <software name="nfl100gtu" cloneof="nfl100gt"> + <!-- + Origin: TOSEC + <rom name="NFL 100 Greatest Touchdowns (1996)(Philips)(US).iso" size="633628800" crc="f9f35676" md5="835124beeb36c9e510fd496ca99c4f61"/> + <rom name="NFL 100 Greatest Touchdowns (1996)(Philips)(US).cue" size="136" crc="971afe63" md5="dc94c67d8f56e4852de7156fd36010d1"/> + --> <description>NFL 100 Greatest Touchdowns (USA)</description> <year>1996</year> <publisher>Philips</publisher> @@ -5476,6 +8000,11 @@ </software> <software name="niederla"> + <!-- + Origin: TOSEC + <rom name="Niederlaendischen Meister, die - des 17. Jahrhunderts (1993)(Philips)(DE).iso" size="758026080" crc="c0a4f0b5" md5="83511f28efc3f60af77400e0d3b71f06"/> + <rom name="Niederlaendischen Meister, die - des 17. Jahrhunderts (1993)(Philips)(DE).cue" size="162" crc="87a3f533" md5="2427629df7540f33372cef27a78a25d4"/> + --> <description>Die Niederlaendischen Meister - Des 17. Jahrhunderts (Ger)</description> <year>1993</year> <publisher>Philips</publisher> @@ -5487,6 +8016,11 @@ </software> <software name="noahsark"> + <!-- + Origin: TOSEC + <rom name="Noah's Ark (1992)(Philips)(US).iso" size="659058624" crc="9daaac64" md5="1574127c3bba8749245f73aaf849e506"/> + <rom name="Noah's Ark (1992)(Philips)(US).cue" size="119" crc="d406aca4" md5="d9282fb8f2adbbae544f8acbe8548c27"/> + --> <description>Noah's Ark (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5498,6 +8032,11 @@ </software> <software name="numberfa"> + <!-- + Origin: TOSEC + <rom name="Number Factory (1995)(Philips)(EU).iso" size="282769200" crc="ce1673c0" md5="dbdee47771b3d23cc546e22981abde93"/> + <rom name="Number Factory (1995)(Philips)(EU).cue" size="123" crc="15ad2a7d" md5="f5b8c8c69880c082dfa24da078575bcd"/> + --> <description>Number Factory (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -5509,6 +8048,11 @@ </software> <software name="odyssey"> + <!-- + Origin: TOSEC + <rom name="Odyssey - The Journey to Your Future (1997)(Educational Management Group)(US).iso" size="687430800" crc="af37db39" md5="bc5502bf51fe01c2c3bb6175433c9590"/> + <rom name="Odyssey - The Journey to Your Future (1997)(Educational Management Group)(US).cue" size="166" crc="77a1ad89" md5="765079486bd83b64e15b8eac015f8273"/> + --> <description>Odyssey - The Journey to Your Future (USA)</description> <year>1997</year> <publisher>Educational Management Group</publisher> @@ -5520,6 +8064,11 @@ </software> <software name="ontdekhe" supported="no"> + <!-- + Origin: TOSEC + <rom name="Ontdek het onbekende Nederland - Nederland-Waterland v1.0 (1995)(Philips)(NL)[!][DVC].iso" size="782326944" crc="4a462f44" md5="135cc121785c8dbfdfb5754cd499d397"/> + <rom name="Ontdek het onbekende Nederland - Nederland-Waterland v1.0 (1995)(Philips)(NL)[!][DVC].cue" size="174" crc="fecee438" md5="aa4f126db78efa41823fc209fa30c9ad"/> + --> <description>Ontdek het onbekende Nederland - Nederland-Waterland v1.0 (Ned)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -5532,6 +8081,24 @@ </software> <software name="operaimg"> + <!-- + Origin: TOSEC + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 01 of 14)[!].iso" size="2998800" crc="89791853" md5="194828dacbc35f56a051e9a680ffb069"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 02 of 14)[!].iso" size="61199040" crc="28cfdae9" md5="aee62366b33044cceb75e3e055e8971b"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 03 of 14)[!].iso" size="41914992" crc="c0b9fb40" md5="17017f7b3039e28e09ea1f2cbfd2e70d"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 04 of 14)[!].iso" size="30070320" crc="7473e4d4" md5="8c5a2b4121ce62176fd08f8fa32d4115"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 05 of 14)[!].iso" size="35416416" crc="03839756" md5="b076e7ae3c022e7f30e56ed1d6ee4ee3"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 06 of 14)[!].iso" size="49641312" crc="5e9e5f34" md5="1e8d965c744d1a416addb3d298f58685"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 07 of 14)[!].iso" size="45875760" crc="c58b6ef8" md5="43cb02707b128c90618a37d2dfc91711"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 08 of 14)[!].iso" size="46437888" crc="836b78b6" md5="392ae0428f2e1fd7d557efccb2274dc0"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 09 of 14)[!].iso" size="40877760" crc="ae0636dc" md5="7839952d7bc7d351e0af998a165fd5c2"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 10 of 14)[!].iso" size="24030384" crc="cd81ac7f" md5="45dcef99d838e1437624a650a189e6c0"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 11 of 14)[!].iso" size="36453648" crc="04f53a0b" md5="21044ed0253c8dd7fa7860fe365da9fd"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 12 of 14)[!].iso" size="55732992" crc="0e1f161e" md5="c478cdcaa2f635f5296a093715d3c347"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 13 of 14)[!].iso" size="41122368" crc="2cc2a16b" md5="17f1ffaf6243e1dacf457dfa64725d37"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)(Track 14 of 14)[!].iso" size="35943264" crc="58940571" md5="075a838a18ad30c1bdefb478b90b5c51"/> + <rom name="Opera Imaginaire (1995)(Pascavision)(EU)[!].cue" size="2046" crc="b1e13e8d" md5="feaa2ed7cdbda6b151fd4d21b89e3fe0"/> + --> <description>Opera Imaginaire (Euro)</description> <year>1995</year> <publisher>Pascavision</publisher> @@ -5543,6 +8110,11 @@ </software> <software name="origami"> + <!-- + Origin: TOSEC + <rom name="Origami (1993)(Philips)(EU)[!].iso" size="767692800" crc="4f9c35c9" md5="5c67a0e3850455361a25993d480f0329"/> + <rom name="Origami (1993)(Philips)(EU)[!].cue" size="119" crc="1acb31bb" md5="4ddafe9d5a8e6ac7291430531e816db7"/> + --> <description>Origami (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -5554,6 +8126,11 @@ </software> <software name="paws"> + <!-- + Origin: TOSEC + <rom name="P.A.W.S. - Personal Automated Wagging System (1998)(Philips)(EU).iso" size="570129504" crc="d7547580" md5="f9a898732517acef59cc6c5276f7aaf6"/> + <rom name="P.A.W.S. - Personal Automated Wagging System (1998)(Philips)(EU).cue" size="153" crc="1c69a304" md5="02a528641a1a01dc064cb295b5ed8c4e"/> + --> <description>P.A.W.S. - Personal Automated Wagging System (Euro)</description> <year>1998</year> <publisher>Philips</publisher> @@ -5565,6 +8142,11 @@ </software> <software name="paintsc"> + <!-- + Origin: TOSEC + <rom name="Paint School I v1.0 (1991)(Philips)(US).iso" size="179351760" crc="65e33f31" md5="225e3c02df5027b6c99c20415a8c3902"/> + <rom name="Paint School I v1.0 (1991)(Philips)(US).cue" size="128" crc="88852fd1" md5="af3e3a93f7b5f8df797d224181ba808f"/> + --> <description>Paint School I v1.0 (USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -5576,6 +8158,11 @@ </software> <software name="paintsc2"> + <!-- + Origin: TOSEC + <rom name="Paint School II v1.0 (1991)(Philips)(US).iso" size="162640800" crc="9540272e" md5="6f4d79bee313b6a3f8cb4bee0e549be2"/> + <rom name="Paint School II v1.0 (1991)(Philips)(US).cue" size="129" crc="43cef9a1" md5="3a2b293de38930a3596b239822064162"/> + --> <description>Paint School II v1.0 (USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -5587,6 +8174,11 @@ </software> <software name="pathways"> + <!-- + Origin: TOSEC + <rom name="Pathways - Interactive Reading for 4-7 Year Old's (1996)(Philips)(EU).iso" size="577185504" crc="60177521" md5="109a13152256fee6cceb4cf4710863c1"/> + <rom name="Pathways - Interactive Reading for 4-7 Year Old's (1996)(Philips)(EU).cue" size="158" crc="53c7a58e" md5="40ccde5b8355dce49f3f4ee597e60eee"/> + --> <description>Pathways - Interactive Reading for 4-7 Year Old's (Euro)</description> <year>1996</year> <publisher>Philips</publisher> @@ -5598,6 +8190,11 @@ </software> <software name="pecosbil"> + <!-- + Origin: TOSEC + <rom name="Pecos Bill (1992)(Philips)(US).iso" size="573822144" crc="d4e5f80b" md5="947e00555e030b2b0fdaa7f30ef91e8f"/> + <rom name="Pecos Bill (1992)(Philips)(US).cue" size="119" crc="cfbb1205" md5="2d210d2ffddcb4fce4258c3d192b6987"/> + --> <description>Pecos Bill (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5609,6 +8206,11 @@ </software> <software name="pegasus"> + <!-- + Origin: TOSEC + <rom name="Pegasus (1992)(Philips)(EU-US)[!].iso" size="581238000" crc="c98c3d0b" md5="8a273aefd549b552cb7d3793e7a9b42e"/> + <rom name="Pegasus (1992)(Philips)(EU-US)[!].cue" size="122" crc="03ac1392" md5="8a47c19ab9a4c6663ace2fa47415c7c1"/> + --> <description>Pegasus (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5620,6 +8222,11 @@ </software> <software name="philipsd" supported="no"> + <!-- + Origin: TOSEC + <rom name="Philips Demo CD (1995)(Philips)(NL)[DVC].iso" size="480341904" crc="943e2626" md5="3dc70410549dda8082b72391afb1f33b"/> + <rom name="Philips Demo CD (1995)(Philips)(NL)[DVC].cue" size="129" crc="0f953d7b" md5="e43f1c26eeace19e3ddf9c10e8f0d221"/> + --> <description>Philips Demo CD (Ned)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -5632,6 +8239,11 @@ </software> <software name="philipsh"> + <!-- + Origin: TOSEC + <rom name="Philips Hondred - 1891 1991 (1992)(Philips)(NL)(en-nl).iso" size="680198400" crc="6dab69b6" md5="f95d23ade879856d6ee1ea59ec6de405"/> + <rom name="Philips Hondred - 1891 1991 (1992)(Philips)(NL)(en-nl).cue" size="143" crc="c6d3ca01" md5="f2e45c2c4f20e641d0d74ce76c07c1d4"/> + --> <description>Philips Hondred - 1891 1991 (Ned)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5644,6 +8256,11 @@ <software name="philipme" supported="no"> <!-- Alt. Title: Standaard Interactieve Encyclopedie --> + <!-- + Origin: TOSEC + <rom name="Philips Media Interactieve Encyclopedie (1995)(Philips)(NL)[!][aka Standaard Interactieve Encyclopedie][DVC].iso" size="778453200" crc="d50b5aab" md5="a17c2d05e36a8fc6a4dc20ae973c1aab"/> + <rom name="Philips Media Interactieve Encyclopedie (1995)(Philips)(NL)[!][aka Standaard Interactieve Encyclopedie][DVC].cue" size="197" crc="af763a46" md5="2419495b4beeaa9afac8f9ddd779bb2c"/> + --> <description>Philips Media Interactieve Encyclopedie (Ned)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -5656,6 +8273,11 @@ </software> <software name="philipex" supported="no"> + <!-- + Origin: TOSEC + <rom name="Philips Media Interactieve Encyclopedie - Demonstratie - Exemplaar (1995)(Philips)(NL)[!][aka Standaard Interactieve Encyclopedie][DVC].iso" size="122774400" crc="e9476980" md5="1a1deffb5afcd2f068e9b4c47c5d5606"/> + <rom name="Philips Media Interactieve Encyclopedie - Demonstratie - Exemplaar (1995)(Philips)(NL)[!][aka Standaard Interactieve Encyclopedie][DVC].cue" size="224" crc="46e40e96" md5="0abc562ce869ef119a137d87518e7152"/> + --> <description>Philips Media Interactieve Encyclopedie - Demonstratie - Exemplaar (Ned)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -5668,6 +8290,11 @@ </software> <software name="philipmm" supported="no"> + <!-- + Origin: TOSEC + <rom name="Philips Media Medische Encyclopedie (1996)(Philips)(NL)[!][DVC].iso" size="633633504" crc="590a15f4" md5="e026702bc43a0655d37229e556ba9cf9"/> + <rom name="Philips Media Medische Encyclopedie (1996)(Philips)(NL)[!][DVC].cue" size="152" crc="cc1f7be0" md5="0eb59e40bd2fdc90e42bb337ab66599f"/> + --> <description>Philips Media Medische Encyclopedie (Ned)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -5680,6 +8307,11 @@ </software> <software name="photocddo" cloneof="photocdd"> + <!-- + Origin: TOSEC + <rom name="Photo CD Demo Disc v3.0 (1993)(Philips)(EU)[1993-03].iso" size="463108800" crc="58fce69a" md5="c5cb66dff16c1ec69bc118a394eab777"/> + <rom name="Photo CD Demo Disc v3.0 (1993)(Philips)(EU)[1993-03].cue" size="141" crc="5f1b92d2" md5="9f82863685d80426ce9e0eb37fe4d703"/> + --> <description>Photo CD Demo Disc v3.0 (Euro)[1993-03]</description> <year>1993</year> <publisher>Philips</publisher> @@ -5691,6 +8323,11 @@ </software> <software name="photocdd"> + <!-- + Origin: TOSEC + <rom name="Photo CD Demo Disc v3.2 (1995)(Philips)(EU)[1995-11].iso" size="297281040" crc="4090c3ad" md5="ee6557e858a6b789bb622c34e429c54e"/> + <rom name="Photo CD Demo Disc v3.2 (1995)(Philips)(EU)[1995-11].cue" size="141" crc="16767025" md5="e0be2e958b118049ec1d582e24f4332c"/> + --> <description>Photo CD Demo Disc v3.2 (Euro)[1995-11]</description> <year>1995</year> <publisher>Philips</publisher> @@ -5702,6 +8339,11 @@ </software> <software name="playboyi" cloneof="playboy" supported="no"> + <!-- + Origin: TOSEC + <rom name="Playboy - I Segreti Del Massaggio (1994)(Philips)(IT)[DVC].iso" size="667144800" crc="707ac483" md5="4786cd88b6c7b683e7a144984f22f7e1"/> + <rom name="Playboy - I Segreti Del Massaggio (1994)(Philips)(IT)[DVC].cue" size="147" crc="701d5ee9" md5="1272b0bfd5fb075f3d42b8204a82ce1e"/> + --> <description>Playboy - I Segreti Del Massaggio (Ita)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -5714,6 +8356,11 @@ </software> <software name="playboy" supported="no"> + <!-- + Origin: TOSEC + <rom name="Playboy's Complete Massage (1993)(Philips)(US)[!][DVC].iso" size="667674000" crc="3df205ee" md5="0aaa166ae5aa5ba7454c79e7bb28d3d4"/> + <rom name="Playboy's Complete Massage (1993)(Philips)(US)[!][DVC].cue" size="143" crc="ccd2cc32" md5="9874205981568e2259a18ad1e53bb3b5"/> + --> <description>Playboy's Complete Massage (USA)[DVC]</description> <year>1993</year> <publisher>Philips</publisher> @@ -5726,6 +8373,11 @@ </software> <software name="pleasure"> + <!-- + Origin: TOSEC + <rom name="Pleasure of Sex, The - The Interactive Encyclopedia of Sex (1995)(Telstar Electronic Studios)(US).iso" size="452113200" crc="3a8e80c9" md5="ffa824afc34ee0515a3207baeaf07ced"/> + <rom name="Pleasure of Sex, The - The Interactive Encyclopedia of Sex (1995)(Telstar Electronic Studios)(US).cue" size="186" crc="89f8e1d5" md5="9490aaa5f0c8ae6a47af6bbade6e899b"/> + --> <description>The Pleasure of Sex - The Interactive Encyclopedia of Sex (USA)</description> <year>1995</year> <publisher>Telstar Electronic Studios</publisher> @@ -5737,6 +8389,11 @@ </software> <software name="venice"> + <!-- + Origin: TOSEC + <rom name="Portrait of a City - Venice (1992)(Philips)(EU).iso" size="630806400" crc="1a387352" md5="84aa21975a4575b4d9af9327697a5544"/> + <rom name="Portrait of a City - Venice (1992)(Philips)(EU).cue" size="136" crc="87e80917" md5="81e2cfca1faf72d2caa428f771d162ed"/> + --> <description>Portrait of a City - Venice (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5748,6 +8405,11 @@ </software> <software name="venicei" cloneof="venice"> + <!-- + Origin: TOSEC + <rom name="Ritratto Di Citta - Venezia (1993)(Philips)(IT)[!].iso" size="633452400" crc="53e2f2d4" md5="fcf32ae44516280fa85baa0a31a18033"/> + <rom name="Ritratto Di Citta - Venezia (1993)(Philips)(IT)[!].cue" size="139" crc="84cc1c82" md5="c3696686ad430985a0c250bcbc471508"/> + --> <description>Ritratto di Città - Venezia (Ita)</description> <year>1993</year> <publisher>Philips</publisher> @@ -5759,6 +8421,11 @@ </software> <software name="privclas"> + <!-- + Origin: TOSEC + <rom name="Private Lesson Series - Classical Guitar - A Beginner's Guide (1992)(Philips)(EU-US)[!].iso" size="546957600" crc="e0fd9fc1" md5="450a067104c1be3d643471f3714ee2be"/> + <rom name="Private Lesson Series - Classical Guitar - A Beginner's Guide (1992)(Philips)(EU-US)[!].cue" size="176" crc="9af2651d" md5="d86ab6f0f72231e4d19f75c933170d6d"/> + --> <description>Private Lesson Series - Classical Guitar - A Beginner's Guide (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5770,6 +8437,11 @@ </software> <software name="privjazz"> + <!-- + Origin: TOSEC + <rom name="Private Lesson Series - Jazz Guitar (1992)(Philips)(US).iso" size="610273440" crc="cf0ac1b8" md5="5680feaebe82adc89a072155bac8f218"/> + <rom name="Private Lesson Series - Jazz Guitar (1992)(Philips)(US).cue" size="144" crc="5c451512" md5="fad76ae8340f0ccc725ac06584856c6a"/> + --> <description>Private Lesson Series - Jazz Guitar (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5781,6 +8453,11 @@ </software> <software name="privrock"> + <!-- + Origin: TOSEC + <rom name="Private Lesson Series - Rock Guitar - A Beginner's Guide (1992)(Philips)(EU)[!].iso" size="759437280" crc="78064811" md5="4dcf22429daeb17150cb1fae66beeb7e"/> + <rom name="Private Lesson Series - Rock Guitar - A Beginner's Guide (1992)(Philips)(EU)[!].cue" size="168" crc="7836185b" md5="c836e0179378270e91cf9e007709eff9"/> + --> <description>Private Lesson Series - Rock Guitar - A Beginner's Guide (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5792,6 +8469,11 @@ </software> <software name="privrocku" cloneof="privrock"> + <!-- + Origin: TOSEC + <rom name="Private Lesson Series - Rock Guitar - A Beginner's Guide (1992)(Philips)(US).iso" size="759790080" crc="aa1c6237" md5="79fddda15fbcb5db86a142d8fe31ece5"/> + <rom name="Private Lesson Series - Rock Guitar - A Beginner's Guide (1992)(Philips)(US).cue" size="165" crc="57908c36" md5="f274f511e7ad955ff4f88ef21eb28f6a"/> + --> <description>Private Lesson Series - Rock Guitar - A Beginner's Guide (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5803,6 +8485,11 @@ </software> <software name="pyramid" supported="no"> + <!-- + Origin: TOSEC + <rom name="Pyramid Adventures - Episode 1 - Treasures of the Lost Pyramid (1995)(Compact Disc Incorporated)(US)[!][DVC].iso" size="184707264" crc="41f63380" md5="892b6e7ba03d8e7d822d625e04392cc3"/> + <rom name="Pyramid Adventures - Episode 1 - Treasures of the Lost Pyramid (1995)(Compact Disc Incorporated)(US)[!][DVC].cue" size="197" crc="c0dc2578" md5="368667108b44b8a0ebcf396eaa1af9fc"/> + --> <description>Pyramid Adventures - Episode 1 - Treasures of the Lost Pyramid (USA)[DVC]</description> <year>1995</year> <publisher>Compact Disc Incorporated</publisher> @@ -5815,6 +8502,47 @@ </software> <software name="queen" supported="no"> + <!-- + Origin: TOSEC + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 01 of 19)[DVC].iso" size="25754400" crc="1b910697" md5="6c9d10c9d584d5cfab4e184502e7e108"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 02 of 19)[DVC].iso" size="10325280" crc="f588a4a1" md5="e100d82792a74e00f2bef0d9afb2fa4b"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 03 of 19)[DVC].iso" size="34278048" crc="e6446fd8" md5="a833d409cf735cafa26e0ee30dd21fff"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 04 of 19)[DVC].iso" size="62175120" crc="028d6277" md5="f8ddbafdb9e9f65385a91cd5189fe686"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 05 of 19)[DVC].iso" size="30070320" crc="91197b82" md5="9d416063dbae7fd9fd4b748ce065eccd"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 06 of 19)[DVC].iso" size="87856608" crc="226c30a2" md5="788485c51d8e2ea6260f23c6333fb0cf"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 07 of 19)[DVC].iso" size="77270256" crc="e8452077" md5="60d579d97d79ef82371096760e368ecb"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 08 of 19)[DVC].iso" size="42286608" crc="461a09bf" md5="51131a5954119acb435f63f860766948"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 09 of 19)[DVC].iso" size="31683792" crc="a25b9573" md5="fe8b2c74b832046c0e6a373934dd5991"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 10 of 19)[DVC].iso" size="33139680" crc="dcad656b" md5="7266eea244d32854f62fc6eafb697bfb"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 11 of 19)[DVC].iso" size="36517152" crc="5da63fe6" md5="03b0971c0f5bb99d4cf5c4cc3cf3dd88"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 12 of 19)[DVC].iso" size="34536768" crc="7a5d15d1" md5="3e5769c25e653bf746aad1d8543ec8a0"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 13 of 19)[DVC].iso" size="27708912" crc="3e0194c8" md5="6fe0f78519b3e5c4619146b7ca6231e8"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 14 of 19)[DVC].iso" size="39812304" crc="4d354984" md5="d5da97fb7cad81b20ad8a34d0e0dbeb4"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 15 of 19)[DVC].iso" size="36086736" crc="5bee7fe5" md5="d9728d1a6302f1476be7d557ebb588cc"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 16 of 19)[DVC].iso" size="37521456" crc="37103a35" md5="4778eea1a3dd57908013b7c7708180c0"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 17 of 19)[DVC].iso" size="45624096" crc="ac9fd8f3" md5="0ad3ac297d72c5419e69f305043ee048"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 18 of 19)[DVC].iso" size="41258784" crc="22ba619a" md5="0e44e702724eda75bed1af1f67e95cac"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)(Track 19 of 19)[DVC].iso" size="30406656" crc="dfb1a408" md5="05259bf097351506afe1faed0376d153"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 1 of 2)[DVC].cue" size="3289" crc="d6ce9556" md5="b4bdf82e3ab39b159caa44bad2ab65d4"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 01 of 17)[DVC].iso" size="25754400" crc="81ec7073" md5="6ceeabb98f04f04b0c8c669e581c6527"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 02 of 17)[DVC].iso" size="60796848" crc="a35ce958" md5="d656b8a8885c337569a316249ecb9ed4"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 03 of 17)[DVC].iso" size="42467712" crc="6f5282e5" md5="ab843390c0bf1b697ec76f875fc57da4"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 04 of 17)[DVC].iso" size="46680144" crc="c594b4da" md5="220c46f589f1514aac85d90701cf4239"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 05 of 17)[DVC].iso" size="71100960" crc="023a98be" md5="8157cb5305e0769140628727022b4265"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 06 of 17)[DVC].iso" size="43208592" crc="da3a3431" md5="324d5a45e8f809732e35aa28d26a5ef7"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 07 of 17)[DVC].iso" size="45297168" crc="5f3481fc" md5="fa7c716a757228979f0f58180637a6af"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 08 of 17)[DVC].iso" size="43954176" crc="dabb33b6" md5="3b51be7dfe61bcdfbead2237fca00dcd"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 09 of 17)[DVC].iso" size="51840432" crc="23c1e945" md5="f763e5d17b51673a2730494efbdbb274"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 10 of 17)[DVC].iso" size="55462512" crc="5487492b" md5="ddab19432d3f989ad2d18cd6400ebfaf"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 11 of 17)[DVC].iso" size="47402208" crc="cac7b25c" md5="e163974d6b15e3b923060a928c021d61"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 12 of 17)[DVC].iso" size="46049808" crc="2a8ae1b1" md5="371380b33cd4003ff725616df8251e5c"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 13 of 17)[DVC].iso" size="39099648" crc="836bfdc7" md5="08c138047a39b764f74842a845fef56b"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 14 of 17)[DVC].iso" size="45701712" crc="627a8a84" md5="4286b20528e662420501c85fb7689748"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 15 of 17)[DVC].iso" size="45765216" crc="7b3f9f96" md5="21fe683cab1d848ea78b1b74c29ea532"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 16 of 17)[DVC].iso" size="43871856" crc="6b14e9b7" md5="27ddefdd77b0884bd4d2054b46e5726f"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)(Track 17 of 17)[DVC].iso" size="12759600" crc="9bb04d7b" md5="d67e9322d3e8987ff026377c46a7d201"/> + <rom name="Queen - Greatest Flix I & II (1994)(Queen Films)(EU)(Disc 2 of 2)[DVC].cue" size="2943" crc="7b4b490e" md5="d0c196bda719adccc88bd3ba4236f58c"/> + --> <description>Queen - Greatest Flix I & II (Euro)[DVC]</description> <year>1994</year> <publisher>Queen Films</publisher> @@ -5833,6 +8561,11 @@ <!-- This is included twice in TOSEC... was it released only in France or in the whole Europe? --> <software name="quelestd"> + <!-- + Origin: TOSEC + <rom name="Quel est donc cet oiseau - Nature on CDI (1992)(Philips)(FR).iso" size="717948000" crc="6d48b911" md5="68379e28aed5417e286341f989eea8a8"/> + <rom name="Quel est donc cet oiseau - Nature on CDI (1992)(Philips)(FR).cue" size="149" crc="4ff8861a" md5="e62b224d2c01740245db37e67054b666"/> + --> <description>Quel est donc cet Oiseau - Nature on CDI (Fra) ~ What's that Bird (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5844,6 +8577,11 @@ </software> <software name="usatlas"> + <!-- + Origin: TOSEC + <rom name="Rand McNally's America - United States Atlas (1991)(Philips)(US)[01420320 03].iso" size="518498400" crc="f15acfee" md5="882ce1692e960cac609d1de0745219bd"/> + <rom name="Rand McNally's America - United States Atlas (1991)(Philips)(US)[01420320 03].cue" size="166" crc="0967a808" md5="97d69e682847105d8c33b0ca936e9e47"/> + --> <description>Rand McNally's America - United States Atlas (USA)[01420320 03]</description> <year>1991</year> <publisher>Philips</publisher> @@ -5855,6 +8593,11 @@ </software> <software name="usatlasa" cloneof="usatlas"> + <!-- + Origin: TOSEC + <rom name="Rand McNally's America - United States Atlas (1991)(Philips)(US)[3106900142 50239 896 01].iso" size="517792800" crc="4c82d035" md5="929ca146bba769a5f7e3b7c942a924d3"/> + <rom name="Rand McNally's America - United States Atlas (1991)(Philips)(US)[3106900142 50239 896 01].cue" size="178" crc="5a78a4a4" md5="25f99b97dd515ea51aa5e6542791f10a"/> + --> <description>Rand McNally's America - United States Atlas (USA)[3106900142 50239 896 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -5866,6 +8609,11 @@ </software> <software name="privclsg"> + <!-- + Origin: TOSEC + <rom name="Reihe Privatunterricht - Die Klassische Gitarre (1992)(Philips)(DE)[!].iso" size="546110880" crc="54faf6bd" md5="fcd74a3e010887dbfb438ad8be0b833c"/> + <rom name="Reihe Privatunterricht - Die Klassische Gitarre (1992)(Philips)(DE)[!].cue" size="159" crc="cfada434" md5="83b45258191db5d0805e1d2d4741da85"/> + --> <description>Reihe Privatunterricht - Die Klassische Gitarre (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5877,6 +8625,11 @@ </software> <software name="privrckg"> + <!-- + Origin: TOSEC + <rom name="Reihe Privatunterricht - Rockgitarre (1994)(Philips)(DE).iso" size="767716320" crc="c82244e4" md5="9a632c7a5caa46c714ce68695a1bc222"/> + <rom name="Reihe Privatunterricht - Rockgitarre (1994)(Philips)(DE).cue" size="145" crc="7359e966" md5="e6ef067a5622799f945cf50125dd131b"/> + --> <description>Reihe Privatunterricht - Rockgitarre (Ger)</description> <year>1994</year> <publisher>Philips</publisher> @@ -5888,6 +8641,11 @@ </software> <software name="rengal"> + <!-- + Origin: TOSEC + <rom name="Renaissance Gallery, The (1991)(Philips)(US)[0362911 01].iso" size="624279600" crc="88db21ce" md5="c0ae6dc5a67e2c49fc4592e610122a25"/> + <rom name="Renaissance Gallery, The (1991)(Philips)(US)[0362911 01].cue" size="145" crc="08413e39" md5="e3e2cdb10b469fe9fc03604b196a7d1c"/> + --> <description>The Renaissance Gallery (USA)[0362911 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -5899,6 +8657,11 @@ </software> <software name="rengala" cloneof="rengal"> + <!-- + Origin: TOSEC + <rom name="Renaissance Gallery, The (1992)(Philips)(US)[!][310690 0442 50260 353 01].iso" size="634310880" crc="f9bdcd08" md5="73351106321f434dbb9982d489707d09"/> + <rom name="Renaissance Gallery, The (1992)(Philips)(US)[!][310690 0442 50260 353 01].cue" size="162" crc="a6cfd807" md5="e97cf911fc93670b0ea01c160910eba3"/> + --> <description>The Renaissance Gallery (USA)[310690 0442 50260 353 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -5910,6 +8673,11 @@ </software> <software name="renflor"> + <!-- + Origin: TOSEC + <rom name="Renaissance of Florence, The (1991)(Philips)(US)[!][0442397 01, 0442397 02].iso" size="633805200" crc="a6ede238" md5="0f4bc87e2a1fdb0898cdf1aedf3a2c0a"/> + <rom name="Renaissance of Florence, The (1991)(Philips)(US)[!][0442397 01, 0442397 02].cue" size="164" crc="0d118a8b" md5="69ee6106a65ee3f78f0aab6cd5242727"/> + --> <description>The Renaissance of Florence (USA)[0442397 01, 0442397 02]</description> <year>1991</year> <publisher>Philips</publisher> @@ -5921,6 +8689,11 @@ </software> <software name="renflora" cloneof="renflor"> + <!-- + Origin: TOSEC + <rom name="Renaissance of Florence, The (1992)(Philips)(US)[310690036-2 50239 145 01].iso" size="648093600" crc="29877a2f" md5="2f6ffed3591254d2cdbfc61c7d7ae419"/> + <rom name="Renaissance of Florence, The (1992)(Philips)(US)[310690036-2 50239 145 01].cue" size="163" crc="6b49fc9b" md5="30d8a2b87c7c703e2ed7b0214ae384b0"/> + --> <description>The Renaissance of Florence (USA)[310690036-2 50239 145 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -5932,6 +8705,11 @@ </software> <software name="renflors" cloneof="renflor"> + <!-- + Origin: TOSEC + <rom name="Renacimiento de Florencia, El (1992)(Philips)(ES).iso" size="641378640" crc="ce7ef5ae" md5="c46ae0c3501c350216de8ff7b2ccaa4a"/> + <rom name="Renacimiento de Florencia, El (1992)(Philips)(ES).cue" size="138" crc="de20deae" md5="46353b3aad5c956f14c5e4a60540700b"/> + --> <description>El Renacimiento de Florencia (Spa)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5943,6 +8721,11 @@ </software> <software name="renflorscc" cloneof="renflor"> + <!-- + Origin: TOSEC + <rom name="Renacimiento de Florencia, El (1992)(Philips)(ES)[compilation Cultura].iso" size="641378640" crc="a660cbf8" md5="035263747827a0a30684a9bd91a94179"/> + <rom name="Renacimiento de Florencia, El (1992)(Philips)(ES)[compilation Cultura].cue" size="159" crc="724f0bad" md5="d1b14bdb0058fa91395c8679747dd31e"/> + --> <description>El Renacimiento de Florencia (Compilation Cultura) (Spa)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5954,6 +8737,11 @@ </software> <software name="renflorf" cloneof="renflor"> + <!-- + Origin: TOSEC + <rom name="Renaissance a Florence, La (1992)(Philips)(FR).iso" size="633181920" crc="4265efae" md5="80a799f4f1b427c281ac2a287cfc60c4"/> + <rom name="Renaissance a Florence, La (1992)(Philips)(FR).cue" size="135" crc="8dba53d2" md5="8c51955089a973d3445debe5028e66ff"/> + --> <description>Le Renaissance à Florence (Fra)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5965,6 +8753,11 @@ </software> <software name="renflorg" cloneof="renflor"> + <!-- + Origin: TOSEC + <rom name="Renaissance in Florenz, Die (1992)(Philips)(DE).iso" size="650304480" crc="4007d6bd" md5="ec330f7e2d0b9434956e6d92678efd4d"/> + <rom name="Renaissance in Florenz, Die (1992)(Philips)(DE).cue" size="136" crc="0c8017f4" md5="5318c65d2e2ca69bcb0f46dbb620fd9e"/> + --> <description>Die Renaissance in Florenz (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5976,6 +8769,11 @@ </software> <software name="renflori" cloneof="renflor"> + <!-- + Origin: TOSEC + <rom name="Rinascimento a Firenze, Il (1992)(Philips)(IT).iso" size="644518560" crc="4919138e" md5="6f38ad0f3b900724b5096d72a3a25600"/> + <rom name="Rinascimento a Firenze, Il (1992)(Philips)(IT).cue" size="135" crc="baeaca6e" md5="51bbf70f969fcadc6a2020676000cc6d"/> + --> <description>Il Rinascimento a Firenze (Ita)</description> <year>1992</year> <publisher>Philips</publisher> @@ -5987,6 +8785,11 @@ </software> <software name="renflord" cloneof="renflor"> + <!-- + Origin: TOSEC + <rom name="Renaissance van Florence, De (1991)(Philips)(NL).iso" size="635486880" crc="9b3be929" md5="dcebeb5e54c5a0aaf43266d2a22ba2f5"/> + <rom name="Renaissance van Florence, De (1991)(Philips)(NL).cue" size="137" crc="27180187" md5="3e4fb0b0fc7d90d8030c71f976042dfe"/> + --> <description>De Renaissance van Florence (Ned)</description> <year>1991</year> <publisher>Philips</publisher> @@ -5998,6 +8801,11 @@ </software> <software name="rhythm"> + <!-- + Origin: TOSEC + <rom name="Rhythm Maker (1993)(Philips)(US)[17220326 01].iso" size="49674240" crc="3486d60a" md5="f089b3c7c85200234be983fde1a5ec0b"/> + <rom name="Rhythm Maker (1993)(Philips)(US)[17220326 01].cue" size="134" crc="7bc19408" md5="a6e42d3b4f93308efb87e07d060ed528"/> + --> <description>Rhythm Maker (USA)[17220326 01]</description> <year>1993</year> <publisher>Philips</publisher> @@ -6009,6 +8817,11 @@ </software> <software name="rhythma" cloneof="rhythm"> + <!-- + Origin: TOSEC + <rom name="Rhythm Maker (1993)(Philips)(US)[17220409 02].iso" size="49674240" crc="4dab9b71" md5="21b53e6111ba4f89eff2dc343bce013f"/> + <rom name="Rhythm Maker (1993)(Philips)(US)[17220409 02].cue" size="134" crc="15696b6b" md5="57fec3987adcf90d7e1f71fa649d808e"/> + --> <description>Rhythm Maker (USA)[17220409 02]</description> <year>1993</year> <publisher>Philips</publisher> @@ -6020,6 +8833,11 @@ </software> <software name="scarryab"> + <!-- + Origin: TOSEC + <rom name="Richard Scarry's Allerbeste Buurt Disc! (1992)(Philips)(NL).iso" size="247665600" crc="b5675cf8" md5="5d63fd59d0d6a25249b0865ee5e86dd2"/> + <rom name="Richard Scarry's Allerbeste Buurt Disc! (1992)(Philips)(NL).cue" size="148" crc="e5780d97" md5="b3f862d7321ca811fb8331f4fc9cd426"/> + --> <description>Richard Scarry's Allerbeste Buurt Disc! (Ned)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6031,6 +8849,11 @@ </software> <software name="scarryad"> + <!-- + Origin: TOSEC + <rom name="Richard Scarry's Allerdrukste Buurt Disc! (1992)(Philips)(NL).iso" size="278359200" crc="0b8486bf" md5="8111e4e097f96dbde597b4a0b6831c7a"/> + <rom name="Richard Scarry's Allerdrukste Buurt Disc! (1992)(Philips)(NL).cue" size="150" crc="7cad135b" md5="93c839034e94240f762bac2376ee2887"/> + --> <description>Richard Scarry's Allerdrukste Buurt Disc! (Ned)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6042,6 +8865,11 @@ </software> <software name="scarryag"> + <!-- + Origin: TOSEC + <rom name="Richard Scarry's Allerwitzigste Geschichten aus Schaffenau (1992)(Philips)(DE).iso" size="278876640" crc="79b18d6f" md5="f4e60e349a3fe02851fc244c749ad4b3"/> + <rom name="Richard Scarry's Allerwitzigste Geschichten aus Schaffenau (1992)(Philips)(DE).cue" size="167" crc="c1173c52" md5="023da6b83d5cd74933181f28dfefbf3e"/> + --> <description>Richard Scarry's Allerwitzigste Geschichten aus Schaffenau (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6053,6 +8881,11 @@ </software> <software name="scarrybe"> + <!-- + Origin: TOSEC + <rom name="Richard Scarry's Best Neighborhood Disc Ever! (1992)(Philips)(US)[!].iso" size="244137600" crc="cf48d766" md5="2fc11a3e9a0d24245f76f8e37da4ab06"/> + <rom name="Richard Scarry's Best Neighborhood Disc Ever! (1992)(Philips)(US)[!].cue" size="157" crc="c43d72da" md5="40ecc65c63d3e5f11299ae08a8f5b16c"/> + --> <description>Richard Scarry's Best Neighborhood Disc Ever! (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6064,6 +8897,11 @@ </software> <software name="scarrybu"> + <!-- + Origin: TOSEC + <rom name="Richard Scarry's Busiest Neighborhood Disc Ever! (1991)(Philips)(US)[0382911 01].iso" size="276066000" crc="3c9f091f" md5="ec5c5211f07d8e620ccfd4cafd0bc167"/> + <rom name="Richard Scarry's Busiest Neighborhood Disc Ever! (1991)(Philips)(US)[0382911 01].cue" size="169" crc="cd150f05" md5="324f486477639712c4b55f99b3c293f7"/> + --> <description>Richard Scarry's Busiest Neighborhood Disc Ever! (USA)[0382911 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -6075,6 +8913,11 @@ </software> <software name="scarrybua" cloneof="scarrybu"> + <!-- + Origin: TOSEC + <rom name="Richard Scarry's Busiest Neighborhood Disc Ever! (1992)(Philips)(US)[03820201 01].iso" size="278006400" crc="2759e232" md5="270adb367a5afb589204a5dc07d00981"/> + <rom name="Richard Scarry's Busiest Neighborhood Disc Ever! (1992)(Philips)(US)[03820201 01].cue" size="170" crc="d69f6819" md5="7f9ae15062d5abcc192b6281444749d8"/> + --> <description>Richard Scarry's Busiest Neighborhood Disc Ever! (USA)[03820201 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -6086,6 +8929,11 @@ </software> <software name="scarrybub" cloneof="scarrybu"> + <!-- + Origin: TOSEC + <rom name="Richard Scarry's Busiest Neighborhood Disc Ever! (1992)(Philips)(US)[3106900382 50257 831 01].iso" size="276066000" crc="889224ab" md5="b053f5b6cd4707555eb9afb7305aa7c6"/> + <rom name="Richard Scarry's Busiest Neighborhood Disc Ever! (1992)(Philips)(US)[3106900382 50257 831 01].cue" size="182" crc="d8ec922a" md5="098aaa91c0945c6410d44256e2de8048"/> + --> <description>Richard Scarry's Busiest Neighborhood Disc Ever! (USA)[3106900382 50257 831 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -6097,6 +8945,11 @@ </software> <software name="scarrywg"> + <!-- + Origin: TOSEC + <rom name="Richard Scarry's Wunderbarste Geschichten aus Schaffenau (1992)(Philips)(DE).iso" size="248724000" crc="64ccda97" md5="001c82bf74ad17f17c0d66f2dbaf57fd"/> + <rom name="Richard Scarry's Wunderbarste Geschichten aus Schaffenau (1992)(Philips)(DE).cue" size="165" crc="c41b14f4" md5="0aa920c427aa4377a61e5eaa6067f68a"/> + --> <description>Richard Scarry's Wunderbarste Geschichten aus Schaffenau (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6108,6 +8961,11 @@ </software> <software name="riches"> + <!-- + Origin: TOSEC + <rom name="Riches of Coins, The (1992)(Philips)(US).iso" size="757249920" crc="d952d1da" md5="f4a9ef07bfd4b6b6cd4807cb072135f3"/> + <rom name="Riches of Coins, The (1992)(Philips)(US).cue" size="129" crc="f8d9ee53" md5="b1cac33783f69ecbc89f2be2dce504df"/> + --> <description>The Riches of Coins (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6119,6 +8977,13 @@ </software> <software name="tina88" supported="no"> + <!-- + Origin: TOSEC + <rom name="Rio '88 - Tina Turner (1988)(Philips - PolyGram)(PAL)(EU)(Disc 1 of 2)[!][DVC].iso" size="381906000" crc="7044e09c" md5="498473be94fc63761e65bf0be29d0ab6"/> + <rom name="Rio '88 - Tina Turner (1988)(Philips - PolyGram)(PAL)(EU)(Disc 1 of 2)[!][DVC].cue" size="167" crc="e0bfece2" md5="2f20c7ee20ddf19836cc6f6adef724a2"/> + <rom name="Rio '88 - Tina Turner (1988)(Philips - PolyGram)(PAL)(EU)(Disc 2 of 2)[!][DVC].iso" size="434649600" crc="0b775a59" md5="65bab2e5e13eb09c78435df73aba838b"/> + <rom name="Rio '88 - Tina Turner (1988)(Philips - PolyGram)(PAL)(EU)(Disc 2 of 2)[!][DVC].cue" size="167" crc="3f2da204" md5="a2e6c44c006904a29dfcad878bd5e8c7"/> + --> <description>Rio '88 - Tina Turner (Euro)[DVC]</description> <year>19??</year> <publisher>Philips ~ PolyGram</publisher> @@ -6136,6 +9001,11 @@ </software> <software name="rockmet"> + <!-- + Origin: TOSEC + <rom name="Rock - Metoode de Guitare avec Paul Personne (1994)(Philips)(FR).iso" size="762353760" crc="22957484" md5="00a6efbe0f34e0b35a2664266778e8c6"/> + <rom name="Rock - Metoode de Guitare avec Paul Personne (1994)(Philips)(FR).cue" size="153" crc="07a18f8e" md5="fde77480b5e1355420a50bd44b58e77a"/> + --> <description>Rock - Metoode de Guitare avec Paul Personne (Fra)</description> <year>1994</year> <publisher>Philips</publisher> @@ -6147,6 +9017,11 @@ </software> <software name="routesto"> + <!-- + Origin: TOSEC + <rom name="Routes to Reading (1995)(Philips)(EU).iso" size="290707200" crc="b5b2f20d" md5="0438d7cf3508f95bc8207c1c4f957e08"/> + <rom name="Routes to Reading (1995)(Philips)(EU).cue" size="126" crc="d461871f" md5="e859cc3e17c17625cfaaa24b2313d82a"/> + --> <description>Routes to Reading (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6158,6 +9033,11 @@ </software> <software name="rulesglf"> + <!-- + Origin: TOSEC + <rom name="Rules of Golf, The (1991)(Telecity CD-I)(NL).iso" size="533962800" crc="2ed25542" md5="3a9fc2b685d1d1e6cf70cb3904daee14"/> + <rom name="Rules of Golf, The (1991)(Telecity CD-I)(NL).cue" size="133" crc="a45428c9" md5="0136ad838e435c8d6d7fd2f2cdfa0183"/> + --> <description>The Rules of Golf (Ned)</description> <year>1991</year> <publisher>Telecity CD-I</publisher> @@ -6169,6 +9049,11 @@ </software> <software name="sailing"> + <!-- + Origin: TOSEC + <rom name="Sailing (1993)(Philips)(US).iso" size="646517760" crc="82cb60b2" md5="250a3cadf3a251a3deb9704806cdb519"/> + <rom name="Sailing (1993)(Philips)(US).cue" size="116" crc="a3638d57" md5="607308126f644ed13b7863a9027b3428"/> + --> <description>Sailing (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -6180,6 +9065,11 @@ </software> <software name="salvaten"> + <!-- + Origin: TOSEC + <rom name="Salvat Enciclopedia Interactiva (1996)(Salvat Multimedia)(ES).iso" size="781150944" crc="563cc53c" md5="0f2eaab189a31a8a94aca2592bf2ecff"/> + <rom name="Salvat Enciclopedia Interactiva (1996)(Salvat Multimedia)(ES).cue" size="150" crc="56488bd5" md5="bdd63fc945c6f752e337c1c9f3ba083a"/> + --> <description>Salvat Enciclopedia Interactiva (Spa)</description> <year>1996</year> <publisher>Salvat Multimedia</publisher> @@ -6191,6 +9081,11 @@ </software> <software name="sandyadv"> + <!-- + Origin: TOSEC + <rom name="Sandy's Circus Adventure (1991)(Philips)(US)[!].iso" size="484747200" crc="8ca39749" md5="2d247a6d8b7ee36861750fa8daa24aa4"/> + <rom name="Sandy's Circus Adventure (1991)(Philips)(US)[!].cue" size="136" crc="2f9b8e5a" md5="8119b2e885aaf8aa055b9d75b0a9f432"/> + --> <description>Sandy's Circus Adventure (USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -6202,6 +9097,11 @@ </software> <software name="sandyadvf" cloneof="sandyadv"> + <!-- + Origin: TOSEC + <rom name="Aventures de Sandy au Cirque, Les (1993)(Philips)(FR).iso" size="490081536" crc="008c8ebe" md5="840c19d31aa84c66d97520ff66facf5c"/> + <rom name="Aventures de Sandy au Cirque, Les (1993)(Philips)(FR).cue" size="142" crc="18177fce" md5="7e6a2c48b3e9cb6a55e7c1919330f932"/> + --> <description>Les Aventures de Sandy au Cirque (Fra)</description> <year>1993</year> <publisher>Philips</publisher> @@ -6213,6 +9113,11 @@ </software> <software name="sandyadvd" cloneof="sandyadv"> + <!-- + Origin: TOSEC + <rom name="Sandy's Circus Avontuur (1992)(Philips)(NL)[814 0008 50260 053 01].iso" size="489420624" crc="061a8886" md5="25e24935b831bf7eb3c5f35371f6d5d0"/> + <rom name="Sandy's Circus Avontuur (1992)(Philips)(NL)[814 0008 50260 053 01].cue" size="155" crc="0ef40707" md5="82f2b99fb56227fb3f6d18eaa8698752"/> + --> <description>Sandy's Circus Avontuur (Ned)[814 0008 50260 053 01]</description> <year>1992</year> <publisher>Philips</publisher> @@ -6224,6 +9129,11 @@ </software> <software name="sandyadvda" cloneof="sandyadv"> + <!-- + Origin: TOSEC + <rom name="Sandy's Circus Avontuur (1992)(Philips)(NL)[8140008 50260 053 02].iso" size="487118016" crc="175b6ede" md5="39247c88dd72720df29ce2be96e374f2"/> + <rom name="Sandy's Circus Avontuur (1992)(Philips)(NL)[8140008 50260 053 02].cue" size="154" crc="0ff15773" md5="ded6ce487e32c5be49d3dce4b619a512"/> + --> <description>Sandy's Circus Avontuur (Ned)[8140008 50260 053 02]</description> <year>1992</year> <publisher>Philips</publisher> @@ -6235,6 +9145,11 @@ </software> <software name="sandyadvg" cloneof="sandyadv"> + <!-- + Origin: TOSEC + <rom name="Sandy's Zirkus Abenteuer (1992)(Philips)(DE).iso" size="489474720" crc="0c272338" md5="a03387534af9424cf12d1927c77ff0f9"/> + <rom name="Sandy's Zirkus Abenteuer (1992)(Philips)(DE).cue" size="133" crc="8eed954e" md5="9be8fe30d45bae7f97670eb1485c2963"/> + --> <description>Sandy's Zirkus Abenteuer (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6247,6 +9162,11 @@ <software name="santamic"> <!-- Alt. Title: Les souris du Pere Noel --> + <!-- + Origin: TOSEC + <rom name="Santa Claus' Mice (1992)(Philips)(EU)(en-fr)[Les souris du Pere Noel].iso" size="669614400" crc="48a2a706" md5="3ef3ee5b0a88e82f595c853a168117b1"/> + <rom name="Santa Claus' Mice (1992)(Philips)(EU)(en-fr)[Les souris du Pere Noel].cue" size="158" crc="bfe0bc64" md5="5c2c6baf8575e83317a553bf4963fe58"/> + --> <description>Santa Claus' Mice (Euro)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6258,6 +9178,11 @@ </software> <software name="schonste"> + <!-- + Origin: TOSEC + <rom name="Schonsten Hotels der Welt, Die - von Burba Holiday (1992)(Philips)(DE)[!][Photo CD].iso" size="117835200" crc="be3eabc9" md5="e1bea9ed5369040db3e669409ce362da"/> + <rom name="Schonsten Hotels der Welt, Die - von Burba Holiday (1992)(Philips)(DE)[!][Photo CD].cue" size="172" crc="cbdde2d5" md5="e0029a07753cb512891111325f0c4536"/> + --> <description>Die Schonsten Hotels der Welt - von Burba Holiday (Ger)[Photo CD]</description> <year>1992</year> <publisher>Philips</publisher> @@ -6269,6 +9194,11 @@ </software> <software name="tombaski" supported="no"> + <!-- + Origin: TOSEC + <rom name="Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (1994)(Philips - VideoRAI)(EU)(en-it)[DVC][8100236V103 50461390 01].iso" size="672436800" crc="e776557b" md5="c60da8ee8a805a96d07a8d726917d348"/> + <rom name="Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (1994)(Philips - VideoRAI)(EU)(en-it)[DVC][8100236V103 50461390 01].cue" size="218" crc="a0ee188f" md5="629bb20055b509de3d2549993e85b1b6"/> + --> <description>Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (Euro)[DVC][8100236V103 50461390 01]</description> <year>1994</year> <publisher>Philips</publisher> @@ -6281,6 +9211,11 @@ </software> <software name="tombaskia" cloneof="tombaski" supported="no"> + <!-- + Origin: TOSEC + <rom name="Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (1994)(Philips - VideoRAI)(EU)(en-it)[DVC][991953100049 1445-A].iso" size="668556000" crc="6685600a" md5="31384eed3beddbb5e2cc1eadcfbacc80"/> + <rom name="Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (1994)(Philips - VideoRAI)(EU)(en-it)[DVC][991953100049 1445-A].cue" size="214" crc="5105e95e" md5="e943b6d86b28aea60e3b899e96570705"/> + --> <description>Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (Euro)[DVC][991953100049 1445-A]</description> <year>1994</year> <publisher>Philips</publisher> @@ -6293,6 +9228,11 @@ </software> <software name="sharilew" supported="no"> + <!-- + Origin: TOSEC + <rom name="Shari Lewis - Lamb Chop's Play-Along! - Action Songs (1993)(Philips)(US)[DVC].iso" size="324399600" crc="b1e011c4" md5="081e3326210f9ca0d12288d885a252ac"/> + <rom name="Shari Lewis - Lamb Chop's Play-Along! - Action Songs (1993)(Philips)(US)[DVC].cue" size="166" crc="7664970b" md5="ca4a5de325fbea76535858e10e2bac98"/> + --> <description>Shari Lewis - Lamb Chop's Play-Along! - Action Songs (USA)[DVC]</description> <year>1993</year> <publisher>Philips</publisher> @@ -6305,6 +9245,11 @@ </software> <software name="sharkale"> + <!-- + Origin: TOSEC + <rom name="Shark Alert (1993)(Philips)(US)[!].iso" size="707857920" crc="9f4f3d83" md5="80a3fb6459e8f671762f4d7384a3931d"/> + <rom name="Shark Alert (1993)(Philips)(US)[!].cue" size="123" crc="55e83968" md5="e47feccddb2aac7b45f04a0c36d0c89e"/> + --> <description>Shark Alert (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -6316,6 +9261,11 @@ </software> <software name="shipwrck"> + <!-- + Origin: TOSEC + <rom name="Shipwreck v3.03 (1993)(Philips)(EU)[!].iso" size="717595200" crc="8d6f5672" md5="a88e948b71a5576566b594870ae2ef65"/> + <rom name="Shipwreck v3.03 (1993)(Philips)(EU)[!].cue" size="127" crc="ea2c73d0" md5="ce5486372c3bbf9bc3de784366b778d3"/> + --> <description>Shipwreck v3.03 (Euro)</description> <year>1993</year> <publisher>Philips</publisher> @@ -6327,6 +9277,11 @@ </software> <software name="shorelin"> + <!-- + Origin: TOSEC + <rom name="Shorelines (1994)(Educational Management Group)(US).iso" size="689728704" crc="f9d31efe" md5="141ff1972e55b6b8fcdc5f7e8fd93ba8"/> + <rom name="Shorelines (1994)(Educational Management Group)(US).cue" size="140" crc="ebf7007c" md5="ee3a8a3e851f12b5ec93aa4df257130d"/> + --> <description>Shorelines (USA)</description> <year>1994</year> <publisher>Educational Management Group</publisher> @@ -6338,6 +9293,11 @@ </software> <software name="eindhov"> + <!-- + Origin: TOSEC + <rom name="Site Seeing in Digitaal Eindhoven (1997)(TV-Tokyo)(NL).iso" size="780574704" crc="caa0599e" md5="d341691f957e93cd4e0233221faaaa5d"/> + <rom name="Site Seeing in Digitaal Eindhoven (1997)(TV-Tokyo)(NL).cue" size="143" crc="1857089d" md5="6ee66113048a2f6e3cfafdd1af9fe1b9"/> + --> <description>Site Seeing in Digitaal Eindhoven (Ned)</description> <year>1997</year> <publisher>TV-Tokyo</publisher> @@ -6349,6 +9309,11 @@ </software> <software name="solarsys"> + <!-- + Origin: TOSEC + <rom name="Solar System (1995)(Philips)(EU).iso" size="378131040" crc="385d8c7f" md5="777b7348e040f5cc0f71d0d26e744981"/> + <rom name="Solar System (1995)(Philips)(EU).cue" size="121" crc="320ececb" md5="df52f9a76afd591e5c8451a6dd4e9b51"/> + --> <description>Solar System (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6360,6 +9325,11 @@ </software> <software name="soundtrp"> + <!-- + Origin: TOSEC + <rom name="Soundtrap v3.04 (1994)(Philips)(EU).iso" size="762930000" crc="714caf9e" md5="8df6ae12be8a6d3c41b13141b190ebf8"/> + <rom name="Soundtrap v3.04 (1994)(Philips)(EU).cue" size="124" crc="d45b1cdd" md5="5ef1f026f24ba1839fbcea8f0cc45273"/> + --> <description>Soundtrap v3.04 (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -6371,6 +9341,11 @@ </software> <software name="spacesaf"> + <!-- + Origin: TOSEC + <rom name="Space Safari (1995)(Philips)(EU).iso" size="133711200" crc="00406c29" md5="d27a964e049f9c32bc6fdaa7707ca7c4"/> + <rom name="Space Safari (1995)(Philips)(EU).cue" size="121" crc="f70eb2f1" md5="d55be09bc3a1e1aca7aff9142931da56"/> + --> <description>Space Safari (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6382,6 +9357,11 @@ </software> <software name="stamps"> + <!-- + Origin: TOSEC + <rom name="Stamps - Windows on the World (1991)(Philips)(US).iso" size="622362720" crc="b8c45bc9" md5="0632617b3f111e5f0fdacbf9480ec313"/> + <rom name="Stamps - Windows on the World (1991)(Philips)(US).cue" size="138" crc="606a0963" md5="c50ac68ac8d700ea5393dca8e208c44f"/> + --> <description>Stamps - Windows on the World (USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -6393,6 +9373,11 @@ </software> <software name="stickyb"> + <!-- + Origin: TOSEC + <rom name="Stickybear Family Fun Games (1995)(Philips)(EU).iso" size="537836544" crc="c5a8c107" md5="e2e47059d35d77faf5f43ffec8b84636"/> + <rom name="Stickybear Family Fun Games (1995)(Philips)(EU).cue" size="136" crc="1dd2d34a" md5="9684f714f1627b0f4c194df9af89db73"/> + --> <description>Stickybear Family Fun Games (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6404,6 +9389,11 @@ </software> <software name="stickybu" cloneof="stickyb"> + <!-- + Origin: TOSEC + <rom name="Stickybear Family Fun Games (1995)(Philips)(US)[!].iso" size="538184640" crc="8c8b5184" md5="2533760941ad57fff1eb345645e225f7"/> + <rom name="Stickybear Family Fun Games (1995)(Philips)(US)[!].cue" size="139" crc="232fb1f8" md5="c83261559a7b3c539ad74fb340e13eb6"/> + --> <description>Stickybear Family Fun Games (USA)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6415,6 +9405,11 @@ </software> <software name="stickymu"> + <!-- + Origin: TOSEC + <rom name="Stickybear Math (1994)(Philips)(US)(en-es).iso" size="476872704" crc="a34f734c" md5="bd92c5d8a4b5b093ace24daba6e4f82b"/> + <rom name="Stickybear Math (1994)(Philips)(US)(en-es).cue" size="131" crc="2a592d98" md5="5529bec173d7b5dae33a4ba9e9bfd013"/> + --> <description>Stickybear Math (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -6426,6 +9421,11 @@ </software> <software name="stickyp"> + <!-- + Origin: TOSEC + <rom name="Stickybear Preschool (1994)(Philips)(EU)(en-es).iso" size="672140448" crc="e8a9b51c" md5="08b5c36d3e701f4c2b6acbb6718bb562"/> + <rom name="Stickybear Preschool (1994)(Philips)(EU)(en-es).cue" size="136" crc="908f3be1" md5="6da21490d05db47268d03a9dee1a2781"/> + --> <description>Stickybear Preschool (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -6437,6 +9437,11 @@ </software> <software name="stickyr"> + <!-- + Origin: TOSEC + <rom name="Stickybear Reading (1993)(Philips)(US)(en-es).iso" size="323757504" crc="0e8a923d" md5="66e88c408f7ab7f92abc7917fc6b4f1a"/> + <rom name="Stickybear Reading (1993)(Philips)(US)(en-es).cue" size="134" crc="df99c55b" md5="e58d6573ef78925863a8419379da7b45"/> + --> <description>Stickybear Reading (USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -6448,6 +9453,11 @@ </software> <software name="stickyrs" cloneof="stickyr"> + <!-- + Origin: TOSEC + <rom name="Stickybear Leyendo (1994)(Philips)(ES)(en-es).iso" size="324110304" crc="2f7d8e9e" md5="568d7bd3e25e2a124664f398847d461e"/> + <rom name="Stickybear Leyendo (1994)(Philips)(ES)(en-es).cue" size="134" crc="11d8e8b3" md5="39bc3ebbcce81be9953f896b3fff2246"/> + --> <description>Stickybear Leyendo (Spa)</description> <year>1994</year> <publisher>Philips</publisher> @@ -6459,6 +9469,11 @@ </software> <software name="sting" supported="no"> + <!-- + Origin: TOSEC + <rom name="Sting - Ten Summoner's Tales (1994)(Philips)(EU)[!][DVC].iso" size="592527600" crc="2493087a" md5="1cc135eba7ae512d621dbbdeb3495889"/> + <rom name="Sting - Ten Summoner's Tales (1994)(Philips)(EU)[!][DVC].cue" size="145" crc="3364a87c" md5="4645cc539f49b4dd63de78a5076aa7e9"/> + --> <description>Sting - Ten Summoner's Tales (Euro)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -6471,6 +9486,11 @@ </software> <software name="storymc"> + <!-- + Origin: TOSEC + <rom name="Story Machine - Magic Tales v1.0 (1992)(Philips)(US)[!].iso" size="203988960" crc="f89203d3" md5="b56b439a0ddb8c5e658d16e10f78b128"/> + <rom name="Story Machine - Magic Tales v1.0 (1992)(Philips)(US)[!].cue" size="144" crc="33dc34df" md5="f82cf4ded367fe0a9f6b59771eb1c8e1"/> + --> <description>Story Machine - Magic Tales v1.0 (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6482,6 +9502,11 @@ </software> <software name="storymcg" cloneof="storymc"> + <!-- + Origin: TOSEC + <rom name="Story Machine - Marchenzauber v1.0 (1992)(Philips)(DE).iso" size="205576560" crc="c6e1a977" md5="dff453e2d4ab9fb246a2fb3ec4819d57"/> + <rom name="Story Machine - Marchenzauber v1.0 (1992)(Philips)(DE).cue" size="143" crc="7ce763c1" md5="2c25494b7d692c20eb922fb56468c4f3"/> + --> <description>Story Machine - Marchenzauber v1.0 (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6493,6 +9518,11 @@ </software> <software name="storyms"> + <!-- + Origin: TOSEC + <rom name="Story Machine - Star Dreams v1.0 (1992)(Philips)(US).iso" size="208363680" crc="c48c8a86" md5="2abd4a02e353377092cff478f27c68be"/> + <rom name="Story Machine - Star Dreams v1.0 (1992)(Philips)(US).cue" size="141" crc="3531179b" md5="ad16cea72ee6eb85067145bf70f55bd5"/> + --> <description>Story Machine - Star Dreams v1.0 (USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6504,6 +9534,11 @@ </software> <software name="storymsg" cloneof="storyms"> + <!-- + Origin: TOSEC + <rom name="Story Maschine - Galaxis v1.0 (1992)(Philips)(DE).iso" size="206105760" crc="9b64da9a" md5="c7f7bce5e9aa59907de2466e13b46b24"/> + <rom name="Story Maschine - Galaxis v1.0 (1992)(Philips)(DE).cue" size="138" crc="9269bb84" md5="f36be205134b32d47b9ec18af44932c8"/> + --> <description>Story Maschine - Galaxis v1.0 (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6515,6 +9550,11 @@ </software> <software name="supertst"> + <!-- + Origin: TOSEC + <rom name="SuperTEST (1995)(Philips)(IT).iso" size="612637200" crc="5e8c065f" md5="fa3d301bb35a65d8f1d0f1c9acdd3640"/> + <rom name="SuperTEST (1995)(Philips)(IT).cue" size="118" crc="122500da" md5="4325f8002571b7ec4994e670c6b2ac31"/> + --> <description>SuperTEST (Ita)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6526,6 +9566,11 @@ </software> <software name="surfcity"> + <!-- + Origin: TOSEC + <rom name="Surf City (1994)(Philips)(EU).iso" size="774631200" crc="75defc31" md5="d39571ba9bb7ee75906404af768fd55f"/> + <rom name="Surf City (1994)(Philips)(EU).cue" size="118" crc="b850c911" md5="b5001e28a0df08757df1155ff8ceeaff"/> + --> <description>Surf City (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -6537,6 +9582,11 @@ </software> <software name="surfcityu" cloneof="surfcity"> + <!-- + Origin: TOSEC + <rom name="Surf City (1994)(Philips)(US).iso" size="774984000" crc="13ab6703" md5="d6ec4adbf07aec55001d4e0b33b54e51"/> + <rom name="Surf City (1994)(Philips)(US).cue" size="118" crc="b18b3ab4" md5="503986cb1cfefb4b7b7410945e7413f3"/> + --> <description>Surf City (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -6548,6 +9598,11 @@ </software> <software name="tellmeu1"> + <!-- + Origin: TOSEC + <rom name="Tell Me Why One (1991)(Philips)(US)[!].iso" size="601147680" crc="35b880ce" md5="623be6c026a8b7b2bc1f16e1e05ba837"/> + <rom name="Tell Me Why One (1991)(Philips)(US)[!].cue" size="127" crc="c5c4bb89" md5="a5348fb56f8d28a681ec0d8a68a18e0e"/> + --> <description>Tell Me Why One (USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -6559,6 +9614,11 @@ </software> <software name="tellmey2"> + <!-- + Origin: TOSEC + <rom name="Tell Me Why Two (1991)(Philips)(US).iso" size="617988000" crc="8c6fefe2" md5="db05b7e1c959f7b6a4ca228984e8ad2b"/> + <rom name="Tell Me Why Two (1991)(Philips)(US).cue" size="124" crc="a96b2aca" md5="93014d34d506f4fe5a80951e4040750a"/> + --> <description>Tell Me Why Two (USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -6570,6 +9630,15 @@ </software> <software name="tennisow" supported="no"> + <!-- + Origin: TOSEC + <rom name="Tennis Our Way (1994)(Philips)(US)(Disc 1 of 3)[DVC].iso" size="529023600" crc="83b163fb" md5="a3a0cda85ce8b68031b25aab20799d62"/> + <rom name="Tennis Our Way (1994)(Philips)(US)(Disc 1 of 3)[DVC].cue" size="141" crc="d4d66c1e" md5="d107c09ad596619a9f70bf3cacf2029d"/> + <rom name="Tennis Our Way (1994)(Philips)(US)(Disc 2 of 3)[DVC].iso" size="501505200" crc="25efbdf4" md5="90302979c9df33ff96cab382602fea9f"/> + <rom name="Tennis Our Way (1994)(Philips)(US)(Disc 2 of 3)[DVC].cue" size="141" crc="fdba9ee3" md5="208911e8cc9ff7f5a3104614b5750e51"/> + <rom name="Tennis Our Way (1994)(Philips)(US)(Disc 3 of 3)[DVC].iso" size="591998400" crc="d61ca670" md5="a4c451da7795184ad662cc8bb94b6a35"/> + <rom name="Tennis Our Way (1994)(Philips)(US)(Disc 3 of 3)[DVC].cue" size="141" crc="53b1cd77" md5="5bb15b7ca57582fefce488729103310c"/> + --> <description>Tennis Our Way (USA)[DVC]</description> <year>1994</year> <publisher>Philips</publisher> @@ -6592,6 +9661,11 @@ </software> <software name="thumblin" supported="no"> + <!-- + Origin: TOSEC + <rom name="Thumbelina (1995)(Philips)(EU)[DVC].iso" size="474339600" crc="241f4e0e" md5="8cdc5e912448c42481df38cdef54081d"/> + <rom name="Thumbelina (1995)(Philips)(EU)[DVC].cue" size="124" crc="509e8a7a" md5="aaf250e69a6a1e938a119206b0a538b2"/> + --> <description>Thumbelina (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -6604,6 +9678,11 @@ </software> <software name="timbaerb"> + <!-- + Origin: TOSEC + <rom name="Tim & Baer - Beim Film (1995)(Philips)(DE).iso" size="748994400" crc="6d485c08" md5="a7a99a30211a15d6b8df805ea1efa533"/> + <rom name="Tim & Baer - Beim Film (1995)(Philips)(DE).cue" size="131" crc="f6b2eb99" md5="7efbe008cbf06cada8c6ae0b6886a6f0"/> + --> <description>Tim & Baer - Beim Film (Ger)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6615,6 +9694,11 @@ </software> <software name="timbaerf"> + <!-- + Origin: TOSEC + <rom name="Tim & Baer auf dem Flughafen (1995)(Philips)(DE)[!].iso" size="716360400" crc="d3dde4eb" md5="11bd0251d58b8013505e3e895ccb4d49"/> + <rom name="Tim & Baer auf dem Flughafen (1995)(Philips)(DE)[!].cue" size="140" crc="b94868bf" md5="2edd45cd14770d58176f36bf82315464"/> + --> <description>Tim & Baer auf dem Flughafen (Ger)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6626,6 +9710,11 @@ </software> <software name="timbaerh"> + <!-- + Origin: TOSEC + <rom name="Tim & Baer im Hafen (1995)(Philips)(DE).iso" size="729237600" crc="f729c22e" md5="049e6cd988a23874979cdcbcfcf6d331"/> + <rom name="Tim & Baer im Hafen (1995)(Philips)(DE).cue" size="128" crc="f9704909" md5="303860a6542cb2eb4a9a4d97bb7e2269"/> + --> <description>Tim & Baer im Hafen (Ger)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6637,6 +9726,11 @@ </software> <software name="timbaerk"> + <!-- + Origin: TOSEC + <rom name="Tim & Baer im Krankenhaus (1994)(Philips)(DE).iso" size="639097200" crc="5806bfae" md5="a542352b47f71a9d58f2cbb55741c1af"/> + <rom name="Tim & Baer im Krankenhaus (1994)(Philips)(DE).cue" size="134" crc="81bcd57b" md5="be1f5cf49d224fc7d2f31111678ca1e0"/> + --> <description>Tim & Baer im Krankenhaus (Ger)</description> <year>1994</year> <publisher>Philips</publisher> @@ -6648,6 +9742,11 @@ </software> <software name="timbeara"> + <!-- + Origin: TOSEC + <rom name="Tim & Bear at the Airport (1995)(Philips)(EU).iso" size="705952800" crc="797005dd" md5="c5716a09e751e55e98a0c327b6e1fc98"/> + <rom name="Tim & Bear at the Airport (1995)(Philips)(EU).cue" size="134" crc="e4ff7b87" md5="1cf339b2cc3713c97c33acfdf9e295eb"/> + --> <description>Tim & Bear at the Airport (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6659,6 +9758,11 @@ </software> <software name="timbearm"> + <!-- + Origin: TOSEC + <rom name="Tim & Bear at the Movies (1995)(Philips)(EU).iso" size="738234000" crc="2fc29e4d" md5="9f5c6ada3ad9514f1b1f9d3c500f63e9"/> + <rom name="Tim & Bear at the Movies (1995)(Philips)(EU).cue" size="133" crc="6ce6ce18" md5="ce9ee81d4b136262f48abafd005d15c6"/> + --> <description>Tim & Bear at the Movies (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6670,6 +9774,11 @@ </software> <software name="timbeeri"> + <!-- + Origin: TOSEC + <rom name="Tim & Beer in de Haven (1995)(Philips)(NL).iso" size="727826400" crc="9b1596c8" md5="9efb99e397a0f2fe2b027d26e5b63028"/> + <rom name="Tim & Beer in de Haven (1995)(Philips)(NL).cue" size="131" crc="42e10fe7" md5="7e64e11f169b99a9b9260c0125eedb16"/> + --> <description>Tim & Beer in de Haven (Ned)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6681,6 +9790,11 @@ </software> <software name="timbeerz"> + <!-- + Origin: TOSEC + <rom name="Tim & Beer in het Ziekenhuis (1994)(Philips)(NL).iso" size="632335200" crc="30a754ac" md5="363d44865324d86521d87d49b67d2c9b"/> + <rom name="Tim & Beer in het Ziekenhuis (1994)(Philips)(NL).cue" size="137" crc="4876ee71" md5="064d519cfc1a437315d39d1a7af6ee16"/> + --> <description>Tim & Beer in het Ziekenhuis (Ned)</description> <year>1994</year> <publisher>Philips</publisher> @@ -6692,6 +9806,11 @@ </software> <software name="timteda"> + <!-- + Origin: TOSEC + <rom name="Tim et Ted a l'Aeroport (1995)(Philips)(FR).iso" size="727650000" crc="36c20bb7" md5="c9c67154d9ad679052a0045a4583f363"/> + <rom name="Tim et Ted a l'Aeroport (1995)(Philips)(FR).cue" size="132" crc="2d0f884a" md5="1f31b3afdf9877fe6aea177a659baf2f"/> + --> <description>Tim et Ted a l'Aeroport (Fra)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6703,6 +9822,11 @@ </software> <software name="timtedc"> + <!-- + Origin: TOSEC + <rom name="Tim et Ted au Cinema (1995)(Philips)(FR)[!].iso" size="753580800" crc="2795d14b" md5="b4558f0987645d1a734aaeb2d4345473"/> + <rom name="Tim et Ted au Cinema (1995)(Philips)(FR)[!].cue" size="132" crc="7e997c9f" md5="b7866b98ca92455dcbca723fc5268963"/> + --> <description>Tim et Ted au Cinema (Fra)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6714,6 +9838,11 @@ </software> <software name="tlphotoa" cloneof="tlphoto"> + <!-- + Origin: TOSEC + <rom name="Time-Life - 35mm Photography (1991)(Philips)(US)[!][310690017-2 50240 104 01].iso" size="640143840" crc="d3d263a8" md5="d4249167fb27765a50b4251b691e89df"/> + <rom name="Time-Life - 35mm Photography (1991)(Philips)(US)[!][310690017-2 50240 104 01].cue" size="166" crc="ae0b9e37" md5="c0d2eb5645760c772fb32dfa0f46c8fe"/> + --> <description>Time-Life - 35mm Photography (USA)[310690017-2 50240 104 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -6725,6 +9854,11 @@ </software> <software name="tlphoto"> + <!-- + Origin: TOSEC + <rom name="Time-Life - 35mm Photography (1991)(Philips)(US)[!][3106900642 01].iso" size="640143840" crc="a0291631" md5="06d1baf3082527d95e0aeffd305dfa77"/> + <rom name="Time-Life - 35mm Photography (1991)(Philips)(US)[!][3106900642 01].cue" size="155" crc="000a64d4" md5="e0050602c9dae71384e0b2246b18936c"/> + --> <description>Time-Life - 35mm Photography (USA)[3106900642 01]</description> <year>1991</year> <publisher>Philips</publisher> @@ -6736,6 +9870,11 @@ </software> <software name="tlastro"> + <!-- + Origin: TOSEC + <rom name="Time-Life - Astrology (1993)(Philips)(EU-US)[!].iso" size="708540000" crc="7ee5cfc7" md5="8dfb3f15a0112c7547c50e3bbb28d20d"/> + <rom name="Time-Life - Astrology (1993)(Philips)(EU-US)[!].cue" size="136" crc="d032ea41" md5="51563a247e52a987e7671e3b29c14de3"/> + --> <description>Time-Life - Astrology (Euro, USA)</description> <year>1993</year> <publisher>Philips</publisher> @@ -6747,6 +9886,11 @@ </software> <software name="tlphotod" cloneof="tlphoto"> + <!-- + Origin: TOSEC + <rom name="Time-Life - Kleinbeeld Fotografie (1992)(Philips)(NL)[!].iso" size="631159200" crc="25d7e88e" md5="f46a3f00e434dde55431630fb5a611b2"/> + <rom name="Time-Life - Kleinbeeld Fotografie (1992)(Philips)(NL)[!].cue" size="145" crc="0456dc21" md5="a73a8976bc9e860c19d76207ee2574df"/> + --> <description>Time-Life - Kleinbeeld Fotografie (Ned)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6758,6 +9902,11 @@ </software> <software name="tlphotog" cloneof="tlphoto"> + <!-- + Origin: TOSEC + <rom name="Time-Life - Kleinbildfotografie (1992)(Philips)(DE).iso" size="636267744" crc="fee1c89c" md5="3b663117843d0c1b9005de7e49f341b9"/> + <rom name="Time-Life - Kleinbildfotografie (1992)(Philips)(DE).cue" size="140" crc="70d83568" md5="8f3066be483ce6fb698647db1158de08"/> + --> <description>Time-Life - Kleinbildfotografie (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6769,6 +9918,11 @@ </software> <software name="tlphotoi" cloneof="tlphoto"> + <!-- + Origin: TOSEC + <rom name="Time-Life - La Fotografia In 35 mm (1992)(Philips)(IT).iso" size="645412320" crc="e07ba58c" md5="811644afc14d2dbb73bf0c4c079b0abd"/> + <rom name="Time-Life - La Fotografia In 35 mm (1992)(Philips)(IT).cue" size="143" crc="9796c118" md5="9413d7be079c3bb22b5552199854afd8"/> + --> <description>Time-Life - La Fotografia In 35 mm (Ita)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6780,6 +9934,11 @@ </software> <software name="tlphotof" cloneof="tlphoto"> + <!-- + Origin: TOSEC + <rom name="Time-Life - La Photographie - 24 X 36 mm (1992)(Philips)(FR).iso" size="626878560" crc="77222b90" md5="7bc9072d8ccb19fc5bd23710f030194e"/> + <rom name="Time-Life - La Photographie - 24 X 36 mm (1992)(Philips)(FR).cue" size="149" crc="e37a1a8f" md5="6f09d2ab2178acca86e9ab47b1cad756"/> + --> <description>Time-Life - La Photographie - 24 x 36 mm (Fra)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6791,6 +9950,11 @@ </software> <software name="titanic" supported="no"> + <!-- + Origin: TOSEC + <rom name="Titanic - An interactive exploration (1994)(Philips)(US)[DVC enhanced].iso" size="772726080" crc="d243236f" md5="6de9a2ab6a798f5bd34c326c7ba2538f"/> + <rom name="Titanic - An interactive exploration (1994)(Philips)(US)[DVC enhanced].cue" size="159" crc="32dccadd" md5="ece83df31993b810eefdaadc52e8d305"/> + --> <description>Titanic - An interactive exploration (USA)[DVC enhanced]</description> <year>1994</year> <publisher>Philips</publisher> @@ -6803,6 +9967,11 @@ </software> <software name="tommaxmg"> + <!-- + Origin: TOSEC + <rom name="Tom der Maximagier (1993)(Philips)(DE).iso" size="187513200" crc="e192b2c2" md5="ce2bc08f2769519b038792d806d9b3a0"/> + <rom name="Tom der Maximagier (1993)(Philips)(DE).cue" size="127" crc="bc22ed91" md5="85abccebd119402c011fd896b5ee7bb6"/> + --> <description>Tom der Maximagier (Ger)</description> <year>1993</year> <publisher>Philips</publisher> @@ -6814,6 +9983,11 @@ </software> <software name="tommaxmf"> + <!-- + Origin: TOSEC + <rom name="Tom le Maximagier v1.0 (1992)(Philips)(FR)(M3)[8120021 50262 231 03].iso" size="189277200" crc="aed2f62e" md5="298db6eb4b0c8d6fde9fdb254fee3e81"/> + <rom name="Tom le Maximagier v1.0 (1992)(Philips)(FR)(M3)[8120021 50262 231 03].cue" size="157" crc="44020e16" md5="6ec17ed93ee4d4e3897b7b5c652c7acd"/> + --> <description>Tom le Maximagier v1.0 (Fra)[8120021 50262 231 03]</description> <year>1992</year> <publisher>Philips</publisher> @@ -6825,6 +9999,11 @@ </software> <software name="tommaxmfa" cloneof="tommaxmf"> + <!-- + Origin: TOSEC + <rom name="Tom le Maximagier v1.0 (1992)(Philips)(FR)(M3)[8120021V203 50262231 05].iso" size="189100800" crc="51eca1c0" md5="da9eda403461a719a642a660b41028c7"/> + <rom name="Tom le Maximagier v1.0 (1992)(Philips)(FR)(M3)[8120021V203 50262231 05].cue" size="160" crc="35d9008a" md5="652bf5460ae3fa75d5dced92e6286338"/> + --> <description>Tom le Maximagier v1.0 (Fra)[8120021V203 50262231 05]</description> <year>1992</year> <publisher>Philips</publisher> @@ -6836,6 +10015,11 @@ </software> <software name="totaleur" supported="no"> + <!-- + Origin: TOSEC + <rom name="Total Euro 96 (1996)(Philips)(EU)[DVC].iso" size="463760304" crc="7a833180" md5="726d6bec7f6b837a4d65fc8e9ab5db2b"/> + <rom name="Total Euro 96 (1996)(Philips)(EU)[DVC].cue" size="127" crc="497df348" md5="da153a49e1649c9ca80f55c674c2a879"/> + --> <description>Total Euro 96 (Euro)[DVC]</description> <year>1996</year> <publisher>Philips</publisher> @@ -6848,6 +10032,11 @@ </software> <software name="tri"> + <!-- + Origin: TOSEC + <rom name="TR-I - No World Order (1993)(Philips)(US)[!][26720805 01].iso" size="750146880" crc="3ad6d4ad" md5="60585a63956f611364278246b8cde187"/> + <rom name="TR-I - No World Order (1993)(Philips)(US)[!][26720805 01].cue" size="146" crc="b4cd0a27" md5="b83b814bc483a873dce9c6e08c6d111e"/> + --> <description>TR-I - No World Order (USA)[26720805 01]</description> <year>1993</year> <publisher>Philips</publisher> @@ -6859,6 +10048,11 @@ </software> <software name="tria" cloneof="tri"> + <!-- + Origin: TOSEC + <rom name="TR-I - No World Order (1993)(Philips)(US)[!][6902672 50378963 01].iso" size="751153536" crc="efb0c5e9" md5="0e21f270f9314a5e34b4c1b904f6df51"/> + <rom name="TR-I - No World Order (1993)(Philips)(US)[!][6902672 50378963 01].cue" size="154" crc="75842399" md5="d255ec6cadb72ced060a6d26c7003d4e"/> + --> <description>TR-I - No World Order (USA)[6902672 50378963 01]</description> <year>1993</year> <publisher>Philips</publisher> @@ -6870,6 +10064,11 @@ </software> <software name="smithson"> + <!-- + Origin: TOSEC + <rom name="Treasures of the Smithsonian (1991)(Philips)(US)[!].iso" size="600395040" crc="0a100699" md5="bcb31f6c5c59b4c0d8f3f526bd6b5847"/> + <rom name="Treasures of the Smithsonian (1991)(Philips)(US)[!].cue" size="140" crc="f3b3204a" md5="e8187d8fdde5564ea7fd024ec5171efb"/> + --> <description>Treasures of the Smithsonian (USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -6881,6 +10080,11 @@ </software> <software name="tresilej"> + <!-- + Origin: TOSEC + <rom name="Tresor de l'Ile aux jeux, Le (1996)(Philips)(FR).iso" size="378907200" crc="6a1eef36" md5="7f41df0636f683be20ef8775db3536f5"/> + <rom name="Tresor de l'Ile aux jeux, Le (1996)(Philips)(FR).cue" size="137" crc="8906a73e" md5="41bf4708774912bf2387001050323acc"/> + --> <description>Le Tresor de l'Ile aux Jeux (Fra)</description> <year>1993</year> <publisher>Philips</publisher> @@ -6892,6 +10096,11 @@ </software> <software name="uefaclg" supported="no"> + <!-- + Origin: TOSEC + <rom name="UEFA Champions League (1995)(Philips)(DE)[Season 1995-96][DVC].iso" size="745819200" crc="f53b199d" md5="7c2d7f1ea101f2acf581b603a1a624db"/> + <rom name="UEFA Champions League (1995)(Philips)(DE)[Season 1995-96][DVC].cue" size="151" crc="f6a8f958" md5="7acd6cdac087657496ea2d205abab0c8"/> + --> <description>UEFA Champions League (Ger)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -6904,6 +10113,11 @@ </software> <software name="uefacld" supported="no"> + <!-- + Origin: TOSEC + <rom name="UEFA Champions League (1995)(Philips)(NL)[Season 1995-96][DVC].iso" size="746524800" crc="c24f73c4" md5="5cf401eb670034c66530df38aaa0884b"/> + <rom name="UEFA Champions League (1995)(Philips)(NL)[Season 1995-96][DVC].cue" size="151" crc="75d258c8" md5="5e0618a47ccd7e62af502dcee13fd566"/> + --> <description>UEFA Champions League (Ned)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -6916,6 +10130,11 @@ </software> <software name="uptownbl"> + <!-- + Origin: TOSEC + <rom name="Uptown Blues, The (1994)(Philips)(US).iso" size="744219840" crc="8a1fe385" md5="06aa197a2e76b45593430521c890cb50"/> + <rom name="Uptown Blues, The (1994)(Philips)(US).cue" size="126" crc="7306ffb7" md5="41d9a67ae3c338343e421cdb6df32916"/> + --> <description>The Uptown Blues (USA)</description> <year>1994</year> <publisher>Philips</publisher> @@ -6927,6 +10146,11 @@ </software> <software name="usa94gfd" supported="no"> + <!-- + Origin: TOSEC + <rom name="USA '94 - World Cup (1994)(Philips)(EU)(M3)[!][de-fr-nl][DVC enhanced][8100101V104 50404061 01].iso" size="662911200" crc="a1cfa7ac" md5="e09ff155324c4353f5a4d4df67b9f918"/> + <rom name="USA '94 - World Cup (1994)(Philips)(EU)(M3)[!][de-fr-nl][DVC enhanced][8100101V104 50404061 01].cue" size="184" crc="f7631340" md5="e2c4fa45afc0fda6d8756654d1f68abf"/> + --> <description>USA '94 - World Cup (Euro, German / French / Dutch)[DVC enhanced][8100101V104 50404061 01]</description> <year>1994</year> <publisher>Philips</publisher> @@ -6939,6 +10163,11 @@ </software> <software name="usa94esia" cloneof="usa94esi" supported="no"> + <!-- + Origin: TOSEC + <rom name="USA '94 - World Cup (1994)(Philips)(EU)(M3)[a][en-es-it][DVC enhanced][8100103V105 50404055 01].iso" size="651268800" crc="bb04b237" md5="6429d34ccaae6e40e66998fecaf34e42"/> + <rom name="USA '94 - World Cup (1994)(Philips)(EU)(M3)[a][en-es-it][DVC enhanced][8100103V105 50404055 01].cue" size="184" crc="e724e780" md5="e12b79bff784c8f2fda2e37d3f5c6602"/> + --> <description>USA '94 - World Cup (Euro, English / Spanish / Italian, Alt)[DVC enhanced][8100103V105 50404055 01]</description> <year>1994</year> <publisher>Philips</publisher> @@ -6951,6 +10180,11 @@ </software> <software name="usa94esi" supported="no"> + <!-- + Origin: TOSEC + <rom name="USA '94 - World Cup (1994)(Philips)(EU)(M3)[en-es-it][DVC enhanced][8100103V105 50404055 01].iso" size="651268800" crc="bfaa9d74" md5="9627ea7ef77f8d801e11077b4734c962"/> + <rom name="USA '94 - World Cup (1994)(Philips)(EU)(M3)[en-es-it][DVC enhanced][8100103V105 50404055 01].cue" size="181" crc="7a3851e5" md5="5aaa18fc8507f05c4939eff6e890c3c8"/> + --> <description>USA '94 - World Cup (Euro, English / Spanish / Italian)[DVC enhanced][8100103V105 50404055 01]</description> <year>1994</year> <publisher>Philips</publisher> @@ -6963,6 +10197,11 @@ </software> <software name="usineaux"> + <!-- + Origin: TOSEC + <rom name="usine aux Crayons, L' (1995)(Philips)(FR).iso" size="634710720" crc="471b86fd" md5="35330770c8b560a326d21d742e6d7ee9"/> + <rom name="usine aux Crayons, L' (1995)(Philips)(FR).cue" size="130" crc="62ecbb80" md5="84f256afe87314a64a312d6d008babaf"/> + --> <description>L'Usine aux Crayons (Fra)</description> <year>1995</year> <publisher>Philips</publisher> @@ -6974,6 +10213,11 @@ </software> <software name="verhalmv"> + <!-- + Origin: TOSEC + <rom name="Verhalen Toverdoos - Magische Vertellingen v1.0 (1992)(Philips)(NL).iso" size="205447200" crc="c9d0a42d" md5="e3d49bc822d366b0aea1b997c459a2d5"/> + <rom name="Verhalen Toverdoos - Magische Vertellingen v1.0 (1992)(Philips)(NL).cue" size="156" crc="fbcdc10b" md5="1316dcc06757ae8836a4ab2f41fdfb98"/> + --> <description>Verhalen Toverdoos - Magische Vertellingen v1.0 (Ned)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6985,6 +10229,11 @@ </software> <software name="verhalen"> + <!-- + Origin: TOSEC + <rom name="Verhalen Toverdoos - Sterrendromen v1.0 (1992)(Philips)(NL)[!].iso" size="205964640" crc="323fb975" md5="3d0fb64d23be5896a8336216eb597b34"/> + <rom name="Verhalen Toverdoos - Sterrendromen v1.0 (1992)(Philips)(NL)[!].cue" size="151" crc="46ce5492" md5="64b122e5f4b8041d620a3cf2de5e7267"/> + --> <description>Verhalen Toverdoos - Sterrendromen v1.0 (Ned)</description> <year>1992</year> <publisher>Philips</publisher> @@ -6996,6 +10245,12 @@ </software> <software name="videocdm" supported="no"> + <!-- + Origin: TOSEC + <rom name="Video CD - Music Sampler (1995)(Philips - PolyGram)(EU)(Track 1 of 2)[DVC].iso" size="14112000" crc="4e4361c2" md5="dda74645fe67cdcd1e8f993cba024706"/> + <rom name="Video CD - Music Sampler (1995)(Philips - PolyGram)(EU)(Track 2 of 2)[DVC].iso" size="281033424" crc="d0f97e26" md5="ba6cad467a488b3b93a7f5835352ee25"/> + <rom name="Video CD - Music Sampler (1995)(Philips - PolyGram)(EU)[DVC].cue" size="324" crc="69694f23" md5="359e11f69ce734f53fdc2ce5892d5feb"/> + --> <description>Video CD - Music Sampler (Euro)[DVC]</description> <year>1995</year> <publisher>Philips ~ PolyGram</publisher> @@ -7008,6 +10263,11 @@ </software> <software name="vliegend"> + <!-- + Origin: TOSEC + <rom name="Vliegende Hollander, De (1994)(Philips)(NL).iso" size="735235200" crc="086edf34" md5="9f56cb6d8a12905f98aba184c192d09b"/> + <rom name="Vliegende Hollander, De (1994)(Philips)(NL).cue" size="132" crc="2966f55f" md5="ae30e2d1c52729a5337166bdab8e336d"/> + --> <description>De Vliegende Hollander (Ned)</description> <year>1994</year> <publisher>Philips</publisher> @@ -7019,6 +10279,11 @@ </software> <software name="wasistda"> + <!-- + Origin: TOSEC + <rom name="Was ist das fur ein vogel (1992)(Philips)(DE).iso" size="723068304" crc="3da8fdd5" md5="f55db54ea1f735cabd7ba9dc8c99b45f"/> + <rom name="Was ist das fur ein vogel (1992)(Philips)(DE).cue" size="134" crc="199cb694" md5="8cfa8a70aac66fa6af298899039628f5"/> + --> <description>Was ist das fur ein vogel (Ger)</description> <year>1992</year> <publisher>Philips</publisher> @@ -7030,6 +10295,11 @@ </software> <software name="webi"> + <!-- + Origin: TOSEC + <rom name="WEB-i (1996)(Philips)(US).iso" size="597643200" crc="3b548b9e" md5="86adbd92fc7563f522d40fee65ccf8c8"/> + <rom name="WEB-i (1996)(Philips)(US).cue" size="114" crc="b743e207" md5="30c30320cace03209bfe940367ce2ce6"/> + --> <description>WEB-i (USA)</description> <year>1996</year> <publisher>Philips</publisher> @@ -7041,6 +10311,11 @@ </software> <software name="whycdi"> + <!-- + Origin: TOSEC + <rom name="Why CD-I (1991)(Philips).iso" size="380494800" crc="5ab203d2" md5="dbc49f873f1e21336318f3e9225cd8f6"/> + <rom name="Why CD-I (1991)(Philips).cue" size="113" crc="2c11d3b0" md5="9ae2cbfc72b1c4add839c878985098df"/> + --> <description>Why CD-I</description> <year>1991</year> <publisher>Philips</publisher> @@ -7052,6 +10327,11 @@ </software> <software name="windchin"> + <!-- + Origin: TOSEC + <rom name="Windows on Chinese Civilization - The Forbidden City (1995)(Philips)(EU).iso" size="549667104" crc="4c2746f6" md5="07f5aa3dfb62e70b2dd29a1918f287f7"/> + <rom name="Windows on Chinese Civilization - The Forbidden City (1995)(Philips)(EU).cue" size="161" crc="22d828f0" md5="a1b96aacf4f2295e0aac607a6ea790ba"/> + --> <description>Windows on Chinese Civilization - The Forbidden City (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -7063,6 +10343,11 @@ </software> <software name="winefran"> + <!-- + Origin: TOSEC + <rom name="Wines of France (1995)(Philips)(EU).iso" size="768927600" crc="1f8b3d56" md5="20ac6f6ca0e7d94dcf2c7926cddaf5bf"/> + <rom name="Wines of France (1995)(Philips)(EU).cue" size="124" crc="45365411" md5="d548ae3dfd20185a404289a0ebf5d31a"/> + --> <description>Wines of France (Euro)</description> <year>1995</year> <publisher>Philips</publisher> @@ -7074,6 +10359,11 @@ </software> <software name="vinsfran" cloneof="winefran"> + <!-- + Origin: TOSEC + <rom name="Vins de France, Les (1994)(Philips)(FR).iso" size="747054000" crc="a5938dd0" md5="3a335ddf7beb73632aacf4da803bef1a"/> + <rom name="Vins de France, Les (1994)(Philips)(FR).cue" size="128" crc="2ec0313f" md5="9516d3fe6fd81f62fdacda7a614ba3c3"/> + --> <description>Les Vins de France (Fra)</description> <year>1994</year> <publisher>Philips</publisher> @@ -7085,6 +10375,11 @@ </software> <software name="worldbel"> + <!-- + Origin: TOSEC + <rom name="World Below, The - Literature Explorers (1993)(Educational Management Group)(US).iso" size="570835104" crc="aa3ba243" md5="b36bd75a90e3656527d6c74130244244"/> + <rom name="World Below, The - Literature Explorers (1993)(Educational Management Group)(US).cue" size="169" crc="a12e0634" md5="0f1ef2daad1f48ce1cd54bf2df484e0f"/> + --> <description>The World Below - Literature Explorers (USA)</description> <year>1993</year> <publisher>Educational Management Group</publisher> @@ -7096,6 +10391,11 @@ </software> <software name="worldimp"> + <!-- + Origin: TOSEC + <rom name="World of Impressionism, The (1992)(Philips)(EU-US)[!].iso" size="687889440" crc="71aab955" md5="db76dfed452de912de803b8f8745c6c4"/> + <rom name="World of Impressionism, The (1992)(Philips)(EU-US)[!].cue" size="142" crc="07136564" md5="07d71c282fc107d6962e81920b8e96f3"/> + --> <description>The World of Impressionism (Euro, USA)</description> <year>1992</year> <publisher>Philips</publisher> @@ -7107,6 +10407,11 @@ </software> <software name="worldimpu" cloneof="worldimp"> + <!-- + Origin: TOSEC + <rom name="World of Impressionism, The (1991)(Philips)(US).iso" size="685772640" crc="949da053" md5="87d677d6df9861b0a19906333434ec2e"/> + <rom name="World of Impressionism, The (1991)(Philips)(US).cue" size="136" crc="847bc04c" md5="05570478d11368f4ce6665cf2694dee9"/> + --> <description>The World of Impressionism (USA)</description> <year>1991</year> <publisher>Philips</publisher> @@ -7118,6 +10423,11 @@ </software> <software name="wtegypt" supported="no"> + <!-- + Origin: TOSEC + <rom name="World Tours - Egypt (1996)(Educational Management Group)(US)[DVC].iso" size="693604800" crc="bd8a56ea" md5="7efc49a81139b795c3f7800611ae2d23"/> + <rom name="World Tours - Egypt (1996)(Educational Management Group)(US)[DVC].cue" size="154" crc="658e505f" md5="86f17242d38025190126410229ff14f3"/> + --> <description>World Tours - Egypt (USA)[DVC]</description> <year>1996</year> <publisher>Educational Management Group</publisher> @@ -7130,6 +10440,11 @@ </software> <software name="wthk" supported="no"> + <!-- + Origin: TOSEC + <rom name="World Tours - Hong Kong (1995)(Educational Management Group)(US)[DVC].iso" size="656539632" crc="30d87227" md5="fa6a7ce6444059923ff7724181e97c5f"/> + <rom name="World Tours - Hong Kong (1995)(Educational Management Group)(US)[DVC].cue" size="158" crc="b845dfff" md5="9696ae5f8e9b044d52f6b0aaa3db15de"/> + --> <description>World Tours - Hong Kong (USA)[DVC]</description> <year>1995</year> <publisher>Educational Management Group</publisher> @@ -7142,6 +10457,11 @@ </software> <software name="wtnz" supported="no"> + <!-- + Origin: TOSEC + <rom name="World Tours - New Zealand (1995)(Educational Management Group)(US)[DVC].iso" size="689371200" crc="0b84bbaf" md5="eef978704e8c9a40367986135f796706"/> + <rom name="World Tours - New Zealand (1995)(Educational Management Group)(US)[DVC].cue" size="160" crc="4d01da27" md5="47ee0baccae809eb1fcfcb83e715bdd3"/> + --> <description>World Tours - New Zealand (USA)[DVC]</description> <year>1995</year> <publisher>Educational Management Group</publisher> @@ -7154,6 +10474,11 @@ </software> <software name="wtpi" supported="no"> + <!-- + Origin: TOSEC + <rom name="World Tours - Pacific Islands (1996)(Educational Management Group)(US)[DVC].iso" size="768222000" crc="8db85a06" md5="d1b262d859cd64305789303cb6f8c04a"/> + <rom name="World Tours - Pacific Islands (1996)(Educational Management Group)(US)[DVC].cue" size="164" crc="5b671ba7" md5="46cadc91f12673a60262ef7021ee735f"/> + --> <description>World Tours - Pacific Islands (USA)[DVC]</description> <year>1996</year> <publisher>Educational Management Group</publisher> @@ -7166,6 +10491,11 @@ </software> <software name="wtrain" supported="no"> + <!-- + Origin: TOSEC + <rom name="World Tours - The Amazon Rainforest (1995)(Educational Management Group)(US)[DVC].iso" size="664322400" crc="f7da23b0" md5="16d9d147f67176022897b236db53fafd"/> + <rom name="World Tours - The Amazon Rainforest (1995)(Educational Management Group)(US)[DVC].cue" size="170" crc="44769423" md5="53052d210bc334bd9e32325ea52c4d26"/> + --> <description>World Tours - The Amazon Rainforest (USA)[DVC]</description> <year>1995</year> <publisher>Educational Management Group</publisher> @@ -7178,6 +10508,11 @@ </software> <software name="wtwaf" supported="no"> + <!-- + Origin: TOSEC + <rom name="World Tours - West Africa (1994)(Educational Management Group)(US)[DVC].iso" size="645099504" crc="89c51331" md5="891f31076c8992789e116fd2859ebfb1"/> + <rom name="World Tours - West Africa (1994)(Educational Management Group)(US)[DVC].cue" size="160" crc="a0e7e62b" md5="7669c3f883d109dc187c8cd045050f3f"/> + --> <description>World Tours - West Africa (USA)[DVC]</description> <year>1994</year> <publisher>Educational Management Group</publisher> @@ -7190,6 +10525,11 @@ </software> <software name="xplora1p" supported="no"> + <!-- + Origin: TOSEC + <rom name="Xplora 1 - Peter Gabriel's Secret World (1995)(Philips)(EU)[!][DVC].iso" size="721770000" crc="998c9e66" md5="d3378df2317b3e385d7cc62b22be9caa"/> + <rom name="Xplora 1 - Peter Gabriel's Secret World (1995)(Philips)(EU)[!][DVC].cue" size="156" crc="24023846" md5="6516d34b088d69736d3a257071178ec6"/> + --> <description>Xplora 1 - Peter Gabriel's Secret World (Euro)[DVC]</description> <year>1995</year> <publisher>Philips</publisher> @@ -7202,6 +10542,11 @@ </software> <software name="yearn2le"> + <!-- + Origin: TOSEC + <rom name="Yearn 2 Learn - Peanuts (1994)(Philips)(EU)(M4)[!].iso" size="269539200" crc="232df523" md5="b4bd0e15ae9a4b603a71fde66a663d07"/> + <rom name="Yearn 2 Learn - Peanuts (1994)(Philips)(EU)(M4)[!].cue" size="139" crc="c060a206" md5="2914a32453bb44d263e5cae1d15cc31a"/> + --> <description>Yearn 2 Learn - Peanuts (Euro)</description> <year>1994</year> <publisher>Philips</publisher> @@ -7213,6 +10558,11 @@ </software> <software name="youcando"> + <!-- + Origin: TOSEC + <rom name="You Can Do It All With Philips CD-i - A Title Sampler v1.0 (1992)(Philips)(EU)(M4)[Oct 1992].iso" size="466935504" crc="1834e1b8" md5="c5acfd99c9fad1df8779c76a7415e646"/> + <rom name="You Can Do It All With Philips CD-i - A Title Sampler v1.0 (1992)(Philips)(EU)(M4)[Oct 1992].cue" size="181" crc="7af8c19f" md5="38553950a371a58807cd998c8cb66fb2"/> + --> <description>You Can Do It All With Philips CD-i - A Title Sampler v1.0 (Euro)[Oct 1992]</description> <year>1992</year> <publisher>Philips</publisher> @@ -7224,6 +10574,11 @@ </software> <software name="zooeenvo"> + <!-- + Origin: TOSEC + <rom name="Zoo ...eenvoudig! (1993)(Philips)(NL).iso" size="682315200" crc="df4ab7a5" md5="9cd95ba694cd65396bceecdd08dde32c"/> + <rom name="Zoo ...eenvoudig! (1993)(Philips)(NL).cue" size="126" crc="1863b345" md5="53698aa2b0e06ea72c11ee25e78ab350"/> + --> <description>Zoo ...eenvoudig! (Ned)</description> <year>1993</year> <publisher>Philips</publisher> @@ -7234,7 +10589,90 @@ </part> </software> - <!-- These are non-tosec sourced, and could be bad --> + +<!-- + These are converted from rips released on the web +--> + + <software name="frogfeas"> + <!-- + Origin: Rastersoft itself + <rom name="frog.bin" size="5821200" crc="8e171faf" sha1="98671675714fadb3145f64fa629197d703ec1b15" /> + <rom name="frog.cue" size="81" crc="4f7263dd" sha1="f80d86741b7072b007b11bb2311a66202e8fba18" /> + --> + <description>Frog Feast (Demo)</description> + <year>2000</year> + <publisher>Rastersoft</publisher> + <part name="cdrom" interface="cdi_cdrom"> + <diskarea name="cdrom"> + <disk name="frog feast" sha1="67f7e06f8c7157963b980ddb1d5bf7fd5f22bbc5"/> + </diskarea> + </part> + </software> + + <software name="smww"> + <!-- + Origin: Unknown + <rom name="mario wacky worlds (prototype).bin" size="128677920" crc="906a4f55" sha1="62ca7245bbf3d9ecc2f4d84a49a0187629556896" /> + <rom name="mario wacky worlds (prototype).cue" size="96" crc="6492b7bb" sha1="6650b115b37c7a5a0c91b7221ed437b9c8b75963" /> + --> + <description>Super Mario's Wacky Worlds (Prototype v0.11, 19930303)</description> + <year>1993</year> + <publisher>Phillips</publisher> + <part name="cdrom" interface="cdi_cdrom"> + <diskarea name="cdrom"> + <disk name="super mario wacky worlds (prototype)" sha1="a3178428ed39f7a461e693d9a1a927b4daaa677f"/> + </diskarea> + </part> + </software> + + <software name="ridlmaze"> + <!-- + Origin: Unknown + <rom name="riddle of the maze (v2.01)(27-01-94)(testing - phase 2).cue" size="121" crc="51b50475" sha1="74e7d294bfe8796e20e54d677435bf45b15b4110" offset="0" /> + <rom name="riddle of the maze (v2.01)(27-01-94)(testing - phase 2).iso" size="445257120" crc="35ce29d3" sha1="c5f590be27b49962a355bd7f2e3491bd124fdb00" offset="0" /> + --> + <description>Riddle of the Maze (Prototype v2.01, 19940127)</description> + <year>1994</year> + <publisher>Philips</publisher> + <part name="cdrom" interface="cdi_cdrom"> + <diskarea name="cdrom"> + <disk name="riddle of the maze (v2.01)(27-01-94)(testing - phase 2)" sha1="77b129103e5053618de4773ad938e204ac5afb18"/> + </diskarea> + </part> + </software> + + <software name="voyeur2" supported="no"> + <!-- + Origin: Unknown + <rom name="voyeur ii (v1.04)(11-06-96)(testing-beta)(access code 3333) (disc1).bin" size="601528704" crc="0a337e76" sha1="10c15630f7cbcfc7751e7ae1948947cad48850b2" offset="0" /> + <rom name="voyeur ii (v1.04)(11-06-96)(testing-beta)(access code 3333) (disc1).cue" size="133" crc="7d9bbe3f" sha1="fc746593b61ac9d3d24296a0c1ab7101b25db49d" offset="0" /> + + <rom name="voyeur ii (v1.04)(11-06-96)(testing-beta)(access code 3333) (disc2).bin" size="595354704" crc="8024edf4" sha1="ba86e8850304afb918e2a4c7411e8648b3f90a4a" offset="0" /> + <rom name="voyeur ii (v1.04)(11-06-96)(testing-beta)(access code 3333) (disc2).cue" size="133" crc="7cc698ee" sha1="3622939d9c37f43749907cc964cc4738e58ad3b7" offset="0" /> + --> + <description>Voyeur II (Prototype v1.04, 19960611)[DVC]</description> + <year>1996</year> + <publisher>Philips</publisher> + <info name="usage" value="Access code 3333" /> + <sharedfeat name="compatibility" value="DVC" /> + <part name="cdrom1" interface="cdi_cdrom"> + <diskarea name="cdrom"> + <disk name="voyeur ii (v1.04)(11-06-96)(testing-beta)(access code 3333) (disc1)" sha1="9dfffd6736dbb85fa5317000af9f42f98aad4a20"/> + </diskarea> + </part> + <part name="cdrom2" interface="cdi_cdrom"> + <diskarea name="cdrom"> + <disk name="voyeur ii (v1.04)(11-06-96)(testing-beta)(access code 3333) (disc2)" sha1="534bb7e695d98450edc206b79291200cb554cc6d"/> + </diskarea> + </part> + </software> + + +<!-- + These are non-tosec sourced, and could be bad +--> + <!-- The Apprentice is a CDi-Ready disc, the format of these discs is strange, and not properly supported in a PC the first track is identified as an audio track, with the game DATA being in the audio @@ -7308,15 +10746,4 @@ </part> </software> - <software name="smww"> - <description>Super Mario's Wacky Worlds (Prototype)</description> - <year>????</year> - <publisher>Phillips</publisher> - <part name="cdrom" interface="cdi_cdrom"> - <diskarea name="cdrom"> - <disk name="super mario wacky worlds (prototype)" sha1="a3178428ed39f7a461e693d9a1a927b4daaa677f"/> - </diskarea> - </part> - </software> - </softwarelist> diff --git a/hash/fmtowns_cd.xml b/hash/fmtowns_cd.xml index 5a2a3736bf2..4343331966e 100644 --- a/hash/fmtowns_cd.xml +++ b/hash/fmtowns_cd.xml @@ -1,8 +1,290 @@ <?xml version="1.0"?> <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> -<softwarelist name="fmtowns_cd" description="FM Towns CD-ROMs"> +<softwarelist name="fmtowns_cd" description="Fujitsu FM Towns CD-ROMs"> + <!-- -Preliminary list for FM Towns CDs. + + Known undumped discs (possibly more exist, and some CDs marked as FMT could actually be for Marty and vice versa), based on Blitzkrieg's researches + + + FM-Towns Marty CDs + ================== + ? 0 Hoshi Uranai Jutsu Dai Rei Gen Feb-90 Victor (CDx1) + ? Airwave Adventure Dec-89 Toshiba EMI (CDx1) + ? Debut Shimasu Jun-94 Iris Plan (CDx1) + ? Debut Shimasu 2 Oct-94 Iris Plan (CDx1) + ? Debut Shimasu 3 Feb-95 Iris Plan (CDx1) + ? Doda Mega Mix Nov-89 FNC (CDx1) + ? Dragon Shock Nov-89 (CDx1) + ? Game Nihonshi: Tenkajin Hideyoshi to Ieyasu Jun-96 Koei (CDx1) + ? Hyper Koto no tabi Kyoto Feb-93 Workshop (CDx1) + ? Hyper Touhoku Kikou Dec-91 Workshop (CDx1) + ? Monster Planet 2255 Dec-90 Japan Media Programming (CDx1) + ? Nazo Nazo Meiro Daibouken Pyokotan Nochieasobi Ehon Sep-91 Workshop (CDx1) + ? Pyokotan no Niji no Shima Nanashoku no Ninjin o Sagase Mar-94 Workshop (CDx1) + ? Tree Club Jul-95 Fujitsu (CDx1) + ? Uemura Kei no Sexy Resort Sep-92 Pink Elephant (CDx1) + ? Uemura Kei no Sexy Telephone Sep-92 Pink Elephant (CDx1) + ? Uji-bushi no Chiiku Game Apr-94 Japan Measuring Equipment (CDx1) + ? Woman's Memory Apr-91 Human Interface (CDx1) + ? Yawahada Bishoujo Mar-95 (CDx1) + ? Yu Ji Puchikora Mar-94 Panther Software (CDx1) + ? Zadeito Kore de Kanojo wa Boku no Mono! Feb-90 Japan Media Programming (CDx1) + AD&D: Heroes of Lance Jun-90 Pony Canyon (CDx1) + Aesop's World Vol.1 Dec-93 Fujitsu (CDx1) + Aesop's World Vol.2 Dec-93 Fujitsu (CDx1) + Air Management Ouzora ni Kakeru Sep-92 Koei (CDx1) + Air Warrior Mar-92 Fujitsu (CDx1) + Air Warrior v1.2 Nov-93 Fujitsu (CDx1) + Air Warrior v2.1 Apr-95 Fujitsu (CDx1) + Akiko Gold: The Queen of Adult Jan-95 Fairytale - Red Zone (CDx1) + Akiko Premium Mar-93 Fairytale - Red Zone (CDx1) + Alice no Yakata Jul-95 Alice Soft (CDx1) + Arcadia Feb-91 Workshop (CDx1) + Arquelphos Jul-93 D.O. (CDx1) + Battle Oct-92 GAM (CDx1) + Battle Chess Sep-91 Fujitsu (CDx1) + Bell's Avenue Vol.1 Aug-93 Wendy Magazine (CDx1) + Bell's Avenue Vol.2 Jan-94 Wendy Magazine (CDx1) + Bell's Avenue Vol.3 Apr-95 Wendy Magazine (CDx1) + Big Honor Sep-92 Artdink (CDx1) + Biochemistry Cyber Alpha Apr-96 D.O. (CDx1) + Birdy Soft Top Characters Apr-95 Birdy Soft (CDx1) + Bomber Quest XXX-95 Mink (CDx1) + Bunretsu Shugoshin Twinkle-Star Jul-93 Studio Twinkle (CDx1) + Cal 3 Jul-93 Birdy Soft (CDx1) + California X Party Sep-94 HOP (CDx1) + Can Can Bunny Premiere Sep-92 Cocktail Soft (CDx1) + Castles 2 Oct-93 Victor (CDx1) + Cat's Part 1 Apr-93 Cats Pro (CDx1) + Cat's Vol.2: Special Hospital === Cats Pro (CDx1) + Chiemi & Naomi Dec-93 Fairytale - Red Zone (CDx1) + Chinmoku no Kantai Apr-92 GAM (CDx1) + Chiri Jigsaw World 2 Dec-94 Fujitsu (CDx1) + Collector D Aug-93 D.O. (CDx1) + Collector D (Extra Edition) Sep-93 D.O. (CDx1) + Crescent Moon Girl XXX-89 Alice Soft (CDx1) + Curse Feb-95 Queen Soft (CDx1) + Cutie Queen Feb-95 Crystal Video (CDx1) + Diamond Players Jun-93 Wolf Team (CDx1) + Eight Lakes G.C. Aug-90 T & E Soft (CDx1) + Eikan wa Kimini 2 Aug-91 Artdink (CDx1) + Eikan wa Kimini 3 Aug-93 Artdink (CDx1) + Engage Errands Apr-95 Ponytail Soft (CDx1) + Engage Errands 2 May-95 Ponytail Soft (CDx1) + Europe Sensen Jul-92 Koei (CDx1) + Eye of the Beholder 3 Nov-94 Ving (CDx1) + Fuijitsu Habitat Jan-90 Fujitsu (CDx1) + Gadget Dec-93 Toshiba EMI (CDx1) + Gakuen Bakuretsu Tenkousei Mar-96 ZyX (CDx1) + Gakuen Bomber Jun-94 Active (CDx1) + Gambler: Queen's Cup Sep-94 Queen Soft (CDx1) + Game Nihonshi: Kakumeiko Oda Nobunaga Mar-96 Koei (CDx1) + Garou Densetsu Special Sep-96 JHV (CDx1) + Gei Yumejan + May-93 GAM (CDx1) + Ginga Eiyuu Densetsu 2DX + May-92 Bothtec (CDx1) + Ginga Eiyuu Densetsu 3 SP Dec-93 Bothtec (CDx1) + Ginga Yuukyou Densetsu RC Tobacker Nov-95 Ponytail Soft (CDx1) + Grimm's Fairy Tales 1: Little Red Riding Hood Nov-89 Gyosei (CDx1) + Grimm's Fairy Tales 2: Musicians of Bremen Dec-89 Gyosei (CDx1) + Grimm's Fairy Tales 3: The Wolf and the Seven Little Kids Nov-90 Gyosei (CDx1) + Grimm's Fairy Tales 4: Sleeping Beauty Nov-90 Gyosei (CDx1) + Gulf War: Soukouden Dec-93 Telenet Japan (CDx1) + Gunship Oct-90 MicroProse (CDx1) + Half-Moon in Kawaru Made Apr-95 Cocktail Soft (CDx1) + Hana no Kioku 2 Dec-96 Foster Japan (CDx1) + Hana Yori Dango 2 Apr-93 Active (CDx1) + Harukanaru Augusta Jan-90 T & E Soft (CDx1) + Hello Kitty: Asobi no Mochabako Sep-95 Fujitsu (CDx1) + Hello Kitty: Kitty Town no Naka Matachi Tanoshii Seikatsu XXX-95 Fujitsu (CDx1) + High School War Sep-94 I.S.C. (CDx1) + Hiouden 2 Mar-94 Telenet Japan (CDx1) + If Jun-93 Active (CDx1) + If 2 Nov-93 Active (CDx1) + If 3 Apr-95 Active (CDx1) + Igo Doujou Shodan Kaigan! Kyuu Karadane no Chousen May-91 Fujitsu (CDx1) + Igo Doujou Yaburi Menkyokaiden!! Mezase 7-Kyuu Oct-90 Fujitsu (CDx1) + Inindou: Datou Nobunaga Feb-92 Koei (CDx1) + Introduction to Go Dojo Jun-91 GAM (CDx1) + Intruder: Sakura Yashiki no Tansaku XXX-89 Alice Soft (CDx1) + Irisu-tei Sayokyoku Nov-92 Agumix (CDx1) + Ishin no Arashi Mar-90 Koei (CDx1) + J-League Professional Soccer 1994 Sep-94 Victor (CDx1) + Jinmon Yuugi Aug-95 Fairytale - Red Zone (CDx1) + Joker Towns Jul-92 Birdy Soft (CDx1) + Joshikou Seifuku Monogatari Apr-95 KSS (CDx1) + JYB Apr-93 Cocktail Soft (CDx1) + Kamigami No Daichi: Kojiki Gaiden Oct-93 Koei (CDx1) + Kero Kero Keroppi to Origami no Tabibito Jul-95 Fujitsu (CDx1) + Kikou Shidan 2 Mar-93 Artdink (CDx1) + Kouryuuki Oct-93 Koei (CDx1) + Kousoku Choujin Aug-96 Foster Japan (CDx1) + KU2++ Nov-93 Panther Software (CDx1) + Kusuriyubi no Kyoukasho Apr-96 Active (CDx1) + Kyouko no Ijiwaru! Oct-94 Ponytail Soft (CDx1) + L'Empereur Jan-91 Koei (CDx1) + Leading Company Apr-92 Koei (CDx1) + Lemon Cocktail Collection Mar-93 Cocktail Soft (CDx1) + Lipstick Adventure 3 May-93 Fairytale (CDx1) + Little Big Adventure Dec-95 Electronic Arts (CDx1) + Lord of the Rings 2: The Two Towers Apr-93 Star Craft (CDx1) + Lord of the Rings: The Fellowship of the Ring Mar-92 Star Craft (CDx1) + Lua Jun-93 Inter Heart (CDx1) + Mahjong Bishoujo Den Rippuru Feb-95 Foresight (CDx1) + Mahjong Fantasia 2 Sep-93 Active (CDx1) + Mahjong Fantasia 3 Nov-95 Active (CDx1) + Mahjong Goku Apr-89 ASCII (CDx1) + Mahjong Musashi XXX-89 Computer Cosmos (CDx1) + Manami no Doko made Iku no May-95 Wendy Magazine (CDx1) + Manami no Doko made Iku no 2: Return of the Kuro Pack May-95 Wendy Magazine (CDx1) + Manami: Ai to Koukan no Hibi XXX-95 Fairytale - Red Zone (CDx1) + Marionette Mind Mar-94 Studio Milk (CDx1) + Mega Lo Mania Mar-93 Imagineer (CDx1) + Meisou Toshi Dec-95 Tiare (CDx1) + Might & Magic: World of Xeen Oct-92 Star Craft (CDx1) + Mirage 2 Dec-94 Discovery (CDx1) + Misato-chan no Yume Nikki Apr-97 Active (CDx1) + Moeru Asoko no Pai Pai Yuugi Dec-93 Illusion (CDx1) + Mokkori Man RPG Jun-94 Illusion (CDx1) + Monoshiri ji Yuugaku Hyakunin Ichishuhen Oct-94 Shinko Human Request (CDx1) + Moonlight Energy Dec-92 Inter Heart (CDx1) + Murder Club DX May-92 Riverhill Soft (CDx1) + Naru Mahjong Apr-95 Libido (CDx1) + Nemurenu Yoru no Chisana Ohanashi Dec-93 Amuse (CDx1) + Never Land Mar-96 Tips (CDx1) + NHK Hitori de Dekiru Mon! Mar-95 Rei (CDx1) + Niko 2 Nov-91 Telenet Japan (CDx1) + Nippon Mukashibanashi Nov-90 Gyosei (CDx1) + Nippon Mukashibanashi 2 Jul-91 Gyosei (CDx1) + Nippon Mukashibanashi 3 Dec-93 Gyosei (CDx1) + Nippon Mukashibanashi 4 Dec-93 Gyosei (CDx1) + Nippon Mukashibanashi 5 Mar-94 Gyosei (CDx1) + Nobunaga no Yabou: Bushou Fuunroku Jul-91 Koei (CDx1) + Nobunaga no Yabou: Sengoku Gunyuu Den Dec-89 Koei (CDx1) + Nostalgia 1907 May-92 Sur de Wave (CDx1) + Obachan no Chiebukuro Nov-91 Gyosei (CDx1) + Oku man Choja 2 Jul-91 Computer Cosmos (CDx1) + Only You: Juliet of the Century Jan-96 Alice Soft (CDx1) + Orient Express Dec-94 Gyosei (CDx1) + Palamedes XXX-91 Ving (CDx1) + Para Para Paradise Dec-95 Family Soft (CDx2) + Phobos Aug-95 Himeya Soft, Inc (CDx1) + Pocky & Ponyon Jun-94 Ponytail Soft (CDx1) + Populous 2 Feb-93 Imagineer (CDx1) + Presence Dec-92 Sur de Wave (CDx1) + Private Slave Aug-93 Raccoon (CDx1) + ProYakyuu Family Stadium '90 Sep-90 Game Arts (CDx1) + Reijou Monogatari Apr-95 Inter Heart (CDx1) + Rinkan Gakkou Feb-96 Foster Japan (CDx1) + Royal Blood May-92 Koei (CDx1) + Ryuutatakaden Jun-94 Fujitsu (CDx1) + Sakura no Mori XXX-95 Active (CDx1) + Sangokushi 2 Jun-90 Koei (CDx1) + Sangokushi 3 Jun-92 Koei (CDx1) + Sargon 5 Nov-92 GAM (CDx1) + Sayonara no Mukougawa Aug-97 Foster Japan (CDx1) + Seikatsu Simulation Watashi no Machi May-95 Cocktail Soft (CDx1) + Sekai no o Hanashi May-92 Gyosei (CDx1) + Sekigahara Apr-92 Artdink (CDx1) + Sensual Angels Jan-94 JHV (CDx1) + Sexy P/K Part 2: World Cup Hen May-95 Birdy Soft (CDx1) + Sexy P/K Part Nihon Apr-95 Birdy Soft (CDx1) + Shanghai Dec-90 ASCII (CDx1) + Shanghai: Great Wall Sep-95 Electronic Arts (CDx1) + Shooting Towns Mar-90 Amorphous (CDx1) + SL o mitai! Uruwashi no Joki Kikan-sha Jul-95 Gyosei (CDx1) + Soft de Hard na Monogatari Apr-89 System Sacom (CDx1) + Soft de Hard na Monogatari 2 Jul-89 System Sacom (CDx1) + Sokoban Perfect Jul-90 Thinking Rabbit (CDx1) + Space Odyssey Galaxy Mar-91 Fujitsu (CDx1) + Space Odyssey Galaxy 2 Apr-92 Fujitsu (CDx1) + Steepia Jun-93 Fujitsu (CDx1) + Steepia Lite Mar-93 Fujitsu (CDx1) + Suikoden: Tenmei no Chikai Feb-90 Koei (CDx1) + Super Real Mahjong P2 & P3 + Mar-93 Ving (CDx1) + Suzaku Oct-92 Wolf Team (CDx1) + Tactical Tank Corps DX Feb-95 GAM (CDx1) + Tamashi no Mon: Dante Shinkyoku Yori Jun-93 Koei (CDx1) + Tania Nov-96 Tips (CDx1) + Teito Taisen Dec-89 Supersonic (CDx1) + Teitoku no Ketsudan Apr-90 Koei (CDx1) + Tenshi-Tachi no Gogo Collection 2 Nov-95 Jast (CDx1) + Tenshin Ranma May-92 Elf (CDx1) + Teo: Another Earth Sep-95 Fujitsu (CDx1) + Teo: Another Earth 2 Jul-96 Fujitsu (CDx1) + The Playroom Feb-95 Fujitsu (CDx1) + The Queen of Duellist Alpha Mar-94 Agumix (CDx1) + The Queen of Duellist Alpha Light Apr-94 Agumix (CDx1) + Theme Park Sep-95 Electronic Arts (CDx1) + Time Stripper Mako-chan Jan-96 Foster Japan (CDx1) + Tokyo Sexy Ave. Jul-94 HOP (CDx1) + Tokyo-to Dai 24-Ku Dec-92 Artdink (CDx1) + Tom Snyder's Puppy Love Jul-89 Fujitsu (CDx1) + Tom Snyder's Puppy Love 2 Mar-93 Fujitsu (CDx1) + Toushin Toshi Apr-95 Alice Soft (CDx1) + Trigger Jun-94 ZyX (CDx1) + Trigger 2 Sep-95 ZyX (CDx1) + Vampire High School Jun-93 Inter Heart (CDx1) + Vanishing Point XXX-95 Tiare (CDx1) + Viper GTS Nov-95 Sogna (CDx1) + Viper V12 Dec-95 Sogna (CDx1) + Viper V8 Turbo RS Jun-95 Sogna (CDx1) + Winning Post May-93 Koei (CDx1) + Yayo 1-2-3 Jul-93 Hado (CDx1) + Yayo 4 Feb-93 Hado (CDx1) + Yes! HG Dec-95 Himeya Soft, Inc (CDx1) + Youjuu Senki 2 Reimei no Senshi Feb-94 D.O. (CDx1) + Youjuu Senki: Sajin no Mokushiroku Feb-94 D.O. (CDx1) + Yume Utsutsu: Dreamy May-92 Megami (CDx1) + Zan 3 Apr-94 Telenet Japan (CDx1) + Zenith Feb-95 Himeya Soft, Inc 1 + + FM-Towns Marty CDs + ================== + 4D Boxing Jul-93 Electronic Arts (CDx1) + 4D Driving Jul-93 Electronic Arts (CDx1) + Psychic Detective Vol.1: Invitation Nov-93 Data West (CDx1) + Psychic Detective Vol.2: Memories Apr-94 Data West (CDx1) + Psychic Detective Vol.3: Aya Jul-94 Data West (CDx1) + Psychic Detective Vol.4: Orgel Dec-94 Data West (CDx1) + Psychic Detective Vol.5: Nightmare Apr-95 Data West (CDx1) + Bible Master 2 Jan-95 Glodia (CDx1) + Custom Mate Dec-94 Cocktail Soft (CDx1) + Demon City Mar-94 Cocktail Soft (CDx1) + Dengeki Nurse 2: More Sexy Dec-94 Cocktail Soft (CDx1) + Doki Doki Vacation Mar-95 Cocktail Soft (CDx1) + DOR Best Collection Chapter 1 Apr-93 D.O. (CDx2) + DOR Best Collection Chapter 2 May-93 D.O. (CDx2) + Dracula Hakushaku Mar-93 Fairytale (CDx1) + Emit Vol.1 Mar-94 Koei (CDx1) + Emit Vol.2 Jul-94 Koei (CDx1) + Emit Vol.3 Sep-94 Koei (CDx1) + Fujitsu Habitat 2 May-94 Fujitsu (CDx1) + Gokko Vol.1: Doctor Nov-94 Mink (CDx1) + Gokko Vol.2: School Gals Dec-94 Mink (CDx1) + Gokko Vol.3: Etcetera Dec-94 Mink (CDx1) + Gokuraku Mandala Feb-94 Fairytale (CDx1) + Joshikousei Shoujo Densetsu Apr-94 Byakuya Shobou (CDx1) + Ms. Detective XXX-93 Data West (CDx1) + Nijiiro Denshoku Musume Aug-94 I.S.C. (CDx1) + Noushuku Angel 120% Apr-95 Cocktail Soft (CDx1) + Record of Lodoss War 2 Jun-94 MAC (CDx1) + Sangokushi 4 Jun-94 Koei (CDx1) + Shamhat: The Holy Circlet Apr-93 Data West (CDx1) + Shinjuku Labyrinth ==== Tokuma Shoten (CDx1) + Teitoku no Ketsudan 2 Jun-94 Koei (CDx1) + Tokyo Labyrinth Dec-94 Tokuma Shoten (CDx1) + True Heart Feb-95 Cocktail Soft (CDx1) + Two Shot Diary Oct-94 Mink 1 + URM Dec-94 JHV (CDx1) + Virtuacall 2 Dec-95 Fairytale (CDx1) + Wonpara Wars Feb-95 Mink (CDx1) + Wonpara Wars 2 Apr-95 Mink (CDx1) + +--> + +<!-- +Partial list for FM Towns CDs. Most images come from the Neo Kobe Collection, dated 2016-02-25. @@ -12,12 +294,20 @@ and then converted to CHD with CHDMAN. Floppy disks are included for software that actually requires them to boot. User/save disks that can be created from the game itself are not included. + --> <software name="100isshu"> + <!-- + Origin: Neo Kobe Collection + <rom name="Towns Hyakunin Isshu.ccd" size="768" crc="c78291fe" sha1="fb1ba0eff32b21ae3d2d8c62b9606261c533742c"/> + <rom name="Towns Hyakunin Isshu.cue" size="84" crc="20390175" sha1="6b07be3515eeee7f6ebd18fda4fce253f58e4f62"/> + <rom name="Towns Hyakunin Isshu.img" size="64209600" crc="f5292d63" sha1="24ae14ad96bd7ff19976d9d68bdf5ea3bf9af840"/> + <rom name="Towns Hyakunin Isshu.sub" size="2620800" crc="228bd959" sha1="8a9ad3ca2f624ac2aa2fc031b49f687337f19eb2"/> + --> <description>Towns Hyakunin Isshu</description> <year>1989</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -27,9 +317,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="3x3eyes"> - <description>3x3 Eyes: Sanjiyan Henjou</description> + <!-- + Origin: Neo Kobe Collection + <rom name="3x3 Eyes - Sanjiyan Henjou.iso" size="165578788" crc="1a2395ea" sha1="005f8a9444cccb45a5f3ac38c20edb9a503faab7"/> + <rom name="3x3 eyes - sanjiyan henjou.cue" size="87" crc="b30ce569" sha1="16a9005a30fac9a4684df886393e39f101f843e2"/> + --> + <description>3x3 Eyes - Sanjiyan Henjou</description> <year>1993</year> - <publisher>Nihon Create</publisher> + <publisher>日本クリエイト (Nihon Create)</publisher> + <info name="release" value="199310xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="3x3 eyes - sanjiyan henjou" sha1="243e61ee754eb6c7efc55a692cc89b0dd31d944c" /> @@ -38,9 +334,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="4dboxing"> + <!-- + Origin: Neo Kobe Collection + <rom name="4D Boxing.bin" size="101961552" crc="310964b5" sha1="3d0cbb544091661ce8ccec710d52e06b04cb9d6e"/> + <rom name="4D Boxing.cue" size="424" crc="a09d0641" sha1="0a1eb2f587354deb50d5ce8fc8b689d5ffc7cb8c"/> + --> <description>4D Boxing</description> <year>1992</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199212xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="4d boxing" sha1="0691df337359f39a820e8953c85d56c807fabaa9" /> @@ -48,11 +350,31 @@ User/save disks that can be created from the game itself are not included. </part> </software> - <!-- Converted from MDS/MDF --> <software name="4ddriv"> + <!-- + Origin: Neo Kobe Collection + <rom name="4D Driving.mdf" size="88495200" crc="5b85c1cf" sha1="2c53b6ab5e38d714c1d19ada5a955725bdb93779"/> + <rom name="4D Driving.mds" size="1454" crc="d771eac5" sha1="d9ea9e20fa24b95d9b03a0377cb776626b10581d"/> + + *after conversion with IsoBuster+EAC * + <rom name="4d driving.cue" size="1842" crc="71122d5f" sha1="6cf19b1e8627b79be819725453a446f7ea85b898"/> + <rom name="track01.bin" size="10231200" crc="fbbb669c" sha1="3b69d3f05bd905897e1b97fc713fbca197b4654e"/> + <rom name="track02.bin" size="8643600" crc="cc02a4dd" sha1="d8fcd41d3169bef211f8a5b27d3aee73641b563c"/> + <rom name="track03.bin" size="4762800" crc="3ae39fc7" sha1="6a608182c47c4427cf316f61614f7db59d98b468"/> + <rom name="track04.bin" size="7938000" crc="f41595b2" sha1="809e1b5e1d80dc25bcde9111a63d615332ef75d8"/> + <rom name="track05.bin" size="7232400" crc="de34ca81" sha1="37b7852909c4515672de94f9f4d7db0127ecab55"/> + <rom name="track06.bin" size="7938000" crc="764b5dd0" sha1="2f956d9a453d37c971ac6cbb9e010bf08f07dd4e"/> + <rom name="track07.bin" size="6526800" crc="a45a0fc9" sha1="b3ed21f6fd936d9d7eedafabc828e961f20037e1"/> + <rom name="track08.bin" size="7938000" crc="f5abab3d" sha1="ff6197d0af2438c71cd33ad1a66db0648c1baf86"/> + <rom name="track09.bin" size="1587600" crc="fbd7b5d7" sha1="92ac076f0522c14813bec1fde29d47d44591aa88"/> + <rom name="track10.bin" size="3880800" crc="27aca79a" sha1="b172e01f748548756807e6eb1894f37424551866"/> + <rom name="track11.bin" size="11113200" crc="aa518367" sha1="1a21635ac6e822dd39a8006ad2cadd21fe3d4fe5"/> + <rom name="track12.bin" size="7585200" crc="488c14a7" sha1="bb26d73545d66a2d1500dd5d48cda3bb9e373bab"/> + --> <description>4D Driving</description> <year>1993</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199303xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="4d driving" sha1="b09e774be4ee926dc32efd2e3b28dd72bc223c76" /> @@ -61,9 +383,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="4dtennis"> + <!-- + Origin: Neo Kobe Collection + <rom name="4D Tennis.ccd" size="5869" crc="6287f51f" sha1="49c79b3496465cf35eb46c8f2d4e4bb7d13baf00"/> + <rom name="4D Tennis.cue" size="1145" crc="c0bb25ae" sha1="de404e98b76891fcaf5070f526e290d945d13365"/> + <rom name="4D Tennis.img" size="79031904" crc="6107a3ea" sha1="a53b7bb8b30ade50d9d076d080adb62059ecdf42"/> + <rom name="4D Tennis.sub" size="3225792" crc="1239c112" sha1="434cfbd5edc000dc2c6432bf4a5697b5d9e75109"/> + --> <description>4D Tennis</description> <year>1993</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199307xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="4d tennis" sha1="5ee1a3342469e87bc0f1d613982a92bc8ab5c5bb" /> @@ -72,9 +402,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="4thuni12"> - <description>The 4th Unit 1-2 Towns: Linkage</description> + <!-- + Origin: Neo Kobe Collection + <rom name="The 4th Unit 1-2 - Linkage.ccd" size="5350" crc="bd96a5cc" sha1="1bd62c8b6e97fd0e0994160c96efc2b5a95e4437"/> + <rom name="The 4th Unit 1-2 - Linkage.cue" size="1042" crc="459dde0a" sha1="75e4da1ed3bff7a2452d174fb0a8c724b45629e5"/> + <rom name="The 4th Unit 1-2 - Linkage.img" size="292577040" crc="e52e5890" sha1="8f3d4eb225a4b5da34f40986d43f026f01f9e347"/> + <rom name="The 4th Unit 1-2 - Linkage.sub" size="11941920" crc="b5d29977" sha1="c594da0071fada271ad2caa708b30cc9724f9616"/> + --> + <description>The 4th Unit 1-2 Towns - Linkage</description> <year>1989</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="198907xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the 4th unit 1-2 - linkage" sha1="66ad07db8959efe50d240471f1c24869dfae1e51" /> @@ -83,9 +421,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="4thunit3"> - <description>The 4th Unit 3: Dual Targets</description> + <!-- + Origin: Neo Kobe Collection + <rom name="The 4th Unit 3 - Dual Targets.ccd" size="2660" crc="c418053d" sha1="e05dad8651923707c27da766604627e31ddd250c"/> + <rom name="The 4th Unit 3 - Dual Targets.cue" size="485" crc="d6b621d2" sha1="405b2a70dbc5decaf8c0ad27d065924b9ff80d67"/> + <rom name="The 4th Unit 3 - Dual Targets.img" size="180539520" crc="be6650ef" sha1="a3f9b4359118123a8b783cad76b6930de13ece07"/> + <rom name="The 4th Unit 3 - Dual Targets.sub" size="7368960" crc="02a9e1a7" sha1="5258d1713b7088bd0fe0a01b06eb6e3001c07c45"/> + --> + <description>The 4th Unit 3 - Dual Targets</description> <year>1989</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="198911xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the 4th unit 3 - dual targets" sha1="1cca0e9b4d6932e1412f50fd3caa96d32c397773" /> @@ -94,9 +440,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="4thunit4"> - <description>The 4th Unit 4: Zero</description> + <!-- + Origin: Neo Kobe Collection + <rom name="The 4th Unit 4 - Zero.ccd" size="2856" crc="4225399f" sha1="1d0f630f0a4dd30d308a7c5ee02bed86a486733e"/> + <rom name="The 4th Unit 4 - Zero.cue" size="517" crc="3994cbe0" sha1="05722466a371ed2cbff19a294e5d4cd452900696"/> + <rom name="The 4th Unit 4 - Zero.img" size="334995360" crc="60aea3fe" sha1="7ba2c22fafc4c470005aee16f77dcba6fab48b7e"/> + <rom name="The 4th Unit 4 - Zero.sub" size="13673280" crc="df9b7f1f" sha1="adf49681f66af20c85985fbab09286ed401f5f22"/> + --> + <description>The 4th Unit 4 - Zero</description> <year>1989</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="198912xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the 4th unit 4 - zero" sha1="7b41956851d62962e24329380441a0d7b5778983" /> @@ -105,9 +459,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="4thunit5"> - <description>The 4th Unit 5: D-Again</description> + <!-- + Origin: Neo Kobe Collection + <rom name="The 4th Unit 5 - D-Again.ccd" size="2865" crc="deeee269" sha1="dacd4339ebf7b47b96166f747be3dc7102a5ea7e"/> + <rom name="The 4th Unit 5 - D-Again.cue" size="520" crc="cb94b8c2" sha1="8fe745834c8de501f02bb55a529f45ab14fc3caf"/> + <rom name="The 4th Unit 5 - D-Again.img" size="371886480" crc="70c2e2bd" sha1="be920e5e1f1bfcb8492ecf06342029999ee088e2"/> + <rom name="The 4th Unit 5 - D-Again.sub" size="15179040" crc="0e12788a" sha1="bacc25e3cda1f26b09a9fb4d17662975f5da05f8"/> + --> + <description>The 4th Unit 5 - D-Again</description> <year>1990</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199004xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the 4th unit 5 - d-again" sha1="35ee819833c34bb963c4c167839be947f6433fb4" /> @@ -116,9 +478,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="4thunit6"> - <description>The 4th Unit 6: Merry-Go-Round</description> + <!-- + Origin: Neo Kobe Collection + <rom name="The 4th Unit 6 - Merry-Go-Round.ccd" size="2093" crc="89f0b60f" sha1="f2e333c26461c37345da764d215677123dbdbeb6"/> + <rom name="The 4th Unit 6 - Merry-Go-Round.cue" size="368" crc="b85eee45" sha1="58ff66afc2f5098eb4b200e78243bca00c201f2b"/> + <rom name="The 4th Unit 6 - Merry-Go-Round.img" size="306964224" crc="e02f30f9" sha1="860ce4bafc860974f711889c2ccb4eb81e0c45f8"/> + <rom name="The 4th Unit 6 - Merry-Go-Round.sub" size="12529152" crc="115531c6" sha1="7c90f76dc92aa503a5599d74226919f2c60b1c73"/> + --> + <description>The 4th Unit 6 - Merry-Go-Round</description> <year>1990</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199012xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the 4th unit 6 - merry-go-round" sha1="d254d7670bc2bdd396320aac687dba12906d49e2" /> @@ -127,10 +497,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="4thunit7"> - <description>The 4th Unit 7: Wyatt</description> + <!-- + Origin: Neo Kobe Collection + <rom name="The 4th Unit 7 - Wyatt.ccd" size="1918" crc="3f8f70ba" sha1="0e23516693f3ed1165e6819367604e5a6ac50f8e"/> + <rom name="The 4th Unit 7 - Wyatt.cue" size="320" crc="a59b3773" sha1="7b417e3743434b8e2e210109466ecb30a2ceffef"/> + <rom name="The 4th Unit 7 - Wyatt.img" size="579899712" crc="f6ff2208" sha1="2ca5d141a3f17c03362699dc032310d15a5ba6f7"/> + <rom name="The 4th Unit 7 - Wyatt.sub" size="23669376" crc="a317d739" sha1="a7f01abfcea8b0a7b9bfee62e35136a2335fee27"/> + --> + <description>The 4th Unit 7 - Wyatt</description> <year>1992</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199204xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1261568"> <rom name="the 4th unit 7 - wyatt (boot disk).hdm" size="1261568" crc="a516f2c4" sha1="f5ae3995c8a8358b88bb716bb9c88ee8d4083d1d" offset="000000" /> </dataarea> @@ -143,10 +522,50 @@ User/save disks that can be created from the game itself are not included. </software> <software name="38mank"> + <!-- + Origin: Neo Kobe Collection + <rom name="38-man Kilo no Kokuu.ccd" size="6562" crc="710ae512" sha1="bcb8bdbecdd90f02342bf34888b3906d120cc7bd"/> + <rom name="38-man Kilo no Kokuu.img" size="621730032" crc="6443ccfa" sha1="72237c23e8d0bfac1c7a489e90244b2b2c36139b"/> + <rom name="38-man Kilo no Kokuu.sub" size="25376736" crc="a61fb96c" sha1="31994c821618808df14e6ade93b06236e440c88f"/> + + *after conversion with IsoBuster+EAC * + <rom name="38-man kilo no kokuu.cue" size="4290" crc="40393c5d" sha1="a80a43eb7eff5f220563d749328554e6a4f66f0d"/> + <rom name="track01.bin" size="9880752" crc="6231512a" sha1="b3246341389ae5a101c1f8cfa23eead385117b7d"/> + <rom name="track02.bin" size="36895824" crc="a3fb23e2" sha1="24069258f6a8fc730ff18b3b4924034c10b5ef48"/> + <rom name="track03.bin" size="13857984" crc="715c7a01" sha1="12015539652adb3356e95caa05aa430dcf2a0bfa"/> + <rom name="track04.bin" size="26445888" crc="786dd0a1" sha1="6331ebc44345b35ae6914d4a010a94287f7b24cb"/> + <rom name="track05.bin" size="28435680" crc="d5d93626" sha1="f85ad306f619f81d19c02cd5101af267f89050bc"/> + <rom name="track06.bin" size="12357408" crc="d3cf9e3a" sha1="c94818ad7cfec54d014e237a2e763ea015bb72c3"/> + <rom name="track07.bin" size="19874400" crc="c28f18eb" sha1="b3cd1013c71f013a7d7b1b53baec53a2a410201b"/> + <rom name="track08.bin" size="19284048" crc="8c3caed0" sha1="8ada13c16f9449b94269c639fd45a5785317038d"/> + <rom name="track09.bin" size="19051200" crc="7e97ca60" sha1="ce51b3a415af8b652b9b34c16ab43692fa4c7d26"/> + <rom name="track10.bin" size="12011664" crc="c6808056" sha1="24408f42a667a2d7df80c2a7b32462f612aaad2a"/> + <rom name="track11.bin" size="19072368" crc="3d426af3" sha1="958cb4c947a4bf2cec98f88d6a90976f4d33e3bd"/> + <rom name="track12.bin" size="28557984" crc="85ec667d" sha1="cfb5b030e482fa637f3a4fa6d372b03cdd6bb9df"/> + <rom name="track13.bin" size="21843024" crc="d9a29043" sha1="9c8be4cffd886813f9cee1f66de85062876b4e82"/> + <rom name="track14.bin" size="17491824" crc="df8f281a" sha1="a7092e36319365e83ca3995b9f10174ecb6f2104"/> + <rom name="track15.bin" size="19232304" crc="a1eb3437" sha1="013e7788188d78f77675c69d773f9ef39c6cfa6e"/> + <rom name="track16.bin" size="25836720" crc="df382942" sha1="17b14ac11d82fc4abf78f3a251f2d5c4f81fbf6f"/> + <rom name="track17.bin" size="18138624" crc="770b6e11" sha1="1dc0f2e7c75542221969b04c064ebdc9334c620a"/> + <rom name="track18.bin" size="20937504" crc="c9bd8726" sha1="1d2ba1dc34aa50e05449d320401b1b8a27e8c6b8"/> + <rom name="track19.bin" size="17903424" crc="351d391f" sha1="a4b4be5e5959a3b19f7bab38701ce7604c433b2c"/> + <rom name="track20.bin" size="30126768" crc="30397c99" sha1="55b50a4752a871cd5e868a9a6fd34d0142a85f82"/> + <rom name="track21.bin" size="21737184" crc="d6ebe8ea" sha1="36211f166865b5939610160b15d2f4edee7ab022"/> + <rom name="track22.bin" size="25206384" crc="a92dd4ea" sha1="dd0d562dcdbfff986005f0814397403430a34f61"/> + <rom name="track23.bin" size="32114208" crc="295bb64f" sha1="80dc5c68e11307fd925fcec8bf5aba28811ad35c"/> + <rom name="track24.bin" size="21330288" crc="53c2f490" sha1="066880d4a0d8d66b9548590b37c7ab67c4205f73"/> + <rom name="track25.bin" size="9871344" crc="228aed38" sha1="65d2322c5b4da4c093d965ae80192e29d5fa88d8"/> + <rom name="track26.bin" size="22431024" crc="d41bfcef" sha1="a1b9b609727316b3af13512e57312c03f6c5c9d0"/> + <rom name="track27.bin" size="44544528" crc="438d0006" sha1="948ed2bacb9b2eaba576a1be02d4fb30c43e9d48"/> + <rom name="track28.bin" size="21215040" crc="0065517b" sha1="0d5caa21b9d6d1aec30360dece9d664054af4afe"/> + <rom name="track29.bin" size="6044640" crc="42fe499f" sha1="039730e349d552759dace057e2ebc592c6bdb6b5"/> + --> <description>38-man Kilo no Kokuu</description> <year>1989</year> - <publisher>System Sacom</publisher> + <publisher>システムサコム(System Sacom)</publisher> + <info name="release" value="198912xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Utility Disk" /> <dataarea name="flop" size="1261568"> <rom name="38-man kilo no kokuu (utility disk).hdm" size="1261568" crc="43a7b57f" sha1="1477b8a9297d91a069132d74ec9ed1b67828c2fd" offset="000000" /> </dataarea> @@ -159,9 +578,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="atrain3"> + <!-- + Origin: Neo Kobe Collection + <rom name="A Ressha de Ikou III.ccd" size="957" crc="dad259ec" sha1="143515c746dbf2ff878c714b5e4f2c2b0047f4bb"/> + <rom name="A Ressha de Ikou III.cue" size="123" crc="868356a6" sha1="b2f19ac6130c018f888ac9b60d6bc7012fa3c4ec"/> + <rom name="A Ressha de Ikou III.img" size="412599600" crc="0005daaf" sha1="3b826dd5f7a61f13e8dc4bd14ba0b8d6392a127e"/> + <rom name="A Ressha de Ikou III.sub" size="16840800" crc="f010e847" sha1="1e42321175135cb33ffa5c0c138c5ee2ea7bc270"/> + --> <description>A Ressha de Ikou III</description> <year>1991</year> - <publisher>Artdink</publisher> + <publisher>アートディンク (Artdink)</publisher> + <info name="release" value="199104xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="a ressha de ikou iii" sha1="095710f80f004917dce963719cb1c4bae4d5fc49" /> @@ -170,10 +597,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="atrain4"> + <!-- + Origin: Neo Kobe Collection + <rom name="A Ressha de Ikou IV.ccd" size="3827" crc="5b46969b" sha1="b483c440f1f3ab7b07fae2f144e01101b7ee5183"/> + <rom name="A Ressha de Ikou IV.cue" size="715" crc="640dee80" sha1="c73f5c4bde3228bc1f46df673488ea910de2e36c"/> + <rom name="A Ressha de Ikou IV.img" size="385085904" crc="a0858486" sha1="382bb5eed92975c25636196197fd09c0358e05fe"/> + <rom name="A Ressha de Ikou IV.sub" size="15717792" crc="dd9d79be" sha1="b0d250ca6e9d606d810b238daad8473b6daabbd6"/> + --> <description>A Ressha de Ikou IV</description> - <year>1992</year> - <publisher>Artdink</publisher> + <year>1993</year> + <publisher>アートディンク (Artdink)</publisher> + <info name="release" value="199312xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="a ressha de ikou iv (system disk).hdm" size="1261568" crc="469ff718" sha1="f9667e06ae1948350bee029e98903216d1cda98f" offset="000000" /> </dataarea> @@ -186,9 +622,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="abel"> - <description>Abel: Shin Mokushiroku Taisen</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Abel.ccd" size="4674" crc="d29bcd2e" sha1="1198a235c5463ca6ab1ef72bc89e2f307c9bc48f"/> + <rom name="Abel.cue" size="1219" crc="652022e2" sha1="ba92aea8595294a0ada64d1060bd1a6cd0186056"/> + <rom name="Abel.img" size="311764656" crc="c90bd8da" sha1="80e7940930b7c6330098e548a1cadd40bff29be9"/> + <rom name="Abel.sub" size="12725088" crc="63e70daa" sha1="373a0ebfe67c903c61d04fcbb69f21a1bfcfa450"/> + --> + <description>Abel - Shin Mokushiroku Taisen</description> <year>1995</year> - <publisher>Family Soft</publisher> + <publisher>ファミリーソフト (Family Soft)</publisher> + <info name="release" value="199511xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="abel" sha1="5fb92a84f3d1e7530b6dce9060f9814ec2fa6d2b" /> @@ -197,9 +641,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="adtennis"> + <!-- + Origin: Neo Kobe Collection + <rom name="Advantage Tennis.ccd" size="2666" crc="dea6a4bf" sha1="d4eaf822278f20273a67afab833a6c4eb3f80ea4"/> + <rom name="Advantage Tennis.cue" size="472" crc="9d0c2d59" sha1="3fd59a9674e73685add5e3258ed1c7c4cac5047c"/> + <rom name="Advantage Tennis.img" size="353329200" crc="b42597e5" sha1="c1a21909db68baf06028e5533992d79f0250fea4"/> + <rom name="Advantage Tennis.sub" size="14421600" crc="ab3d7eca" sha1="dcd8c3fd2fd7b591111613b6e0cb03247955ceb4"/> + --> <description>Advantage Tennis</description> <year>1992</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199210xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="advantage tennis" sha1="4210307af2238e8b0bc546b36f13f2fe651464cd" /> @@ -208,9 +660,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="aeternam"> + <!-- + Origin: Neo Kobe Collection + <rom name="Aeternam.ccd" size="3451" crc="1a58a6d3" sha1="634ca1536a8a2af4da514eb49c9a1bdcbe3bdf9c"/> + <rom name="Aeternam.cue" size="624" crc="299944ba" sha1="44977b8ab6fb141708f002e1e831f4c857820ed8"/> + <rom name="Aeternam.img" size="582825600" crc="4fa36fd9" sha1="abac21f9740a0fe311ee135d177d2cc002e211d0"/> + <rom name="Aeternam.sub" size="23788800" crc="298e8201" sha1="cc8d74679cbaad1f230db894efdb341ebba104e1"/> + --> <description>Aeternam</description> - <year>1992</year> - <publisher>Fujitsu</publisher> + <year>1993</year> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199303xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="aeternam" sha1="e5c5955e303d9fbc9f1e7b3bb4d601aeace34765" /> @@ -219,9 +679,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="aburner"> + <!-- + Origin: Neo Kobe Collection + <rom name="After Burner.ccd" size="2145" crc="c88c38a9" sha1="88f2a8ff8f7c8f27b43e7b2ac2e92e856e97def2"/> + <rom name="After Burner.cue" size="386" crc="a1a8850b" sha1="986ad6875e82ba8c8c20684606cd86d6aeebf5f5"/> + <rom name="After Burner.img" size="230907600" crc="37fa03b7" sha1="1cfa47e4767f4048160149a7c7f3c0bc7ccc60cd"/> + <rom name="After Burner.sub" size="9424800" crc="7a728a6d" sha1="c12601658d2c4863b7c40e2a5c56abe4b2c1e671"/> + --> <description>After Burner</description> <year>1989</year> <publisher>CRI</publisher> + <info name="release" value="198911xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="after burner" sha1="e1c6cc2df19b89ca1dab88358337d97ece90dd58" /> @@ -230,9 +698,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="aburner3"> + <!-- + Origin: Neo Kobe Collection + <rom name="After Burner III.bin" size="414645840" crc="d58140b8" sha1="2a7b13067e1e810f173021e8cdd7e8bdaedfe08c"/> + <rom name="After Burner III.cue" size="554" crc="c686ae32" sha1="fd6f1618b9ea5c15300044a8e1626802fa4bbab9"/> + --> <description>After Burner III</description> <year>1992</year> <publisher>CRI</publisher> + <info name="release" value="199206xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="after burner iii" sha1="70b10643e32f4d4a254a0c8f29e3224c2f810c1d" /> @@ -241,9 +715,20 @@ User/save disks that can be created from the game itself are not included. </software> <software name="aircmb2s"> + <!-- + Origin: Neo Kobe Collection + <rom name="Air Combat II Special (Track 1).bin" size="10231200" crc="c53e2aa8" sha1="3075b3901191c2df89949f356b282775458316cb"/> + <rom name="Air Combat II Special (Track 2).bin" size="31577952" crc="9831817f" sha1="526a191d5d072c7e04edd2c429d25d7303eed7f6"/> + <rom name="Air Combat II Special (Track 3).bin" size="27871200" crc="b2beaf75" sha1="66c04db9c42de1244e398c9c766c6d2c71cbf84a"/> + <rom name="Air Combat II Special (Track 4).bin" size="63504000" crc="0c9837fc" sha1="bce0215d446c638c80e185f1caf53d0d8ffe53be"/> + <rom name="Air Combat II Special (Track 5).bin" size="77792400" crc="174cc18c" sha1="ebb4c425e512e21c22ab7ecc39d8db07907cfaf4"/> + <rom name="Air Combat II Special (Track 6).bin" size="93315600" crc="ab79a04c" sha1="5c82d7808f09842a021b0b2388c466445dd1797b"/> + <rom name="Air Combat II Special.cue" size="695" crc="2231aa08" sha1="2762f4af50e8a6cdeffbd8ca3d847e18f17dc385"/> + --> <description>Air Combat II Special</description> <year>1993</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199303xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="air combat ii special" sha1="8a8b49b7ca086084fe3c1ff23e6ee95e69559cf3" /> @@ -253,9 +738,16 @@ User/save disks that can be created from the game itself are not included. <!-- Seems to be missing a floppy disk --> <software name="airwar"> + <!-- + Origin: Neo Kobe Collection + <rom name="Fujitsu Air Warrior v1.1.ccd" size="903" crc="a5a83861" sha1="d8ded0b27ee1dfa2eada1f60433a8018d55fea36"/> + <rom name="Fujitsu Air Warrior v1.1.cue" size="170" crc="27c279a2" sha1="e5b13789e3b6f10864adbcf24dc1deeb9e183441"/> + <rom name="Fujitsu Air Warrior v1.1.img" size="32457600" crc="d7d942d7" sha1="5840ed26456b4dd0581efb3b8af7d4eb22057c7b"/> + <rom name="Fujitsu Air Warrior v1.1.sub" size="1324800" crc="131d530e" sha1="b81408e4a5c53f90de9d3f3355b4d806e4564d73"/> + --> <description>Air Warrior</description> <year>1992</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="fujitsu air warrior v1.1" sha1="9433549ab48af8471d308070548a65fd3ba3304d" /> @@ -264,9 +756,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="alice1"> + <!-- + Origin: Neo Kobe Collection + <rom name="Alice no Yakata CD.ccd" size="906" crc="53e27af1" sha1="adb0ca9e06830f1948305a468133948e433a0f64"/> + <rom name="Alice no Yakata CD.cue" size="164" crc="fa535c37" sha1="fdaa862a0d40dfa96f4f53605734a2879aab31da"/> + <rom name="Alice no Yakata CD.img" size="150998400" crc="09ea8c74" sha1="064b38b1d5917d63d1e4b302664a6d59e6a2cb4f"/> + <rom name="Alice no Yakata CD.sub" size="6163200" crc="efc131f7" sha1="5df5b1ab6777be7d966d21a7864b36272a2bfdf3"/> + --> <description>Alice no Yakata CD</description> - <year>1992</year> - <publisher>Alice Soft</publisher> + <year>1991</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199107xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="alice no yakata cd" sha1="03ee698cd4801d8e297eb6eade6aae7c87b7f2e8" /> @@ -275,9 +775,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="alice2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Alice no Yakata CD 2.ccd" size="1065" crc="1f53be43" sha1="006fc48a60fb51deeea510c4a4e439cb8283b118"/> + <rom name="Alice no Yakata CD 2.cue" size="230" crc="7a114265" sha1="fe53c5af37ad1ab4719c39ff938dca70879dc5a4"/> + <rom name="Alice no Yakata CD 2.img" size="761695200" crc="53f01ea6" sha1="97159359e961ff5bbaf1ffab4a2ef55e63bdc07f"/> + <rom name="Alice no Yakata CD 2.sub" size="31089600" crc="036c7907" sha1="23e61abde17b3f0996554df0a65cbdcbd036a5d8"/> + --> <description>Alice no Yakata II</description> <year>1992</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199210xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="alice no yakata cd 2" sha1="d375cc44c0e421834f6ec3b2da3568eec7d28192" /> @@ -285,22 +793,37 @@ User/save disks that can be created from the game itself are not included. </part> </software> - <!-- probably a bad dump --> + <!-- probably a bad dump: the image seems to have been created from the game files instead of being an actual dump of + the original disc (it has a Joliet filesystem and the directories have creation dates in 2003) so it probably needs + to be replaced with a proper dump. --> <software name="alice3"> + <!-- + Origin: Neo Kobe Collection + <rom name="Alice no Yakata III.iso" size="20756480" crc="d594012b" sha1="001f86551065e146be22d0d81d7063e1873360c6"/> + <rom name="alice no yakata iii.cue" size="80" crc="9eafa1c4" sha1="5ac36bf88ba7480c480e37942201bd81f2676dbe"/> + --> <description>Alice no Yakata III</description> <year>1995</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199506xx" /> + <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> - <disk name="alice no yakata iii" sha1="aaae43036d123ba7b75d6322f646b1b1ecfe14ec" /> + <disk name="alice no yakata iii" sha1="aaae43036d123ba7b75d6322f646b1b1ecfe14ec" status="baddump" /> </diskarea> </part> </software> <software name="aitd"> + <!-- + Origin: Neo Kobe Collection + <rom name="Alone in the Dark.bin" size="226057776" crc="74d5b144" sha1="1bc9a0010e5e55c6290f8f7deaee0900ce7fc47e"/> + <rom name="Alone in the Dark.cue" size="514" crc="13836533" sha1="65a0ff4f3e0daa29d1581d087e8f47145a0c774f"/> + --> <description>Alone in the Dark</description> <year>1993</year> - <publisher>Arrow Micro-Techs</publisher> + <publisher>ã‚¢ãƒãƒ¼ãƒžã‚¤ã‚¯ãƒãƒ†ãƒƒã‚¯ã‚¹ (Arrow Micro-Techs)</publisher> + <info name="release" value="199312xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="alone in the dark" sha1="7cd07179e94161d59e0f426b71d87a72aeeae581" /> @@ -309,9 +832,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="aitd2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Alone in the Dark 2.ccd" size="16906" crc="b8018512" sha1="5685b482337556843c615dfe32b98d9babee4dc3"/> + <rom name="Alone in the Dark 2.cue" size="3435" crc="68827ecf" sha1="2b7a7e3f2154ec5e897cfa043db403969f20e8b2"/> + <rom name="Alone in the Dark 2.img" size="575546160" crc="4d20b35f" sha1="481ab95c77f984cd01d147f2e44b0fe04eb10167"/> + <rom name="Alone in the Dark 2.sub" size="23491680" crc="fb91568c" sha1="e38e8eb3487ded853d18195eeae0b160944f3de9"/> + --> <description>Alone in the Dark 2</description> <year>1994</year> - <publisher>Arrow Micro-Techs</publisher> + <publisher>ã‚¢ãƒãƒ¼ãƒžã‚¤ã‚¯ãƒãƒ†ãƒƒã‚¯ã‚¹ (Arrow Micro-Techs)</publisher> + <info name="release" value="199412xx" /> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -321,9 +852,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="alshark"> + <!-- + Origin: Neo Kobe Collection + <rom name="Alshark.ccd" size="4251" crc="c524a687" sha1="f7bfdc54de0930b263bb61bb1d313bdda14c7965"/> + <rom name="Alshark.cue" size="1100" crc="5eecf316" sha1="ab1d4bd49d9160fad9b9436f4b44494c03a0a845"/> + <rom name="Alshark.img" size="615636000" crc="a08e556c" sha1="685957bbf39071e56c23942792abb644f9083cce"/> + <rom name="Alshark.sub" size="25128000" crc="2d22213c" sha1="a556b64fec250576047b0cd376ce37c830ce7495"/> + --> <description>Alshark</description> <year>1993</year> - <publisher>Right Stuff</publisher> + <publisher>ライトスタッフ (Right Stuff)</publisher> + <info name="release" value="199305xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="alshark" sha1="ecbdc6dead64d45836037a341bfd49332c7f8e29" /> @@ -332,9 +871,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="amarant3"> + <!-- + Origin: Neo Kobe Collection + <rom name="Amaranth 3.iso" size="13297700" crc="ed6c1afb" sha1="306e675cab64acb5f869b77532156a95409c7e25"/> + <rom name="amaranth 3.cue" size="71" crc="d8d0a41d" sha1="54e7f7eb085204156efef31f20f00287e2cd9250"/> + --> <description>Amaranth III</description> <year>1994</year> - <publisher>Fuga System</publisher> + <publisher>風雅システム(Fuga System)</publisher> + <info name="release" value="199411xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="amaranth 3" sha1="9c83fcd4623dd62dcfc7c683c82836704f8665a7" /> @@ -343,10 +888,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ambival"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ambivalenz.ccd" size="767" crc="6a3fe4f7" sha1="cede8ecad8ddee04a02b7dad3a9f076105115114"/> + <rom name="Ambivalenz.cue" size="74" crc="7821efd3" sha1="a8ad2c2138f674d2a50c41a23863c7fa8a2b5f82"/> + <rom name="Ambivalenz.img" size="10595760" crc="3999462d" sha1="a3584dc190815874cb84aa559c96d8c14c1d87c8"/> + <rom name="Ambivalenz.sub" size="432480" crc="ab867f43" sha1="4d2adab927a143a5496f913337507ecfc0a1943a"/> + --> <description>Ambivalenz</description> <year>1994</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199404xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1261568"> <rom name="ambivalenz (boot disk).hdm" size="1261568" crc="7f3d6d6e" sha1="61c23afc9dc3b3ceaf2c28d6ab571d9bc83720fa" offset="000000" /> </dataarea> @@ -359,9 +913,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="aouq"> + <!-- + Origin: Neo Kobe Collection + <rom name="America Oudan Ultra Quiz.ccd" size="752" crc="aec6b281" sha1="6d899240a107611c509da65ed82131212767e747"/> + <rom name="America Oudan Ultra Quiz.cue" size="106" crc="85e241a9" sha1="3f62721da15a1e608a4225a7f876e549c87c94cd"/> + <rom name="America Oudan Ultra Quiz.img" size="49352016" crc="c94e725a" sha1="d71f574dd82409cb80949473a002a6b290f03599"/> + <rom name="America Oudan Ultra Quiz.sub" size="2014368" crc="7f02b6d2" sha1="e0b6d6490463fc160dadd45c45db7a6e87682914"/> + --> <description>America Oudan Ultra Quiz</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199411xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="america oudan ultra quiz" sha1="08cdcfb5ba9d421da422852be6d29f4544a99e9b" /> @@ -370,9 +932,30 @@ User/save disks that can be created from the game itself are not included. </software> <software name="angel"> + <!-- + Origin: Neo Kobe Collection + <rom name="Angel.ccd" size="2812" crc="5269b2c9" sha1="4fff4210e42536faa001b659721aeaaffe1f5d5c"/> + <rom name="Angel.img" size="350154000" crc="89c3466d" sha1="d17fc9ad79e78aaf97ab7bc9452638471f75d692"/> + <rom name="Angel.sub" size="14292000" crc="192792f3" sha1="c273e05d203924a777229d9390c75d4b3032e8a8"/> + + *after conversion with IsoBuster+EAC * + <rom name="angel.cue" size="1675" crc="ca7411c9" sha1="2f806710a526f7f5f1a0679c6b17166ff49330e8"/> + <rom name="track01.bin" size="31399200" crc="0668e2cc" sha1="9ab95afe28a1a6fb129b454ebc13b29bd08d0173"/> + <rom name="track02.bin" size="26989200" crc="b39d89d6" sha1="c20f0ac3721ccb124a76603ce090929741c24ea4"/> + <rom name="track03.bin" size="33516000" crc="3e2de21b" sha1="6cf3330446a1e70f08daabbb450858ceeeeb9f16"/> + <rom name="track04.bin" size="22050000" crc="0464d4a3" sha1="a19f90d3dedb09d3255520bef1541518c6b1dc65"/> + <rom name="track05.bin" size="32634000" crc="ebd018dd" sha1="c67b9ab2f88979c3d4893ed2c130bd0abad56eeb"/> + <rom name="track06.bin" size="31399200" crc="20e21e0a" sha1="c72b895a588c9be81ac8337a4e23c6beda31a18a"/> + <rom name="track07.bin" size="31399200" crc="095d217d" sha1="1bf849e46b11536f0783fbfc30a134076307268f"/> + <rom name="track08.bin" size="26636400" crc="2ef58713" sha1="fac0db1a3cdd561cf6707bf11fb0d90b7246fe04"/> + <rom name="track09.bin" size="49921200" crc="277a5fc1" sha1="4b84c1a31a71e9ee612a7630dd56e0ec5050cac8"/> + <rom name="track10.bin" size="31575600" crc="b253521b" sha1="588d35f4b8b74b9587bb7072622d73caa62018d7"/> + <rom name="track11.bin" size="32634000" crc="708c4675" sha1="004b5738324f3f16cbaccd6aeacd518ee61a3a80"/> + --> <description>Angel</description> <year>1993</year> - <publisher>Cocktail Soft</publisher> + <publisher>カクテル・ソフト (Cocktail Soft)</publisher> + <info name="release" value="199310xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="angel" sha1="e8da3eae3b949459751fd027579aee52b167dc2f" /> @@ -381,9 +964,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="anghalo"> + <!-- + Origin: Neo Kobe Collection + <rom name="Angel Halo.ccd" size="772" crc="c9be4824" sha1="7cda8564fd5e63bc95d20e220859d314943fbec0"/> + <rom name="Angel Halo.cue" size="74" crc="fa89e632" sha1="1fb235b1ceddf39f0dc5244c9870b8a78a0da125"/> + <rom name="Angel Halo.img" size="422515632" crc="fdb1ef19" sha1="c04116a0f520f96077b5e20c7ee4f21bbbafc998"/> + <rom name="Angel Halo.sub" size="17245536" crc="86fb8a47" sha1="428da8969ed1c047a03cf8fb5db9380127b37891"/> + --> <description>Angel Halo</description> <year>1996</year> - <publisher>Active</publisher> + <publisher>アクティブ (Active)</publisher> + <info name="release" value="199610xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="angel halo" sha1="9d79b87bdfa4a3c3308c15a7e7c2927686f79c68" /> @@ -392,9 +983,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="aokiooka"> - <description>Aoki Ookami to Shiroki Mejika: Genchou Hishi</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi.ccd" size="3055" crc="478bb01c" sha1="0d21688a825b1382c79a204d89b4cd5e25c59dfd"/> + <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi.cue" size="581" crc="423ffe1c" sha1="ba96220a93040f96dc7a3e0d30f2a208370fe388"/> + <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi.img" size="530387760" crc="18044a4e" sha1="c42c5bf43c64025e801046b847ae65f39ac592a6"/> + <rom name="Aoki Ookami to Shiroki Mejika - Genchou Hishi.sub" size="21648480" crc="fa1cd6bf" sha1="93857a5c366722623dedf0e29d9a31fc6426ee6a"/> + --> + <description>Aoki Ookami to Shiroki Mejika - Genchou Hishi</description> <year>1993</year> - <publisher>Koei</publisher> + <publisher>å…‰æ „ (Koei)</publisher> + <info name="release" value="199302xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="aoki ookami to shiroki mejika - genchou hishi" sha1="45b8790a77cb77632f067f366cc055e830eddae8" /> @@ -403,9 +1002,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="arabesq"> + <!-- + Origin: Neo Kobe Collection + <rom name="Arabesque.ccd" size="3266" crc="4bf6d3b1" sha1="611ac34cbd65fcbc4cee3fc2c9681b1e602e7c6b"/> + <rom name="Arabesque.cue" size="1115" crc="9c89fc40" sha1="e98b9b24baa65eeddae1fbb2905ecd7554bd8e4a"/> + <rom name="Arabesque.img" size="584413200" crc="b9abe5c0" sha1="3f7494d07e9ef8493e801932e3ae39f334b43824"/> + <rom name="Arabesque.sub" size="23853600" crc="01f20a90" sha1="c244dedc2946a534932aed7d886fb3f56ab38c9f"/> + --> <description>Arabesque</description> <year>1994</year> - <publisher>Fairytale</publisher> + <publisher>フェアリーテール (Fairytale)</publisher> + <info name="release" value="199404xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="arabesque" sha1="5869c0c1d2eee0f551722a7d08d7feef6be53868" /> @@ -414,6 +1021,13 @@ User/save disks that can be created from the game itself are not included. </software> <software name="aska"> + <!-- + Origin: Neo Kobe Collection + <rom name="Aska Towns.ccd" size="767" crc="9917c110" sha1="7c61fc17acc8ebd9cc8d5c6fc5501cbd2e916647"/> + <rom name="Aska Towns.cue" size="74" crc="4aa5328a" sha1="a096e0f2215a766bcbf179525018e5dba0c99c83"/> + <rom name="Aska Towns.img" size="10238256" crc="a48a17c3" sha1="f1a3beb901e5aab5a5edaaefaddd95758d247b95"/> + <rom name="Aska Towns.sub" size="417888" crc="e148066d" sha1="548dfdf4ad2636a4c8889055ee33ca8f42bb023c"/> + --> <description>Aska Towns</description> <year>1989</year> <publisher>Algo Software</publisher> @@ -425,10 +1039,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="asukabfe"> + <!-- + Origin: Neo Kobe Collection + <rom name="Asuka 120% Burning Fest. Excellent.bin" size="317884560" crc="2f0a5f53" sha1="3e28df9c09aa9cc814c936864b1ca79166fa00f4"/> + <rom name="Asuka 120% Burning Fest. Excellent.cue" size="1122" crc="8706815c" sha1="ad6eb238aa7adf93a3016d069d836122a4497c66"/> + --> <description>Asuka 120% Burning Fest. Excellent</description> <year>1994</year> - <publisher>Family Soft</publisher> + <publisher>ファミリーソフト (Family Soft)</publisher> + <info name="release" value="199412xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1261568"> <rom name="asuka 120% burning fest. excellent (boot disk).hdm" size="1261568" crc="12c7d6e2" sha1="0eb696be9666300d76863ae08882485eb69725d4" offset="000000" /> </dataarea> @@ -441,9 +1062,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="atlas"> + <!-- + Origin: Neo Kobe Collection + <rom name="The Atlas.ccd" size="1536" crc="7baa5573" sha1="30db8d77f0a80e951185804b12be324f112eacf8"/> + <rom name="The Atlas.cue" size="7587" crc="f14077fc" sha1="dc949e3d6fe998d047417b1778b4cefd88cfa240"/> + <rom name="The Atlas.img" size="707540400" crc="85ae7606" sha1="26437d18b6220e8db8f246671f191cf0241bd556"/> + <rom name="The Atlas.sub" size="28879200" crc="d5787c1f" sha1="b7d236402ba5b766f203718feb196619a7637f8c"/> + --> <description>The Atlas</description> <year>1991</year> - <publisher>Artdink</publisher> + <publisher>アートディンク (Artdink)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the atlas" sha1="31378695a7eb7fe953e51463829468f214f2a2f4" /> @@ -452,10 +1080,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="atlas2"> + <!-- + Origin: Neo Kobe Collection + <rom name="The Atlas 2.ccd" size="6524" crc="763ecae3" sha1="b6adc056fef34b168ddb54afb69af6ef92df82ab"/> + <rom name="The Atlas 2.cue" size="1267" crc="203d0946" sha1="e1acbf10e582cabcb2b2311f8b8c94b8f3bbb13f"/> + <rom name="The Atlas 2.img" size="503727840" crc="981612c5" sha1="db130981baf04ce5c2680a90801eeda10ec95f45"/> + <rom name="The Atlas 2.sub" size="20560320" crc="40257fb7" sha1="7b6e7232af9c218d07e4dd98863b6e81c0faf670"/> + --> <description>The Atlas 2</description> <year>1993</year> - <publisher>Artdink</publisher> + <publisher>アートディンク (Artdink)</publisher> + <info name="release" value="199305xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="the atlas 2 (system disk).hdm" size="1261568" crc="e28a55a2" sha1="7c0826908907f6e271048d479df37056c3b55a06" offset="000000" /> </dataarea> @@ -468,9 +1105,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="awesome"> + <!-- + Origin: Neo Kobe Collection + <rom name="Awesome.ccd" size="1518" crc="368cfa91" sha1="f6040aea82fcc6e635441b0140372df0b5a02512"/> + <rom name="Awesome.cue" size="227" crc="333ef3ba" sha1="7984ef561ce74e8cbf4e0c97558438c295527c6d"/> + <rom name="Awesome.img" size="269894352" crc="65c7f575" sha1="23ff43e26edc2cdd180bda3f032bf897424bd508"/> + <rom name="Awesome.sub" size="11016096" crc="941de383" sha1="6787cbdb1c1522e345ff4c8719e7d28cfd30ca1b"/> + --> <description>Awesome</description> <year>1992</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199203xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="awesome" sha1="f758d24ebb1e94dfe1499b1af38c32fd1b9de8ff" /> @@ -479,21 +1124,39 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ayayo123"> + <!-- + Origin: Neo Kobe Collection + <rom name="Hatchake Ayayo-san 1-2-3.mdf" size="21664800" crc="db34463b" sha1="bd9465fa4853c8c69311a4dab6a16765100a3d15"/> + <rom name="Hatchake Ayayo-san 1-2-3.mds" size="486" crc="ff3aa7fb" sha1="52add872d217cdb50e57fb047990e08645eec937"/> + + *after conversion with IsoBuster+EAC * + <rom name="hatchake ayayo-san 1-2-3.bin" size="20815200" crc="4f82abf7" sha1="a5c3bcfaec2e5182fda688e8b91d38a24b4c5990"/> + <rom name="hatchake ayayo-san 1-2-3.cue" size="85" crc="c8956366" sha1="2825bafe597686b2052db12e3d59ab81ef94da2f"/> + --> <description>Hatchake Ayayo-san 1-2-3</description> <year>1993</year> - <publisher>Hard</publisher> + <publisher>ãƒãƒ¼ãƒ‰ (Hard)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> - <disk name="Hatchake ayayo-san 1-2-3" sha1="b9d11ce0cdcb144cbda9f9fdb2c9b7b02b8400a5" /> + <disk name="hatchake ayayo-san 1-2-3" sha1="b9d11ce0cdcb144cbda9f9fdb2c9b7b02b8400a5" /> </diskarea> </part> </software> <software name="ayumi"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ayumi-chan Monogatari.ccd" size="751" crc="07695447" sha1="ab5e786148d9271297215724891d159f82ebfbf4"/> + <rom name="Ayumi-chan Monogatari.cue" size="103" crc="97e8d9b5" sha1="7b862c32e6509decbf691fce5db0a7de8cc34c46"/> + <rom name="Ayumi-chan Monogatari.img" size="67737600" crc="fbddbc97" sha1="5eff9ba669a7ff75572b70654a83d001baa7f012"/> + <rom name="Ayumi-chan Monogatari.sub" size="2764800" crc="76b91a7c" sha1="1a7b8b6d3342d3732f85e3284492418fad91e482"/> + --> <description>Ayumi-chan Monogatari</description> <year>1993</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199310xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk?" /> <dataarea name="flop" size="1261568"> <rom name="ayumi-chan monogatari.hdm" size="1261568" crc="9bf209ba" sha1="cc2be00834492b0ccf5b25a1b0a5ceb810a2e330" offset="000000" /> </dataarea> @@ -506,9 +1169,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ayumijb"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ayumi-chan Monogatari Jissha-ban.ccd" size="1146" crc="74e33888" sha1="0bde45b2e0cb29e583c8b0c57e623fa6c840e1b3"/> + <rom name="Ayumi-chan Monogatari Jissha-ban.cue" size="174" crc="7b151950" sha1="d7527e06ddb11d38be2567bb1b3eb9ae8dfb1e55"/> + <rom name="Ayumi-chan Monogatari Jissha-ban.img" size="176047200" crc="d6ec08d2" sha1="d32bcd7bc0088b761d27d45fb7b06a309feba5b1"/> + <rom name="Ayumi-chan Monogatari Jissha-ban.sub" size="7185600" crc="b932512c" sha1="c86087247c02961b477f9376c95a77da30257e34"/> + --> <description>Ayumi-chan Monogatari Jissha-ban</description> <year>1995</year> <publisher>Core Magazine</publisher> + <info name="release" value="199501xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ayumi-chan monogatari jissha-ban" sha1="5a78396c9acb9c593710e0ce9aad520147b3759d" /> @@ -517,9 +1188,30 @@ User/save disks that can be created from the game itself are not included. </software> <software name="azure"> + <!-- + Origin: Neo Kobe Collection + <rom name="Azure.ccd" size="2720" crc="abba1a9c" sha1="dfc2b8b4e7f907b7f03314df3ce7e5b8e4fb5d79"/> + <rom name="Azure.img" size="297763200" crc="e6eed565" sha1="df5983c6eb3069ce0f3126408fd6a3076cb16973"/> + <rom name="Azure.sub" size="12153600" crc="997bde0c" sha1="89446f9070f38b87408947cc5b19257b937aa03b"/> + + *after conversion with IsoBuster+EAC * + <rom name="azure.cue" size="1468" crc="0e93296f" sha1="267e19bc59995b0ceeb93a914cd9fda8c49e3976"/> + <rom name="track01.bin" size="10231200" crc="02f834d3" sha1="f04f79a667bfd7e7eb519168ea12b569c61194b6"/> + <rom name="track02.bin" size="10760400" crc="8c3a5f07" sha1="c50dea9e12b898a3bbecf92e74b58e4d099478ea"/> + <rom name="track03.bin" size="25401600" crc="51660b91" sha1="494c095ccb79f48624ab7c1d0cf63691703ade7a"/> + <rom name="track04.bin" size="19933200" crc="795bfffe" sha1="5e69390f6c7f14d4895be583e56c65eaf83f47cc"/> + <rom name="track05.bin" size="25930800" crc="2424296c" sha1="f64663460c6751ae716f82eac10bb3cdd7eb95dd"/> + <rom name="track06.bin" size="26283600" crc="f65c8d90" sha1="491de4ee4ea7790e75e2308b8a944354c662d48f"/> + <rom name="track07.bin" size="30870000" crc="e8d99d4d" sha1="3cf070afcba6922d853b2ad4a56e9e79457920d2"/> + <rom name="track08.bin" size="33692400" crc="2e35719a" sha1="a30ef11f51c25dd120ea952eef9a36b6ec4399e0"/> + <rom name="track09.bin" size="46922400" crc="30db1227" sha1="d1c7a4a56c1c5b50df9be2f7a8b23eaf507d9e99"/> + <rom name="track10.bin" size="34045200" crc="31d37be9" sha1="094d5644cc9bcce8c7a16cd1e222bd3e426de65f"/> + <rom name="track11.bin" size="33692400" crc="76b54b81" sha1="24227e6bfa698dd686f68f07530ee4b1901d40d3"/> + --> <description>Azure</description> <year>1993</year> - <publisher>Family Soft</publisher> + <publisher>ファミリーソフト (Family Soft)</publisher> + <info name="release" value="199302xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="azure" sha1="cc85c3223336a3f237ff2e5030fefae78e6d0d01" /> @@ -528,9 +1220,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="bacta12v"> + <!-- + Origin: Neo Kobe Collection + <rom name="Bacta 1&2 + Voice.ccd" size="1342" crc="eaecbaee" sha1="08a2203ca5ce3ff931611ec0a6fa03d7e3dbc20f"/> + <rom name="Bacta 1&2 + Voice.cue" size="198" crc="9b35ee13" sha1="1386512259df3e4aade1d76ed526bc2648082902"/> + <rom name="Bacta 1&2 + Voice.img" size="284514384" crc="ee8f9e72" sha1="2a2a89d6e7d4795d7b315468d2b9b0297694452f"/> + <rom name="Bacta 1&2 + Voice.sub" size="11612832" crc="ad18c1ea" sha1="1d98f9eec9dbb2d810bf687df3cf94fb9a30c036"/> + --> <description>Bacta 1 & 2 + Voice</description> <year>1996</year> - <publisher>Himeya Soft</publisher> + <publisher>姫屋ソフト (Himeya Soft)</publisher> + <info name="release" value="199601xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="bacta 1 & 2 + voice" sha1="86c2d8dcb4e40b108e7e8fab5c1f9f3609f65ed7" /> @@ -539,10 +1239,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="bfmaria"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ballade for Maria.ccd" size="4201" crc="69ad79f8" sha1="0883c0808b086ceb52b6815bd355fd7306322b43"/> + <rom name="Ballade for Maria.cue" size="793" crc="3758d2c4" sha1="055e261c3291f4eeb642033572e710db86a40493"/> + <rom name="Ballade for Maria.img" size="675788400" crc="b143b770" sha1="c7b09416b175dcd71a8b85a01722c06546b7dc00"/> + <rom name="Ballade for Maria.sub" size="27583200" crc="585890ad" sha1="b39e379ece89bef03ed577ec1093bdf8c3d3782f"/> + --> <description>Ballade for Maria / Maria ni Sasageru Ballade</description> <year>1995</year> - <publisher>Fairytale</publisher> + <publisher>フェアリーテール (Fairytale)</publisher> + <info name="release" value="199506xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> <dataarea name="flop" size="1261568"> <rom name="ballade for maria (user disk).hdm" size="1261568" crc="200678ab" sha1="c658fd357318eb5f1522c88ea333f70bda75a72a" offset="000000" /> </dataarea> @@ -555,9 +1264,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="beast3"> + <!-- + Origin: Neo Kobe Collection + <rom name="Beast 3.ccd" size="970" crc="0009523b" sha1="4659bce37287fcca9bd94d202b020d133a712c00"/> + <rom name="Beast 3.cue" size="131" crc="e8f2cd6f" sha1="b483b41c1328b5e50f967f023e52e467f446f10d"/> + <rom name="Beast 3.img" size="530620608" crc="dc7fc9fa" sha1="7aa4381d643bc59a71dcf933f1aa452de4a29552"/> + <rom name="Beast 3.sub" size="21657984" crc="29086f6f" sha1="89ebc8d57bba988947c23e4364171ec714bd3b63"/> + --> <description>Beast 3</description> <year>1994</year> - <publisher>Birdy Soft</publisher> + <publisher>ãƒãƒ¼ãƒ‡ã‚£ãƒ¼ã‚½ãƒ•ト (Birdy Soft)</publisher> + <info name="release" value="199403xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="beast 3" sha1="5505a0105fa9abe32b3240bac1144555b22740ee" /> @@ -566,10 +1283,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="biblemas"> + <!-- + Origin: Neo Kobe Collection + <rom name="Bible Master.ccd" size="1902" crc="5fe16167" sha1="7c3db9b391ff419950c34583a3cd10ba51458635"/> + <rom name="Bible Master.cue" size="310" crc="e99968b4" sha1="ff897f592e6e079194bfc44350d89e8ac0097285"/> + <rom name="Bible Master.img" size="241903200" crc="c50d6fe0" sha1="be14564d9cc9a868a8dc83add97aafdabc1f5aef"/> + <rom name="Bible Master.sub" size="9873600" crc="dc397949" sha1="adba917e897c0c493207cb5ecba44969303afbc7"/> + --> <description>Bible Master</description> <year>1993</year> - <publisher>Glodia</publisher> + <publisher>ã‚°ãƒãƒ¼ãƒ‡ã‚£ã‚¢ (Glodia)</publisher> + <info name="release" value="199312xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="bible master (system disk).hdm" size="1261568" crc="f264d93e" sha1="b7939c12ab503fcddb1ad828e7c546cf21987b0c" offset="000000" /> </dataarea> @@ -582,9 +1308,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="blandia"> + <!-- + Origin: Neo Kobe Collection + <rom name="Blandia Plus.bin" size="494609136" crc="5aa2c330" sha1="e9b4f2785bb05f0ded19734851faac39f97594c8"/> + <rom name="Blandia Plus.cue" size="2682" crc="c71a3784" sha1="aea58a340a29062721f94fc25e94c647fdac879e"/> + --> <description>Blandia Plus</description> <year>1994</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199409xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="blandia plus" sha1="ff043158c1b37fcc43b43bd8f3492c3f203280cd" /> @@ -593,9 +1325,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="blue"> - <description>Blue: Will to Power</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Blue - Will to Power.ccd" size="953" crc="ffc8ac18" sha1="5364c8ff8e3456a1f533d15941cabb974b2e4873"/> + <rom name="Blue - Will to Power.cue" size="123" crc="48a10727" sha1="d3ba29143a0d5db2200374ac2503545a632b22bd"/> + <rom name="Blue - Will to Power.img" size="29282400" crc="af71e078" sha1="f5b4103b20f847bde4e9218879101e08c9669975"/> + <rom name="Blue - Will to Power.sub" size="1195200" crc="a1b15f22" sha1="40ccdbd81c602ca69249b8dc960efff2a639a986"/> + --> + <description>Blue - Will to Power</description> <year>1992</year> <publisher>Sofcom</publisher> + <info name="release" value="199204xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="blue - will to power" sha1="6ef80af0ccf21be12d68cd4ea2baf0988762f004" /> @@ -604,9 +1344,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="panicbom"> - <description>Bomberman: Panic Bomber</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Bomberman - Panic Bomber.bin" size="189806400" crc="7ed8cc7a" sha1="65dd63bd618dfbdccd82bb7b5b7d6a024025a681"/> + <rom name="Bomberman - Panic Bomber.cue" size="614" crc="f6601687" sha1="a926cc21f244c8558787735559cd6a86161344c3"/> + --> + <description>Bomberman - Panic Bomber</description> <year>1995</year> - <publisher>ASCII</publisher> + <publisher>アスã‚ー (ASCII)</publisher> + <info name="release" value="199504xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="bomberman - panic bomber" sha1="1fc5adf361f2a4ec5ddf1d55bacda3284f43f00d" /> @@ -615,9 +1361,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="bpbase"> + <!-- + Origin: Neo Kobe Collection + <rom name="The Best Play Baseball.ccd" size="7024" crc="a7c14c1b" sha1="fa2f8745e64212605558ec88553cd3c4498f69cd"/> + <rom name="The Best Play Baseball.cue" size="1398" crc="0eccef35" sha1="28f5fc0b247679c38833d44ec2e02e95b2bd9b78"/> + <rom name="The Best Play Baseball.img" size="361443600" crc="5e3c3844" sha1="23e6cf7890b1fb294c1b77538578cbb4ab80e724"/> + <rom name="The Best Play Baseball.sub" size="14752800" crc="d901ca38" sha1="52e4e17b20893997070ce55a90cf7878013e1b05"/> + --> <description>The Best Play Baseball</description> <year>1992</year> - <publisher>ASCII</publisher> + <publisher>アスã‚ー (ASCII)</publisher> + <info name="release" value="199204xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the best play baseball" sha1="11bdce513c48010b272988525ae458ec60c743f6" /> @@ -626,9 +1380,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="branmark"> + <!-- + Origin: Neo Kobe Collection + <rom name="Branmarker.ccd" size="768" crc="a0dc5e2e" sha1="3bbbf9ae17ea1a1781d6b228a3c70fdd3b1f8b1b"/> + <rom name="Branmarker.cue" size="74" crc="4c60789c" sha1="38a69d8d4a80017d37c732eea789525e4d952187"/> + <rom name="Branmarker.img" size="31399200" crc="65b380b9" sha1="a770250a513bec2b19602547678c64bb8f0303dd"/> + <rom name="Branmarker.sub" size="1281600" crc="31555bb6" sha1="8329596e0aefc249e7ee3ebe689193319e8aa571"/> + --> <description>Branmarker</description> <year>1991</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> + <info name="release" value="199311xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="branmarker" sha1="dd04adb6bb27f61337a9b6e3da6ae2afd1d1ae47" /> @@ -637,20 +1399,36 @@ User/save disks that can be created from the game itself are not included. </software> <software name="branmar2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Branmarker 2 (Game disc).ccd" size="1152" crc="5a5c5567" sha1="9201413c9a0109f0ebe03a99e35e01d18c9a09a5"/> + <rom name="Branmarker 2 (Game disc).cue" size="166" crc="760286da" sha1="961a4db20766d03f437819c33849c90370b9edf5"/> + <rom name="Branmarker 2 (Game disc).img" size="479575152" crc="8e722dbd" sha1="1bfa442a34d21ae2d37ca33d6a703a754e77cdb5"/> + <rom name="Branmarker 2 (Game disc).sub" size="19574496" crc="51b2a7ea" sha1="e527977f203bbe6f2b9ea25a617d450521e2bc2d"/> + --> <description>Branmarker 2</description> <year>1995</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="branmarker 2" sha1="b7a41a36bf83c293defa929dd8b2daea961cd3aa" /> </diskarea> </part> + <!-- We are missing the Extra Disk! --> </software> <software name="bublbobl"> + <!-- + Origin: Neo Kobe Collection + <rom name="Bubble Bobble.ccd" size="1706" crc="77649d33" sha1="8fa449d3a1fddc19d921e46ca7eaff6cbd0b11d6"/> + <rom name="Bubble Bobble.cue" size="272" crc="b70b3fda" sha1="31442377e23ffdc857c7310f4cc86a97cc41b9c1"/> + <rom name="Bubble Bobble.img" size="165251520" crc="032401b8" sha1="3838dac8a169ea134d8cd1dd9e97171455f00239"/> + <rom name="Bubble Bobble.sub" size="6744960" crc="6b14e001" sha1="43b5ece3c5436dcf6a8b13d2c3596486bef235fa"/> + --> <description>Bubble Bobble</description> <year>1990</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199010xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="bubble bobble" sha1="6832299e67d17aca22d0ec2265b78d6e42336e30" /> @@ -659,9 +1437,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="buraij"> + <!-- + Origin: Neo Kobe Collection + <rom name="Burai Joukan.ccd" size="5744" crc="4eff31b3" sha1="4a6cb3e7b269dcdfe9a3d678c84b03bfce0266a3"/> + <rom name="Burai Joukan.cue" size="1108" crc="b894e9da" sha1="3eb282f574fee3ddb0ba49d0e93b2bfd9c9d7f10"/> + <rom name="Burai Joukan.img" size="582350496" crc="a6a3f11c" sha1="7f6783840ddb02ebf3a892839b8cd08f9994c323"/> + <rom name="Burai Joukan.sub" size="23769408" crc="ccb0c2b8" sha1="09317b874015d821a3f50d4c1ee535f1f5af850f"/> + --> <description>Burai Joukan</description> <year>1990</year> - <publisher>Riverhill Soft</publisher> + <publisher>リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft)</publisher> + <info name="release" value="199004xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="burai joukan" sha1="55fdc68201b54439b4aba027891b3db41cd88250" /> @@ -670,9 +1456,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="buraik"> + <!-- + Origin: Neo Kobe Collection + <rom name="Burai Kanketsu-hen.ccd" size="3239" crc="c76b92a8" sha1="1900364eb3dd1017930c6b1a7091271bb94fbbbd"/> + <rom name="Burai Kanketsu-hen.cue" size="594" crc="07a0beed" sha1="990f39d94dc2f9b08103d8b1174b035f400bd197"/> + <rom name="Burai Kanketsu-hen.img" size="363736800" crc="c7df9688" sha1="e41c64943ea23e4a175805e37f458697e71ee460"/> + <rom name="Burai Kanketsu-hen.sub" size="14846400" crc="db0444e1" sha1="961e2f66b060f5f335fe83f46a9468769915773b"/> + --> <description>Burai Kanketsu-hen</description> <year>1991</year> - <publisher>Riverhill Soft</publisher> + <publisher>リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft)</publisher> + <info name="release" value="199105xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="burai kanketsu-hen" sha1="acf9f3c856ef1398805509352b4e6e2f53f61b47" /> @@ -681,9 +1475,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="cal"> + <!-- + Origin: Neo Kobe Collection + <rom name="Cal Towns.ccd" size="953" crc="d6cfe9dd" sha1="e4938344d6242ec8efb79fe5307c55445c7668e9"/> + <rom name="Cal Towns.cue" size="112" crc="33ae2e5e" sha1="0672f7eec1748d724095b7d4512b2a94cd9c29ec"/> + <rom name="Cal Towns.img" size="59976000" crc="28cf5f0f" sha1="2cf85b59d3a2f5d28fd0267f998389570ef00107"/> + <rom name="Cal Towns.sub" size="2448000" crc="764fd5c3" sha1="580edbcef27d5935b83583209ad480d09dc7e52a"/> + --> <description>Cal Towns</description> <year>1992</year> - <publisher>Birdy Soft</publisher> + <publisher>ãƒãƒ¼ãƒ‡ã‚£ãƒ¼ã‚½ãƒ•ト (Birdy Soft)</publisher> + <info name="release" value="199211xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="cal towns" sha1="ab905889b8a3edfd7cdfe51c728d017f257e34f7" /> @@ -692,9 +1494,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="caltiny"> - <description>Cal Gaiden: Tiny Steps Behind the Cal</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Tiny Steps - Cal Gaiden.ccd" size="955" crc="eaba5e61" sha1="3ae82d1e729b7c0178e2dffca1b57658a02903ad"/> + <rom name="Tiny Steps - Cal Gaiden.cue" size="126" crc="24f6df45" sha1="1a7f8ea86c1b4071143d9b6e8af12cae59e89e3f"/> + <rom name="Tiny Steps - Cal Gaiden.img" size="194929056" crc="6f8b3267" sha1="6140d4655dc29b0631dd9afc37e798971e2e0cb3"/> + <rom name="Tiny Steps - Cal Gaiden.sub" size="7956288" crc="b09a6744" sha1="f41121849b37ba69ee8dafc2996ae1142c9d7cf1"/> + --> + <description>Cal Gaiden - Tiny Steps Behind the Cal</description> <year>1993</year> - <publisher>Birdy Soft</publisher> + <publisher>ãƒãƒ¼ãƒ‡ã‚£ãƒ¼ã‚½ãƒ•ト (Birdy Soft)</publisher> + <info name="release" value="199307xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="tiny steps - cal gaiden" sha1="d4e6dfbb519a2890187b89a685fcc5abbd05e709" /> @@ -703,9 +1513,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="cancanb"> + <!-- + Origin: Neo Kobe Collection + <rom name="Can Can Bunny Extra.ccd" size="3046" crc="08ed0643" sha1="295218b17312f25e68cdf39ea4f3fd6a1df2e934"/> + <rom name="Can Can Bunny Extra.cue" size="555" crc="6113d772" sha1="91a478755a44ee230e92fb2ad1ac6115da8c51cb"/> + <rom name="Can Can Bunny Extra.img" size="408542400" crc="f82480a2" sha1="b2e0a029c80938229666a981874541f640726a30"/> + <rom name="Can Can Bunny Extra.sub" size="16675200" crc="ffdc710b" sha1="09057bf0add4e68b301eb187f305fdf6b45c177e"/> + --> <description>Can Can Bunny Extra</description> <year>1993</year> - <publisher>Cocktail Soft</publisher> + <publisher>カクテル・ソフト (Cocktail Soft)</publisher> + <info name="release" value="199309xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="can can bunny extra" sha1="385d444f67398de5b1acc65dd19e6aecafab0de1" /> @@ -714,9 +1532,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="castles"> + <!-- + Origin: Neo Kobe Collection + <rom name="Castles.ccd" size="4384" crc="f658c5ce" sha1="0835e3757b6a505872e57704cd17ba75d4e68a71"/> + <rom name="Castles.cue" size="823" crc="7ee78fc1" sha1="9f72446a6ecc06d619f8b6e1eb16dab05179d7d9"/> + <rom name="Castles.img" size="384201552" crc="99b75d97" sha1="1df4f4b8c5608798f73dd1fdd16ac73717bb402e"/> + <rom name="Castles.sub" size="15681696" crc="724b1dbf" sha1="6f27ef13f0bdf6bd07fcdea317d7fbd08ad2afcc"/> + --> <description>Castles</description> <year>1992</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199210xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="castles" sha1="411c2753dbbef40b91bc6cd922f82eda27820280" /> @@ -725,9 +1551,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="centurio"> + <!-- + Origin: Neo Kobe Collection + <rom name="Centurion.ccd" size="3440" crc="18c14a0f" sha1="2293788d526bfd6fcef83fc886fba4d815efed31"/> + <rom name="Centurion.cue" size="625" crc="241743c8" sha1="76bd7687373ca3891be606f8b9933b5dd3d37e83"/> + <rom name="Centurion.img" size="464562336" crc="031c2060" sha1="288d26383be413a1a535950dbfbe6d60c573776c"/> + <rom name="Centurion.sub" size="18961728" crc="e8ba9c3a" sha1="acd9aed00fc29647b6556755c431ad2d6c201d54"/> + --> <description>Centurion</description> <year>1993</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199311xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="centurion" sha1="7df6066270855bd7ae85286ce502e1663610760c" /> @@ -736,9 +1570,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="chasehq"> + <!-- + Origin: Neo Kobe Collection + <rom name="Taito Chase HQ.ccd" size="4279" crc="83330038" sha1="bdcf547a5df62b1ce4ef8879711a423523283d1e"/> + <rom name="Taito Chase HQ.cue" size="839" crc="1659506d" sha1="59109d5d49e666ef984ef73a6776026a8f0d28fe"/> + <rom name="Taito Chase HQ.img" size="320518800" crc="3d5d2037" sha1="dd09658d9fb965f05302e2b84423a6c880910b7c"/> + <rom name="Taito Chase HQ.sub" size="13082400" crc="516985cc" sha1="8550185a79567a1849e47b000f1fb666e0b2e48d"/> + --> <description>Taito Chase H. Q.</description> <year>1991</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199108xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="taito chase hq" sha1="688a4eb1780d0c4e246d4934784ada9cba3c9aea" /> @@ -747,9 +1589,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="classcrd"> + <!-- + Origin: Neo Kobe Collection + <rom name="Classic Road.ccd" size="971" crc="9a647815" sha1="f6e9da3b7bc979c637031f9900f38e5e2b791461"/> + <rom name="Classic Road.cue" size="136" crc="4a2ce6e5" sha1="f659d3cb7fd8c3c9b8f8463c2957b62696fbfbd9"/> + <rom name="Classic Road.img" size="620478768" crc="39a1f9f3" sha1="d0383c8874f63b3678b6541e72504eb94aef7fc3"/> + <rom name="Classic Road.sub" size="25325664" crc="6a0f4ce6" sha1="3f844f18cb0c0bbd62de125e8752101416865f2c"/> + --> <description>Classic Road</description> <year>1994</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199402xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="classic road" sha1="a4debada6767e53ec0edb0ee9128f8fe96a99a6c" /> @@ -758,9 +1608,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="condor"> + <!-- + Origin: Neo Kobe Collection + <rom name="The Case of the Cautious Condor.ccd" size="785" crc="97871285" sha1="c727c4224df1e672fc85c63dd6d3015bfd66e45d"/> + <rom name="The Case of the Cautious Condor.cue" size="95" crc="b3ddf2e8" sha1="a7652a108282c9d6b870dae5e1485a3c7642ce02"/> + <rom name="The Case of the Cautious Condor.img" size="367441200" crc="e68a9814" sha1="7347db260c32c5505554f7e197974bce9368c432"/> + <rom name="The Case of the Cautious Condor.sub" size="14997600" crc="803a275e" sha1="4374efd2dc823aada240ef243381f622164bd467"/> + --> <description>The Case of the Cautious Condor</description> <year>1989</year> - <publisher>Toshiba EMI</publisher> + <publisher>æ±èŠEMI (Toshiba EMI)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the case of the cautious condor" sha1="b922563e2617dc46b3aac534c3ee81039a3953c7" /> @@ -769,9 +1626,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="crystrnl"> + <!-- + Origin: Neo Kobe Collection + <rom name="Crystal Rinal.ccd" size="4493" crc="f5c45a4a" sha1="8355ecfcc6f7474de451783582200ecbba475b6a"/> + <rom name="Crystal Rinal.cue" size="1146" crc="bc39a275" sha1="f59999142109b7588f4b8e3590d1fa3463cf59a1"/> + <rom name="Crystal Rinal.img" size="638017632" crc="8ade36c3" sha1="c162e4bcd0904d5e76961bfb76681feb6ee878cf"/> + <rom name="Crystal Rinal.sub" size="26041536" crc="6b193e73" sha1="e676ea802ccbe4d1748ac3bc8402f30a5c9bdeed"/> + --> <description>Crystal Rinal</description> <year>1994</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> + <info name="release" value="199408xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="crystal rinal" sha1="96bce4606ee6775e966328143a6051fe312d9a8d" /> @@ -780,10 +1645,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="cm2itsuk"> + <!-- + Origin: Neo Kobe Collection + <rom name="Custom Mate 2 & Itsuka dokoka de.ccd" size="4020" crc="eb37b9d9" sha1="47395b77c3fe7de2ac325e0c2463f560351be37b"/> + <rom name="Custom Mate 2 & Itsuka dokoka de.cue" size="768" crc="a8faa951" sha1="c05a7f2e2d3ddda885bc16800787698ce1eba23b"/> + <rom name="Custom Mate 2 & Itsuka dokoka de.img" size="477531264" crc="c7830bbe" sha1="8f95cbec78826c280d82bf2347d53bada974df74"/> + <rom name="Custom Mate 2 & Itsuka dokoka de.sub" size="19491072" crc="c171c2e3" sha1="74b537a43e564d6df407b9fd43c1ddbda5603a05"/> + --> <description>Custom Mate 2 & Itsuka dokoka de</description> <year>1995</year> - <publisher>Cocktail Soft</publisher> + <publisher>カクテル・ソフト (Cocktail Soft)</publisher> + <info name="release" value="199508xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Save Disk" /> <dataarea name="flop" size="1261568"> <rom name="custom mate 2 & itsuka dokoka de (save disk).hdm" size="1261568" crc="aead04fb" sha1="70197de9a7a138209b7e726063b5bca8f6534575" offset="000000" /> </dataarea> @@ -796,10 +1670,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="cybercty"> + <!-- + Origin: Neo Kobe Collection + <rom name="Cybercity.bin" size="262130400" crc="8550f4d4" sha1="05e3f1f279d0ec5c6b60f31d2dde01e9439a002b"/> + <rom name="Cybercity.cue" size="599" crc="6a460d61" sha1="4074e8e45474ed31f2c64bebb914a4d11cde5e92"/> + --> <description>Cybercity</description> <year>1989</year> - <publisher>Nihon Telenet</publisher> + <publisher>日本テレãƒãƒƒãƒˆ (Nihon Telenet)</publisher> + <info name="release" value="198903xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1261568"> <rom name="cybercity (boot disk).hdm" size="1261568" crc="384203a7" sha1="8e332eae5055a911c87dd2038f550ec614c30111" offset="000000" /> </dataarea> @@ -812,9 +1693,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="cyberia"> + <!-- + Origin: Neo Kobe Collection + <rom name="Cyberia.ccd" size="772" crc="a4dc53ce" sha1="bf2f85696f9485834d782b6360a2824d9a2f30c3"/> + <rom name="Cyberia.cue" size="71" crc="5e540616" sha1="afc016200571e9e64cc5e5572d45a91e49275e4f"/> + <rom name="Cyberia.img" size="354987360" crc="b48e66ef" sha1="d5e3499d0e69e20a56b4ba4eb73e1215fa8daf93"/> + <rom name="Cyberia.sub" size="14489280" crc="94614ce5" sha1="ed6fe229ce847b5ffee463d0523cce7430934fac"/> + --> <description>Cyberia</description> <year>1995</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199505xx" /> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -824,9 +1713,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dokanshu"> - <description>D.O. Kanshuu Premium Box: Touch My Heart</description> + <!-- + Origin: Neo Kobe Collection + <rom name="D.O. Kanshuu Premium Box - Touch My Heart.bin" size="610252272" crc="6a32d7dc" sha1="ecffb1505b683fefec7a3829c1ca5b9703b41db5"/> + <rom name="D.O. Kanshuu Premium Box - Touch My Heart.cue" size="592" crc="aaf9a496" sha1="d2ce8e5f0a4df14f41fed42466c44f9968513bc1"/> + --> + <description>D.O. Kanshuu Premium Box - Touch My Heart</description> <year>1995</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> + <info name="release" value="199505xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="d.o. kanshuu premium box - touch my heart" sha1="b3b4fdd6a780911b432d925dbb5eeb5844f0485c" /> @@ -835,9 +1730,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dpszenbu"> + <!-- + Origin: Neo Kobe Collection + <rom name="D.P.S. Zenbu.ccd" size="1714" crc="c68dad59" sha1="244862655199e9144499e516f00620a880d25309"/> + <rom name="D.P.S. Zenbu.cue" size="271" crc="21113aab" sha1="2319a64d1bce6422acd425974fafc334606a670d"/> + <rom name="D.P.S. Zenbu.img" size="264604704" crc="66ece7ad" sha1="b7ec7148b74c55e92d1e5dd89d0fc12bad984ac2"/> + <rom name="D.P.S. Zenbu.sub" size="10800192" crc="931ae6d6" sha1="4352aed66a1b669011210b98cde1c7513a44c72a"/> + --> <description>D.P.S. Zenbu</description> <year>1995</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="d.p.s. zenbu" sha1="0dfb4343e175a124795974183c17356530231b85" /> @@ -846,10 +1748,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="daikouk"> + <!-- + Origin: Neo Kobe Collection + <rom name="Daikoukai Jidai.ccd" size="2859" crc="0931f076" sha1="93f7f34c49491afc4a60bfa00705c1c1d7466f44"/> + <rom name="Daikoukai Jidai.cue" size="511" crc="64ff89e0" sha1="2ac9f5a15d2bc7baf70b9d2181ccfcdeb313d794"/> + <rom name="Daikoukai Jidai.img" size="501100656" crc="f1da5cc7" sha1="0db43b0f913a14a581dce1b8618604803aa26c75"/> + <rom name="Daikoukai Jidai.sub" size="20453088" crc="74e7bba9" sha1="109a87b256f1531b66faaf9bd00b7edc355753db"/> + --> <description>Daikoukai Jidai</description> <year>1990</year> - <publisher>Koei</publisher> + <publisher>å…‰æ „ (Koei)</publisher> + <info name="release" value="199011xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Save Disk" /> <dataarea name="flop" size="1261568"> <rom name="daikoukai jidai (save disk).hdm" size="1261568" crc="a70bd7c7" sha1="887b11e25a7f07644245b3764b62bab6e14839bd" offset="000000" /> </dataarea> @@ -862,10 +1773,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="daikouk2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Daikoukai Jidai 2.ccd" size="3191" crc="429c1356" sha1="77f0375eb3fb1c2f7a311948a7fa739197a8c251"/> + <rom name="Daikoukai Jidai 2.cue" size="742" crc="bdc52d80" sha1="0d7b958eb11ab4e02b4a4e05372c359b1818a316"/> + <rom name="Daikoukai Jidai 2.img" size="519951936" crc="08ffee77" sha1="47f0208f70c17933337789cf9c37226792b2817c"/> + <rom name="Daikoukai Jidai 2.sub" size="21222528" crc="93651dcb" sha1="5198431f3e7d946b7881eec7cb1fb20dc76aa57f"/> + --> <description>Daikoukai Jidai II</description> <year>1993</year> - <publisher>Koei</publisher> + <publisher>å…‰æ „ (Koei)</publisher> + <info name="release" value="199304xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Save Disk" /> <dataarea name="flop" size="1261568"> <rom name="daikoukai jidai 2 (save disk).hdm" size="1261568" crc="53f2a3fb" sha1="5523e3ecd3748461a208b4b9e4778bf3e98e831f" offset="000000" /> </dataarea> @@ -878,10 +1798,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="daisenr3"> + <!-- + Origin: Neo Kobe Collection + <rom name="Daisenryaku III '90.ccd" size="1334" crc="cc863655" sha1="01afb89dda3aa1147b0c1065d37d136dc569e3fc"/> + <rom name="Daisenryaku III '90.cue" size="200" crc="5c7c014b" sha1="5a078d42b9e0416e28eb847a8a4b2a906b84b7af"/> + <rom name="Daisenryaku III '90.img" size="305879952" crc="b645242f" sha1="63ae679ae06eee57f9318845f8ff9c9e1006c00f"/> + <rom name="Daisenryaku III '90.sub" size="12484896" crc="54882cd5" sha1="6f00e81fea4b89a6f5830e6b3324f20126c2eeb0"/> + --> <description>Daisenryaku III '90</description> - <year>1990</year> - <publisher>Pegasus Japan</publisher> + <year>1991</year> + <publisher>ペガサスジャパン (Pegasus Japan)</publisher> + <info name="release" value="199112xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Game Disk" /> <dataarea name="flop" size="1261568"> <rom name="daisenryaku iii '90 (game disk).hdm" size="1261568" crc="d6fae63a" sha1="b55b1e005c22bf68ef523e81695146e6b7180376" offset="000000" /> </dataarea> @@ -906,10 +1835,19 @@ User/save disks that can be created from the game itself are not included. more "correct" one, and thus the one included in this list. --> <software name="dalk"> + <!-- + Origin: Neo Kobe Collection + <rom name="Dalk.ccd" size="2636" crc="f6c04011" sha1="85c64f64f223ef01ebb6a3b77922ea8960d4b367"/> + <rom name="Dalk.cue" size="854" crc="cf539eab" sha1="0ae6c2a4f92f89365e0a9d6e5f7cf2b4a0d0bb7a"/> + <rom name="Dalk.img" size="667149504" crc="76f53839" sha1="677ad9b722df5e8a4a4b61bd5322565e7d435b16"/> + <rom name="Dalk.sub" size="27230592" crc="dc3ea02b" sha1="8435a0a101de2c7683039e488c0ce48c99bf584d"/> + --> <description>Dalk</description> <year>1993</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199304xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1261568"> <rom name="dalk (boot disk).hdm" size="1261568" crc="64570ac2" sha1="c3b288ed90f57c218b3cfd9f7d962fd61063e88a" offset="000000" /> </dataarea> @@ -922,9 +1860,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dangel"> + <!-- + Origin: Neo Kobe Collection + <rom name="Dangel.bin" size="298943904" crc="58c44148" sha1="803cdfeaf8662b3a9d1e6cc3a378bf63a7fece5b"/> + <rom name="Dangel.cue" size="338" crc="4d21a8ff" sha1="db125696a69573f94978234d4a5f22a1890b7a0e"/> + --> <description>Dangel</description> <year>1996</year> - <publisher>Mink</publisher> + <publisher>ミンク (Mink)</publisher> + <info name="release" value="199606xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dangel" sha1="5b748eb84966710bf125a84dac3e878f62872ba6" /> @@ -933,9 +1877,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="defana"> + <!-- + Origin: Neo Kobe Collection + <rom name="De.FaNa.ccd" size="3058" crc="4307c4b7" sha1="649455c3a3d1d15b085a807a674ca467313ef240"/> + <rom name="De.FaNa.cue" size="543" crc="76eec4ca" sha1="5e87dee0b98dd8b76e6b71de7af2d2f9a8bfc945"/> + <rom name="De.FaNa.img" size="462657216" crc="98e1bb0f" sha1="fc6208362b828a436445e864fcfbd49297e93d9c"/> + <rom name="De.FaNa.sub" size="18883968" crc="febc7304" sha1="1186a2b181aa3fd341b39b1b9d8481a74e45fbac"/> + --> <description>De.FaNa</description> <year>1995</year> - <publisher>Himeya Soft</publisher> + <publisher>姫屋ソフト (Himeya Soft)</publisher> + <info name="release" value="199511xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="de.fana" sha1="935c63b0c38c56e7f19957cf6fe7cc2472728964" /> @@ -944,9 +1896,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="deadforc"> + <!-- + Origin: Neo Kobe Collection + <rom name="Dead Force.ccd" size="769" crc="a25e1c7b" sha1="f3c2cfc0eb3cf2c238004c26a65f39556c8f259b"/> + <rom name="Dead Force.cue" size="74" crc="ddf34745" sha1="cae2f3f77b5b925990c3c7e1f621071a617ec727"/> + <rom name="Dead Force.img" size="5743584" crc="5056aeba" sha1="410f9ce5332deb402a803582e6a672b2615a454a"/> + <rom name="Dead Force.sub" size="234432" crc="c986024e" sha1="4b6e8f61900ac1daa7a6396537328204f721133e"/> + --> <description>Dead Force</description> <year>1995</year> - <publisher>Fuga System</publisher> + <publisher>風雅システム(Fuga System)</publisher> + <info name="release" value="199506xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dead force" sha1="737a16b6676808c759130ee78ecad3ca95a9d061" /> @@ -955,9 +1915,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dotb"> + <!-- + Origin: Neo Kobe Collection + <rom name="Dead of the Brain.ccd" size="2272" crc="854e9efe" sha1="7d4be4e3ddd2810c532c88c623c5428e843550a7"/> + <rom name="Dead of the Brain.cue" size="393" crc="dabb161d" sha1="d39536bb98bdb79d68a5ba3cca1ec86326fd2957"/> + <rom name="Dead of the Brain.img" size="245901600" crc="c4da98d1" sha1="07bbe1a05e3cfaee9e6f0c4a6e3ba6d6ca9c19ff"/> + <rom name="Dead of the Brain.sub" size="10036800" crc="d62fbdc9" sha1="1718da7da07e68d650bd345b98deed7c0d919361"/> + --> <description>Dead of the Brain</description> <year>1993</year> - <publisher>Fairytale</publisher> + <publisher>フェアリーテール (Fairytale)</publisher> + <info name="release" value="199302xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dead of the brain" sha1="c8493803f60156504f69d8003624f4caf98831b6" /> @@ -966,9 +1934,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="deathbrd"> + <!-- + Origin: Neo Kobe Collection + <rom name="Death Brade.ccd" size="2850" crc="03bc2afd" sha1="ff0c92f8d077f28922c4c8cc83d8517c23e3eb7f"/> + <rom name="Death Brade.cue" size="507" crc="29411924" sha1="14e3e603e857e385836c9a57b75877ac5475dfae"/> + <rom name="Death Brade.img" size="334101600" crc="54248d78" sha1="792c2f84c6e2997c53d70ba284d69aef22a3b95f"/> + <rom name="Death Brade.sub" size="13636800" crc="7f05ba5a" sha1="87241e52f59c3a6fb7399c57989bd08abf47c38a"/> + --> <description>Death Brade</description> <year>1992</year> <publisher>KID</publisher> + <info name="release" value="199211xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="death brade" sha1="95031f278bec44906eeada2e00107d1e7f63bed0" /> @@ -977,12 +1953,21 @@ User/save disks that can be created from the game itself are not included. </software> <software name="deep"> + <!-- + Origin: Neo Kobe Collection + <rom name="Deep.ccd" size="769" crc="ee8bd985" sha1="bdb4ffcf8804f4e1c04b1e49e8e89cd4dcaf24c9"/> + <rom name="Deep.cue" size="68" crc="cf5b589f" sha1="19ef304e1061d538ec098c0a4da55c1c658f4ba8"/> + <rom name="Deep.img" size="23317728" crc="87701951" sha1="3578f50786940ffb5bb3643c637db7c42cab0979"/> + <rom name="Deep.sub" size="951744" crc="47e56e88" sha1="f0bc266d0abf217b4ce40a7c41d8762eb1449173"/> + --> <description>Deep</description> <year>1995</year> - <publisher>JAST</publisher> + <publisher>ジャスト (Jast)</publisher> + <info name="release" value="199503xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1261568"> - <rom name="deep (Boot disk).hdm" size="1261568" crc="31dd276f" sha1="2e06321ed8faeaf450623311c4b69e34a1ae3539" offset="000000" /> + <rom name="deep (boot disk).hdm" size="1261568" crc="31dd276f" sha1="2e06321ed8faeaf450623311c4b69e34a1ae3539" offset="000000" /> </dataarea> </part> <part name="cdrom" interface="fmt_cdrom"> @@ -993,9 +1978,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="deja2"> + <!-- + Origin: Neo Kobe Collection + <rom name="De-ja 2.ccd" size="767" crc="3c5874e0" sha1="2c8d455408f231205240a5e6e36e89650017f655"/> + <rom name="De-ja 2.cue" size="71" crc="cf0e7b84" sha1="bf1f0c480895b25e62c3b6453b8ccd745e9473ad"/> + <rom name="De-ja 2.img" size="20815200" crc="e9ee8ff6" sha1="a4733710f0a91be8762cf3372c2a51b8024ca8d9"/> + <rom name="De-ja 2.sub" size="849600" crc="33bd68f0" sha1="3f88891c58b28e15968d8e5ca8638b9fd66665db"/> + --> <description>De-Ja II</description> <year>1992</year> - <publisher>Elf</publisher> + <publisher>エルフ (Elf)</publisher> + <info name="release" value="199208xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="de-ja 2" sha1="ef291dca8936bc9d9f59c3ef610ff68e858bca43" /> @@ -1004,9 +1997,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dengekin"> + <!-- + Origin: Neo Kobe Collection + <rom name="Dengeki Nurse.bin" size="167756400" crc="c2d604d4" sha1="ca292e912a8823b180dd74ef376ee3e376d86694"/> + <rom name="Dengeki Nurse.cue" size="213" crc="2f7dc86e" sha1="58a9b5a741529ac9b6c8c74f9a0db8de49561e77"/> + --> <description>Dengeki Nurse</description> <year>1992</year> - <publisher>Cocktail Soft</publisher> + <publisher>カクテル・ソフト (Cocktail Soft)</publisher> + <info name="release" value="199212xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dengeki nurse" sha1="b2e82a8dea0c827f49abff6a346150df3ca16ec1" /> @@ -1015,9 +2014,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="derbysta"> + <!-- + Origin: Neo Kobe Collection + <rom name="Derby Stallion.ccd" size="6286" crc="97e9b37b" sha1="2309f7d3bebf819a9d919e5e12ac27c954c33592"/> + <rom name="Derby Stallion.cue" size="1230" crc="25d97ea2" sha1="93fe4d609e5cd89b548eede970dff3fdb2b625a8"/> + <rom name="Derby Stallion.img" size="339570000" crc="af09df4e" sha1="25ba4784641c936a6119ec8b66d0c5146965fda7"/> + <rom name="Derby Stallion.sub" size="13860000" crc="63480944" sha1="efc189fea96ccafc3a8437aa72b73335e2aa982b"/> + --> <description>Derby Stallion</description> <year>1993</year> - <publisher>ASCII</publisher> + <publisher>アスã‚ー (ASCII)</publisher> + <info name="release" value="199402xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="derby stallion" sha1="326dfe815c3d08f6c9a866f5466fd3ef9f557944" /> @@ -1026,9 +2033,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="desire"> - <description>Desire: Haitoku no Rasen</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Desire.ccd" size="1727" crc="4d8d3af5" sha1="5719fdc09d1c88238cd839f78573e28669f3f00e"/> + <rom name="Desire.cue" size="265" crc="2f6a7314" sha1="050eeee7841ec85e3f376998f3a615bc3fc81e2f"/> + <rom name="Desire.img" size="525627312" crc="eda711e8" sha1="2f6e316e60146a6a5b762d29b0cc4a210987c95c"/> + <rom name="Desire.sub" size="21454176" crc="fea510bb" sha1="e5d36eba6a606b50d4459102e33f94dd9cca2111"/> + --> + <description>Desire - Haitoku no Rasen</description> <year>1994</year> - <publisher>C's Ware</publisher> + <publisher>シーズウェア (C's Ware)</publisher> + <info name="release" value="199411xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="desire" sha1="a7ba23ec748ba4a58d0baab8172ee8ba17c450c5" /> @@ -1037,9 +2052,34 @@ User/save disks that can be created from the game itself are not included. </software> <software name="diegekir"> + <!-- + Origin: Neo Kobe Collection + <rom name="Die Gekirin.mdf" size="499950528" crc="36af78d5" sha1="b59747053f509ad498abbc3f5200ff11505a8157"/> + <rom name="Die Gekirin.mds" size="1806" crc="e1ce9e71" sha1="570b3874396eea1b5fc57b5e56066d496f7ecabb"/> + + *after conversion with IsoBuster+EAC * + <rom name="die gekirin.cue" size="2073" crc="5fc4553b" sha1="e3f5243cdab3ff7c261267803a706dbe0b6cc1ee"/> + <rom name="track01.bin" size="23317728" crc="61b42663" sha1="7f3b1081f1a853849cee860187bac2d5ea576e72"/> + <rom name="track02.bin" size="33692400" crc="62c20de5" sha1="ab5f506f00619989aa1ccdae5dcca6286fe36118"/> + <rom name="track03.bin" size="31222800" crc="88fa2fa5" sha1="618d4d1ceb27992840c5208e10c248a29d0c664f"/> + <rom name="track04.bin" size="35103600" crc="fed5a07c" sha1="558fc3f3874b9b72233b9aa0b34e7adbbc250b70"/> + <rom name="track05.bin" size="29988000" crc="7c93627a" sha1="9f5fc732d59bd3de468acc1b9b09253da48f4eb6"/> + <rom name="track06.bin" size="25401600" crc="d6c6c830" sha1="6e3f839653bc66a40954963820639a04db59c6a2"/> + <rom name="track07.bin" size="29988000" crc="865061cb" sha1="e25f693b0ff269602e51b693e150a3d314cff410"/> + <rom name="track08.bin" size="32986800" crc="5399a2b1" sha1="6b7aca3b0ae5391cdfda1653bc1592590364d306"/> + <rom name="track09.bin" size="32104800" crc="1c6801b1" sha1="31c30b9e7e16f0f4f2f9c3b5e7d9662b419881d6"/> + <rom name="track10.bin" size="32986800" crc="24dae8c1" sha1="7cde5f3e62441ea09efa73f290c4782b4abaad30"/> + <rom name="track11.bin" size="33692400" crc="b721066d" sha1="3feaf0e31b00256054dd9b92ea57fc563b7c2546"/> + <rom name="track12.bin" size="31046400" crc="85f1d963" sha1="5a1f48a5d332ef452540f44133e0554085645841"/> + <rom name="track13.bin" size="32634000" crc="e63b0d73" sha1="1e46d32fa1b5bbe590bbc0e42b3778ecd1580a98"/> + <rom name="track14.bin" size="29988000" crc="8768744f" sha1="078204258e62e63c7bf4874479bfa8d526084ced"/> + <rom name="track15.bin" size="33339600" crc="2a19a7e9" sha1="1491c6d7c0b69f916ce4122814c3aa8e2923d4b2"/> + <rom name="track16.bin" size="32810400" crc="350e422a" sha1="943af4202c0bf8e6e9116301a8943cb77a6fdce8"/> + --> <description>Die Gekirin</description> <year>1995</year> - <publisher>Nihon Application</publisher> + <publisher>日本アプリケーション (Nihon Application)</publisher> + <info name="release" value="199511xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="die gekirin" sha1="2c8e76eebd8b8578cbe7fc3b7b69298de39a9bfd" /> @@ -1048,6 +2088,13 @@ User/save disks that can be created from the game itself are not included. </software> <software name="digipin1"> + <!-- + Origin: Neo Kobe Collection + <rom name="Digital Pinup Girls Vol. 1.ccd" size="768" crc="9cf255e2" sha1="ce679195a9d467d040104c80edf00b18bfd871f2"/> + <rom name="Digital Pinup Girls Vol. 1.cue" size="90" crc="ac8cd8e7" sha1="64162be119464bcca5913315078f4ae1a74e7fae"/> + <rom name="Digital Pinup Girls Vol. 1.img" size="63504000" crc="49a1a678" sha1="ac9a8afd025445df980dde9b3c0eb03471cfd71c"/> + <rom name="Digital Pinup Girls Vol. 1.sub" size="2592000" crc="9546227f" sha1="ac230ab648493e67a1391a56e556ba7669742a1f"/> + --> <description>Digital Pinup Girls Vol. 1</description> <year>1993</year> <publisher>Transpegasus</publisher> @@ -1059,9 +2106,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dokidok1"> + <!-- + Origin: Neo Kobe Collection + <rom name="Doki Doki Disk CD Vol.1.ccd" size="2666" crc="f270822a" sha1="b1083399034ef580dde0505efce1a6c184536c9f"/> + <rom name="Doki Doki Disk CD Vol.1.cue" size="479" crc="075ef0fb" sha1="5971baf5bea080f744086f3b7c48d960eb4c0c46"/> + <rom name="Doki Doki Disk CD Vol.1.img" size="449279040" crc="aa713eac" sha1="9c8b878fef675162d5cfce4c114c7243ec1ce83d"/> + <rom name="Doki Doki Disk CD Vol.1.sub" size="18337920" crc="d361dfac" sha1="eb1ecead88f16e39040a6f0f672193acfd83db3b"/> + --> <description>Doki Doki Disk CD-ban Dai-1-kan: Club D.O. Jimukyoku</description> <year>1994</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="doki doki disk cd vol.1" sha1="b11bdae6dccb9799535baee0d0e257507037b614" /> @@ -1070,9 +2124,21 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dorbestj"> + <!-- + Origin: Neo Kobe Collection + <rom name="DOR Best Selection Joukan (Disc 1).ccd" size="1562" crc="d75b084c" sha1="465b87c88edc549932ff7f1246ffb4542368cb31"/> + <rom name="DOR Best Selection Joukan (Disc 1).cue" size="459" crc="54f8581c" sha1="1e4a37cc821d6b97acee28b624b85f110b157828"/> + <rom name="DOR Best Selection Joukan (Disc 1).img" size="594879600" crc="f300118d" sha1="5a895f2eac79fb5e79db1a3b17b6805b98067802"/> + <rom name="DOR Best Selection Joukan (Disc 1).sub" size="24280800" crc="c2530cdd" sha1="92fdbf57c394d25595c1eaa423fded62c48adf1b"/> + + <rom name="DOR Best Selection Joukan (Disc 2).ccd" size="1721" crc="3f36964c" sha1="d7a2d8bfbd0f605c128c20bd12aacbd45ad77aef"/> + <rom name="DOR Best Selection Joukan (Disc 2).cue" size="523" crc="71be2daa" sha1="2ebb66a6f2345cd6762966ae4a05b9a44b78e02a"/> + <rom name="DOR Best Selection Joukan (Disc 2).img" size="617058960" crc="196101b3" sha1="83c28155b80050de759d800a425de1a55261bc7d"/> + <rom name="DOR Best Selection Joukan (Disc 2).sub" size="25186080" crc="b0244648" sha1="be1d4a4946def26cf48d54fcc396d7e1365ac32d"/> + --> <description>DOR Best Selection Joukan</description> <year>1993</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> <part name="cdrom1" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dor best selection joukan (disc 1)" sha1="4384e5214835b93d4cb60762913dc01a29294bb6" /> @@ -1086,9 +2152,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dorse93"> + <!-- + Origin: Neo Kobe Collection + <rom name="DOR Special Edition '93 (Track 1).bin" size="317167200" crc="e4cc8ac3" sha1="e8e32b1a959f69b4bdd0fef124d72ce2e64c747d"/> + <rom name="DOR Special Edition '93 (Track 2).bin" size="35630448" crc="99da051e" sha1="15151aa198c8e2c6c528ff9be2ebd262344678a5"/> + <rom name="DOR Special Edition '93 (Track 3).bin" size="36164352" crc="825418a8" sha1="d58a5a9afdd409b428f794c129f39ec3d0627b43"/> + <rom name="DOR Special Edition '93.cue" size="356" crc="8ee2903e" sha1="c9a6e87723c219c93aaf6daab667037e82fc33bb"/> + --> <description>DOR Special Edition '93</description> <year>1993</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> + <info name="release" value="199312xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dor special edition '93" sha1="3c37b0b2890920249c06a354d8d31ce608352fee" /> @@ -1097,9 +2171,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dorsesak"> + <!-- + Origin: Neo Kobe Collection + <rom name="DOR Special Edition Sakigake.ccd" size="2479" crc="8e326b5d" sha1="077b25ff01e56802ba96edd8ffe1d10fe69a012d"/> + <rom name="DOR Special Edition Sakigake.cue" size="444" crc="2f08925a" sha1="55b83249e04c0f50170a435b9232397645fb3849"/> + <rom name="DOR Special Edition Sakigake.img" size="588082320" crc="962be96f" sha1="8e228b2751626e52c687f478cd2762cc4cbdff70"/> + <rom name="DOR Special Edition Sakigake.sub" size="24003360" crc="91a728b9" sha1="c479f262a83e8b615c9e93e5842482f12de10b36"/> + --> <description>DOR Special Edition Sakigake</description> <year>1993</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> + <info name="release" value="199306xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dor special edition sakigake" sha1="134465d1bba5c1f2f1b35cb9e7dad90f9be11be7" /> @@ -1108,9 +2190,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="doukyuu"> + <!-- + Origin: Neo Kobe Collection + <rom name="Doukyuusei.ccd" size="767" crc="3c5874e0" sha1="2c8d455408f231205240a5e6e36e89650017f655"/> + <rom name="Doukyuusei.cue" size="74" crc="26175f3b" sha1="fa960b77e1f27237c9d2f2bec2f7aff92ddc5b37"/> + <rom name="Doukyuusei.img" size="20815200" crc="b82e2cc0" sha1="92a19b6335972bfc33017d8e9498ff284fceafb4"/> + <rom name="Doukyuusei.sub" size="849600" crc="33bd68f0" sha1="3f88891c58b28e15968d8e5ca8638b9fd66665db"/> + --> <description>Doukyuusei</description> <year>1992</year> - <publisher>Elf</publisher> + <publisher>エルフ (Elf)</publisher> + <info name="release" value="199303xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="doukyuusei" sha1="e498df6b4ba95769a98e7e54a0c3afcb5ca88846" /> @@ -1119,9 +2209,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="doukyuu2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Doukyuusei 2.ccd" size="768" crc="90de2607" sha1="2475898fd32993788186b242cc3241e53ea82d66"/> + <rom name="Doukyuusei 2.cue" size="76" crc="81393e49" sha1="451608b56473425932db5e128cbb13d78e8c4683"/> + <rom name="Doukyuusei 2.img" size="31399200" crc="f32659eb" sha1="7c811da91ba4cc3734cf9e588c56dddb221cc69a"/> + <rom name="Doukyuusei 2.sub" size="1281600" crc="64012e81" sha1="236c086d735680342f9d0924b8cf4cded5b0bc48"/> + --> <description>Doukyuusei 2</description> <year>1995</year> - <publisher>Elf</publisher> + <publisher>エルフ (Elf)</publisher> + <info name="release" value="199502xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="doukyuusei 2" sha1="ec43759d5482a5a29323ad7274bb6dc14e1cbc8d" /> @@ -1130,9 +2228,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dhalf"> + <!-- + Origin: Neo Kobe Collection + <rom name="Dragon Half.ccd" size="1399" crc="b056d56f" sha1="946db286305ced1214dba79376c67dcbec163147"/> + <rom name="Dragon Half.cue" size="372" crc="7d26b4f1" sha1="036bc530b7184909888ca1918b626b8d0b40242f"/> + <rom name="Dragon Half.img" size="178573248" crc="0b650cc5" sha1="8510c56fe191a6fae2f3bc79dd92fa321d8f7299"/> + <rom name="Dragon Half.sub" size="7288704" crc="35aa9ad6" sha1="4266a770d295948e10bf63b3bd0f79d746cece2b"/> + --> <description>Dragon Half</description> <year>1994</year> - <publisher>Micro Cabin</publisher> + <publisher>マイクãƒã‚ャビン (Micro Cabin)</publisher> + <info name="release" value="199404xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dragon half" sha1="390d5edd522faaeeda42237ced0856adbb0387ed" /> @@ -1141,9 +2247,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dknight3"> + <!-- + Origin: Neo Kobe Collection + <rom name="Dragon Knight III.bin" size="12700800" crc="e0390649" sha1="8517065fd9dd2bb6a4bebdffad145626b085b6c1"/> + <rom name="Dragon Knight III.cue" size="83" crc="6a590cab" sha1="2bd3908ae81aaa5556d1817ef6dd60212a8b856e"/> + --> <description>Dragon Knight III</description> - <year>1991</year> - <publisher>Elf</publisher> + <year>1992</year> + <publisher>エルフ (Elf)</publisher> + <info name="release" value="199202xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dragon knight iii" sha1="7f1d23ee707023d5058fda1c958c80fb45677489" /> @@ -1152,9 +2264,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dknight4"> + <!-- + Origin: Neo Kobe Collection + <rom name="Dragon Knight 4.ccd" size="767" crc="8bdfb40f" sha1="cb635633c22c5bc81e7f51006c7c319eceb316c3"/> + <rom name="Dragon Knight 4.cue" size="79" crc="896060d8" sha1="06a1ab4c07d51fd4ee67491a11fa0d0e1457461a"/> + <rom name="Dragon Knight 4.img" size="20815200" crc="4248f788" sha1="7a306ea8792d48b9ee1f952cf4246ea7e15b1e98"/> + <rom name="Dragon Knight 4.sub" size="849600" crc="4f418c0b" sha1="7017e03e20f31889be0af9456244aee7eaabd910"/> + --> <description>Dragon Knight 4</description> <year>1994</year> - <publisher>Elf</publisher> + <publisher>エルフ (Elf)</publisher> + <info name="release" value="199404xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dragon knight 4" sha1="a8ed04efe5e90c18de6c1a76fc73d730670857dc" /> @@ -1163,9 +2283,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dragflam"> + <!-- + Origin: Neo Kobe Collection + <rom name="AD&D Dragons of Flame.ccd" size="3425" crc="5f83ae7c" sha1="a0798177f037f9d914bb44d272b724d53f1a95a9"/> + <rom name="AD&D Dragons of Flame.cue" size="637" crc="0b598265" sha1="e2615041bf52504c62a1c3b73cc22eb2f8e62676"/> + <rom name="AD&D Dragons of Flame.img" size="296787120" crc="ee6a5f5c" sha1="c2d2033ee6a1977d3a7a92e15a1e92e5b35248c0"/> + <rom name="AD&D Dragons of Flame.sub" size="12113760" crc="6e6729b6" sha1="623322ad86a5a0ef51b0c59eee9716c28561defb"/> + --> <description>Dragons of Flame</description> <year>1992</year> - <publisher>Pony Canyon</publisher> + <publisher>ãƒãƒ‹ãƒ¼ã‚ャニオン (Pony Canyon)</publisher> + <info name="release" value="199201xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ad&d dragons of flame" sha1="0e0fed376b4882c338e9d4510b377c8f9318df67" /> @@ -1174,9 +2302,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="drakkhen"> + <!-- + Origin: Neo Kobe Collection + <rom name="Drakkhen.ccd" size="7662" crc="725083fd" sha1="d21dffae8d3b69489c9b46300e8a8e4efeaef7b4"/> + <rom name="Drakkhen.cue" size="1504" crc="70856d2c" sha1="6b753854497b9ec296ecb79da3e16bb898b7bea4"/> + <rom name="Drakkhen.img" size="686795760" crc="4cfa933a" sha1="35362d9a82b1e3b7e8fac6ca62dadaca71ccf640"/> + <rom name="Drakkhen.sub" size="28032480" crc="3ba8f354" sha1="c505dcc171ecd0ef350fbf99649dad19f86218f6"/> + --> <description>Drakkhen</description> <year>1990</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199011xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="drakkhen" sha1="288b19695a2fc63038222658d52f96fa8755fe25" /> @@ -1185,9 +2321,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dmaster"> + <!-- + Origin: Neo Kobe Collection + <rom name="Dungeon Master.bin" size="318458704" crc="aebfd533" sha1="224417f87f88ca1bae18c0d995a6fd3c9b8dcbd7"/> + <rom name="Dungeon Master.cue" size="1294" crc="00fdc295" sha1="17e9e8cd18bf3f53471047bcedfd49a2ff1fce62"/> + --> <description>Dungeon Master</description> <year>1989</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="198911xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dungeon master" sha1="e4b7b106c1d303af3d41ce33c2979df830739df1" /> @@ -1196,9 +2338,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="dmaster2"> - <description>Dungeon Master II: Skullkeep</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Dungeon Master II - Skullkeep.ccd" size="2081" crc="69ad2463" sha1="b9c421591dcf8e80370114ed720c1de0836f79fa"/> + <rom name="Dungeon Master II - Skullkeep.cue" size="366" crc="cdd95259" sha1="4575607c0d7a3722d4e93a096525b3eb2fb2b21b"/> + <rom name="Dungeon Master II - Skullkeep.img" size="196688352" crc="7100cde1" sha1="07cdb37aadb3962fe760611830d4386f17e60e48"/> + <rom name="Dungeon Master II - Skullkeep.sub" size="8028096" crc="e050038e" sha1="d52107b7a6a8b4812dd7beff0314367f7abb6af8"/> + --> + <description>Dungeon Master II - Skullkeep</description> <year>1994</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199401xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="dungeon master ii - skullkeep" sha1="d94dcd021aeb4e020c202d31c9fe1c42b57f35e8" /> @@ -1207,9 +2357,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="eimmy"> + <!-- + Origin: Neo Kobe Collection + <rom name="Eimmy to Yobanaide.ccd" size="1536" crc="5a957719" sha1="b674f4c5d249abd3f0b90bf82991f1128ba05ab9"/> + <rom name="Eimmy to Yobanaide.cue" size="238" crc="dcae031f" sha1="d27f55850c97b3761b09bb043f87c4a6ec89da2d"/> + <rom name="Eimmy to Yobanaide.img" size="549742368" crc="1585640a" sha1="7f98c92bb3917cf2d87d325ddc4c1ce36b5a6484"/> + <rom name="Eimmy to Yobanaide.sub" size="22438464" crc="03ea8525" sha1="3cbd86397d59300f0ae4d977436a12cdcad742e1"/> + --> <description>Eimmy to Yobanaide</description> <year>1995</year> - <publisher>C's Ware</publisher> + <publisher>シーズウェア (C's Ware)</publisher> + <info name="release" value="199508xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="eimmy to yobanaide" sha1="4c321b593322b94cf84a68ad1021d0cf3b24b1c4" /> @@ -1218,9 +2376,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="elfish"> + <!-- + Origin: Neo Kobe Collection + <rom name="Elfish.ccd" size="769" crc="3990aa0a" sha1="a34bc28fd4c9074206e28db7b1226f645afc4602"/> + <rom name="Elfish.cue" size="70" crc="01a388af" sha1="b681395c929a9714e0892f9212e917f97abf75e9"/> + <rom name="Elfish.img" size="221911200" crc="54942929" sha1="28ef2c15b0f4b3ce7a347f357b1ab038f6912049"/> + <rom name="Elfish.sub" size="9057600" crc="160a0c25" sha1="669635dce8b54482df7deae714ec6075ab6e622c"/> + --> <description>Elfish</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199407xx" /> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -1230,9 +2396,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="elfishlt"> + <!-- + Origin: Neo Kobe Collection + <rom name="Elfish Lite.ccd" size="751" crc="ea2bdac2" sha1="62a9f7f9d82e1084e35e01212a84464b5c1838bb"/> + <rom name="Elfish Lite.cue" size="93" crc="edfeaf37" sha1="94eeab0829635eb2331bde508076a2fcf3d0b5d0"/> + <rom name="Elfish Lite.img" size="126655200" crc="8515a508" sha1="2440ea0d2ff9a7dd587987726e38c9de265468c1"/> + <rom name="Elfish Lite.sub" size="5169600" crc="c7a5fcd9" sha1="7996e1b60962de0b4ca65371e87889e3fcde1195"/> + --> <description>Elfish Lite</description> <year>1993</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199311xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="elfish lite" sha1="1667eb91450e756ae37910aa9291957430fc588b" /> @@ -1241,9 +2415,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="elmknght"> + <!-- + Origin: Neo Kobe Collection + <rom name="Elm Knight.ccd" size="3285" crc="bd4bf3a0" sha1="3f0af5d3b0d9c8a0950fe62f9ca260d8c05473e6"/> + <rom name="Elm Knight.cue" size="1139" crc="da81c07b" sha1="9044bd3a0267720dccd03054a74d4f146a6ab275"/> + <rom name="Elm Knight.img" size="504504000" crc="585630e6" sha1="14220511daa03d2f06df2336d0559de7c1686fb7"/> + <rom name="Elm Knight.sub" size="20592000" crc="97e181cd" sha1="be2b903d21937d303462a0b42f42408acb89f942"/> + --> <description>Elm Knight</description> <year>1992</year> - <publisher>Micro Cabin</publisher> + <publisher>マイクãƒã‚ャビン (Micro Cabin)</publisher> + <info name="release" value="199211xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="elm knight" sha1="98ff3cc7c954c1aa98b3c966d420bc72cb7fb423" /> @@ -1252,10 +2434,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="emdragon"> + <!-- + Origin: Neo Kobe Collection + <rom name="Emerald Dragon.ccd" size="2858" crc="59784b09" sha1="14bd60ffad29df014708975688d0505d9fde3043"/> + <rom name="Emerald Dragon.cue" size="510" crc="becb0f48" sha1="b09cd7cceaab14351aba4e60c34b98a4647b3cb3"/> + <rom name="Emerald Dragon.img" size="507857952" crc="f1bf4cea" sha1="9de9c96880fb71498c80100a566f82c4d4c0527d"/> + <rom name="Emerald Dragon.sub" size="20728896" crc="244c02d2" sha1="51f6ad39f2897c02357235cfb0129d43aa701e1c"/> + --> <description>Emerald Dragon</description> <year>1992</year> - <publisher>Glodia</publisher> + <publisher>ã‚°ãƒãƒ¼ãƒ‡ã‚£ã‚¢ (Glodia)</publisher> + <info name="release" value="199205xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="emerald dragon (system disk).hdm" size="1261568" crc="35b0d7c1" sha1="55689ee69dc51816b2e2529c67ff9b14380571d5" offset="000000" /> </dataarea> @@ -1268,9 +2459,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="etsuraku"> + <!-- + Origin: Neo Kobe Collection + <rom name="Etsuraku no Gakuen.ccd" size="2669" crc="839fb7cf" sha1="83db98dcf7bdfbb5c2faaa1588a9b96fe585e54f"/> + <rom name="Etsuraku no Gakuen.cue" size="474" crc="5f752ce6" sha1="e9e6d60e5ca09dc39966d7d63822d3899df3b1cb"/> + <rom name="Etsuraku no Gakuen.img" size="460051200" crc="42bb8d9a" sha1="f8f1fde7aca19740edbc92c09be00badf80b9c40"/> + <rom name="Etsuraku no Gakuen.sub" size="18777600" crc="f88e26b6" sha1="eae2fa97f46dc4e00e5efa549de35484d244c240"/> + --> <description>Etsuraku no Gakuen</description> <year>1994</year> - <publisher>C's Ware</publisher> + <publisher>シーズウェア (C's Ware)</publisher> + <info name="release" value="199408xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="etsuraku no gakuen" sha1="0c8f0badf5a5dbd86ad56c5302d5db519d828fd5" /> @@ -1279,9 +2478,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="evolutn"> + <!-- + Origin: Neo Kobe Collection + <rom name="Evolution.ccd" size="2472" crc="e4211ac3" sha1="d75688f1352630aedb6e52e2261643d1dbb8d525"/> + <rom name="Evolution.cue" size="425" crc="260d9945" sha1="269452f29765f9215857e3c8662dc4fda535c6ad"/> + <rom name="Evolution.img" size="371474880" crc="cd5e4330" sha1="b53b98e9bc30de328a91399a96d70e2d5b978497"/> + <rom name="Evolution.sub" size="15162240" crc="b828ee66" sha1="e90bf9725a82c50c27e971ea806f81c94b744cc1"/> + --> <description>Evolution</description> <year>1989</year> - <publisher>System Sacom</publisher> + <publisher>システムサコム(System Sacom)</publisher> + <info name="release" value="198903xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="evolution" sha1="93add8d48a5a0802cabc360b62c7cd39de7dabe2" /> @@ -1290,9 +2497,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="excel10"> + <!-- + Origin: Neo Kobe Collection + <rom name="Excellent 10.bin" size="714718704" crc="d3db47a4" sha1="1fa667afbf0eddabaf79cd6e307acae352ecbec4"/> + <rom name="Excellent 10.cue" size="875" crc="c9b014d4" sha1="9f41d4cb29c41168ac00c407b9e79539555cc3a4"/> + --> <description>Excellent 10</description> <year>1990</year> - <publisher>Amorphous</publisher> + <publisher>アモルファス (Amorphous)</publisher> + <info name="release" value="199010xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="excellent 10" sha1="ddaf24560a029527fcd02d0cd1fd1d09e2913b3f" /> @@ -1301,9 +2514,21 @@ User/save disks that can be created from the game itself are not included. </software> <software name="excitcd"> + <!-- + Origin: Neo Kobe Collection + <rom name="Exciting CD (Disc 1).ccd" size="5501" crc="6b718b04" sha1="48e8cb6cbd1164085165134484478f1ab129e06d"/> + <rom name="Exciting CD (Disc 1).cue" size="2045" crc="9347d39b" sha1="c6e1e8a4e3c2e9bf9617ad033ee89df8c9e235a6"/> + <rom name="Exciting CD (Disc 1).img" size="691664400" crc="0845d448" sha1="0c6e7241daac9dff87cd7d4e280634244c25841c"/> + <rom name="Exciting CD (Disc 1).sub" size="28231200" crc="1c603508" sha1="3c7758c71f9cc5a1025f2243dc301c104f8bc92f"/> + + <rom name="Exciting CD (Disc 2).ccd" size="7429" crc="671c32c9" sha1="61ee38481892c9b21760fa3934096e86e6108f36"/> + <rom name="Exciting CD (Disc 2).cue" size="2813" crc="1b679232" sha1="4ccba19dbae815d148a9be7944d6b9eb81900047"/> + <rom name="Exciting CD (Disc 2).img" size="648603984" crc="9c2ecbe9" sha1="c8df208beddc0ac86e7ef8f6dd888f51d7b3971b"/> + <rom name="Exciting CD (Disc 2).sub" size="26473632" crc="87b16a6a" sha1="975c4001875d446e5146fd875adf02ff52473c86"/> + --> <description>Exciting CD</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom1" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="exciting cd (disc 1)" sha1="f8840ecca419df7da393dccb844471d5324cab23" /> @@ -1317,9 +2542,21 @@ User/save disks that can be created from the game itself are not included. </software> <software name="excd94s"> + <!-- + Origin: Neo Kobe Collection + <rom name="Exciting CD '94 Summer (Disc 1).ccd" size="5479" crc="a51fb439" sha1="957993172f60a86a9bcd481fbda9efd348c0ba1b"/> + <rom name="Exciting CD '94 Summer (Disc 1).cue" size="2033" crc="8de56a87" sha1="6f3b558517e470d4c4e19ff4c6375a17146f75cc"/> + <rom name="Exciting CD '94 Summer (Disc 1).img" size="691664400" crc="1771c174" sha1="499249e9985b25e5b2b02d07643dc55ca5c4baa7"/> + <rom name="Exciting CD '94 Summer (Disc 1).sub" size="28231200" crc="b0e6ecb7" sha1="caca6c04dd591723e5bf2755450d1afcc2d447e1"/> + + <rom name="Exciting CD '94 Summer (Disc 2).ccd" size="7406" crc="03a62802" sha1="5cc0465062b55d7568e0cf9ccfc4b4c46a562970"/> + <rom name="Exciting CD '94 Summer (Disc 2).cue" size="2801" crc="f63873f3" sha1="1eba13d1e7aae0b6689f91d26380a6490c28c881"/> + <rom name="Exciting CD '94 Summer (Disc 2).img" size="648606336" crc="0a827aa5" sha1="740b481174dd408848930a920fa6a3c5e0750649"/> + <rom name="Exciting CD '94 Summer (Disc 2).sub" size="26473728" crc="5a4cfd35" sha1="beecfc8b991f2d5d03316beb18ac85765904f511"/> + --> <description>Exciting CD '94 Summer</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom1" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="exciting cd '94 summer (disc 1)" sha1="267497e6ea4ee286e702d5525f141585bdef0f7f" /> @@ -1333,9 +2570,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="eyeotb2"> - <description>Eye of the Beholder II: The Legend of Darkmoon</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Eye of the Beholder II.ccd" size="9524" crc="74bbd071" sha1="bfacc52b6d812beac0c204a52ac89d3a0360cb5d"/> + <rom name="Eye of the Beholder II.cue" size="1918" crc="75fbf0ca" sha1="74f2daf4b5914fa78f84bc812e09c77df6b6843d"/> + <rom name="Eye of the Beholder II.img" size="313110000" crc="008b5913" sha1="4c3230e0d8105255ca1a41fa325932f238867508"/> + <rom name="Eye of the Beholder II.sub" size="12780000" crc="0ca139f6" sha1="5bd0d38213a11453e80d598f3f098773e06a1fe4"/> + --> + <description>Eye of the Beholder II - The Legend of Darkmoon</description> <year>1993</year> - <publisher>Arrow Micro-Techs / Cybelle</publisher> + <publisher>サイベル (Cybelle)</publisher> + <info name="release" value="199311xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="eye of the beholder ii" sha1="50657bf7d7fc751c16975680410ea390f720084e" /> @@ -1344,9 +2589,24 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fbas1120"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] F-BASIC386 v1.1 L20 (Track 01).bin" size="55389600" crc="661d4cfb" sha1="614dfc9829ff5896d611f24a6f0cc6a912c9e7eb"/> + <rom name="[OS] F-BASIC386 v1.1 L20 (Track 02).bin" size="41729184" crc="17f838e9" sha1="faef4319da96fe3ea061b19e7c5a79a56604d090"/> + <rom name="[OS] F-BASIC386 v1.1 L20 (Track 03).bin" size="14765856" crc="f5a2bfbc" sha1="feec18ce8a1250704f2c9e8c66671568b50655a4"/> + <rom name="[OS] F-BASIC386 v1.1 L20 (Track 04).bin" size="24049200" crc="23d46b62" sha1="f3fc81272c05f6473d0dc9e00bc3da35658b0fd6"/> + <rom name="[OS] F-BASIC386 v1.1 L20 (Track 05).bin" size="37213344" crc="67350f17" sha1="00b992141bd49aeaa6cf52d5fdc479c9be3906ea"/> + <rom name="[OS] F-BASIC386 v1.1 L20 (Track 06).bin" size="8968176" crc="00282ec8" sha1="43bec43cd44be78a014becc94ac2c33126eb0f6b"/> + <rom name="[OS] F-BASIC386 v1.1 L20 (Track 07).bin" size="5374320" crc="a4d5c277" sha1="620ad28f7e21abd38cb9af378d892330ad6cd7a7"/> + <rom name="[OS] F-BASIC386 v1.1 L20 (Track 08).bin" size="5002704" crc="e688b514" sha1="068af1d56da66a8ee8b3adfdcd8f4c5902d790a3"/> + <rom name="[OS] F-BASIC386 v1.1 L20 (Track 09).bin" size="9360960" crc="e966f3ec" sha1="4245e9492a0a2660380b11dfa458c06b4041b2a3"/> + <rom name="[OS] F-BASIC386 v1.1 L20 (Track 10).bin" size="4675776" crc="c90f1de0" sha1="139630c7a5aaf478110cd77bd1d4e5c218bc68fb"/> + <rom name="[OS] F-BASIC386 v1.1 L20 (Track 11).bin" size="16793280" crc="65bb0664" sha1="85a7e637bf3385266c1bf4cc80f3972b41369d17"/> + <rom name="[OS] F-BASIC386 v1.1 L20.cue" size="1291" crc="67fe8479" sha1="cbfa86fc1dd6550ac48265ee437188d7e9ebb983"/> + --> <description>F-BASIC386 v1.1 L20</description> <year>1989</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="[os] f-basic386 v1.1 l20" sha1="634062a9eeedce454a4706a0149fb9e4ba94856c" /> @@ -1355,9 +2615,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fbas2110"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] F-BASIC386 v2.1 L10.ccd" size="3071" crc="64bd4d99" sha1="2c76405c25dff4e953d8c606621133052aea1672"/> + <rom name="[OS] F-BASIC386 v2.1 L10.cue" size="560" crc="cddd018e" sha1="9ca85c05b3c4924e7ad27ecdbc08d2e00a5217e1"/> + <rom name="[OS] F-BASIC386 v2.1 L10.img" size="488628000" crc="0b7a6c2a" sha1="8f0124c6b2d00be0a5f340960e7e408130bba993"/> + <rom name="[OS] F-BASIC386 v2.1 L10.sub" size="19944000" crc="1f33b8a9" sha1="fc5a64a01b80fedd4f5e39e3102cf38946b47a45"/> + --> <description>F-BASIC386 v2.1 L10</description> <year>1992</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="[os] f-basic386 v2.1 l10" sha1="e69f917dc978dea9a602adf3864db4543d314c9a" /> @@ -1366,9 +2633,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="f29retal"> + <!-- + Origin: Neo Kobe Collection + <rom name="F29 Retaliator.ccd" size="1393" crc="6c22f526" sha1="5b2ba6d41fba1afc5cf3ac10523d48581c612ef0"/> + <rom name="F29 Retaliator.cue" size="375" crc="b0c4336b" sha1="0d7212057140d1e342cf016f003cde3c42e7d53f"/> + <rom name="F29 Retaliator.img" size="169167600" crc="621a965a" sha1="c1ed31287073fc9c8b48fe07418f3f0de63c1eb6"/> + <rom name="F29 Retaliator.sub" size="6904800" crc="e959776d" sha1="55618b26cb887ce902dbb2295495b3315308a667"/> + --> <description>F29 Retaliator</description> <year>1993</year> - <publisher>Imagineer</publisher> + <publisher>イマジニア (Imagineer)</publisher> + <info name="release" value="199303xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="f29 retaliator" sha1="6da6228541bd192aac9c56db97d5b260c6edc6ca" /> @@ -1377,9 +2652,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fblow"> + <!-- + Origin: Neo Kobe Collection + <rom name="Final Blow.ccd" size="1564" crc="5ecbb5e2" sha1="47d04eb6684c6f30fdbe50efe0f74705d975f653"/> + <rom name="Final Blow.cue" size="261" crc="70f06ea6" sha1="49a494578327d84b5801d1155fa8d24e0b6e84ec"/> + <rom name="Final Blow.img" size="248371200" crc="be352006" sha1="85df88e70eeb9467e8872d46041d1906c2880057"/> + <rom name="Final Blow.sub" size="10137600" crc="8ecea4ba" sha1="b23f0a830a2ce9d760cdda107bb7bce3ea89201e"/> + --> <description>Final Blow</description> <year>1990</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199003xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="final blow" sha1="7f668c17d0b625888940ca896663b6591a15fa04" /> @@ -1388,9 +2671,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="flashbck"> + <!-- + Origin: Neo Kobe Collection + <rom name="Flashback.ccd" size="5736" crc="95f422b4" sha1="a9e6e3e2c65cdc22678ee25f8932209ae5a6ce8e"/> + <rom name="Flashback.cue" size="1105" crc="5a8a00d1" sha1="ad20fa3107d7d447f01b862171208bdd4d25c419"/> + <rom name="Flashback.img" size="447293952" crc="8a16af1f" sha1="fa5e4c6740e5032e2ec8bfcd60f33810a6d27122"/> + <rom name="Flashback.sub" size="18256896" crc="672f71ad" sha1="2a1207c46e4b19eb66c7c612cf2bdfcc3e10ecc1"/> + --> <description>Flashback</description> <year>1994</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199404xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="flashback" sha1="af8329500f8ac14f4a504ad2d56b7eb85f890f72" /> @@ -1400,9 +2691,14 @@ User/save disks that can be created from the game itself are not included. <!-- Seems to be a coverdisc for Oh!FM magazine, would be nice to have more info --> <software name="fmthcdd1"> + <!-- + Origin: Neo Kobe Collection + <rom name="FM Towns Hyper CD Demo Futoppara No. 1.iso" size="42865200" crc="a0f94faf" sha1="ab0184c50d2114bcc813fc119c9d385028346d18"/> + <rom name="fm towns hyper cd demo futoppara no. 1.cue" size="99" crc="00cc96a4" sha1="f3e5a62b90c2b9254c0f903aaa62d39acfc1d7ed"/> + --> <description>FM Towns Hyper CD Demo Futoppara No. 1</description> <year>1989</year> - <publisher>Softbank</publisher> + <publisher>SoftBank</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="fm towns hyper cd demo futoppara no. 1" sha1="14733896afea395ff24a3ac7109f32d1e3edca76" /> @@ -1411,9 +2707,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fmtstdem"> + <!-- + Origin: Neo Kobe Collection + <rom name="FM Towns Super Technology Demo 1993.ccd" size="2486" crc="a63f0412" sha1="ee01f3f56af9844abe6b6929db608ac88e5d8345"/> + <rom name="FM Towns Super Technology Demo 1993.cue" size="451" crc="6faf0e24" sha1="ed96697a01c01c04679586d71a238baaddee3273"/> + <rom name="FM Towns Super Technology Demo 1993.img" size="429536352" crc="ecb79e7e" sha1="9ec9ccce86d13cbcaddcd5425fd652b49cea26e1"/> + <rom name="FM Towns Super Technology Demo 1993.sub" size="17532096" crc="b64d91c3" sha1="a9e9becfbba781fe4974aef2f3d3dfedfd98d8b1"/> + --> <description>FM Towns Super Technology Demo 1993</description> <year>1993</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="fm towns super technology demo 1993" sha1="4a685d1a33f7d75956ec0da7429c8d24b98fd014" /> @@ -1422,9 +2725,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fractal"> + <!-- + Origin: Neo Kobe Collection + <rom name="Fractal Engine Demo.ccd" size="751" crc="0dec1ac7" sha1="b0777df3b73b305181bcf3544104ebcb4dcd23d6"/> + <rom name="Fractal Engine Demo.cue" size="101" crc="2886987e" sha1="426cf6d9ce12490767f5d5ae1d586c19d7a67d4a"/> + <rom name="Fractal Engine Demo.img" size="63499296" crc="a1bd6185" sha1="dc3933801558881dd9eb2efd7c917602fc588be8"/> + <rom name="Fractal Engine Demo.sub" size="2591808" crc="798b9b74" sha1="d20541b959e44fb545810912d35b849fa4ec4577"/> + --> <description>Fractal Engine Demo</description> <year>1991</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="fractal engine demo" sha1="97c2b8955b99b309a1f7bb6333eef3da0577d195" /> @@ -1433,9 +2743,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="freewill"> + <!-- + Origin: Neo Kobe Collection + <rom name="Free Will - Knight of Argent.ccd" size="953" crc="35eca1f9" sha1="a678eef186119d802b8f6859e4b5c176e8dbf0b7"/> + <rom name="Free Will - Knight of Argent.cue" size="131" crc="03587dfa" sha1="cb626893a454ff9fcb2470b03a5c2cea8130c313"/> + <rom name="Free Will - Knight of Argent.img" size="30164400" crc="09637f47" sha1="7314175f7d33ce88ccad87945f32122a5512206f"/> + <rom name="Free Will - Knight of Argent.sub" size="1231200" crc="decf56f2" sha1="b4460ee2c0b9b9d14a7fac384ce1ceadf7ce4298"/> + --> <description>Free Will: Knight of Argent</description> <year>1992</year> <publisher>Sofcom</publisher> + <info name="release" value="199211xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="free will - knight of argent" sha1="ad5646cf46d8b0243220dd783e96f556e9a85467" /> @@ -1444,6 +2762,11 @@ User/save disks that can be created from the game itself are not included. </software> <software name="frogfstd"> + <!-- + Origin: Neo Kobe Collection + <rom name="Frog Feast Demo.iso" size="952320" crc="ed3e8b42" sha1="82b60aefb5061bc7d1761183fe77548d1a23b4a3"/> + <rom name="frog feast demo.cue" size="76" crc="515e4f3a" sha1="bb08598460879ababb519052cbd932b77736f712"/> + --> <description>Frog Feast Demo</description> <year>2005</year> <publisher>Rastersoft</publisher> @@ -1455,9 +2778,21 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fsc4"> + <!-- + Origin: Neo Kobe Collection + <rom name="Free Software Collection 4 (Disc 1 - Red).ccd" size="752" crc="2d912882" sha1="5e040ef891576ce9228f5dceae659efe3dcf7bdf"/> + <rom name="Free Software Collection 4 (Disc 1 - Red).cue" size="123" crc="b2101c0e" sha1="dfd6093cd25f9eaea675df1f12d1c4eb1ea49b59"/> + <rom name="Free Software Collection 4 (Disc 1 - Red).img" size="243079200" crc="6c13f5ba" sha1="ea617a5eed7e71ac47fbab3bae49d6412b542c0c"/> + <rom name="Free Software Collection 4 (Disc 1 - Red).sub" size="9921600" crc="0c533c1e" sha1="b387173cbe5f2645ca77a598129031653a69be73"/> + + <rom name="Free Software Collection 4 (Disc 2 - Blue).ccd" size="2166" crc="7a35f5a4" sha1="7602ea6915ae45eadae1b509de1077f9e7d12475"/> + <rom name="Free Software Collection 4 (Disc 2 - Blue).cue" size="700" crc="cb19aa44" sha1="e6e844a8b328255cd3820ff94c290e971a8b3ba6"/> + <rom name="Free Software Collection 4 (Disc 2 - Blue).img" size="521614800" crc="fddbc110" sha1="6800813083b9e140ac12a93712e226e97a5fdc17"/> + <rom name="Free Software Collection 4 (Disc 2 - Blue).sub" size="21290400" crc="aed5e12a" sha1="4fefb40ddcd388acfcd79ccaf6dc168b47965755"/> + --> <description>Free Software Collection 4</description> <year>1991</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom1" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="free software collection 4 (disc 1 - red)" sha1="cc4b609ffd2b2e5fe216fab1eee3c22acda173fd" /> @@ -1471,9 +2806,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fsc5"> + <!-- + Origin: Neo Kobe Collection + <rom name="Free Software Collection 5.ccd" size="1852" crc="6fd8b31c" sha1="9cab618ea91b59b04966c84f01bc6b5ff0679123"/> + <rom name="Free Software Collection 5.cue" size="556" crc="f14ddd7a" sha1="b2da542ecb25213151d1a4101b0db4ab87a761e7"/> + <rom name="Free Software Collection 5.img" size="644742000" crc="42ac603b" sha1="bab56f7de645eceeb5ca6f1502a97e2939675265"/> + <rom name="Free Software Collection 5.sub" size="26316000" crc="96441161" sha1="b308d8463162b81b5d490a7e6b1d086e3764be37"/> + --> <description>Free Software Collection 5</description> <year>1992</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="free software collection 5" sha1="c342415c976b27dfa84065fc139c068440027bfa" /> @@ -1482,9 +2824,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fsc6"> + <!-- + Origin: Neo Kobe Collection + <rom name="Free Software Collection 6.ccd" size="752" crc="f556f52f" sha1="c6d653b2f132ff9e631fae60bdb62c2e00b0993e"/> + <rom name="Free Software Collection 6.cue" size="108" crc="bc6b42c3" sha1="064e83ad263504434233dc70faaebd13e2507ff7"/> + <rom name="Free Software Collection 6.img" size="475927200" crc="4ee25ed4" sha1="d1a34489f55649b6587834c94efda37c8ae20de4"/> + <rom name="Free Software Collection 6.sub" size="19425600" crc="4e1955f4" sha1="150023843f31c06b531c6c3fe88b92678b22cc8e"/> + --> <description>Free Software Collection 6</description> <year>1993</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="free software collection 6" sha1="02f5d485d0be0cce79c6c535e2e14e22769d6110" /> @@ -1493,9 +2842,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fsc7"> + <!-- + Origin: Neo Kobe Collection + <rom name="Free Software Collection 7.ccd" size="752" crc="0e5bc56a" sha1="af69901ec983ee6d9282359b6b755fbe2f58f916"/> + <rom name="Free Software Collection 7.cue" size="108" crc="7d841dd9" sha1="4fb2d95751864a82969a86b3b027cf06aa2e5c83"/> + <rom name="Free Software Collection 7.img" size="465343200" crc="920541f4" sha1="83950c21bd4997d66db4b2c0602ea9fba744cebd"/> + <rom name="Free Software Collection 7.sub" size="18993600" crc="59e15d50" sha1="d0222d926bb1db5d6c8c7218f01eac22a771f3ca"/> + --> <description>Free Software Collection 7</description> <year>1993</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="free software collection 7" sha1="89886e68a793ebd0295c437e9272ca2b285f6ddb" /> @@ -1504,9 +2860,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fsc8"> + <!-- + Origin: Neo Kobe Collection + <rom name="Free Software Collection 8.ccd" size="752" crc="0c7e5be5" sha1="375039295868900ec4116a78d690664a20d25cd3"/> + <rom name="Free Software Collection 8.cue" size="108" crc="ec546dc9" sha1="c27d6e18ca166cea86c9d3e9044f6061a3387d9a"/> + <rom name="Free Software Collection 8.img" size="581767200" crc="8c2593b7" sha1="1e44164eb91d5a0a7b2670364a94fa98172a63a8"/> + <rom name="Free Software Collection 8.sub" size="23745600" crc="75f02557" sha1="5aa06c0b3e680b6f6b257f4fdc1ece073ad2c2d3"/> + --> <description>Free Software Collection 8</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="free software collection 8" sha1="bdae35dab6691274f66654c85cc6fbe9db22a16a" /> @@ -1515,9 +2878,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fsc9"> + <!-- + Origin: Neo Kobe Collection + <rom name="Free Software Collection 9.ccd" size="752" crc="6d041fb6" sha1="9a129f4c19f7ce2f63b5277dc971f38d44907b01"/> + <rom name="Free Software Collection 9.cue" size="108" crc="2dbb32d3" sha1="5d5cfa4243fa9b1442e5ca94c8b16e83e2b02b56"/> + <rom name="Free Software Collection 9.img" size="677023200" crc="d24abf70" sha1="af471f47fe9170e1340a4a91fcbc00da18dd9e07"/> + <rom name="Free Software Collection 9.sub" size="27633600" crc="c1b51f67" sha1="56470912215721fb507484dbf49319e359e395da"/> + --> <description>Free Software Collection 9</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="free software collection 9" sha1="13a1990a9aa59e3b186eeffa8162ee1ecd487c0b" /> @@ -1526,9 +2896,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fsc10"> + <!-- + Origin: Neo Kobe Collection + <rom name="Free Software Collection 10.ccd" size="777" crc="918cad23" sha1="7430b2ef7c75c671fbfdcedfd8f432065c81afe7"/> + <rom name="Free Software Collection 10.cue" size="132" crc="b8237472" sha1="58a6867eaa7b217c3f189df945780abae97f7f65"/> + <rom name="Free Software Collection 10.img" size="610623888" crc="2f8eaaf1" sha1="fb0bf46148fcb66374ec049f47258e0dec793788"/> + <rom name="Free Software Collection 10.sub" size="24923424" crc="7ef28dc2" sha1="7ed43ec61121c097e37da50c9fee4bf5d5a94fd1"/> + --> <description>Free Software Collection 10</description> <year>1995</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="free software collection 10" sha1="d0624c4b4c2a02b2a808e905f10d827efbedb4d2" /> @@ -1537,9 +2914,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fsc11"> + <!-- + Origin: Neo Kobe Collection + <rom name="Free Software Collection 11.ccd" size="772" crc="e6b3792b" sha1="4f87960802e2e16ffae55dbb22438dab6c2cd8ce"/> + <rom name="Free Software Collection 11.cue" size="91" crc="dc279fe4" sha1="6feb814eda547fca9de5e0a615b54928844e9629"/> + <rom name="Free Software Collection 11.img" size="761262432" crc="a9150601" sha1="1a040054a74c91bc118e8b6a9ed7e627ca838666"/> + <rom name="Free Software Collection 11.sub" size="31071936" crc="cf211fbb" sha1="b8b6b9942ed262c6f4bc75c76e89cd5c1dc7e04d"/> + --> <description>Free Software Collection 11</description> <year>1995</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="free software collection 11" sha1="81a0100b41153fbaac04a37a21407b40a57bf568" /> @@ -1548,9 +2932,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fshark"> + <!-- + Origin: Neo Kobe Collection + <rom name="Hishouzame.ccd" size="2540" crc="d022c37d" sha1="0a685e7969c98abd27f05d6028a62ff45a5f90ce"/> + <rom name="Hishouzame.cue" size="466" crc="2978eaa2" sha1="d2d182a4560a6372c3b4ff16d07de6fa57b4b423"/> + <rom name="Hishouzame.img" size="315948864" crc="604f9205" sha1="b5a88d02c35cf660a2cc0d99d3ff918a1582d213"/> + <rom name="Hishouzame.sub" size="12895872" crc="b246ed6d" sha1="7b8ef1c9515fb0ba1282da6dba17eeade2cb9b1c"/> + --> <description>Hishouzame / Flying Shark</description> <year>1993</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199309xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="hishouzame" sha1="4704726801f67e1cd09ba1f7475985036edff19c" /> @@ -1559,9 +2951,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="funnybee"> + <!-- + Origin: Neo Kobe Collection + <rom name="Uchuu Kaitou Funny Bee.ccd" size="2647" crc="864414f0" sha1="7086713452aeb61b31ff7efa5b8cc7b58652e82e"/> + <rom name="Uchuu Kaitou Funny Bee.cue" size="872" crc="0a714915" sha1="6ad59ff897fd70e9ac77799881f5706c59d50f81"/> + <rom name="Uchuu Kaitou Funny Bee.img" size="537577824" crc="30449030" sha1="5a0f7d90aa6f72e1052db350116ef2b3de0fc768"/> + <rom name="Uchuu Kaitou Funny Bee.sub" size="21941952" crc="cc407142" sha1="3e59fb03d94d96576676afaa6e5e2d0da845aacb"/> + --> <description>Uchuu Kaitou Funny Bee</description> <year>1994</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199409xx" /> <part name="flop1" interface="floppy_3_5"> <dataarea name="flop" size="1261568"> <rom name="uchuu kaitou funny bee (boot disk).hdm" size="1261568" crc="4bcc3120" sha1="f721efe9534554a1a9e4e2201b8f7c4102987b29" offset="000000" /> @@ -1575,9 +2975,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fwc1"> + <!-- + Origin: Neo Kobe Collection + <rom name="Freeware Collection 1.ccd" size="3610" crc="46330a54" sha1="b4d6c4aa296c643a5c2152581ccef6ed83e65f62"/> + <rom name="Freeware Collection 1.cue" size="677" crc="d897e882" sha1="046e23d2c4478578ad0017c4c058e1e910cd5a6b"/> + <rom name="Freeware Collection 1.img" size="367970400" crc="f94f3642" sha1="cdf0974e6ccba78dc9d7669f20f278d30095bba6"/> + <rom name="Freeware Collection 1.sub" size="15019200" crc="285a49fc" sha1="5677d6d0edb033105d7128e724a721736796b671"/> + --> <description>Freeware Collection 1</description> <year>1989</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="freeware collection 1" sha1="56c2e66737e1f6611635eb60d50e426b3abf5685" /> @@ -1586,9 +2993,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fwc2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Freeware Collection 2.ccd" size="1526" crc="746c32db" sha1="d5fb38f7bd91e2f391b26959478449b49d21cba0"/> + <rom name="Freeware Collection 2.cue" size="241" crc="b200a3c8" sha1="10f57dc3c4337d00a80431956cd1a3e80915cd3a"/> + <rom name="Freeware Collection 2.img" size="361330704" crc="604de5c8" sha1="0615444032be81d577bff8164168f7a102108233"/> + <rom name="Freeware Collection 2.sub" size="14748192" crc="901ed1d8" sha1="17748a6ba98a69a4aef3066d78567e7e09de5812"/> + --> <description>Freeware Collection 2</description> <year>1990</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="freeware collection 2" sha1="294f91412f95e100f4bd2c39097dbf3ed81b2e3c" /> @@ -1597,9 +3011,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="fwc3"> + <!-- + Origin: Neo Kobe Collection + <rom name="Freeware Collection 3.ccd" size="2325" crc="8c5bb68b" sha1="c698f58527b173689df2cb0d386e7790043ce7f3"/> + <rom name="Freeware Collection 3.cue" size="743" crc="5a4f365f" sha1="25f98a9b98b15934cec38a0a03d9bd7e17f15e66"/> + <rom name="Freeware Collection 3.img" size="604816800" crc="63eb963c" sha1="6688eb266f48270fdcd73e23c397818a6983fa13"/> + <rom name="Freeware Collection 3.sub" size="24686400" crc="5a522092" sha1="86e2b3d94dfb95d6a447f9b7b37e635ab4c5a876"/> + --> <description>Freeware Collection 3</description> <year>1991</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="freeware collection 3" sha1="60a1f6791c4304172f9b935fe61c736da6d6b3f6" /> @@ -1608,9 +3029,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="gakuking"> + <!-- + Origin: Neo Kobe Collection + <rom name="Gakuen King.ccd" size="6333" crc="fc049869" sha1="8d4b31de08452583a97ab4fd258e757ff5f03eec"/> + <rom name="Gakuen King.cue" size="1241" crc="426edd8f" sha1="10832a02adf37c87a0a26877f8b5ab806e987729"/> + <rom name="Gakuen King.img" size="623980896" crc="5caecd8f" sha1="ddeffc003d00c39e36ae9dee007df34a0cae903c"/> + <rom name="Gakuen King.sub" size="25468608" crc="1eaa81f9" sha1="22fee18d3ea2b10125dceca54e051246a1bc814a"/> + --> <description>Gakuen King: Hidehiko Gakkou wo Tsukuru</description> <year>1996</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199606xx" /> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -1620,9 +3049,24 @@ User/save disks that can be created from the game itself are not included. </software> <software name="galaxyf2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Galaxy Force II (Track 01).bin" size="20815200" crc="c12ad545" sha1="9b601a87c2323d90c5f91b382279e8a627f9db6f"/> + <rom name="Galaxy Force II (Track 02).bin" size="16976736" crc="491d7d44" sha1="f56f220690854344c5fc8eca1d6d0a94f22ca428"/> + <rom name="Galaxy Force II (Track 03).bin" size="19149984" crc="dbed371e" sha1="c42b4f485330f66bce17d2a5e875aa0471880859"/> + <rom name="Galaxy Force II (Track 04).bin" size="56647920" crc="0f464575" sha1="4642bf42309efa653bc9adac6f9c263e155c089d"/> + <rom name="Galaxy Force II (Track 05).bin" size="56784336" crc="bb298d3a" sha1="bc7cc41c1b96b3dc4f11d46542546e4772522124"/> + <rom name="Galaxy Force II (Track 06).bin" size="59928960" crc="f9f46110" sha1="1697a3cf9a328ec0a9d4c62e5079eb15112c9468"/> + <rom name="Galaxy Force II (Track 07).bin" size="57746304" crc="aceb768a" sha1="a3f9165b029768aa4ea5ff8594a560c706ff7a8c"/> + <rom name="Galaxy Force II (Track 08).bin" size="65056320" crc="c3c5bc9f" sha1="16e68b558949fa55d6016ccd0a82044b6fe602c2"/> + <rom name="Galaxy Force II (Track 09).bin" size="26984496" crc="81cdb2a6" sha1="5fcc390382b07a4983237cf7def7f95e6990810c"/> + <rom name="Galaxy Force II (Track 10).bin" size="25124064" crc="ccf99476" sha1="358d9da776e2dc479e21570d58a602d9d9755007"/> + <rom name="Galaxy Force II.cue" size="898" crc="1b2cfc0c" sha1="cffb2311934e2019f563f5a8daeb58acbebf85c1"/> + --> <description>Galaxy Force II</description> <year>1991</year> <publisher>CRI</publisher> + <info name="release" value="199103xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="galaxy force ii" sha1="7b012179cd21c6ac3f58d6b2cb5bde0782007d28" /> @@ -1631,9 +3075,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="gametec1"> + <!-- + Origin: Neo Kobe Collection + <rom name="Game Technopolis Super Collection 1.ccd" size="4775" crc="3ba80dee" sha1="d9780773fb7cb9ee74f816bcf652589ffb85ae2b"/> + <rom name="Game Technopolis Super Collection 1.cue" size="931" crc="d008f83d" sha1="0de330aec715e1b99dbb8875a54f03f9f758dfe6"/> + <rom name="Game Technopolis Super Collection 1.img" size="505976352" crc="f98d36e3" sha1="c6e97eedb745f123e0b1598121a8d24ee75270df"/> + <rom name="Game Technopolis Super Collection 1.sub" size="20652096" crc="92e129b6" sha1="f0ec9149c18eb6777d696a0094e579d952c27823"/> + --> <description>Game Technopolis Super Collection 1</description> <year>1992</year> - <publisher>Tokuma Shoten</publisher> + <publisher>徳間書店 (Tokuma Shoten)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="game technopolis super collection 1" sha1="c35229967fd790450d36c9ec1e4c70b9d3d7d336" /> @@ -1642,9 +3093,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="gametec2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Game Technopolis Super Collection 2.bin" size="681082752" crc="5fddd52a" sha1="b85ef1c3f348d449616c4548069bcd64af0d9b9d"/> + <rom name="Game Technopolis Super Collection 2.cue" size="1106" crc="c14df5b5" sha1="59bc42f86f80b4e7736d7a15637c7d5b6f5cf755"/> + --> <description>Game Technopolis Super Collection 2</description> <year>1993</year> - <publisher>Tokuma Shoten</publisher> + <publisher>徳間書店 (Tokuma Shoten)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="game technopolis super collection 2" sha1="71e1cb211ed1055086162de74fd265498a986546" /> @@ -1653,9 +3109,26 @@ User/save disks that can be created from the game itself are not included. </software> <software name="gekirin"> - <description>Gekirin: Ushinawareshi Houken</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Gekirin.mdf" size="480690000" crc="6cf3dde5" sha1="a804cf66ca6435bde01d4b0bcfff59b92a281869"/> + <rom name="Gekirin.mds" size="1102" crc="195d09d6" sha1="9ed7d388e93048320d4245d72dabe887774bf64c"/> + + *after conversion with IsoBuster+EAC * + <rom name="gekirin.cue" size="1105" crc="ee77156d" sha1="d1d9e4e651616659894502c0635b92360684fc86"/> + <rom name="track01.bin" size="10231200" crc="3a289fdf" sha1="0dacd953e45ded4dfead1c32ad6e2bfc8053fcb3"/> + <rom name="track02.bin" size="33163200" crc="ef6514a3" sha1="43775c10cdbf23ed27d6820b84dc131f8a922445"/> + <rom name="track03.bin" size="86436000" crc="eb601f22" sha1="5515961b9877aedae62f39ccc2f6e41bc3fd9a64"/> + <rom name="track04.bin" size="83966400" crc="7709a519" sha1="860b06423e0836e6ad9e3c9b3b8d9f7a174cfd42"/> + <rom name="track05.bin" size="73382400" crc="8dd1e5b9" sha1="bd2f1df9c883977ae8bc9bf965a89d4af3965fd2"/> + <rom name="track06.bin" size="84495600" crc="ad300c3b" sha1="0838ccb5d1fb6926c8a0684238eda4a68c979e5f"/> + <rom name="track07.bin" size="67914000" crc="a7b4166a" sha1="7527949412eb9a5d13cc95532a1fba69890f5b21"/> + <rom name="track08.bin" size="41454000" crc="4cdb5716" sha1="ba0c418704891605dbfcd40f3cd40b855560154d"/> + --> + <description>Gekirin - Ushinawareshi Houken</description> <year>1994</year> - <publisher>Nihon Application</publisher> + <publisher>日本アプリケーション (Nihon Application)</publisher> + <info name="release" value="199412xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="gekirin" sha1="9fb33975654240e0916d76494443c3879c971ae3" /> @@ -1664,9 +3137,38 @@ User/save disks that can be created from the game itself are not included. </software> <software name="gendaiex"> + <!-- + Origin: Neo Kobe Collection + <rom name="Gendai Daisenryaku EX Special.mdf" size="651261744" crc="702fd42e" sha1="86e9fd47bd75dd1b957d47563951de9cb0f3f2d0"/> + <rom name="Gendai Daisenryaku EX Special.mds" size="2158" crc="9976c8fd" sha1="29b724783fefe4516a40ae4dc539f770cf953560"/> + + *after conversion with IsoBuster+EAC * + <rom name="gendai daisenryaku ex special.cue" size="2557" crc="5e0ab62c" sha1="7cc2994302cd700a36e493d63b874e4be01a1f3a"/> + <rom name="track01.bin" size="10231200" crc="64d65d17" sha1="abfd30fec8d42237cbf6abe308c868a0727e7e42"/> + <rom name="track02.bin" size="35715120" crc="381be028" sha1="09bfe2b8df69520056c3af22120c68043439a1dc"/> + <rom name="track03.bin" size="25500384" crc="12069a21" sha1="19030cd55bd6251cb75a70f8cc2b43278f296d94"/> + <rom name="track04.bin" size="30411360" crc="10ac8f00" sha1="f127ed39a27db77d7740919ef811957968838d41"/> + <rom name="track05.bin" size="22080576" crc="d28a321b" sha1="770dc3595463acb5b9ee9c17c4ef82c7339cc03a"/> + <rom name="track06.bin" size="33715920" crc="d6b83ff5" sha1="b2cd2f2afd83a14885c2f24b36ae41029ffefc8e"/> + <rom name="track07.bin" size="30439584" crc="57f02c43" sha1="a43258a6c1250076658ae93b680ebe1d3233773f"/> + <rom name="track08.bin" size="32523456" crc="06a69ecb" sha1="681e0080e261085368251f5a7efaa52b03462f3c"/> + <rom name="track09.bin" size="33062064" crc="234ef5a3" sha1="fb3a16150dc29422c9a4b9481f60f3f7b54f7f09"/> + <rom name="track10.bin" size="35221200" crc="8d0e7269" sha1="6ce664b3ce7132ef5d11d5f1b9167cd7c21a7868"/> + <rom name="track11.bin" size="40978896" crc="ac638eaa" sha1="f4f78b54e993bc1e274fadee9d2b4dcf1ad7c314"/> + <rom name="track12.bin" size="32650464" crc="72d0e1ec" sha1="9262ecf405b221f5cb5d298a0073540c1366854e"/> + <rom name="track13.bin" size="32963280" crc="048a10ae" sha1="be471818025c2b0858aa70f266bfe4218ba9cf5a"/> + <rom name="track14.bin" size="33805296" crc="15bede85" sha1="94ff517671bb24adde8dedd3ad60cd80cb94c68f"/> + <rom name="track15.bin" size="33485424" crc="2e4b2d80" sha1="9e0ca75d9083738d7c290a56e8b0cb6d14d1f372"/> + <rom name="track16.bin" size="34440336" crc="5d7ae55b" sha1="ade6c40cc8e13ff8f32d4ce5cf53c279f5e17570"/> + <rom name="track17.bin" size="30804144" crc="d47f31dd" sha1="611db0d75d0533f10dd78df67207c8b256d6eff7"/> + <rom name="track18.bin" size="32951520" crc="6ab63122" sha1="c2e1d88c3152a4c9a04ab52f7025f172e6dad707"/> + <rom name="track19.bin" size="45946320" crc="9342534f" sha1="baa559d6fc21f700b240a817817273ef85e3fa8c"/> + <rom name="track20.bin" size="44688000" crc="38f63b66" sha1="bd7522fceeb5c605a793c085127e000997b8f511"/> + --> <description>Gendai Daisenryaku EX Special</description> <year>1994</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199409xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="gendai daisenryaku ex special" sha1="28d5b423ebb87c784a117aad28308522dc54dd56" /> @@ -1675,9 +3177,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="genocsq"> + <!-- + Origin: Neo Kobe Collection + <rom name="Genocide Square.ccd" size="784" crc="2303a876" sha1="84d16ece4ee8f14ae03f0f45228fc617c6d2efdd"/> + <rom name="Genocide Square.cue" size="81" crc="fe5b85ca" sha1="8690f33cafda001068d08a93beb5899740d9f36d"/> + <rom name="Genocide Square.img" size="41987904" crc="69fa846b" sha1="3359c5f0c65dfe66797aec59121ab3f2d9f05137"/> + <rom name="Genocide Square.sub" size="1713792" crc="d32de9d3" sha1="647dcabf4efa2014a85d0a9db5b374051ed2182c"/> + --> <description>Genocide Square</description> <year>1993</year> <publisher>Zoom</publisher> + <info name="release" value="199304xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="genocide square" sha1="2b9e586bdf24e546c1de001bffee82cc399e47ae" /> @@ -1686,9 +3196,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="gigamort"> + <!-- + Origin: Neo Kobe Collection + <rom name="Giga Motion.ccd" size="5553" crc="3c33d5e5" sha1="a53813f153a0d8e97c2d0a090f751e7480b189bc"/> + <rom name="Giga Motion.cue" size="1067" crc="06989d77" sha1="36d1ec8233bc2f7912c409bde9025cb6309830bc"/> + <rom name="Giga Motion.img" size="544445664" crc="d7bc7c5e" sha1="55e777d47b3010031c322e273b28e60da5ab2890"/> + <rom name="Giga Motion.sub" size="22222272" crc="94468902" sha1="661be711ef0168858fd4390c86f6ef8d1ebcf584"/> + --> <description>Giga Mortion</description> <year>1995</year> - <publisher>Interheart</publisher> + <publisher>インターãƒãƒ¼ãƒˆ (Interheart)</publisher> + <info name="release" value="199503xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="giga motion" sha1="db0c83a91eba1a3f840f1d244716e0477e3b1ee6" /> @@ -1697,6 +3215,13 @@ User/save disks that can be created from the game itself are not included. </software> <software name="gnutowns"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] GNU for Towns Release 2.ccd" size="960" crc="7f29e47b" sha1="3ce894acb64c62a3168f89fe45f8534eb3c2fed3"/> + <rom name="[OS] GNU for Towns Release 2.cue" size="131" crc="151e64da" sha1="f7a346b0b46235cd7c747dff65fd8cd9fb3bb653"/> + <rom name="[OS] GNU for Towns Release 2.img" size="470106000" crc="9beda416" sha1="a3458a0d05379789605d67478ed5a0b781c98608"/> + <rom name="[OS] GNU for Towns Release 2.sub" size="19188000" crc="ca4100f7" sha1="865d399ce89aac843219d272ce094d9654265862"/> + --> <description>GNU for Towns Release 2</description> <year>1991</year> <publisher>FM Users Group</publisher> @@ -1708,10 +3233,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="goh2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Goh II Towns Special.ccd" size="767" crc="05177487" sha1="f3fbe3b3f55d386c241dc3b73588e73a23143932"/> + <rom name="Goh II Towns Special.cue" size="84" crc="3f0a525b" sha1="c0f3523be8f886ceeb93725f3ca26641e521d282"/> + <rom name="Goh II Towns Special.img" size="10231200" crc="12845801" sha1="0ff672bdf5fb383671474353b13a958b17852a27"/> + <rom name="Goh II Towns Special.sub" size="417600" crc="7d23400c" sha1="e7e6965b1646a9816d0afb825da57b202c537e09"/> + --> <description>Goh II Towns Special</description> <year>1993</year> - <publisher>Wolfteam</publisher> + <publisher>ウルフãƒãƒ¼ãƒ (WolfTeam)</publisher> + <info name="release" value="198909xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="goh ii towns special (system disk).hdm" size="1261568" crc="b694cf42" sha1="a9084609cd53c81263c05f1310946cbd5a561059" offset="000000" /> </dataarea> @@ -1724,9 +3258,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="gunblaze"> + <!-- + Origin: Neo Kobe Collection + <rom name="Gunblaze.ccd" size="3249" crc="d0f88b1a" sha1="7283b05fc15a7b1cf0d6f149ecfbb58e8149edda"/> + <rom name="Gunblaze.cue" size="584" crc="3c6ff80a" sha1="5df8151457900ffeadcd363aa8ba9ed18bc6def0"/> + <rom name="Gunblaze.img" size="654387552" crc="b14b4ec2" sha1="5df61a755df6e58b9939b878f933aadbde792cc0"/> + <rom name="Gunblaze.sub" size="26709696" crc="812809ef" sha1="732dfd7efe04f585b6a4a21a2457c097eaf59f41"/> + --> <description>Gunblaze</description> <year>1994</year> - <publisher>Active</publisher> + <publisher>アクティブ (Active)</publisher> + <info name="release" value="199412xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="gunblaze" sha1="2ef094206014ebbe9606e2eca117779e833bd1eb" /> @@ -1735,9 +3277,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="gundamhc"> - <description>Mobile Suit Gundam: Hyper Classic Operation</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Mobile Suit Gundam Hyper Classic Operation.ccd" size="4391" crc="0abaaa64" sha1="cdc24486041c41ad3ff10c21cddec6d35b62b162"/> + <rom name="Mobile Suit Gundam Hyper Classic Operation.cue" size="858" crc="c46ffb12" sha1="cb4d797e05e7157c979442fee8453d2daadc4049"/> + <rom name="Mobile Suit Gundam Hyper Classic Operation.img" size="266745024" crc="d99bd13a" sha1="139c1c8c34b443c9888a6ce3d8584599a4e39fec"/> + <rom name="Mobile Suit Gundam Hyper Classic Operation.sub" size="10887552" crc="46761a4e" sha1="c960498b2bd3161662f5f650a81c96f60d6fa5a6"/> + --> + <description>Mobile Suit Gundam - Hyper Classic Operation</description> <year>1992</year> - <publisher>Family Soft</publisher> + <publisher>ファミリーソフト (Family Soft)</publisher> + <info name="release" value="199208xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mobile suit gundam hyper classic operation" sha1="6c4a876c7973e4652d06c8ad1a9b3b3769e3f90e" /> @@ -1746,9 +3296,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="gundamhd"> - <description>Mobile Suit Gundam: Hyper Desert Operation</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Mobile Suit Gundam Hyper Desert Operation.ccd" size="4393" crc="c146c679" sha1="8d76c9cfbaaa32f7515c7fcfe810d4e7a214d28a"/> + <rom name="Mobile Suit Gundam Hyper Desert Operation.cue" size="857" crc="adfa275d" sha1="ad93554e89d56d9ce51348089341572ea7f1d709"/> + <rom name="Mobile Suit Gundam Hyper Desert Operation.img" size="251633424" crc="44eb68ec" sha1="5e8827afe57acf7de620c468c9cd6bd3903dea9c"/> + <rom name="Mobile Suit Gundam Hyper Desert Operation.sub" size="10270752" crc="e9e722da" sha1="6a695055bdc6f144e532271952bc785bb3d5c9b3"/> + --> + <description>Mobile Suit Gundam - Hyper Desert Operation</description> <year>1992</year> - <publisher>Family Soft</publisher> + <publisher>ファミリーソフト (Family Soft)</publisher> + <info name="release" value="199209xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mobile suit gundam hyper desert operation" sha1="05410dc1fe303c5613650f2a697d76ad769644ea" /> @@ -1757,9 +3315,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="gunship"> - <description>Gunship: The Helicopter Simulation</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Gunship - The Helicopter Simulation.cue" size="370" crc="258b11b0" sha1="146fb88fc218b94c5b04c8eb08fd04d4523dde44"/> + <rom name="Gunship - The Helicopter Simulation.img" size="376437600" crc="989f159f" sha1="74d836bff0beabbcd76a4c9a6362136c38cb2641"/> + --> + <description>Gunship - The Helicopter Simulation</description> <year>1990</year> - <publisher>MicroProse Japan</publisher> + <publisher>マイクãƒãƒ—ãƒãƒ¼ã‚ºã‚¸ãƒ£ãƒ‘ン (MicroProse Japan)</publisher> + <info name="release" value="199010xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="gunship - the helicopter simulation" sha1="27c9e702097d1663302dc10fd5dccdd9ba8d6fc8" /> @@ -1768,9 +3332,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="hanakiok"> + <!-- + Origin: Neo Kobe Collection + <rom name="Hana no Kioku.ccd" size="1536" crc="fb0735ea" sha1="8cbab4ded5211a62e586e46c91494819a9e11107"/> + <rom name="Hana no Kioku.cue" size="233" crc="d51a36ec" sha1="7104673d7ecf704fb949ccbba5b5ead2f4a0c248"/> + <rom name="Hana no Kioku.img" size="463659168" crc="40188f96" sha1="92300b7318a2f08a22cbbd909db9c93acd1490b0"/> + <rom name="Hana no Kioku.sub" size="18924864" crc="8b86eb7e" sha1="43c708b29115c38a3d1c71244a696e80b5319ce4"/> + --> <description>Hana no Kioku</description> <year>1995</year> - <publisher>Foster</publisher> + <publisher>フォスター (Foster)</publisher> + <info name="release" value="199512xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="hana no kioku" sha1="d0ade7a3f7f36fa8a5f8bd6016643823a913b866" /> @@ -1779,10 +3351,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="hanapon"> + <!-- + Origin: Neo Kobe Collection + <rom name="Hanafuda de Pon!.ccd" size="771" crc="0f109b17" sha1="19ed46f6898c5216f44c2434e314852f5f94ee49"/> + <rom name="Hanafuda de Pon!.cue" size="80" crc="df871820" sha1="346670e4ad07ff1fae4b19c1041239bff62282d3"/> + <rom name="Hanafuda de Pon!.img" size="268499616" crc="b292e847" sha1="c8998c407a34f7c06817a6c043b2ab7fae7b5e3b"/> + <rom name="Hanafuda de Pon!.sub" size="10959168" crc="b24bf839" sha1="003a30af9e741187929ab0b4c86aa6b5f031efcd"/> + --> <description>Hanafuda de Pon!</description> <year>1996</year> - <publisher>Active</publisher> + <publisher>アクティブ (Active)</publisher> + <info name="release" value="199607xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1261568"> <rom name="hanafuda de pon! (boot disk).hdm" size="1261568" crc="cad3cfe6" sha1="3d4eb251057b7a82cabb683114731013ced571ad" offset="000000" /> </dataarea> @@ -1795,9 +3376,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="heartron"> + <!-- + Origin: Neo Kobe Collection + <rom name="Heart de Ron!!.ccd" size="3628" crc="a428fd6e" sha1="204ffda9db3f38f27bfc8e344adf8fc4674ccf5e"/> + <rom name="Heart de Ron!!.cue" size="670" crc="f899c966" sha1="17156fe0adbffeae8e3f8cc2a3f74ce69fe4f72f"/> + <rom name="Heart de Ron!!.img" size="439953360" crc="ed1e3f58" sha1="746444998a41a1d722b09a6cecd0097a1c909cdb"/> + <rom name="Heart de Ron!!.sub" size="17957280" crc="5de2c580" sha1="84abf50f739bb620c2171029e5564aa6210ec7f9"/> + --> <description>Heart de Ron!!</description> <year>1995</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> + <info name="release" value="199503xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="heart de ron!!" sha1="1c95cf153e055068b71f8fd6fffe760d1ddd2ac0" /> @@ -1806,9 +3395,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="highccom"> + <!-- + Origin: Neo Kobe Collection + <rom name="High C Compiler Multimedia Development Kit v1.7 L13.ccd" size="770" crc="3c965b0b" sha1="2f5300cec2bebd97b8753239f7f579d4855202df"/> + <rom name="High C Compiler Multimedia Development Kit v1.7 L13.cue" size="115" crc="248c2756" sha1="ee4293724107e491a3c3c699c360326745d802cc"/> + <rom name="High C Compiler Multimedia Development Kit v1.7 L13.img" size="71187984" crc="28bae35d" sha1="465cc57540e0fc0eb7b43f84d2d4c7e05e1cf3ab"/> + <rom name="High C Compiler Multimedia Development Kit v1.7 L13.sub" size="2905632" crc="58a7a430" sha1="0e5cf3f48d2b27601081419eb4316d51960eb7c6"/> + --> <description>High C Compiler Multimedia Development Kit v1.7 L13</description> <year>1995</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="high c compiler multimedia development kit v1.7 l13" sha1="1755383d812fe07b4ad2cd0b44c111cb14b25ae7" /> @@ -1817,9 +3413,21 @@ User/save disks that can be created from the game itself are not included. </software> <software name="highlt20"> + <!-- + Origin: Neo Kobe Collection + <rom name="Highlight CD 20 (Disc 1).ccd" size="5478" crc="bd7bc4d7" sha1="2b8773d97ec2803ef8688286a26b5eeeba807609"/> + <rom name="Highlight CD 20 (Disc 1).cue" size="2026" crc="f2b48b64" sha1="d144fb1ac862470dfde66842f51edbc409f3b68a"/> + <rom name="Highlight CD 20 (Disc 1).img" size="691664400" crc="e95a1518" sha1="0ed7aad0a968c0bd47fea87d70871bfeb6347dc2"/> + <rom name="Highlight CD 20 (Disc 1).sub" size="28231200" crc="ebd9485f" sha1="c100dfa6bb6cf861fcad77f93260c62ebb439c2c"/> + + <rom name="Highlight CD 20 (Disc 2).ccd" size="7090" crc="85d224a6" sha1="2c9c79a63a1c793b7aa2d7296477239670b4cc54"/> + <rom name="Highlight CD 20 (Disc 2).cue" size="2666" crc="f44303c5" sha1="7243db079e678d8e55b439b8c284282a1771b23f"/> + <rom name="Highlight CD 20 (Disc 2).img" size="623750400" crc="7bc5ec07" sha1="44573f4b1ae8e3e2f8a9ec1fc8ec7c6dd2657727"/> + <rom name="Highlight CD 20 (Disc 2).sub" size="25459200" crc="14817dc8" sha1="2b5a4dc5b1aa53aa5dab10ea56052b9d86ab0b4a"/> + --> <description>Highlight CD 20</description> <year>1993</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom1" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="highlight cd 20 (disc 1)" sha1="50be2720db6e121f744d12641a09168a80e330b5" /> @@ -1833,9 +3441,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="hoshis1"> + <!-- + Origin: Neo Kobe Collection + <rom name="Hoshi no Suna Monogatari.ccd" size="767" crc="3c5874e0" sha1="2c8d455408f231205240a5e6e36e89650017f655"/> + <rom name="Hoshi no Suna Monogatari.cue" size="88" crc="65e4eb48" sha1="3869d13ca4d84e3f04c99d9f9686ce3d7090cb62"/> + <rom name="Hoshi no Suna Monogatari.img" size="20815200" crc="51b4e369" sha1="7c8848e59c813d8b4a47b884a468130026e5b680"/> + <rom name="Hoshi no Suna Monogatari.sub" size="849600" crc="33bd68f0" sha1="3f88891c58b28e15968d8e5ca8638b9fd66665db"/> + --> <description>Hoshi no Suna Monogatari</description> <year>1992</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> + <info name="release" value="199209xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="hoshi no suna monogatari" sha1="3484f993ecabe99049522ca7cb67334609982269" /> @@ -1844,9 +3460,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="hoshis2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Hoshi no Suna Monogatari 2.ccd" size="767" crc="3c5874e0" sha1="2c8d455408f231205240a5e6e36e89650017f655"/> + <rom name="Hoshi no Suna Monogatari 2.cue" size="90" crc="4927201a" sha1="bdca6696c26a67c756ab453a7e7f16143987b048"/> + <rom name="Hoshi no Suna Monogatari 2.img" size="20815200" crc="26430ca6" sha1="11af66a1b7cc5d2136ef07e97db34844e054ef1c"/> + <rom name="Hoshi no Suna Monogatari 2.sub" size="849600" crc="33bd68f0" sha1="3f88891c58b28e15968d8e5ca8638b9fd66665db"/> + --> <description>Hoshi no Suna Monogatari 2</description> <year>1992</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> + <info name="release" value="199210xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="hoshi no suna monogatari 2" sha1="6fba473c7964bdd99b932d570af86a0115bcc798" /> @@ -1855,9 +3479,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="hoshis3"> + <!-- + Origin: Neo Kobe Collection + <rom name="Hoshi no Suna Monogatari 3.ccd" size="3455" crc="ad50647d" sha1="68ff4745927e47067532944526ac7bf8e8833ba9"/> + <rom name="Hoshi no Suna Monogatari 3.cue" size="642" crc="f265ee91" sha1="adfa68ba2ff31b0571545d5cad570decaf8bbcc9"/> + <rom name="Hoshi no Suna Monogatari 3.img" size="573629280" crc="b05d7668" sha1="31c30dd9d033c707a4732fa5613fa823aa1ff0ff"/> + <rom name="Hoshi no Suna Monogatari 3.sub" size="23413440" crc="7bda5e31" sha1="dd8acb239c334b3795dfd4f20f3bd7d0016d0b02"/> + --> <description>Hoshi no Suna Monogatari 3</description> <year>1995</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> + <info name="release" value="199508xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="hoshi no suna monogatari 3" sha1="6526c4192fcfb73dbf32f4d2a2575ae6a554d376" /> @@ -1866,10 +3498,18 @@ User/save disks that can be created from the game itself are not included. </software> <software name="hypraddr"> + <!-- + Origin: Neo Kobe Collection + <rom name="Hyper Address.ccd" size="768" crc="415cdfce" sha1="a1e4c361209bb6bd0fcb134a5731f32fd3e17137"/> + <rom name="Hyper Address.cue" size="77" crc="bc672221" sha1="84270de39f851dde1ae65a4127565d0a3bf9575d"/> + <rom name="Hyper Address.img" size="31756704" crc="d560d57d" sha1="fe9c76dc153ca0aea46a2ef889a128844098d0b2"/> + <rom name="Hyper Address.sub" size="1296192" crc="8ef63197" sha1="9f95d88bd449cf9eeabae90aef00175cc9f6be5b"/> + --> <description>Hyper Address</description> <year>1990</year> - <publisher>Datt Japan</publisher> + <publisher>ダットジャパン (Datt Japan)</publisher> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="hyper address (system disk).hdm" size="1261568" crc="9f587fde" sha1="4344771e7f36b8a3461c9d69ea8cb6057fab19f4" offset="000000" /> </dataarea> @@ -1882,9 +3522,18 @@ User/save disks that can be created from the game itself are not included. </software> <software name="hyprocea"> + <!-- + Origin: Neo Kobe Collection + <rom name="Hyper Ocean (Track 1).bin" size="41983200" crc="3103e3af" sha1="80f856f646b2ec1028d47fd1a41604d9dde4e965"/> + <rom name="Hyper Ocean (Track 2).bin" size="58390752" crc="b2a3396a" sha1="e3d2bfd0fe1636da5aa468a00ac79f4a9727fbe3"/> + <rom name="Hyper Ocean (Track 3).bin" size="46393200" crc="d7a8c8ff" sha1="890d4e701153d955dfc996bcbb70df0f865e9c2f"/> + <rom name="Hyper Ocean (Track 4).bin" size="64915200" crc="4ac2c051" sha1="63cb8b12dc4fe44b69c214d2ae43e8c62a7ff6ab"/> + <rom name="Hyper Ocean (Track 5).bin" size="63504000" crc="dbf63681" sha1="baefd81275e2f6e1c8509c82606c321d6cc39986"/> + <rom name="Hyper Ocean.cue" size="530" crc="1758990f" sha1="e9b2517901f440d6027490d32101714907924ec7"/> + --> <description>Hyper Ocean</description> <year>1993</year> - <publisher>Datt Japan</publisher> + <publisher>ダットジャパン (Datt Japan)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="hyper ocean" sha1="4aeb8ac2f4432832d46668e2a5572260a946724c" /> @@ -1893,10 +3542,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="idolproj"> + <!-- + Origin: Neo Kobe Collection + <rom name="Idol Project.ccd" size="8012" crc="409bace1" sha1="59d5228a638b981f8c225f9433f406cd62590051"/> + <rom name="Idol Project.cue" size="1588" crc="14d181d5" sha1="b5c2df918a526923a01fde4d5ead0e6ee687518e"/> + <rom name="Idol Project.img" size="463271088" crc="92e8a863" sha1="052eca392c950dc66454e47cbb482a013716f2df"/> + <rom name="Idol Project.sub" size="18909024" crc="2c89c0c8" sha1="c5c3b104245074fb70410f1d0870747b886a92b7"/> + --> <description>Idol Project</description> <year>1995</year> - <publisher>KSS</publisher> + <publisher>ケイエスエス (KSS)</publisher> + <info name="release" value="199507xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="idol project (system disk).hdm" size="1261568" crc="59d7e80e" sha1="91c06dc48b2b25bae7050066e115694729efd861" offset="000000" /> </dataarea> @@ -1909,9 +3567,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="igo2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Go II.ccd" size="768" crc="c0608f7b" sha1="1dcbb4856227905559ae70461907b529ac7bc74b"/> + <rom name="Go II.cue" size="69" crc="16a3bd2a" sha1="af36f49c218f4634d961f86ddbbc4196612249a8"/> + <rom name="Go II.img" size="3880800" crc="d32d5632" sha1="7aef1aa8570b38e7e85fe06bcfd835ddf8d985cd"/> + <rom name="Go II.sub" size="158400" crc="66b32aee" sha1="c3eb209b26f2794a74639760a4fffc9614aa9853"/> + --> <description>Igo II</description> <year>1989</year> - <publisher>ASCII</publisher> + <publisher>アスã‚ー (ASCII)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="go ii" sha1="74ad3665b97bf25ea91a7d7dd344de8bff845be0" /> @@ -1922,11 +3587,19 @@ User/save disks that can be created from the game itself are not included. <!-- This is named "Go Dojo Yaburi" in the Neo Kobe Collection. That name actually corresponds to a different Go game, also published by Fujitsu. + <rom name="Go Dojo Yaburi.ccd" size="1061" crc="833c729d" sha1="11365f1eae3e7dafdde4f38373af323986a5f4b3"/> + <rom name="Go Dojo Yaburi.cue" size="224" crc="fe242e98" sha1="9ff91b652a3f2168a6a670bc646cd95f10f2735d"/> + <rom name="Go Dojo Yaburi.img" size="105487200" crc="b9af10b1" sha1="3d0b1a638a3c3fa12fd1c4e76996cc75d618b5e8"/> + <rom name="Go Dojo Yaburi.sub" size="4305600" crc="04ee81d0" sha1="06e02a0a1c453188324dd19e801b424175149a4b"/> --> <software name="igohonka"> - <description>Igo Doujou: Honkakuha Yose Tsumego Shinan</description> + <!-- + Origin: Neo Kobe Collection + --> + <description>Igo Doujou - Honkakuha Yose Tsumego Shinan</description> <year>1989</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="198903xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="go dojo yaburi" sha1="fa15a75cdaca351704fb4957b019065ec1a3a6ce" /> @@ -1935,9 +3608,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="imgfight"> + <!-- + Origin: Neo Kobe Collection + <rom name="Image Fight.bin" size="533407728" crc="e176c795" sha1="913282209b75dcfabaaba8156a21823550b03c7c"/> + <rom name="Image Fight.cue" size="959" crc="32a16f63" sha1="e706a7d7286426aeeed30f66f45d2c2c18613bc4"/> + --> <description>Image Fight</description> <year>1990</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199011xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="image fight" sha1="a7f3b33eea6197eed14967902d1355c345244db0" /> @@ -1946,9 +3625,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="incrmach"> + <!-- + Origin: Neo Kobe Collection + <rom name="The Incredible Machine.ccd" size="3783" crc="b382dd7e" sha1="a16b7e8b4cacce4b79081f2551052dd1da6b1446"/> + <rom name="The Incredible Machine.cue" size="718" crc="93a2ac97" sha1="3137c034202eb42e1ead6ffd24126d38fd363031"/> + <rom name="The Incredible Machine.img" size="182926800" crc="884bb6d0" sha1="02792c1d0c652d1dbbbc6601e832b05dc9e027a6"/> + <rom name="The Incredible Machine.sub" size="7466400" crc="5ce09cbd" sha1="df07463de07818f6625e6ce3e8bde29308945f9b"/> + --> <description>The Incredible Machine</description> <year>1994</year> - <publisher>Cybelle</publisher> + <publisher>サイベル (Cybelle)</publisher> + <info name="release" value="199404xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the incredible machine" sha1="928b094e39e2fbbae68220c4bdfb51a38dbad317" /> @@ -1957,9 +3644,35 @@ User/save disks that can be created from the game itself are not included. </software> <software name="indy3"> + <!-- + Origin: Neo Kobe Collection + <rom name="Indiana Jones and the Last Crusade.mdf" size="397327536" crc="5974a63d" sha1="d249d56243a4dfa1b4f8908d1c21a942decfc139"/> + <rom name="Indiana Jones and the Last Crusade.mds" size="2628" crc="6f0c4428" sha1="07637eb05f19ae9d38f0433b339d089aed8b15cb"/> + + *after conversion with IsoBuster+EAC * + <rom name="indiana jones and the last crusade.cue" size="2802" crc="e6de7555" sha1="1a8665fb77b79bd3458f5824a510203e97be76d5"/> + <rom name="track01.bin" size="21215040" crc="0d178b90" sha1="c41295373a41ff955003a9c4de543fb4071d1560"/> + <rom name="track02.bin" size="36291360" crc="c535531a" sha1="e3d26ebdf1c78a92270162b8e7b184950c242124"/> + <rom name="track03.bin" size="12493824" crc="0762d2d1" sha1="06baebe9025170c5be865af2ec1fdb171bcb9983"/> + <rom name="track04.bin" size="20591760" crc="bd01ebb4" sha1="1be2d3523f50e9c8c744c1a866cd9f7759a38502"/> + <rom name="track05.bin" size="26013120" crc="bbd9c2b4" sha1="caa0ddbf221d366256d66df0bd86c412d1a677a4"/> + <rom name="track06.bin" size="21436128" crc="a7775c3b" sha1="7d9271f8be8d15221613edc1adaea8b99e8106b1"/> + <rom name="track07.bin" size="12606720" crc="e11c407c" sha1="085b48d65d809a3b3d2aaea857dc45e1ab1ee633"/> + <rom name="track08.bin" size="30611280" crc="b2c9a8b5" sha1="a786be5c511e7ecb878cb963516e7df377fb35b0"/> + <rom name="track09.bin" size="37265088" crc="cf0f7764" sha1="8ccf8c764ace590574a8596ac0f343b5d9fb5c6a"/> + <rom name="track10.bin" size="27024480" crc="18589c14" sha1="5ca73d29c33c800ad6de38093c58cd5bd0e277c9"/> + <rom name="track11.bin" size="19055904" crc="bbd9a8a4" sha1="057f533dfd79b61495d42e4e6382c3870199e155"/> + <rom name="track12.bin" size="32151840" crc="20efcda4" sha1="fe9ffa13e69ebc8b8088e7b94e3222198dc1c47a"/> + <rom name="track13.bin" size="30891168" crc="8ed0b4eb" sha1="3f7afc90e779408caddb081d8537c5274fb64562"/> + <rom name="track14.bin" size="6303360" crc="661a8f1c" sha1="9440e5f11125ab137e18a7b5e2cfb5551f01de25"/> + <rom name="track15.bin" size="6903120" crc="bf9c2e61" sha1="944096aedae3fc7fdd4bf647f693fa1756e06d94"/> + <rom name="track16.bin" size="15276240" crc="f46c6074" sha1="a78d505c9f2d37877164bbf5cc1c93539d8d0226"/> + <rom name="track17.bin" size="25968432" crc="97c222c4" sha1="8591e8fef421b086937c99d04a9e342194c916db"/> + --> <description>Indiana Jones and the Last Crusade</description> <year>1990</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199007xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="indiana jones and the last crusade" sha1="c5572d475a0dfc215a4dd7da99de1da3641b906f" /> @@ -1968,9 +3681,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="indy4"> + <!-- + Origin: Neo Kobe Collection + <rom name="Indiana Jones and the Fate of Atlantis.mdf" size="208936800" crc="90e4d056" sha1="571ac9b343e2cbd31c6a2944f2a27ee9cc09f395"/> + <rom name="Indiana Jones and the Fate of Atlantis.mds" size="500" crc="36034add" sha1="6b4e48b0648f9ec8a485afe5353d4f1ac3754361"/> + + *after conversion with IsoBuster+EAC * + <rom name="indiana jones and the fate of atlantis.bin" size="200743200" crc="454b238a" sha1="504482ac43b87c9113cdf2399141acbb37660dda"/> + <rom name="indiana jones and the fate of atlantis.cue" size="99" crc="11fc989b" sha1="f487d522a20749a77005bd679b9401277a8b41ac"/> + --> <description>Indiana Jones and the Fate of Atlantis</description> <year>1993</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199308xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="indiana jones and the fate of atlantis" sha1="e60dff85f2932966f28732c91165dc4e483756de" /> @@ -1979,9 +3702,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="infest"> - <description>Infestation: Chinmoku no Wakusei</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Infestation.bin" size="381826032" crc="47a91fb4" sha1="f6217f804e32b399daabaafb3d05fe0f7d8690a3"/> + <rom name="Infestation.cue" size="133" crc="eadc045d" sha1="ba7fd71706c190b4e2dfd5751f56ff54d2b2158e"/> + --> + <description>Infestation - Chinmoku no Wakusei</description> <year>1992</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199203xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="infestation" sha1="08cb569b0227db10f938adc42c92987634714787" /> @@ -1990,9 +3719,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="injuugak"> - <description>Injuu Gakuen: La Blue Girl</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Injuu Gakuen - La Blue Girl.ccd" size="3050" crc="9640e7fb" sha1="18b8a9b20fdb1027d50fd54a4b8a4b0b724305df"/> + <rom name="Injuu Gakuen - La Blue Girl.cue" size="563" crc="1cb14d97" sha1="66d5f7099442c656b23fbf22549c86a7190d5c77"/> + <rom name="Injuu Gakuen - La Blue Girl.img" size="434842464" crc="dabf93e2" sha1="98be7d7dff583dd1282300ce109ac1d834325579"/> + <rom name="Injuu Gakuen - La Blue Girl.sub" size="17748672" crc="71d12240" sha1="092006bffc923e803d204978f3b4921e34efb918"/> + --> + <description>Injuu Gakuen - La Blue Girl</description> <year>1994</year> <publisher>DEZ</publisher> + <info name="release" value="199407xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="injuu gakuen - la blue girl" sha1="5e9d0e7657f8834277ec7f2833fe3d3cc889b6e2" /> @@ -2001,9 +3738,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ishidou"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ishidou.ccd" size="768" crc="01676054" sha1="9b75007fd7c419ea796bb88b6186ab6dd9c8fc7e"/> + <rom name="Ishidou.cue" size="71" crc="9a8b0fb1" sha1="9a65192781a1b77e4e0a1cf05d899c91bf43242a"/> + <rom name="Ishidou.img" size="20286000" crc="58cba522" sha1="472eef6f5a2e8a9d34ee4d85fe8b33d599de4c21"/> + <rom name="Ishidou.sub" size="828000" crc="854a9894" sha1="0682fbd8483c37471d22b1f5efe30b3430785f5d"/> + --> <description>Ishidou</description> <year>1990</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199006xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ishidou" sha1="141cb39d019581436a7ea6e99dd0411b4f7ef30a" /> @@ -2012,9 +3757,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="janjaka"> + <!-- + Origin: Neo Kobe Collection + <rom name="Jan Jaka Jan.ccd" size="767" crc="05177487" sha1="f3fbe3b3f55d386c241dc3b73588e73a23143932"/> + <rom name="Jan Jaka Jan.cue" size="76" crc="2b222e3a" sha1="c644734dfc32d7f9955728f745add6273a8e3a10"/> + <rom name="Jan Jaka Jan.img" size="10231200" crc="13668fd4" sha1="09906f6471fa9705ca9331584d0b271272bd554c"/> + <rom name="Jan Jaka Jan.sub" size="417600" crc="7d23400c" sha1="e7e6965b1646a9816d0afb825da57b202c537e09"/> + --> <description>Jan Jaka Jan</description> <year>1992</year> - <publisher>Elf</publisher> + <publisher>エルフ (Elf)</publisher> + <info name="release" value="199301xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="jan jaka jan" sha1="eff72281e9c2867ddc2940386f4bcca2c1d1af54" /> @@ -2023,9 +3776,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="jango4"> + <!-- + Origin: Neo Kobe Collection + <rom name="Jango 4.ccd" size="4391" crc="b3b19065" sha1="979d0ce4e7efbf691433a7b275ba60710d339793"/> + <rom name="Jango 4.cue" size="1584" crc="7cdfc9cd" sha1="acc53a0fd1cb10fef5f9a4fbdad684d12435d616"/> + <rom name="Jango 4.img" size="324401952" crc="bcf8b3e1" sha1="4d0be9278af88e5e6fedd63c93b601bbf3b01805"/> + <rom name="Jango 4.sub" size="13240896" crc="9bee959c" sha1="959fbef14b6244f45d0b04ad7c1b5b036aeb2854"/> + --> <description>Jango 4</description> <year>1994</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199411xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="jango 4" sha1="c3c47c867fff8869f53bc7afb5f3dd944146c27e" /> @@ -2034,9 +3795,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="jankirou"> + <!-- + Origin: Neo Kobe Collection + <rom name="Jankirou.ccd" size="2277" crc="70e231a1" sha1="e03065ccee96a0e6f2d4cead919b34e606895f66"/> + <rom name="Jankirou.cue" size="384" crc="00d8893a" sha1="70a06c40c5cc00f0cbfe0020bcbdb996e37c6dea"/> + <rom name="Jankirou.img" size="299350800" crc="b25cf3f2" sha1="ed3548cbc24e3b72f4f244645994ba85f7921791"/> + <rom name="Jankirou.sub" size="12218400" crc="038fa827" sha1="7880f43a05f88e9f428dfa9930a0805cc078aac7"/> + --> <description>Jankirou</description> <year>1994</year> - <publisher>Fairytale</publisher> + <publisher>フェアリーテール (Fairytale)</publisher> + <info name="release" value="199406xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="jankirou" sha1="b299d72db8a36c196f6795d450c9541244b1b208" /> @@ -2045,9 +3814,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="jealousy"> + <!-- + Origin: Neo Kobe Collection + <rom name="Jealousy.ccd" size="3239" crc="1394fcc5" sha1="36c10240660297f0a314b003fc6ece54513bf193"/> + <rom name="Jealousy.cue" size="584" crc="924c2fdb" sha1="29b3e09e4e63ec68ebb36a3dab80d12333b48f61"/> + <rom name="Jealousy.img" size="624989904" crc="692d5787" sha1="944a314004dad7bd994ea36326566fd67af3ee11"/> + <rom name="Jealousy.sub" size="25509792" crc="3539ea8c" sha1="ca7d7248f35a62d616f33fa834c839162b1cf00d"/> + --> <description>Jealousy</description> <year>1995</year> - <publisher>Interheart</publisher> + <publisher>インターãƒãƒ¼ãƒˆ (Interheart)</publisher> + <info name="release" value="199507xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="jealousy" sha1="49244a1e50fc4300f4ead328d4b43c8449042d53" /> @@ -2056,9 +3833,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="joshikou"> + <!-- + Origin: Neo Kobe Collection + <rom name="Joshikousei Shoujo Hakunetsu.ccd" size="4770" crc="52359b21" sha1="cfa6653fcdb38c42805b1bffc3997a35fd84c011"/> + <rom name="Joshikousei Shoujo Hakunetsu.cue" size="924" crc="fdbe25b6" sha1="02bc78f931e70c049500a1e5d0b0eea51d252f05"/> + <rom name="Joshikousei Shoujo Hakunetsu.img" size="418246752" crc="a32c8de5" sha1="cdc9768115e3ed8584b7a675bf03b37a2762effb"/> + <rom name="Joshikousei Shoujo Hakunetsu.sub" size="17071296" crc="1a12d50c" sha1="549a35c0f9418900a60ae6313e6013d4eb4325bf"/> + --> <description>Joshikousei Shoujo Hatsunetsu</description> <year>1993</year> <publisher>Byakuya-Shobo</publisher> + <info name="release" value="199312xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="joshikousei shoujo hakunetsu" sha1="e8d9cb254a16d113544a2e3dba6b73a93003b915" /> @@ -2067,9 +3852,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="joshua"> + <!-- + Origin: Neo Kobe Collection + <rom name="Joshua.ccd" size="1706" crc="ce6e50a6" sha1="42a8cfea77923bc6cf55277ffeb20c9189e3f9c2"/> + <rom name="Joshua.cue" size="265" crc="8c7e1fd5" sha1="70626aeab7df2859bce2c808dd4bdec1d62916f1"/> + <rom name="Joshua.img" size="286650000" crc="09a20c05" sha1="ca6e79fcfbbbd26aa9caa3a36dbdad4366ab2bbc"/> + <rom name="Joshua.sub" size="11700000" crc="1b686d40" sha1="a1de85b395c43bffbe98c9b6991405acf0722afc"/> + --> <description>Joshua</description> <year>1992</year> - <publisher>Panther Software</publisher> + <publisher>パンサーソフトウェア (Panther Software)</publisher> + <info name="release" value="199211xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="joshua" sha1="038de795c9f4bd6eef3758d94187c9c0855a1a44" /> @@ -2078,9 +3871,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kidpix"> + <!-- + Origin: Neo Kobe Collection + <rom name="Kid Pix.ccd" size="769" crc="e3eef86d" sha1="3290f0e3ed6ce9265d0d77cb13be6c43a9ed2a5d"/> + <rom name="Kid Pix.cue" size="71" crc="56149dc1" sha1="d4466364791b47d90fba60c184fc0b337d7f0798"/> + <rom name="Kid Pix.img" size="10228848" crc="b631408b" sha1="4873c03c764cf6bacd08b5b17d212f31bf22ece9"/> + <rom name="Kid Pix.sub" size="417504" crc="632a643c" sha1="fc7ab5135b4fdf57bec8567e45fd9827a2b466fd"/> + --> <description>Kid Pix</description> <year>1992</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="kid pix" sha1="090939e80a209292d6b606e3e7b2b44bbd3585be" /> @@ -2089,9 +3889,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kigen"> - <description>Kigen: Kagayaki no Hasha</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Kigen.bin" size="133005600" crc="f7e06793" sha1="51462a9ae88c7ad0546622ca94f5fae9c0259bea"/> + <rom name="Kigen.cue" size="379" crc="90afe3a2" sha1="9bef33cecf72c9b888303fe8f1f9ce36c4959562"/> + --> + <description>Kigen - Kagayaki no Hasha</description> <year>1992</year> - <publisher>Riverhill Soft</publisher> + <publisher>リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft)</publisher> + <info name="release" value="199205xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="kigen" sha1="3df8b6bb0c3ee6797f784c349a1ca40efb13dac8" /> @@ -2100,9 +3906,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kindan"> + <!-- + Origin: Neo Kobe Collection + <rom name="Kindan no Ketsuzoku.ccd" size="2823" crc="0eb0eeae" sha1="0c2bdf0b806b1264c57468c1e0461a2f30502b88"/> + <rom name="Kindan no Ketsuzoku.cue" size="685" crc="7ce5e0fc" sha1="bcdc1e469199b66ac6ac582a181e7b764e0ef064"/> + <rom name="Kindan no Ketsuzoku.img" size="417186000" crc="d549a494" sha1="90c756e866553d64df3a8369bed3f3fda6b19c48"/> + <rom name="Kindan no Ketsuzoku.sub" size="17028000" crc="41f52572" sha1="1190e57fd83e073e165caf3bec248107af4acfa0"/> + --> <description>Kindan no Ketsuzoku</description> <year>1993</year> - <publisher>C's Ware</publisher> + <publisher>シーズウェア (C's Ware)</publisher> + <info name="release" value="199407xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="kindan no ketsuzoku" sha1="589dfff7b733335530a19f3a88a7cdda91826187" /> @@ -2111,9 +3925,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kbounty"> + <!-- + Origin: Neo Kobe Collection + <rom name="King's Bounty.ccd" size="3795" crc="b5afc2ab" sha1="11efe9ac63787e040d73a5a9ec0f100fdb57731c"/> + <rom name="King's Bounty.cue" size="709" crc="7575279a" sha1="49f3ceb6cc8f16ee688a217b3202efb1cb219c01"/> + <rom name="King's Bounty.img" size="386494752" crc="cdcf960b" sha1="d31f3214ab0bbb229c9f79ef3f7752d5fcb8cc7e"/> + <rom name="King's Bounty.sub" size="15775296" crc="d291d35c" sha1="66a469ec41ade7ebe882905efbe316c94c790764"/> + --> <description>King's Bounty</description> <year>1994</year> - <publisher>Starcraft</publisher> + <publisher>スタークラフト (Starcraft)</publisher> + <info name="release" value="199407xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="king's bounty" sha1="3bf83f353aee51986e0e73b581feb4a7cc0ad850" /> @@ -2122,9 +3944,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kquest5"> - <description>King's Quest V: Absence Makes the Heart Go Yonder</description> + <!-- + Origin: Neo Kobe Collection + <rom name="King's Quest V.mdf" size="287461440" crc="0171b747" sha1="b1b7a2dfbe361cc2b5c71ddfaca2b1790d77532d"/> + <rom name="King's Quest V.mds" size="486" crc="1f0edcb4" sha1="e3326939e033e4c8b709b2b5789454c85546131f"/> + + *after conversion with IsoBuster+EAC * + <rom name="king's quest v.bin" size="287461440" crc="0171b747" sha1="b1b7a2dfbe361cc2b5c71ddfaca2b1790d77532d"/> + <rom name="king's quest v.cue" size="75" crc="93f65862" sha1="8137c3086aa1c4a921e6cb91b8828885669160db"/> + --> + <description>King's Quest V - Absence Makes the Heart Go Yonder</description> <year>1991</year> - <publisher>Sierra On-Line Japan</publisher> + <publisher>シエラオンラインジャパン (Sierra On-Line Japan)</publisher> + <info name="release" value="199108xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="king's quest v" sha1="fa5aaa4c63ca1c3d5f162d0110840bcfdd06d891" /> @@ -2133,9 +3965,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kiwame"> + <!-- + Origin: Neo Kobe Collection + <rom name="Kiwame.ccd" size="767" crc="bdc99694" sha1="ef388c583c57d48b382ee727da9e71cb406fea83"/> + <rom name="Kiwame.cue" size="70" crc="6972d5cc" sha1="4f3e995fd9b55877bdc10df60d9550762accd5cd"/> + <rom name="Kiwame.img" size="10231200" crc="75188b89" sha1="f3e96ceba17c37f28ddbf7035dd60539233b5654"/> + <rom name="Kiwame.sub" size="417600" crc="9cf3c02e" sha1="4b7a7508ad07c3c75a5b0ad975f1aead8ebd1b4e"/> + --> <description>Kiwame</description> <year>1992</year> - <publisher>Log</publisher> + <publisher>ãƒã‚° (Log)</publisher> + <info name="release" value="199210xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="kiwame" sha1="9a906bb69fb7eca6bc1b5da7164fcb869660fb2b" /> @@ -2144,9 +3984,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kiwame2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Kiwame II.ccd" size="772" crc="43bb8a14" sha1="cf619abb2282ce344cd99cd70f1b023780be1fc3"/> + <rom name="Kiwame II.cue" size="114" crc="db9674dd" sha1="74439010cac7ba9089bdcdae790889eb2a7c51e8"/> + <rom name="Kiwame II.img" size="10231200" crc="78b1e9a0" sha1="4145193bd3904ecb54c485d117a523da89590072"/> + <rom name="Kiwame II.sub" size="417600" crc="0cd7ccd2" sha1="32cca32d8f2d630322a8b3f0f115af029434cde8"/> + --> <description>Kiwame II</description> <year>1994</year> - <publisher>Log</publisher> + <publisher>ãƒã‚° (Log)</publisher> + <info name="release" value="199406xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="kiwame ii" sha1="b3bcb4e8f1de660e8669b5d34b3802d238e7bc9f" /> @@ -2155,9 +4003,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kokoraku"> + <!-- + Origin: Neo Kobe Collection + <rom name="Koko wa Rakuensou.ccd" size="771" crc="c947821b" sha1="64d7ff9b4bb361413ef535edd08ccf23d9c5f297"/> + <rom name="Koko wa Rakuensou.cue" size="81" crc="01327e46" sha1="e81caaf3cee85c960af603110d9b484fe03cf764"/> + <rom name="Koko wa Rakuensou.img" size="122405136" crc="c08673d6" sha1="9801d1691ec9d4eb1155a09ae14923ebbe2828ee"/> + <rom name="Koko wa Rakuensou.sub" size="4996128" crc="21486d7d" sha1="a290c9d764a751bf6e9a1efe19083a3fddb89fda"/> + --> <description>Koko wa Rakuensou</description> <year>1996</year> - <publisher>Foster</publisher> + <publisher>フォスター (Foster)</publisher> + <info name="release" value="199603xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="koko wa rakuensou" sha1="711d590b172c5c496d1f14f825dbc7b8a10e71fb" /> @@ -2166,9 +4022,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kokorak2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Koko wa Rakuensou 2.bin" size="163745792" crc="750dc712" sha1="07ce9185b8448e18f20906127e4603c62b670b9d"/> + <rom name="Koko wa Rakuensou 2.cue" size="85" crc="25fa1b8e" sha1="35facaefc524fd55d9aa167b0498b0958e3d4d3d"/> + --> <description>Koko wa Rakuensou 2</description> <year>1996</year> - <publisher>Foster</publisher> + <publisher>フォスター (Foster)</publisher> + <info name="release" value="199604xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="koko wa rakuensou 2" sha1="d7879482b9f644f09c6324688fe4d3a2898ed137" /> @@ -2177,9 +4039,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kyankyan"> + <!-- + Origin: Neo Kobe Collection + <rom name="Kyan Kyan Collection.ccd" size="2286" crc="65f9613f" sha1="f2f4fb509df972b3c11bf321e0d9dbf5c51cb2da"/> + <rom name="Kyan Kyan Collection.cue" size="396" crc="d42a1934" sha1="7fc22f8e6d48eee2b378a5d5a13589f00cd3ac61"/> + <rom name="Kyan Kyan Collection.img" size="295999200" crc="041db9c3" sha1="a425d06b76d174f39b269aa02345831ccc7c2c95"/> + <rom name="Kyan Kyan Collection.sub" size="12081600" crc="2b02b424" sha1="260b3c99eb1e6a1cb7a547e2872691f4444c1dd3"/> + --> <description>Kyan Kyan Collection</description> <year>1989</year> <publisher>I-Cell</publisher> + <info name="release" value="198912xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="kyan kyan collection" sha1="14c8567dffc8e1e986d266be84c357ad22aa8132" /> @@ -2188,10 +4058,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kyrand1"> + <!-- + Origin: Neo Kobe Collection + <rom name="The Legend of Kyrandia.ccd" size="4894" crc="3a8bbbfb" sha1="132f7535d204a731423b497729d3b7e01f35eefd"/> + <rom name="The Legend of Kyrandia.cue" size="970" crc="bbd1692c" sha1="ca251c8dfedd607349451a81ef0b2adaf2a61bcf"/> + <rom name="The Legend of Kyrandia.img" size="561895152" crc="8f8bb29e" sha1="15d73a824957614af96bac3467c37f576a50390f"/> + <rom name="The Legend of Kyrandia.sub" size="22934496" crc="0638eedb" sha1="76d14925a9f668100d2e55f610b56cacf6fbb292"/> + --> <description>The Legend of Kyrandia</description> <year>1993</year> - <publisher>Starcraft</publisher> + <publisher>スタークラフト (Starcraft)</publisher> + <info name="release" value="199310xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> <dataarea name="flop" size="1261568"> <rom name="the legend of kyrandia (user disk).hdm" size="1261568" crc="da0241b6" sha1="12e125595d6a87496cf891bba1f67034d110b9e8" offset="000000" /> </dataarea> @@ -2204,9 +4083,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="kyrand2"> - <description>Kyrandia II: The Hand of Fate</description> + <!-- + Origin: Neo Kobe Collection + <rom name="The Legend of Kyrandia 2.cue" size="3557" crc="026fe47d" sha1="47fc6d71fa56421115f59791322fe54a41f4f863"/> + <rom name="The Legend of Kyrandia 2.img" size="494331600" crc="77d255b4" sha1="21f426eb2e0900a5df98fe714bd6608c82fae2a6"/> + --> + <description>Kyrandia II - The Hand of Fate</description> <year>1995</year> - <publisher>Starcraft</publisher> + <publisher>スタークラフト (Starcraft)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the legend of kyrandia 2" sha1="245b1de4313891f5a6bd68104b03b24a3c7200e2" /> @@ -2214,22 +4098,37 @@ User/save disks that can be created from the game itself are not included. </part> </software> - <!-- Originally labeled as "mp3 source". It probably needs a redump. --> <software name="ktiger"> + <!-- + Origin: Tokugawa Corporate Forums (wushu) + <rom name="Tiger.bin" size="757692096" crc="131e7221" sha1="e300709315d53e06fdc64eed31159da25d68e357"/> + <rom name="Tiger.cue" size="1014" crc="4311440c" sha1="001497dfb09e3dcba86491efb4335974c3a0cd96"/> + --> <description>Kyuukyoku Tiger</description> <year>1994</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199402xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> - <disk name="kyuukyoku tiger" sha1="187e052a9e699571bcd904a1e5cf18e3f0fcd9aa" /> + <disk name="kyuukyoku tiger" sha1="7c0f1c42dba49fe71114d21ad2f604dabe729196" /> </diskarea> </part> </software> <software name="landlore"> - <description>Lands of Lore: The Throne of Chaos</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Lands of Lore.mdf" size="21664800" crc="0077471e" sha1="3a91b542d84a5a499db3cb9465937f66f7082922"/> + <rom name="Lands of Lore.mds" size="500" crc="035354ef" sha1="ac84f5f76553316178991132d07f0d0086245109"/> + + *after conversion with IsoBuster+EAC * + <rom name="lands of lore.bin" size="20815200" crc="84903d38" sha1="b90ab7dfbe70a07276569aee59c5d64e8b2d5546"/> + <rom name="lands of lore.cue" size="74" crc="95020903" sha1="994125d8e7d1be1ebe0728e1bdb4258f648ef50a"/> + --> + <description>Lands of Lore - The Throne of Chaos</description> <year>1993</year> - <publisher>Starcraft</publisher> + <publisher>スタークラフト (Starcraft)</publisher> + <info name="release" value="199501xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="lands of lore" sha1="849e7ec5c5844ec8b774328513b6c6b5d52106e0" /> @@ -2238,9 +4137,27 @@ User/save disks that can be created from the game itself are not included. </software> <software name="lastarmg"> + <!-- + Origin: Neo Kobe Collection + <rom name="Last Armageddon CD Special (Disc A).ccd" size="11707" crc="b17278f6" sha1="e086fc5d958b79b9c67bac10cd16c6e47d15f61c"/> + <rom name="Last Armageddon CD Special (Disc A).cue" size="2371" crc="11f95129" sha1="d028c2eb690d1b771695b14ad78bdb2da8a1eccd"/> + <rom name="Last Armageddon CD Special (Disc A).img" size="626055360" crc="f7afc0b0" sha1="80c6382a46a615e3b2c7519c2618c92ea15275d9"/> + <rom name="Last Armageddon CD Special (Disc A).sub" size="25553280" crc="9bccc57a" sha1="f9d0c29a715562e7f2cc2b5f8fab3d25df51f4e0"/> + + <rom name="Last Armageddon CD Special (Disc B).ccd" size="9770" crc="c7552db3" sha1="659bc33125543a314afa8abec62ef2932d1199f7"/> + <rom name="Last Armageddon CD Special (Disc B).cue" size="1971" crc="821f4e8d" sha1="117c848b6b06003e4172cd5d1fa216d66a3d01e1"/> + <rom name="Last Armageddon CD Special (Disc B).img" size="565867680" crc="fbd50925" sha1="66b21f09765030f8fa00da6f8bafc13ac2d10542"/> + <rom name="Last Armageddon CD Special (Disc B).sub" size="23096640" crc="e87cb85f" sha1="f70cd4b49a6ae026f547bf142bacb81a37c29268"/> + + <rom name="Last Armageddon CD Special (Disc C).ccd" size="11696" crc="50629811" sha1="aede503ae7b1636db19c80fe6a84a002fbba5acf"/> + <rom name="Last Armageddon CD Special (Disc C).cue" size="2371" crc="85c25c61" sha1="0f847ac7ec60ed5f8e141002ae88cd37081bc480"/> + <rom name="Last Armageddon CD Special (Disc C).img" size="776265840" crc="3206af43" sha1="4e5fdb415700cd418f80a9314289fd9bae3bc9e5"/> + <rom name="Last Armageddon CD Special (Disc C).sub" size="31684320" crc="a90ea85d" sha1="9a4e042bb2429ff068965236f362373f90ff61ee"/> + --> <description>Last Armageddon CD Special</description> <year>1989</year> - <publisher>Brain Grey</publisher> + <publisher>ブレイングレイ (Brain Grey)</publisher> + <info name="release" value="198907xx" /> <part name="cdrom1" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="last armageddon cd special (disc a)" sha1="bc7c8f3535bbd095ca65c50bbad55cea726d952c" /> @@ -2259,9 +4176,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="lastsurv"> + <!-- + Origin: Neo Kobe Collection + <rom name="Last Survivor.ccd" size="2083" crc="dd87d31e" sha1="8453a35a485de1b0343da937e5a2236e799032fe"/> + <rom name="Last Survivor.cue" size="350" crc="b39f0cbd" sha1="63a66fd501fdea977ffc97ba88b24d48db4778a3"/> + <rom name="Last Survivor.img" size="291942000" crc="e221b966" sha1="8d9318700dfddf70bd932ce08b12cbc53b584e94"/> + <rom name="Last Survivor.sub" size="11916000" crc="3c61313c" sha1="c839a29dfc45bf1bb074cc76c334561fd9949df1"/> + --> <description>Last Survivor</description> <year>1990</year> <publisher>CRI</publisher> + <info name="release" value="199011xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="last survivor" sha1="d853e7cc1be3d5b10d67f81c9c92ec0b2b360ddd" /> @@ -2270,10 +4195,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ldawn2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Lunatic Dawn II.ccd" size="5024" crc="130c27c9" sha1="fd9885d981912596999bca682dd5587c513bcd0f"/> + <rom name="Lunatic Dawn II.cue" size="1825" crc="8299d5e4" sha1="17a86c05a6b28a2590e4b96161329e0e59df4fd3"/> + <rom name="Lunatic Dawn II.img" size="511261296" crc="2db8badd" sha1="7a37ffa772f1ade9ab56ef6c808a96afe9e90084"/> + <rom name="Lunatic Dawn II.sub" size="20867808" crc="d1986582" sha1="d4f119946fb61aa6211ced6c818b112f089595b9"/> + --> <description>Lunatic Dawn II</description> <year>1994</year> - <publisher>Artdink</publisher> + <publisher>アートディンク (Artdink)</publisher> + <info name="release" value="199411xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> <dataarea name="flop" size="1261568"> <rom name="lunatic dawn ii (user disk).hdm" size="1261568" crc="11d95883" sha1="d973bcaa7d3cc9dee18161bff08e88cd01a45cae" offset="000000" /> </dataarea> @@ -2286,9 +4220,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="lemmings"> + <!-- + Origin: Neo Kobe Collection + <rom name="Lemmings.ccd" size="767" crc="f6acea7e" sha1="d596317501b8966ab6c4f6c114b098069135f652"/> + <rom name="Lemmings.cue" size="72" crc="35d915cc" sha1="43d34ab5d2a608ff318778f7e30d224107e99d03"/> + <rom name="Lemmings.img" size="10231200" crc="a2f49fe8" sha1="4d259b369f9a0ec1729f97c4564038325128dc8b"/> + <rom name="Lemmings.sub" size="417600" crc="85c37af1" sha1="278b6233d247a22ff5702f40c5cb2fccddbb46e6"/> + --> <description>Lemmings</description> <year>1992</year> - <publisher>Imagineer</publisher> + <publisher>イマジニア (Imagineer)</publisher> + <info name="release" value="199204xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="lemmings" sha1="a6c7ea928d9fd409d2055fd83df54a734d4ff3e3" /> @@ -2301,9 +4243,14 @@ User/save disks that can be created from the game itself are not included. very little information available about this release. --> <software name="lemmin2e"> - <description>Lemmings 2: The Tribes (English)</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Lemmings 2 - The Tribes (En).mdf" size="324691248" crc="72bfb72d" sha1="17cbcd5e720a949fe87c433126ab0f90a37a8533"/> + <rom name="Lemmings 2 - The Tribes (En).mds" size="1806" crc="4c0dfb47" sha1="e74c9dd6fcce3b1d4a063549beb7eeffb5a3cc8d"/> + --> + <description>Lemmings 2 - The Tribes (English)</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="lemmings 2 - the tribes (en)" sha1="4f186b4c85cdfb474b852ed65debb786b0ba39ea" /> @@ -2312,9 +4259,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="lemmin2j"> - <description>Lemmings 2: The Tribes (Japanese)</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Lemmings 2 - The Tribes.ccd" size="3624" crc="3f79d6d8" sha1="b074947b2f522f1e1c1b3f8208eb616f68e42beb"/> + <rom name="Lemmings 2 - The Tribes.cue" size="700" crc="a3f9b46d" sha1="d19387cfc1989a67987bfe5cc063030718c6f1d8"/> + <rom name="Lemmings 2 - The Tribes.img" size="335865600" crc="b92ab9cc" sha1="1b45b55ccb0cd2df1cce6475221204deb2d17984"/> + <rom name="Lemmings 2 - The Tribes.sub" size="13708800" crc="fe714f95" sha1="1be99f829fdc8926a8a8a879706e66cc0c258b05"/> + --> + <description>Lemmings 2 - The Tribes (Japanese)</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199406xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="lemmings 2 - the tribes" sha1="cf5e532b00f9f94ccf9d7f71f949f018714c5b2c" /> @@ -2323,9 +4278,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="lesserm"> + <!-- + Origin: Neo Kobe Collection + <rom name="Lesser Mern.ccd" size="956" crc="9fa79f85" sha1="e0dc612d75fc5cb9f84d61009d99658964e18f44"/> + <rom name="Lesser Mern.cue" size="114" crc="b94ab7d4" sha1="391c115b65f428082357911a4b0cd1d968378e58"/> + <rom name="Lesser Mern.img" size="309828960" crc="a9115225" sha1="76d5d8c7554fe9dbcd06674054c8969c34f00b26"/> + <rom name="Lesser Mern.sub" size="12646080" crc="bcf77f91" sha1="54f92b3ffd4367c9f8941a619add6228659b983a"/> + --> <description>Lesser Mern</description> <year>1992</year> - <publisher>Panther Software</publisher> + <publisher>パンサーソフトウェア (Panther Software)</publisher> + <info name="release" value="199210xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="lesser mern" sha1="e9e9e42e26db1afbeb6f111d9ee4068fd09c3c3d" /> @@ -2335,6 +4298,13 @@ User/save disks that can be created from the game itself are not included. <!-- The floppy image seems to have 19712 extra bytes filled with 0xE5 - bad dump? --> <software name="lettuce"> + <!-- + Origin: Neo Kobe Collection + <rom name="Lettuce Cooking.ccd" size="3001" crc="a44b800c" sha1="672eb0df16ee70f4c74bc4333a0214cecb9f8391"/> + <rom name="Lettuce Cooking.cue" size="665" crc="6f5e6716" sha1="d524174083e9aa941716163a2d2b80b8f4ceb2d9"/> + <rom name="Lettuce Cooking.img" size="424418400" crc="fda5d051" sha1="eda9796ebae2c873968c711e5a2f1849dd15f113"/> + <rom name="Lettuce Cooking.sub" size="17323200" crc="a4b8fb65" sha1="962f48ba162b45524e9c56616dc9f0fde9c5d713"/> + --> <description>Lettuce Cooking</description> <year>1989</year> <publisher>Seibu Time</publisher> @@ -2351,9 +4321,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="libido7"> + <!-- + Origin: Neo Kobe Collection + <rom name="Libido7.ccd" size="770" crc="bdc602db" sha1="ec5bfff87212e07eb514d3c5467efab83897ae44"/> + <rom name="Libido7.cue" size="71" crc="9f834f79" sha1="6b26ef6ee7fbfced534528a358d18f592526b218"/> + <rom name="Libido7.img" size="46282656" crc="6af1cc57" sha1="6b676432ac385cff4612b030a6f50174c2324531"/> + <rom name="Libido7.sub" size="1889088" crc="a305b13c" sha1="30d22e6c30c34788565d164723fbb14af8e9e447"/> + --> <description>Libido7</description> <year>1994</year> - <publisher>Libido</publisher> + <publisher>リビドー (Libido)</publisher> + <info name="release" value="199407xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="libido7" sha1="c760d1af4344e80605da52aad9baf2ea5fd57d44" /> @@ -2362,9 +4340,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="lifedth"> + <!-- + Origin: Neo Kobe Collection + <rom name="Life & Death.ccd" size="1514" crc="998ab894" sha1="f8671fe509d7efac0e3d15c914ae636146258cdc"/> + <rom name="Life & Death.cue" size="232" crc="98a6db2d" sha1="803ce83d35c18aa7e33748add479f7981ea3f21d"/> + <rom name="Life & Death.img" size="148352400" crc="c770f6e8" sha1="72494c35a4e1d15df77561fa898eeef527a34c98"/> + <rom name="Life & Death.sub" size="6055200" crc="c004b04c" sha1="0b91c294e8bd19a3f67dc2d76ee3adf42b30e4e1"/> + --> <description>Life & Death</description> <year>1992</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199201xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="life & death" sha1="b98fa24ed264d033935795a5cf9a391a1e6abf40" /> @@ -2373,9 +4359,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="lifedth2"> - <description>Life & Death II: The Brain</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Life & Death II.ccd" size="2464" crc="4425cca2" sha1="acaff6452529a36a7ee40f8df14cc7af95e373e3"/> + <rom name="Life & Death II.cue" size="431" crc="b1d077f9" sha1="b96ae6746589786e599d6407d4f84800d262d24b"/> + <rom name="Life & Death II.img" size="322282800" crc="41a68591" sha1="a0dc83c794fb66b8e5b4baebf46ad55dc43f102c"/> + <rom name="Life & Death II.sub" size="13154400" crc="d94d1d54" sha1="080fc8e4a9867fa359dd72ef493b228b0eb98d0b"/> + --> + <description>Life & Death II - The Brain</description> <year>1992</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199211xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="life & death ii" sha1="d6033ef7353aea1ccec61786aa93f943d1474b8a" /> @@ -2384,9 +4378,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="links386"> + <!-- + Origin: Neo Kobe Collection + <rom name="Golf Links 386 Pro.cue" size="84" crc="b9a27007" sha1="4d270b25bbdebecf5dc18b58ff3f7143e5edf7c5"/> + <rom name="Golf Links 386 Pro.img" size="20815200" crc="99a1878d" sha1="bc5a1e3c0773dcba00720728351661da6fd8a75c"/> + --> <description>Golf Links 386 Pro</description> <year>1995</year> - <publisher>Cybelle</publisher> + <publisher>サイベル (Cybelle)</publisher> + <info name="release" value="199502xx" /> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -2396,6 +4396,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="linuxje3"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] Linux + JE3.mdf" size="760707360" crc="2c93db2b" sha1="992b0e991a6bde293edf059e529ee2321ab6469b"/> + <rom name="[OS] Linux + JE3.mds" size="486" crc="9f8751b3" sha1="bea414de9da5a391b5256855d1ec4beee60e677d"/> + + *after conversion with IsoBuster+EAC * + <rom name="[os] linux + je3.bin" size="760707360" crc="2c93db2b" sha1="992b0e991a6bde293edf059e529ee2321ab6469b"/> + <rom name="[os] linux + je3.cue" size="77" crc="6f8db5a8" sha1="987a7967fd60cba6f61cc3a4246881b2c4119deb"/> + --> <description>Linux + JE3</description> <year>1994</year> <publisher>Laser 5</publisher> @@ -2407,6 +4416,23 @@ User/save disks that can be created from the game itself are not included. </software> <software name="linuxje4"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] Linux + JE4 1995-12 (Disc 1).ccd" size="772" crc="e683c1d6" sha1="ee1ee6058d7142db90e8cd589ea0e99c2fea5008"/> + <rom name="[OS] Linux + JE4 1995-12 (Disc 1).cue" size="97" crc="7a4e430d" sha1="07ae5837929038f79dfe589f03d264fb88c1f631"/> + <rom name="[OS] Linux + JE4 1995-12 (Disc 1).img" size="577110240" crc="cb8e970c" sha1="8598c7f6c5493c27a2a9b9dcacce04eafcea266d"/> + <rom name="[OS] Linux + JE4 1995-12 (Disc 1).sub" size="23555520" crc="08f228a2" sha1="3c3805ed5ad7567b2c812c30534d3f5906b7c017"/> + + <rom name="[OS] Linux + JE4 1995-12 (Disc 2).ccd" size="772" crc="d0c4f348" sha1="ecf9a17f635112709cff2243b3311508b4b376ed"/> + <rom name="[OS] Linux + JE4 1995-12 (Disc 2).cue" size="97" crc="fe4bd6dd" sha1="93a497c59463ba022523475d4f9b228570086bbf"/> + <rom name="[OS] Linux + JE4 1995-12 (Disc 2).img" size="621911136" crc="4b4045cc" sha1="b88837ead4cdafff6830de34e10cc85994d6957a"/> + <rom name="[OS] Linux + JE4 1995-12 (Disc 2).sub" size="25384128" crc="b2994c95" sha1="7f53ee98031a618a7a06f5f4ba3d51857a6f41a7"/> + + <rom name="[OS] Linux + JE4 1995-12 (Disc 3).ccd" size="772" crc="477cf66e" sha1="cbfe790b5e67fe104bd787f5a654270f75e5ce9b"/> + <rom name="[OS] Linux + JE4 1995-12 (Disc 3).cue" size="97" crc="34985852" sha1="019d58702b954623ff7832e46aebf4d43c38e134"/> + <rom name="[OS] Linux + JE4 1995-12 (Disc 3).img" size="631723680" crc="5c9440f4" sha1="8ee8a9cebe00a45c908bba88ef453e3d426d6260"/> + <rom name="[OS] Linux + JE4 1995-12 (Disc 3).sub" size="25784640" crc="f72decf8" sha1="3643d7b5a5715be304b06930e76ccd8d96bab1be"/> + --> <description>Linux + JE4 1995/12</description> <year>1995</year> <publisher>Laser 5</publisher> @@ -2428,10 +4454,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="lodoss1"> - <description>Record of Lodoss War: Haiiro no Majo</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Record of Lodoss War - Haiiro no Majo.ccd" size="1713" crc="0b3685ac" sha1="08b860697c30d1cbede2a82fab23d87eceeac9cf"/> + <rom name="Record of Lodoss War - Haiiro no Majo.cue" size="526" crc="076a8d66" sha1="471e24b85ae1ef3f206f992905c28d8a86adf89c"/> + <rom name="Record of Lodoss War - Haiiro no Majo.img" size="119636832" crc="fd25dfb0" sha1="543bb5edea022390cda6fc90ef84db8fc63e1848"/> + <rom name="Record of Lodoss War - Haiiro no Majo.sub" size="4883136" crc="1405c0ea" sha1="c6fdd87b5ebce3e307b3d2216dba57867f2a2059"/> + --> + <description>Record of Lodoss War - Haiiro no Majo</description> <year>1994</year> - <publisher>Humming Bird Soft</publisher> + <publisher>ãƒãƒŸãƒ³ã‚°ãƒãƒ¼ãƒ‰ (HummingBird)</publisher> + <info name="release" value="199404xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="record of lodoss war - haiiro no majo (system disk).hdm" size="1261568" crc="4303f8cc" sha1="e5d6580d4b56d8b25a401f566dd07157866de128" offset="000000" /> </dataarea> @@ -2444,9 +4479,48 @@ User/save disks that can be created from the game itself are not included. </software> <software name="loom"> + <!-- + Origin: Neo Kobe Collection + <rom name="Loom.mdf" size="579833280" crc="5bc56778" sha1="3792bdfcd27560a7382ba6b47ef7f855c83dcda0"/> + <rom name="Loom.mds" size="2824" crc="59b0b165" sha1="a90cd699498962c72624adcec99892a37c060bfe"/> + + <rom name="Loom (drama CD).mdf" size="794070000" crc="6d4cb799" sha1="7676b05cf5b40f6a81f8f3d74f21e92c6dfb7542"/> + <rom name="Loom (drama CD).mds" size="940" crc="88707209" sha1="1c97bf1915b248ceb04ac402440e8206fabbecc2"/> + + *after conversion with IsoBuster+EAC * + <rom name="loom.cue" size="3097" crc="cd3af5a3" sha1="c8c377612dfa7089e799934b57655f61223a5e52"/> + <rom name="track01.bin" size="21544320" crc="bfbc15f7" sha1="e7a21c046ae53dd55e6cbfce412504d25ff32c09"/> + <rom name="track02.bin" size="27377280" crc="f953a06d" sha1="1cc2cde261c5229aef674ca119d7c25dc09e734d"/> + <rom name="track03.bin" size="23014320" crc="4e7aa0cc" sha1="687b24928367a8d5f67e3bfc5de0e9614e9aa172"/> + <rom name="track04.bin" size="32892720" crc="2572be49" sha1="f6142facb063a16bd8af88052f73a897c34a230b"/> + <rom name="track05.bin" size="15840720" crc="6bee5469" sha1="5c1ea6fc24053c658897229f0822efd6d9dbaf1d"/> + <rom name="track06.bin" size="30752400" crc="1cb13e56" sha1="4c9f14d2c50e7b99230ae9ca4045225e94f6d52b"/> + <rom name="track07.bin" size="17745840" crc="0630ff5a" sha1="d54ab962620f89cea84d4309eaf7773ae6f9f19d"/> + <rom name="track08.bin" size="57024240" crc="4bba301f" sha1="44603cc677570e9bd148acba8a90310593df4e59"/> + <rom name="track09.bin" size="48004320" crc="1dbcee62" sha1="c0eb3ef4861981c4466548729d98a70d75b06f7e"/> + <rom name="track10.bin" size="29388240" crc="a5b1c726" sha1="7a178df358d34dbfc8682300ee7a5ab461cec780"/> + <rom name="track11.bin" size="26177760" crc="9d462358" sha1="f3fe8db05c1bef935fb040a5eaf3ca4c28c0ded3"/> + <rom name="track12.bin" size="35397600" crc="458f62d3" sha1="283ffc72679a850c5826772f18ea88e9fb0a918c"/> + <rom name="track13.bin" size="16652160" crc="554d017b" sha1="ada0017d694556a0723a54333b3f03f3e9aa3b0f"/> + <rom name="track14.bin" size="31822560" crc="41931fcc" sha1="d6b788cb5fcf7b56999ea06de5009044ee8e89ea"/> + <rom name="track15.bin" size="16746240" crc="2ddbf597" sha1="e635f42e93b61b73bbe1e800810dc7321a5d6b8f"/> + <rom name="track16.bin" size="56130480" crc="6f6cbe39" sha1="cc87ebe39d8103873cde3d31341a845aa7b4a479"/> + <rom name="track17.bin" size="49568400" crc="c73b73ef" sha1="93b325a8df503e6b83ff34cf2adf5860fbd869de"/> + <rom name="track18.bin" size="6397440" crc="6080ab19" sha1="25a9e631ee1379c32c8ecb5ba2e886f4d1e6d2ee"/> + <rom name="track19.bin" size="14970480" crc="57854a50" sha1="1455d9d2dba80074c1c5770a76f77e38bc025adb"/> + + <rom name="loom (drama cd).cue" size="1025" crc="d0e0d556" sha1="d4d9573774d4a6d86f724e9319b8b21f72c25e4c"/> + <rom name="track01.bin" size="327751200" crc="944097be" sha1="5ab6a2236eaa08abebc9628bb827df44aad0a45b"/> + <rom name="track02.bin" size="311346000" crc="1cec18d7" sha1="6e8a5af93d579575014bab1265515f69d88bae65"/> + <rom name="track03.bin" size="66150000" crc="3f4d0cef" sha1="b6fcfbf8c6da41bd9b08dc2eecca08bff596be29"/> + <rom name="track04.bin" size="15170400" crc="77539000" sha1="cdf8baf28a80c9f735f33a305f0562392d4f59d1"/> + <rom name="track05.bin" size="26283600" crc="b7806fc7" sha1="d32e0baf4612b10cc69f44031832e693e573d9e8"/> + <rom name="track06.bin" size="16228800" crc="99c3d6dd" sha1="dcbcf85951809dd6209730f272460180899268a0"/> + --> <description>Loom</description> <year>1991</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199104xx" /> <part name="cdrom1" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="loom" sha1="b0bcaec3960fb0923a41d74e89665243a033864b" /> @@ -2460,9 +4534,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="lrabble"> + <!-- + Origin: Neo Kobe Collection + <rom name="Libble Rabble.ccd" size="771" crc="a95dd21d" sha1="c77c2a73847563a8f8e88f464f06917fc9c5f147"/> + <rom name="Libble Rabble.cue" size="77" crc="fb25e81d" sha1="bce5a9e9edbdb6b0fa5a7b31107cb822b4069c33"/> + <rom name="Libble Rabble.img" size="123404736" crc="f221c73a" sha1="545992f747f7420fab817f0cbc0334cdd29de28f"/> + <rom name="Libble Rabble.sub" size="5036928" crc="8438fd30" sha1="d96ea8543be409522e434680a6d7234e44724946"/> + --> <description>Libble Rabble</description> <year>1994</year> - <publisher>Dempa</publisher> + <publisher>電波新èžç¤¾ (Dempa Shinbunsha)</publisher> + <info name="release" value="199403xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="libble rabble" sha1="5f3fef308eb0f59e7b6d8b4f6e87a9653ccfaa7b" /> @@ -2471,9 +4553,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="lupin3"> - <description>Lupin Sansei: Hong Kong no Mashu: Fukushuu wa Meikyuu no Hate ni</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Lupin III - Hong Kong no Mashu.ccd" size="16155" crc="45af8f84" sha1="9b7f6d6d57110437f04b10e39adf2534d133358b"/> + <rom name="Lupin III - Hong Kong no Mashu.cue" size="3326" crc="c8f43998" sha1="91ba9179610271e5d30d68f67b0816eb61e3ab52"/> + <rom name="Lupin III - Hong Kong no Mashu.img" size="341315184" crc="7fbe9b86" sha1="810defb7503665f185c868dc24e4eca2647f108a"/> + <rom name="Lupin III - Hong Kong no Mashu.sub" size="13931232" crc="31cd1f8d" sha1="1a6cbbae19217e1150190c8e60b4d920256609b6"/> + --> + <description>Lupin Sansei - Hong Kong no Mashu - Fukushuu wa Meikyuu no Hate ni</description> <year>1990</year> <publisher>CRI</publisher> + <info name="release" value="199006xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="lupin iii - hong kong no mashu" sha1="c42ff4f7d772bf8a7d5b33ae64e5b8d0dfa7e956" /> @@ -2482,9 +4572,21 @@ User/save disks that can be created from the game itself are not included. </software> <software name="lvalour"> + <!-- + Origin: Neo Kobe Collection + <rom name="Legends of Valour.mdf" size="100943136" crc="1e0de6c4" sha1="be3a4399d64f704584da0728d2ac4cc20dc50bff"/> + <rom name="Legends of Valour.mds" size="662" crc="1ad9292c" sha1="a08aa0fd592a7d647f9a761d0de02515be626c9f"/> + + *after conversion with IsoBuster+EAC * + <rom name="legends of valour.cue" size="500" crc="f2004001" sha1="7ffebd035345e1769bff605e194ad2a62a7a4d04"/> + <rom name="track01.bin" size="10231200" crc="19188ebc" sha1="88cb727b8b6ab103bb3135e8a3ca17234f04e889"/> + <rom name="track02.bin" size="46440240" crc="86880e8e" sha1="993e093917fe104ded87eaf095b51899c079a14f"/> + <rom name="track03.bin" size="44624496" crc="d5316f23" sha1="66e68d599ab81bd1b9f76a4a3ba5f5bb577b0910"/> + --> <description>Legends of Valour</description> <year>1994</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199403xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="legends of valour" sha1="e2387d19e479618ecf2885006f0a20c48242bd43" /> @@ -2493,9 +4595,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="madpara"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mad Paradox.ccd" size="3420" crc="ef9f40be" sha1="16e92f8dd2fc987dc1f10fd390fafa77b32cd4f8"/> + <rom name="Mad Paradox.cue" size="627" crc="7c437d47" sha1="65fd2011b2cfc913d3a1f4b58d7a1f0ea174eb2e"/> + <rom name="Mad Paradox.img" size="432885600" crc="62688cfe" sha1="60b19a3d179ae982b1a60ea4749f5bb3f493fc12"/> + <rom name="Mad Paradox.sub" size="17668800" crc="956a82e4" sha1="a85595868e9ce1dc80527695a4c1786eae994541"/> + --> <description>Mad Paradox</description> <year>1994</year> - <publisher>Queen Soft</publisher> + <publisher>クィーンソフト (Queensoft)</publisher> + <info name="release" value="199402xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mad paradox" sha1="da8146ef3fcffb9e8679b3f64bb80efc48785e80" /> @@ -2504,9 +4614,32 @@ User/save disks that can be created from the game itself are not included. </software> <software name="madparae"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mad Paradox (En).mdf" size="432532800" crc="03c7acdc" sha1="1dd816c820ab4b984eb1a24e1faeb6e65fb686c7"/> + <rom name="Mad Paradox (En).mds" size="1718" crc="b5831acd" sha1="f91f32c7e4ffb8cba1db7fb6bda4f54b2de5f7c5"/> + + *after conversion with IsoBuster+EAC * + <rom name="mad paradox (en).cue" size="1952" crc="73f4a594" sha1="73d72ccc271a52c58252f8d79e83203467884602"/> + <rom name="track01.bin" size="10231200" crc="4fed2aad" sha1="98e4435e302d821d0de87bec61a8314940b4de6c"/> + <rom name="track02.bin" size="21168000" crc="39628b7e" sha1="690458dec95f2ae53a16ca26252581b614ac2b50"/> + <rom name="track03.bin" size="21697200" crc="9afe90c9" sha1="216bf5df5a25de6c17ecc5b8ff652bc7a9a2c8f1"/> + <rom name="track04.bin" size="32986800" crc="26848baf" sha1="1c4a952fe3b1c76f0c44f5f49c98e0db2359b7c3"/> + <rom name="track05.bin" size="25930800" crc="2f8478e9" sha1="4924b3accbfee6d598b4f1d0db9f4830d3594169"/> + <rom name="track06.bin" size="24343200" crc="6746890b" sha1="c0947bffe802a80bfca4f0975c42ab90083b1c28"/> + <rom name="track07.bin" size="29635200" crc="5e804e48" sha1="0da30133d55648459a5d27e4ce600a28bae11dae"/> + <rom name="track08.bin" size="32457600" crc="bbb8c999" sha1="dd3fadbb55000b3e2627827c5fd73880b4cf56b3"/> + <rom name="track09.bin" size="31575600" crc="b311b778" sha1="49eee835dd45e5645e04dad6de70c1c193dd431c"/> + <rom name="track10.bin" size="26107200" crc="e05ef813" sha1="1b2318340c8f5efa424ce5fd721f96ee87360967"/> + <rom name="track11.bin" size="19051200" crc="07acc761" sha1="a9e69b7f140d686789ab2f535b97a80056e3331e"/> + <rom name="track12.bin" size="34398000" crc="12017e0e" sha1="d755d017211e2cdf843b0aa6dc4c01b069722c64"/> + <rom name="track13.bin" size="46040400" crc="e60a9397" sha1="5aac06eea2ee79709a04b0e6c1b4428c2c3c6afb"/> + <rom name="track14.bin" size="38808000" crc="0f6575fa" sha1="bcdbb5be53e841b9fa2192a670a7f8067ed98057"/> + <rom name="track15.bin" size="38455200" crc="f997bdc2" sha1="1c37aced354c1c23fe59d989f69558c29b175e8a"/> + --> <description>Mad Paradox (unofficial English translation by Demoniac)</description> <year>1994</year> - <publisher>Queen Soft</publisher> + <publisher>クィーンソフト (Queensoft)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mad paradox (en)" sha1="a8da9f8d22bf5101776731bfb1cf7754691eaa26" /> @@ -2515,9 +4648,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="madstalk"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mad Stalker.ccd" size="3432" crc="d59dff39" sha1="876ab6b804a0f3da6fd1cbeb1a7d2230e2adfcc3"/> + <rom name="Mad Stalker.cue" size="860" crc="0eee802b" sha1="24807473d74f384bc130400fa7287803812c0012"/> + <rom name="Mad Stalker.img" size="274748880" crc="f420061b" sha1="05280e943e6fd90c64a495e4c8e3c65df6a3481d"/> + <rom name="Mad Stalker.sub" size="11214240" crc="1a4278db" sha1="f2883a900489beef51f3880ff697b1635e72eaa5"/> + --> <description>Mad Stalker</description> <year>1994</year> - <publisher>Family Soft</publisher> + <publisher>ファミリーソフト (Family Soft)</publisher> + <info name="release" value="199407xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mad stalker" sha1="1d2865889b1e124ec073106312cd58c8136fd08f" /> @@ -2526,9 +4667,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="madogakr"> + <!-- + Origin: Neo Kobe Collection + <rom name="Madou Gakuin R.ccd" size="769" crc="f0c13e0c" sha1="47128d65376f140f43de7d1890709d41104c2bc8"/> + <rom name="Madou Gakuin R.cue" size="78" crc="3da153b9" sha1="265b975f389334635a9487bdff81dcc8a0f91737"/> + <rom name="Madou Gakuin R.img" size="13465200" crc="a87a153d" sha1="7d4ec8a8d3f75773f2133be5f3c22798916d0401"/> + <rom name="Madou Gakuin R.sub" size="549600" crc="79d7bb37" sha1="749b7cbb92dc2231eaeacf401377301e0bb0b96c"/> + --> <description>Madou Gakuin R</description> <year>1994</year> - <publisher>Foresight</publisher> + <publisher>フォーサイト (Foresight)</publisher> + <info name="release" value="199411xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="madou gakuin r" sha1="743d1ed325898829e92e229d7c5c3474c9ea2760" /> @@ -2537,9 +4686,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mahdepon"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mahjong de Pon!.ccd" size="3410" crc="2c6f9c3a" sha1="345140cdfe2dced80d7dccee798cea13ee8d7a58"/> + <rom name="Mahjong de Pon!.cue" size="631" crc="96651093" sha1="609f56161fd6e17522e3200a1207319bcce7b478"/> + <rom name="Mahjong de Pon!.img" size="247331616" crc="b973c373" sha1="f29afc379f24e00b5d0719ef962feabb6ec97187"/> + <rom name="Mahjong de Pon!.sub" size="10095168" crc="7c68bfd2" sha1="0bfab2bf3cd775663dbc33133aea2d043fb74a7f"/> + --> <description>Mahjong de Pon!</description> <year>1994</year> - <publisher>Active</publisher> + <publisher>アクティブ (Active)</publisher> + <info name="release" value="199404xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mahjong de pon!" sha1="58c4ae95a830294baa1a448c328d53c1d0a6002b" /> @@ -2548,9 +4705,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mahhoute"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mahjong Houteiraoyui.ccd" size="3246" crc="4e130608" sha1="a93be2eff939b24e75acf2a00154104a903fd6a0"/> + <rom name="Mahjong Houteiraoyui.cue" size="596" crc="0d85dbc7" sha1="f15ec755d7c63bb9bb2a66f6a68651f9c1806853"/> + <rom name="Mahjong Houteiraoyui.img" size="457438128" crc="c31f1d77" sha1="e021e6520bcc334de35bd5cd3d6b9d6917d8a5b2"/> + <rom name="Mahjong Houteiraoyui.sub" size="18670944" crc="eb5e9d17" sha1="23d0ad347581997fa33aae83421c72f893ce7571"/> + --> <description>Mahjong Houteiraoyui</description> <year>1995</year> - <publisher>Queen Soft</publisher> + <publisher>クィーンソフト (Queensoft)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mahjong houteiraoyui" sha1="a89200b37fee06bfa727a85433705b2a2ad95e6d" /> @@ -2559,9 +4723,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mahoudai"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mahou Daisakusen.bin" size="703483200" crc="798199fb" sha1="c0d0befca244fde6fc9590f0d9896cfd7f6c124e"/> + <rom name="Mahou Daisakusen.cue" size="1394" crc="76f8e247" sha1="ccdd0f3830cbcb36482a45ac9e54eb22a1656518"/> + --> <description>Mahou Daisakusen</description> <year>1995</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199502xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mahou daisakusen" sha1="534e04e71d29907098b0c0151b69de70ba37570e" /> @@ -2570,9 +4740,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mandarak"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mandarake Ichizoku.ccd" size="769" crc="02f8ff75" sha1="c487f017a880ce578894eb3dcce341ce68219dd7"/> + <rom name="Mandarake Ichizoku.cue" size="82" crc="97d712d7" sha1="f82c5861ad49d16b0b70fdc2e8d8b03999571dae"/> + <rom name="Mandarake Ichizoku.img" size="20438880" crc="b4d1cae5" sha1="6bb98500fc98d7e80deac79170332cfd71f0bc55"/> + <rom name="Mandarake Ichizoku.sub" size="834240" crc="4512acf2" sha1="259157bdbd198ff0c39f43ae7a297960d48ea3b7"/> + --> <description>Mandarake Ichizoku</description> <year>1995</year> - <publisher>Foresight</publisher> + <publisher>フォーサイト (Foresight)</publisher> + <info name="release" value="199503xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mandarake ichizoku" sha1="5a991b6ca46127232a270e6f422c9a17f7ede537" /> @@ -2581,9 +4759,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="manycol"> + <!-- + Origin: Neo Kobe Collection + <rom name="Many Colors.ccd" size="767" crc="3c5874e0" sha1="2c8d455408f231205240a5e6e36e89650017f655"/> + <rom name="Many Colors.cue" size="75" crc="62c7738d" sha1="73305d5002372b1cffd43b93567b12422e13f61e"/> + <rom name="Many Colors.img" size="20815200" crc="9d99fbf9" sha1="171037b28c4dbe5031229a56f5e22f13883b514a"/> + <rom name="Many Colors.sub" size="849600" crc="33bd68f0" sha1="3f88891c58b28e15968d8e5ca8638b9fd66665db"/> + --> <description>Many Colors</description> <year>1993</year> - <publisher>Amorphous</publisher> + <publisher>アモルファス (Amorphous)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="many colors" sha1="392e9a0faebb7ec2bc56fc0cfdc6ca800f610dd0" /> @@ -2592,9 +4777,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="marble"> + <!-- + Origin: Neo Kobe Collection + <rom name="Marble Madness.mdf" size="569948400" crc="da423a0f" sha1="e86d0bd48dd7953c9ba19665203c8d2f1f3f79bc"/> + <rom name="Marble Madness.mds" size="2598" crc="f2e52fb7" sha1="4308fe86c95c8bdcdf50055e4cc34a08750ae6cc"/> + --> <description>Marble Madness</description> <year>1991</year> - <publisher>Home Data</publisher> + <publisher>ホームデータ (Home Data)</publisher> + <info name="release" value="199106xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="marble madness" sha1="896d2e9c51af563f9676f29473ed1108f39dd4ab" /> @@ -2603,9 +4794,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="marineph"> + <!-- + Origin: Neo Kobe Collection + <rom name="Marine Philt.bin" size="489686400" crc="c82cb014" sha1="77b73dd6ac13fc21a3071ce2c3a1889ed520e7c4"/> + <rom name="Marine Philt.cue" size="908" crc="4cee864f" sha1="b9ae78619304db3a148d68ebfd16a4f05eb8aca6"/> + --> <description>Marine Philt</description> <year>1993</year> - <publisher>Fairytale</publisher> + <publisher>フェアリーテール (Fairytale)</publisher> + <info name="release" value="199304xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="marine philt" sha1="09b14f591f1c78ab0b125c1cad9b041670931695" /> @@ -2614,9 +4811,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="manhole"> + <!-- + Origin: Neo Kobe Collection + <rom name="The Manhole.ccd" size="14614" crc="3bc37832" sha1="ac9b5c164c895ca4fc0712ef08e7714339a383a2"/> + <rom name="The Manhole.cue" size="2947" crc="ff443956" sha1="868d85f395c8f6888e2433a11b2ab7041a4f0a14"/> + <rom name="The Manhole.img" size="523672800" crc="33510cba" sha1="9ffc30557cc95464065c075c74583ef70f0be011"/> + <rom name="The Manhole.sub" size="21374400" crc="ec086392" sha1="01775a3b3ccb342a01bbe954626ab36f461fe053"/> + --> <description>The Manhole</description> <year>1990</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199008xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the manhole" sha1="b469808157cd2aeff35c8c538c0a56c9dd41d064" /> @@ -2625,9 +4830,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mbomber"> - <description>Muscle Bomber: The Body Explosion</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Muscle Bomber.mdf" size="579201696" crc="2383cfb2" sha1="1da7b2822c496bd727dfa1d4c67a266f5719d01e"/> + <rom name="Muscle Bomber.mds" size="3038" crc="403bad3d" sha1="7abc6f7ca827e6c87ee1b48e162fa1ba9b6f0524"/> + --> + <description>Muscle Bomber - The Body Explosion</description> <year>1993</year> - <publisher>Capcom</publisher> + <publisher>カプコン (Capcom)</publisher> + <info name="release" value="199311xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="muscle bomber" sha1="c10e04ed66acd02d9e383e948625091bb8c37cd9" /> @@ -2636,9 +4847,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mcosm"> + <!-- + Origin: Neo Kobe Collection + <rom name="Microcosm.ccd" size="2290" crc="94ef4b6a" sha1="69e87c567d52ed560d0dfcf2ddef9e48f351f2ea"/> + <rom name="Microcosm.cue" size="385" crc="94781150" sha1="bd12bb6a3507495b62b2c796ead956ca17d6ec57"/> + <rom name="Microcosm.img" size="614754000" crc="a2c49daa" sha1="e98bc5dd242fc84681d265ede275372a4fd04406"/> + <rom name="Microcosm.sub" size="25092000" crc="2e8cb843" sha1="ece4b665cf84d52bd69ae5ee13f76ad31223e9bc"/> + --> <description>Microcosm</description> <year>1993</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199303xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="microcosm" sha1="ae3c07cb50704391e613ce10c64b0bb79c9923c1" /> @@ -2647,9 +4866,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="menzober"> + <!-- + Origin: Neo Kobe Collection + <rom name="Menzoberranzan.mdf" size="385295616" crc="452d6d6a" sha1="83eceac9677e92b5909782acee8092b80bb5a6a9"/> + <rom name="Menzoberranzan.mds" size="500" crc="356feb0c" sha1="220f1706ef2b20cbc180ce843bfe4e4ee41033ed"/> + + *after conversion with IsoBuster+EAC * + <rom name="menzoberranzan.bin" size="370185984" crc="61345a1c" sha1="661123e1dbb18e4045eae74556de67a6c781a163"/> + <rom name="menzoberranzan.cue" size="75" crc="1e99387a" sha1="7f6a15d15560b6be599a0ee77e081049794f3405"/> + --> <description>Menzoberranzan</description> - <year>1995</year> - <publisher>KSS</publisher> + <year>1996</year> + <publisher>ケイエスエス (KSS)</publisher> + <info name="release" value="199601xx" /> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -2659,9 +4888,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="metaleye"> + <!-- + Origin: Neo Kobe Collection + <rom name="Metal Eye.ccd" size="767" crc="05177487" sha1="f3fbe3b3f55d386c241dc3b73588e73a23143932"/> + <rom name="Metal Eye.cue" size="73" crc="795eaf3e" sha1="9af2ce8edd3eb95cf2430a5aecc33a98ffb3eb0d"/> + <rom name="Metal Eye.img" size="10231200" crc="ef330dbb" sha1="adc32646784b374f1d3f39f8393838c34d46a6ae"/> + <rom name="Metal Eye.sub" size="417600" crc="85c37af1" sha1="278b6233d247a22ff5702f40c5cb2fccddbb46e6"/> + --> <description>Metal Eye</description> <year>1993</year> - <publisher>Elf</publisher> + <publisher>エルフ (Elf)</publisher> + <info name="release" value="199307xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="metal eye" sha1="01c44ebc9e9ec32a37f9153b890adb22801928d3" /> @@ -2670,9 +4907,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="metaley2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Metal Eye 2.ccd" size="767" crc="3c5874e0" sha1="2c8d455408f231205240a5e6e36e89650017f655"/> + <rom name="Metal Eye 2.cue" size="75" crc="41f36759" sha1="4f767b382824be18d5a72ba98ace5ae70431a27e"/> + <rom name="Metal Eye 2.img" size="20815200" crc="cdca503f" sha1="e854c199591397594f6726c636d4f1cd5035014a"/> + <rom name="Metal Eye 2.sub" size="849600" crc="33bd68f0" sha1="3f88891c58b28e15968d8e5ca8638b9fd66665db"/> + --> <description>Metal Eye 2</description> <year>1994</year> - <publisher>Elf</publisher> + <publisher>エルフ (Elf)</publisher> + <info name="release" value="199409xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="metal eye 2" sha1="a657dea0277866d0dee8af92f987985464e5f83d" /> @@ -2681,7 +4926,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mflcan2"> - <description>My Fair Lady CAN II: Elementary</description> + <!-- + Origin: Neo Kobe Collection + <rom name="My Fair Lady CAN II - Elementary.ccd" size="9383" crc="1470c590" sha1="6af8e6338139019fbdd507ed9de7f5a2842913b0"/> + <rom name="My Fair Lady CAN II - Elementary.cue" size="1888" crc="7115c92d" sha1="4afb3798531fa392ac8d93d0fdc0c9e860f8af82"/> + <rom name="My Fair Lady CAN II - Elementary.img" size="595378224" crc="6a1d3222" sha1="8c4a883fe787620a4673c9b53ed59de870c60e60"/> + <rom name="My Fair Lady CAN II - Elementary.sub" size="24301152" crc="e9d48db2" sha1="cbc2b3d81aad1dd0d498df91230f139daafb4a38"/> + --> + <description>My Fair Lady CAN II - Elementary</description> <year>1990</year> <publisher>CRI</publisher> <part name="cdrom" interface="fmt_cdrom"> @@ -2692,9 +4944,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mhouyou"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mugen Houyou.ccd" size="2290" crc="efb9c6dd" sha1="dfd3d76b44371623ae396bab962493ca44e64b8e"/> + <rom name="Mugen Houyou.cue" size="388" crc="d0dee7b7" sha1="13234af65455d3dfa24183d4b70fb8520abe8a7b"/> + <rom name="Mugen Houyou.img" size="470750448" crc="6858f768" sha1="6e46253314b6f06cd4d744a524a90ca388ad3cb3"/> + <rom name="Mugen Houyou.sub" size="19214304" crc="00b20527" sha1="ea060ccabe3e87313c22304f9b5d2380e096cd3e"/> + --> <description>Mugen Houyou</description> <year>1995</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -2704,9 +4963,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mirage"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mirage.ccd" size="6320" crc="73dd12fc" sha1="80177162f14682078728caa417cab869ae50e754"/> + <rom name="Mirage.cue" size="1222" crc="daebdb10" sha1="07d135ac7442cb924b96800cfda654b96de0a6e9"/> + <rom name="Mirage.img" size="744706704" crc="6c165b94" sha1="299fb27b9b3bc291a9e796dbbbf3b2881b7b0fcc"/> + <rom name="Mirage.sub" size="30396192" crc="7a1a6db9" sha1="2cf01322ed2c7dc4e8e83b01caf2c75ddd264aca"/> + --> <description>Mirage</description> <year>1992</year> - <publisher>Discovery</publisher> + <publisher>ディスカãƒãƒªãƒ¼ (Discovery)</publisher> + <info name="release" value="199201xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mirage" sha1="b1536b6de52c10315b54a665a82cf83906c32f4a" /> @@ -2715,9 +4982,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mirrors"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mirrors.ccd" size="3437" crc="a9b7c61f" sha1="6fc88068217ddfab96f88c2c93813aacdc2d0073"/> + <rom name="Mirrors.cue" size="623" crc="87af52cf" sha1="8f01deaba32097c1dbf4dc63d3b65422c0b1ba1f"/> + <rom name="Mirrors.img" size="607168800" crc="2512c390" sha1="f92cda4fed46f9623b185bba9a92b33de47bfc01"/> + <rom name="Mirrors.sub" size="24782400" crc="dd6ca507" sha1="b210777695e7f66b5f52442169f4c6aae4ce71a3"/> + --> <description>Mirrors</description> <year>1992</year> <publisher>Apros</publisher> + <info name="release" value="199206xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mirrors" sha1="cecb05ffd74a82b4f7664fae139172f8493a32af" /> @@ -2726,9 +5001,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="misty"> + <!-- + Origin: Neo Kobe Collection + <rom name="Misty.ccd" size="4918" crc="df323273" sha1="7f9cfa1e668514f2cdff034395c0fd32f00a0feb"/> + <rom name="Misty.cue" size="1281" crc="c4e6648e" sha1="fcbe10d481f8b5bc05e6a2e31b8ff80f865723e6"/> + <rom name="Misty.img" size="721405440" crc="099f42c7" sha1="2f38d15475d0be48c2cc6fe5638345cbe24083fb"/> + <rom name="Misty.sub" size="29445120" crc="5db8312c" sha1="230917227eb470c89f702b6016442a95dba27d37"/> + --> <description>Misty</description> - <year>1989</year> - <publisher>Data West</publisher> + <year>1991</year> + <publisher>データウエスト (Data West)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="misty" sha1="77b69d046829ec088621bbd47d2fbaacaa5e21a6" /> @@ -2736,10 +5018,36 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <software name="mmagic3"> + <!-- + Origin: Tokugawa Corporate Forums (yukin) + <rom name="MM3.mdf" size="15523200" crc="926d169b" sha1="107090bdd34e831f27ea979e3fd6a24c86aa418a"/> + <rom name="MM3.mds" size="500" crc="99adcc2f" sha1="1d6b9f2257f821d06d0f85a021e5be5a2f448f03"/> + + CUE file used for CHD conversion: + <rom name="MM3.cue" size="64" crc="5c30fa2b" sha1="7b53d089cbc4fb4fa0d517adafd8f74f8c94a652"/> + --> + <description>Might and Magic III - Isles of Terra</description> + <year>1992</year> + <publisher>スタークラフト (Starcraft)</publisher> + <info name="release" value="199210xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="mm3" sha1="fcab3ac89b001b394071798511ccb8692926818f" /> + </diskarea> + </part> + </software> + <software name="mmagic4"> - <description>Might and Magic: Clouds of Xeen</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Might and Magic IV - Clouds of Xeen.mdf" size="249429600" crc="d80dd9ac" sha1="3aaf6421375508cc7ea75e754185df3302b411dc"/> + <rom name="Might and Magic IV - Clouds of Xeen.mds" size="1718" crc="f0d179a2" sha1="8950d463d656e3d9fc8898ce3f3eceec73c55ad9"/> + --> + <description>Might and Magic - Clouds of Xeen</description> <year>1993</year> - <publisher>Starcraft</publisher> + <publisher>スタークラフト (Starcraft)</publisher> + <info name="release" value="199309xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="might and magic iv - clouds of xeen" sha1="11a65c5cab772e3315b4c09e22caaf47eced0a2b" /> @@ -2748,9 +5056,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mmagic5"> - <description>Might and Magic: Darkside of Xeen</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Might and Magic V - Darkside of Xeen.mdf" size="36691200" crc="c1bf597c" sha1="f0c3c649a77242223076ccafc608a702ede112db"/> + <rom name="Might and Magic V - Darkside of Xeen.mds" size="486" crc="974ae3fc" sha1="5bda8dd2b65112d77a3c8cc341ecb2f5e39f05e8"/> + --> + <description>Might and Magic - Darkside of Xeen</description> <year>1994</year> - <publisher>Starcraft</publisher> + <publisher>スタークラフト (Starcraft)</publisher> + <info name="release" value="199405xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="might and magic v - darkside of xeen" sha1="5c1ad8661f637e57af130b23a9427ee855daf63f" /> @@ -2759,9 +5073,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mmorph"> + <!-- + Origin: Neo Kobe Collection + <rom name="Megamorph.ccd" size="784" crc="b10bc2c6" sha1="8760ed5e880d3466fdbd2c538d62959e7f581f92"/> + <rom name="Megamorph.cue" size="75" crc="cbb0f514" sha1="f9721cf34f18f4a01fd926f75477d4bb733f086d"/> + <rom name="Megamorph.img" size="412423200" crc="3c1d16e8" sha1="225128e91047b91cc564bd30215e0d1dc2eeb040"/> + <rom name="Megamorph.sub" size="16833600" crc="993f36a6" sha1="8157ee33297f5e1881a888162a9a0a838f2b4417"/> + --> <description>Megamorph</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199412xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="megamorph" sha1="59e30f6ce0c8cb62b22afe383ffcf7450910a612" /> @@ -2770,6 +5092,11 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mode7dmo"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mode 7 Demo.cue" size="95" crc="e308bcb4" sha1="fcee67dc92e89b058a4aa13c01e8022f7a5c0cd7"/> + <rom name="Mode 7 Demo.iso" size="757760" crc="18e17d66" sha1="d61b351e5b33a0433532c6bb02d3d5c2e180b18e"/> + --> <description>Mode 7 Demo</description> <year>2008</year> <publisher>Rastersoft</publisher> @@ -2781,9 +5108,43 @@ User/save disks that can be created from the game itself are not included. </software> <software name="monkey"> + <!-- + Origin: Neo Kobe Collection + <rom name="The Secret of Monkey Island.mdf" size="553740048" crc="f5901779" sha1="b6453e8c6624a41389a1941a393eaf7742906005"/> + <rom name="The Secret of Monkey Island.mds" size="3312" crc="0bd969f2" sha1="4f29b87406dc5cb0698d5123edbe608625d1fe91"/> + + *after conversion with IsoBuster+EAC * + <rom name="the secret of monkey island.cue" size="4074" crc="9751447a" sha1="d5d52e89cc5d20d11721fa0c5a0bbceecc242cb3"/> + <rom name="track01.bin" size="13495776" crc="067d4a9a" sha1="d7b5582f04f79aeab286df02fa06c9f5a7981d9f"/> + <rom name="track02.bin" size="41896176" crc="419291a4" sha1="4cce47f993acd0bfd0cea168ed989cf9a2b3f0d6"/> + <rom name="track03.bin" size="22402800" crc="89f2e0ad" sha1="1e2c0a1a321986e55f6282794c1e7b6d80ddfd7a"/> + <rom name="track04.bin" size="22755600" crc="752196f9" sha1="7e82a1910b08ddf1b5c0b3325d8e06fb3d7e20c7"/> + <rom name="track05.bin" size="20815200" crc="f33b5656" sha1="f27c5a53e468696e1658da537a1aff58216ca408"/> + <rom name="track06.bin" size="23108400" crc="64b02737" sha1="e514e3c7f4547119c41192572570c2e1ceca2e9f"/> + <rom name="track07.bin" size="2646000" crc="05c4f5c4" sha1="48c1e95cd90857e5c10247ea3ad276f5310f8b4c"/> + <rom name="track08.bin" size="12877200" crc="97432d66" sha1="6b56183c301a0fde1ed3ae74e40c0b1d6fa66e80"/> + <rom name="track09.bin" size="25048800" crc="b2050100" sha1="24bd814b99e1925c1a24a19bff6dfe0b12c527bc"/> + <rom name="track10.bin" size="22226400" crc="7145d83d" sha1="21cbaefc9bebb35baecfd6d06877c78dd5d16d79"/> + <rom name="track11.bin" size="17110800" crc="63f56d77" sha1="cfe91cf082a9df067318ab2e3d48d4ce7f3e1e61"/> + <rom name="track12.bin" size="24696000" crc="99b5957f" sha1="7d7934c2bf267c1405b2d54e4317516db6859b9b"/> + <rom name="track13.bin" size="22226400" crc="8748e4f9" sha1="5c4de86268fad933daf1c9fafbb24ce65e72cbf8"/> + <rom name="track14.bin" size="3528000" crc="af8df960" sha1="09aaca7a91a9b3e4063b1d8bccf519f4dfda65cf"/> + <rom name="track15.bin" size="28224000" crc="23e3c5ec" sha1="ab998f8a3fe6ab1b5075ffa264419bd3b4e04faf"/> + <rom name="track16.bin" size="26989200" crc="c3f6278b" sha1="1be6d8a012a84253308d5e3568f5c1de0ade8257"/> + <rom name="track17.bin" size="39513600" crc="841372eb" sha1="ba13a1d3b6d087e3a9f83735a90604e5f47a7ef8"/> + <rom name="track18.bin" size="29282400" crc="495c7b2f" sha1="89b610209cd7414d46b2eae08bb3cee02fab03b6"/> + <rom name="track19.bin" size="28224000" crc="b9282170" sha1="60df43ca91b950fe3ece9261139469942fcde15b"/> + <rom name="track20.bin" size="3880800" crc="e4656fc7" sha1="0817db28d20e68681c887d13fc3938b8fd7d0d6a"/> + <rom name="track21.bin" size="4410000" crc="e26288f1" sha1="63540efd6e1b6b4cb5dbab936379ea9ba63b39d6"/> + <rom name="track22.bin" size="24343200" crc="066a23df" sha1="ce6a0e2994bd9b6aaec2dfb24c0bca8fdb0cf09f"/> + <rom name="track23.bin" size="25930800" crc="0eebbccb" sha1="3b4712780e2c020985a97c90cfb56a7ef4ae6254"/> + <rom name="track24.bin" size="24696000" crc="7d527f06" sha1="d55efbaf89a004de1611dfac0b31dfbf4c81b0da"/> + <rom name="track25.bin" size="22050000" crc="bc030f08" sha1="c1a1ed3ca80dcff6c0e7ce9a2d60b1ed68f21706"/> + --> <description>The Secret of Monkey Island</description> <year>1992</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199209xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the secret of monkey island" sha1="06ed4efdb149fbee70474bc9a4fd0002b9a6a31e" /> @@ -2792,9 +5153,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="monkey2"> - <description>Monkey Island 2: LeChuck's Revenge</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Monkey Island 2 - LeChuck's Revenge.mdf" size="43696800" crc="18cc5b8e" sha1="8c387b38e6a853a1136c61b63830bc5739862b68"/> + <rom name="Monkey Island 2 - LeChuck's Revenge.mds" size="500" crc="d8b5a9cb" sha1="9a01c15cee295be3f601ca2bc93c929fc5cda44b"/> + + *after conversion with IsoBuster+EAC * + <rom name="monkey island 2 - lechuck's revenge.bin" size="41983200" crc="4722bcbf" sha1="46af7a3b0217d6ebfec41938e7b28b0a6677956e"/> + <rom name="monkey island 2 - lechuck's revenge.cue" size="96" crc="c52ca81e" sha1="9f7d201c41ea984ecf68bf8bc67005de465dfe3e"/> + --> + <description>Monkey Island 2 - LeChuck's Revenge</description> <year>1994</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199402xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="monkey island 2 - lechuck's revenge" sha1="4e3575059ee57961ad2a96c9cf4e7cbedbd3d2a5" /> @@ -2803,9 +5174,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="moonchan"> + <!-- + Origin: Neo Kobe Collection + <rom name="Moonlight Chan Rin Shan.ccd" size="13729" crc="aad36b44" sha1="8e42372528bac2535703ebf9a00e4eeac825c615"/> + <rom name="Moonlight Chan Rin Shan.cue" size="2799" crc="1753d6a1" sha1="53053759db6d6e04ee4ebe6b79d2552d1ab8af34"/> + <rom name="Moonlight Chan Rin Shan.img" size="272314560" crc="36da5a42" sha1="440aac2380c9e3c2eb282a4fd32e3967f36d857f"/> + <rom name="Moonlight Chan Rin Shan.sub" size="11114880" crc="9af5f552" sha1="e72e15d725f48dd12c06f26510776c8de5062a9e"/> + --> <description>Moonlight-chan Rinshan</description> <year>1993</year> - <publisher>D.O.</publisher> + <publisher>ディー・オー (D.O.)</publisher> + <info name="release" value="199303xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="moonlight chan rin shan" sha1="55e927efd17e1b7dd5f08745a68219da488d6c82" /> @@ -2814,9 +5193,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="moritas2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Morita Shogi 2.ccd" size="768" crc="682fd8e4" sha1="3026c248c1a86bc04f57788e7c2f2f5eaafe100b"/> + <rom name="Morita Shogi 2.cue" size="78" crc="4006a113" sha1="5d83a7529898c2b70c6508ba50f692aab1f571f4"/> + <rom name="Morita Shogi 2.img" size="4939200" crc="427533a9" sha1="b871b9aa03a8eb66f02273dad5a193f84bf27bfe"/> + <rom name="Morita Shogi 2.sub" size="201600" crc="e120aab9" sha1="6488fb4fff35ea754133d330770a3fad1c5362f8"/> + --> <description>Morita Shougi II</description> <year>1989</year> - <publisher>Enix</publisher> + <publisher>エニックス (Enix)</publisher> + <info name="release" value="198903xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="morita shogi 2" sha1="a5cdde15bd0eabac6c5bfd195a651b18f9b4d869" /> @@ -2825,9 +5212,22 @@ User/save disks that can be created from the game itself are not included. </software> <software name="msdet1"> - <description>Ms. Detective File #1: Iwami Ginzan Satsujin Jiken</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Ms. Detective File #1 (Disc 1).ccd" size="772" crc="92ccce73" sha1="717957cf8f02b585c5845347035cafca1be9613c"/> + <rom name="Ms. Detective File #1 (Disc 1).cue" size="94" crc="e01954bd" sha1="b4c12503fed544c825aeb9686fa9d5702c8d0672"/> + <rom name="Ms. Detective File #1 (Disc 1).img" size="361540032" crc="bdea9ba7" sha1="dee4ab701aba51df0ebd635131f0b040d5ab81d9"/> + <rom name="Ms. Detective File #1 (Disc 1).sub" size="14756736" crc="d02e1e88" sha1="8aa6ebe48b95a36b725748eb43b92d3c90aef63c"/> + + <rom name="Ms. Detective File #1 (Disc 2).ccd" size="1342" crc="618e62dc" sha1="a3af3639243f8c9a43d3c127302379d898420fc9"/> + <rom name="Ms. Detective File #1 (Disc 2).cue" size="211" crc="c15f1362" sha1="71a2bbb3406714f8092cf094c5046f30a3036abc"/> + <rom name="Ms. Detective File #1 (Disc 2).img" size="518860608" crc="6579dddc" sha1="a9920e6d9c65f7ff412358d27e8565c60c0786a8"/> + <rom name="Ms. Detective File #1 (Disc 2).sub" size="21177984" crc="56eac6c0" sha1="ca2dea4d6d25e269edb950b9b6c033755baf10ae"/> + --> + <description>Ms. Detective File #1 - Iwami Ginzan Satsujin Jiken</description> <year>1992</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199209xx" /> <part name="cdrom1" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ms. detective file #1 (disc 1)" sha1="314bf8187639251ce93e7a8c83a805732079fe79" /> @@ -2842,9 +5242,17 @@ User/save disks that can be created from the game itself are not included. <!-- Missing a floppy disk that seems to be necessary to boot the game --> <software name="msdet2"> - <description>Ms. Detective File #2: Sugata-naki Irainin</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Ms. Detective File #2.ccd" size="1206" crc="f516d92c" sha1="54cdebd7e17ee8861affd996bdb8857b2bff3cc7"/> + <rom name="Ms. Detective File #2.cue" size="205" crc="2acb4e36" sha1="cccdd4fc1b1d99fa9e331c969c17037d5a1b5b1b"/> + <rom name="Ms. Detective File #2.img" size="474174960" crc="a810c9f2" sha1="7bfe20007b1473bb55a849685bd1258939c540f9"/> + <rom name="Ms. Detective File #2.sub" size="19354080" crc="0dfa8820" sha1="20be48fb8f6ecee27d31fb10269e8a175991d003"/> + --> + <description>Ms. Detective File #2 - Sugata-naki Irainin</description> <year>1993</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199310xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ms. detective file #2" sha1="42a02837b31ce0cbec20053d5b178f26d2c46ee1" /> @@ -2853,9 +5261,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mspectre"> + <!-- + Origin: Neo Kobe Collection + <rom name="Megaspectre.ccd" size="1707" crc="9921c076" sha1="a6b491d6fdafec7f868b2d61dc05c959f6eda2b3"/> + <rom name="Megaspectre.cue" size="270" crc="22225c48" sha1="f294158a15e33a81537c17150d3f969eba39cec9"/> + <rom name="Megaspectre.img" size="303584400" crc="2362b87b" sha1="f9cfd772f18d7202cbc39bda49be48b2a6442808"/> + <rom name="Megaspectre.sub" size="12391200" crc="c5d5ef95" sha1="a5ffce3328e7a617bc883877b6b051b9dbd2d4bf"/> + --> <description>Megaspectre</description> <year>1993</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199306xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="megaspectre" sha1="05e155efae133d07ed615a01a4dcb402522a0a88" /> @@ -2864,9 +5280,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mujintou"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mujintou Monogatari.ccd" size="3456" crc="275a291d" sha1="81c9565f559f59cfe9ff4e666a2a9822915624ea"/> + <rom name="Mujintou Monogatari.cue" size="847" crc="3e4f0013" sha1="3767ed59ebeb718d449d4d80beb1e1fb4ff14c44"/> + <rom name="Mujintou Monogatari.img" size="696972864" crc="aff89b05" sha1="419d472dbf69d3cd204e0f07ddce900233f4b7f2"/> + <rom name="Mujintou Monogatari.sub" size="28447872" crc="68370f53" sha1="31d57842f7a5a0a71e27c36aa272ae0b27be9d91"/> + --> <description>Mujintou Monogatari</description> <year>1995</year> - <publisher>KSS</publisher> + <publisher>ケイエスエス (KSS)</publisher> + <info name="release" value="199509xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mujintou monogatari" sha1="7cfe7c2b9d4bef30c1db4dbeae0a99799a90dea0" /> @@ -2876,9 +5300,17 @@ User/save disks that can be created from the game itself are not included. <!-- For some reason, this game requires swapping the mouse/controller ports --> <software name="mclubdx"> + <!-- + Origin: Neo Kobe Collection + <rom name="Murder Club DX.ccd" size="1371" crc="7ffabc35" sha1="4bb532a1be836d4c99530c56df3bf39a7a764545"/> + <rom name="Murder Club DX.cue" size="258" crc="15f7b0ba" sha1="9ab659042f5a22cdcccbd2534e481c2bc54acbcd"/> + <rom name="Murder Club DX.img" size="116776800" crc="cc64399a" sha1="50480522d62a16cbe687029ef3f2c136d66aa13a"/> + <rom name="Murder Club DX.sub" size="4766400" crc="87b17567" sha1="b70eaec794ae3096e07ee554d39c9439e1068262"/> + --> <description>Murder Club DX</description> <year>1992</year> - <publisher>Riverhill Soft</publisher> + <publisher>リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft)</publisher> + <info name="release" value="199205xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="murder club dx" sha1="eddbdc4e5f8b5d2ffa35aab5f6c136129ce29653" /> @@ -2887,9 +5319,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mumgoose"> + <!-- + Origin: Neo Kobe Collection + <rom name="Mixed-Up Mother Goose.ccd" size="770" crc="fff2375f" sha1="aed6dfb7d9cbd5a744a72e1045151a6de6ce2f5c"/> + <rom name="Mixed-Up Mother Goose.cue" size="85" crc="f7e5acaf" sha1="48ea12c83b66d7edd3bbb950eb6d9efc79720038"/> + <rom name="Mixed-Up Mother Goose.img" size="115189200" crc="366f2ae4" sha1="c6e63844938861e2745633f068709354e471628e"/> + <rom name="Mixed-Up Mother Goose.sub" size="4701600" crc="7976dfd4" sha1="208c7ec0807a8292180898f91c544e77eb233f52"/> + --> <description>Mixed-Up Mother Goose</description> <year>1991</year> - <publisher>Sierra On-Line Japan</publisher> + <publisher>シエラオンラインジャパン (Sierra On-Line Japan)</publisher> + <info name="release" value="199102xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="mixed-up mother goose" sha1="99d38872f432ff082707b1405b8cfc63ddeb1feb" /> @@ -2898,9 +5338,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="mustowns"> + <!-- + Origin: Neo Kobe Collection + <rom name="Musium Towns.ccd" size="767" crc="b290b468" sha1="6794cc910b1e5f3af2395a61b76eed613be9db47"/> + <rom name="Musium Towns.cue" size="76" crc="a598ffc3" sha1="eed7c0d453df7b8d90e18110ad67f509fd5472e2"/> + <rom name="Musium Towns.img" size="10231200" crc="67e21026" sha1="59aef70d6e48c7602d509f9f370e63ba8a797c4f"/> + <rom name="Musium Towns.sub" size="417600" crc="85c37af1" sha1="278b6233d247a22ff5702f40c5cb2fccddbb46e6"/> + --> <description>Musium Towns</description> <year>1993</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="musium towns" sha1="350c5c1f5e36ef48875fc9abbdecf3fc82c50dbf" /> @@ -2909,9 +5356,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="myeyes"> + <!-- + Origin: Neo Kobe Collection + <rom name="My Eyes!.ccd" size="767" crc="b290b468" sha1="6794cc910b1e5f3af2395a61b76eed613be9db47"/> + <rom name="My Eyes!.cue" size="72" crc="a0f55237" sha1="4f6890105f23b51833a9f7e84a502ea779734a32"/> + <rom name="My Eyes!.img" size="10231200" crc="fca6fd81" sha1="f4e6418e82bd7c819adf004e62b6623f3009f739"/> + <rom name="My Eyes!.sub" size="417600" crc="85c37af1" sha1="278b6233d247a22ff5702f40c5cb2fccddbb46e6"/> + --> <description>My Eyes!</description> <year>1992</year> - <publisher>Birdy Soft</publisher> + <publisher>ãƒãƒ¼ãƒ‡ã‚£ãƒ¼ã‚½ãƒ•ト (Birdy Soft)</publisher> + <info name="release" value="199211xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="my eyes!" sha1="a1093fcd4bbddcd90b3faa0617d5a895c214e3c4" /> @@ -2920,9 +5375,27 @@ User/save disks that can be created from the game itself are not included. </software> <software name="nadia"> + <!-- + Origin: Neo Kobe Collection + <rom name="Fushigi no Umi no Nadia (Disc A - Unidentified Noise).ccd" size="2471" crc="14c90a5a" sha1="44f18318731075ddf17babe6d5ed6210b6936d6a"/> + <rom name="Fushigi no Umi no Nadia (Disc A - Unidentified Noise).cue" size="469" crc="696d9520" sha1="ebf629c4f6e89a6f1c33e038b5b39cc2c931dd8c"/> + <rom name="Fushigi no Umi no Nadia (Disc A - Unidentified Noise).img" size="477162000" crc="f4d72298" sha1="de64216c5aa7a0b2f20a35bb98f4bd7cd5d66255"/> + <rom name="Fushigi no Umi no Nadia (Disc A - Unidentified Noise).sub" size="19476000" crc="39e8006a" sha1="48a5e46a410bbe5d392f6b133fc0cd4c7cccdf4e"/> + + <rom name="Fushigi no Umi no Nadia (Disc B - The Arctic Ocean).ccd" size="3045" crc="fb5dfb9b" sha1="dff6eb30e82567a84ed9e11d51a4dd4c43fad20d"/> + <rom name="Fushigi no Umi no Nadia (Disc B - The Arctic Ocean).cue" size="587" crc="38af0ba1" sha1="ed985ba248ecbcb9e01dad07da66982c0a712e8b"/> + <rom name="Fushigi no Umi no Nadia (Disc B - The Arctic Ocean).img" size="486511200" crc="9df55d35" sha1="c2ebc01b58275f072e4b87b16828faf1297deed7"/> + <rom name="Fushigi no Umi no Nadia (Disc B - The Arctic Ocean).sub" size="19857600" crc="af43b0fe" sha1="7947ba55d14c29f9f55410aba95e1462d56ee0c6"/> + + <rom name="Fushigi no Umi no Nadia (Disc C - The Fortress).ccd" size="3435" crc="c7aaeafc" sha1="d9b38cd958a8a16717edf9ca2e22355ac117cc01"/> + <rom name="Fushigi no Umi no Nadia (Disc C - The Fortress).cue" size="663" crc="05d400d0" sha1="d585da3218b1f84b607aec328097ec9b48327611"/> + <rom name="Fushigi no Umi no Nadia (Disc C - The Fortress).img" size="526554000" crc="536231f1" sha1="1f402837501fd1be9a5ebf497945366e62ce6fcc"/> + <rom name="Fushigi no Umi no Nadia (Disc C - The Fortress).sub" size="21492000" crc="1750eb97" sha1="b26bea707de4b322dd6ceab211a7fcdb05463c5d"/> + --> <description>Fushigi no Umi no Nadia</description> <year>1993</year> - <publisher>Gainax</publisher> + <publisher>ガイナックス (Gainax)</publisher> + <info name="release" value="199302xx" /> <part name="cdrom1" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="fushigi no umi no nadia (disc a - unidentified noise)" sha1="4e84bbbe4b6aec85312de67c0ad5707705735c90" /> @@ -2941,9 +5414,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="necronom"> + <!-- + Origin: Neo Kobe Collection + <rom name="Necronomicon.ccd" size="4583" crc="42a633fc" sha1="4edd1de4cfeb80cef936189ce6f14d2a9badfb6a"/> + <rom name="Necronomicon.cue" size="868" crc="16626f66" sha1="a947af7d9e13bccc0ad74a9dac694378f847057a"/> + <rom name="Necronomicon.img" size="661370640" crc="5de570c6" sha1="1d79fbaf3b3bb7f3cbb3d06d9a8928b5c91ecbee"/> + <rom name="Necronomicon.sub" size="26994720" crc="b023097e" sha1="b474073d0de6a77d8d8ca4fa33886c584b16dc08"/> + --> <description>Necronomicon</description> <year>1994</year> - <publisher>Fairytale</publisher> + <publisher>フェアリーテール (Fairytale)</publisher> + <info name="release" value="199408xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="necronomicon" sha1="82672ceafa32c0e9975aeda8f3f578c1c204ff52" /> @@ -2952,7 +5433,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="nihonrki"> - <description>Nihon no Rekishi: Kizoku-hen</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Nihon no Rekishi - Kizoku-hen.ccd" size="10149" crc="f03f9c8b" sha1="9b09a4fa737f9261a2ca2b28ee0b6513ee29ebd2"/> + <rom name="Nihon no Rekishi - Kizoku-hen.cue" size="2045" crc="efa1a16a" sha1="90afc828d81105cfeb03fd72b17e56bd2403dfba"/> + <rom name="Nihon no Rekishi - Kizoku-hen.img" size="534310896" crc="d32b3404" sha1="7c51507d212d94ad47ed84dea16c7d1573a3af71"/> + <rom name="Nihon no Rekishi - Kizoku-hen.sub" size="21808608" crc="0babca94" sha1="a0fbb8a32d1ab606a837601e1023ebd6b55d09d9"/> + --> + <description>Nihon no Rekishi - Kizoku-hen</description> <year>1990</year> <publisher>CRI</publisher> <part name="cdrom" interface="fmt_cdrom"> @@ -2963,7 +5451,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="nihonrko"> - <description>Nihon no Rekishi: Kodai-hen</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Nihon no Rekishi - Kodai-hen.ccd" size="14611" crc="868db9c6" sha1="b9fd8385688d722ddc942f800815757a2a317b8a"/> + <rom name="Nihon no Rekishi - Kodai-hen.cue" size="2964" crc="42810f29" sha1="a92a00bb9609be5da3f24b0d2be771c046591623"/> + <rom name="Nihon no Rekishi - Kodai-hen.img" size="632718576" crc="245c0277" sha1="ac4857a0985acda75b732a3590a2278d8628f0fb"/> + <rom name="Nihon no Rekishi - Kodai-hen.sub" size="25825248" crc="4d377848" sha1="1f4cb424de7625b41d865c395a7ec6882cf2f984"/> + --> + <description>Nihon no Rekishi - Kodai-hen</description> <year>1990</year> <publisher>CRI</publisher> <part name="cdrom" interface="fmt_cdrom"> @@ -2974,9 +5469,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="nihonya"> + <!-- + Origin: Neo Kobe Collection + <rom name="Nihon no Yachou.ccd" size="909" crc="d626c1a2" sha1="aa29d07ef6367bdf1c1452a64124a7088d36a099"/> + <rom name="Nihon no Yachou.cue" size="161" crc="bd5554ca" sha1="bf82a6c177869dc661d4da50ee748f9ae2d0f12a"/> + <rom name="Nihon no Yachou.img" size="561081360" crc="6629fdcf" sha1="09c816a9318bfc861d92ba20e6cfbba44d6479f7"/> + <rom name="Nihon no Yachou.sub" size="22901280" crc="bba0526a" sha1="ad87bcad30fd1a84903d7c2842d3d8e745ec6ff0"/> + --> <description>Nihon no Yachou</description> <year>1990</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="nihon no yachou" sha1="561a61de28e33c514f7e661632cdb58c5dc2eddf" /> @@ -2985,9 +5487,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ningyou"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ningyou Tsukai.mdf" size="10648800" crc="29cf6174" sha1="0b85b784f55f2e8484524429e783c73ed3cf4bbe"/> + <rom name="Ningyou Tsukai.mds" size="486" crc="536f9a49" sha1="086e301d1cf7ed4e7b7d04eb2ae7a636a1fb79e7"/> + + *after conversion with IsoBuster+EAC * + <rom name="ningyou tsukai.bin" size="10231200" crc="24337682" sha1="c1e947259e397f3e7ca1840fd8ac76b217835b96"/> + <rom name="ningyou tsukai.cue" size="75" crc="a2bb6b88" sha1="3d42988318ee1a6c052c2175242745b08e5b78f8"/> + --> <description>Ningyou Tsukai</description> <year>1993</year> - <publisher>Forest</publisher> + <publisher>フォレスト (Forest)</publisher> + <info name="release" value="199310xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ningyou tsukai" sha1="d2e93204d3cc2557f26ee72c07d0ab1109bf5846" /> @@ -2996,9 +5508,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="nobunagh"> - <description>Nobunaga no Yabou: Haouden</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Nobunaga no Yabou - Haou-den.ccd" size="4252" crc="9dd22185" sha1="3d7d864d43b363dc64fdadabf3e186c71d394010"/> + <rom name="Nobunaga no Yabou - Haou-den.cue" size="1079" crc="6eb0c152" sha1="a624d9901c3e285b060c5b12283bf45cf320e521"/> + <rom name="Nobunaga no Yabou - Haou-den.img" size="621283152" crc="43ae963f" sha1="a6b620bca6f5b282c6461e0bc7e66de20d6b61c0"/> + <rom name="Nobunaga no Yabou - Haou-den.sub" size="25358496" crc="f5b33009" sha1="f7951f9056c1c44f1e8d42fb646505298ccb75bf"/> + --> + <description>Nobunaga no Yabou - Haouden</description> <year>1993</year> - <publisher>Koei</publisher> + <publisher>å…‰æ „ (Koei)</publisher> + <info name="release" value="199304xx" /> <part name="flop1" interface="floppy_3_5"> <dataarea name="flop" size="1261568"> <rom name="nobunaga no yabou - haou-den.hdm" size="1261568" crc="d426a880" sha1="4194c61909c37fdf83daae77dcd84ad996237b0c" offset="000000" /> @@ -3013,20 +5533,34 @@ User/save disks that can be created from the game itself are not included. <!-- Originally labeled as "mp3 source". It probably needs a redump. --> <software name="nobunagt"> - <description>Nobunaga no Yabou: Tenshouki</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Nobunaga no Yabou - Tenshouki.bin" size="478798992" crc="17ba5021" sha1="936b1f97562762df23cad7d0880bfce31e8e7c73"/> + <rom name="Nobunaga no Yabou - Tenshouki.cue" size="628" crc="8652e29d" sha1="3ed6d965bdc9cf9deed37ccbe829d87e525fad68"/> + --> + <description>Nobunaga no Yabou - Tenshouki</description> <year>1995</year> - <publisher>Koei</publisher> + <publisher>å…‰æ „ (Koei)</publisher> + <info name="release" value="199503xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> - <disk name="nobunaga no yabou - tenshouki" sha1="fe1ca3991c5a1399cd720ae177644ca314b5d004" /> + <disk name="nobunaga no yabou - tenshouki" sha1="fe1ca3991c5a1399cd720ae177644ca314b5d004" status="baddump" /> </diskarea> </part> </software> <software name="nova"> + <!-- + Origin: Neo Kobe Collection + <rom name="Nova.ccd" size="4760" crc="2bf33004" sha1="34ac0475ed183eb8a7e92028c9ad103f7963b68b"/> + <rom name="Nova.cue" size="900" crc="07f59a76" sha1="4b6328082a39e9119da5aecbf63277649b85cead"/> + <rom name="Nova.img" size="466930800" crc="e052374a" sha1="eb36eccdfb9b3df08eb880792409a2fc22145bd7"/> + <rom name="Nova.sub" size="19058400" crc="eb8ea499" sha1="669261426efdd192d26a2066a28c63d927a63f06"/> + --> <description>Nova</description> <year>1993</year> - <publisher>Cat's Pro</publisher> + <publisher>Cat's Pro.</publisher> + <info name="release" value="199307xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="nova" sha1="1e9dad67f2b4c242f655976e05abafc97c804bd6" /> @@ -3035,9 +5569,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="oasyswin"> + <!-- + Origin: Neo Kobe Collection + <rom name="OASYS-Win.bin" size="116188800" crc="83a28e2b" sha1="964815360356173e43dbbe3b2511e6e5111bd51c"/> + <rom name="OASYS-Win.cue" size="75" crc="832c28b8" sha1="960da477b2902b143a2df0fda633e6279905cd56"/> + --> <description>OASYS/Win v2.0</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="oasys-win" sha1="6db75f509d91ffe754f5188cd7a03f646631a6ba" /> @@ -3046,6 +5585,13 @@ User/save disks that can be created from the game itself are not included. </software> <software name="okitgear"> + <!-- + Origin: Neo Kobe Collection + <rom name="Okiraku Towns Gear.ccd" size="770" crc="249d986e" sha1="1194b9bc2c45e7f644db73953e5f624d7e601582"/> + <rom name="Okiraku Towns Gear.cue" size="82" crc="90bcbb60" sha1="9136453d0e572f07529de02f4f3c9dc8d6da44a4"/> + <rom name="Okiraku Towns Gear.img" size="148634640" crc="0c87970a" sha1="71bbb684500958f53cec63ccfb34f1c7849b46fc"/> + <rom name="Okiraku Towns Gear.sub" size="6066720" crc="9b7be459" sha1="cdbb88125716c57a1f9dc92e6cbd0a8a40d10deb"/> + --> <description>Okiraku TownsGEAR</description> <year>1994</year> <publisher>Softbank</publisher> @@ -3057,9 +5603,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="opwolf"> + <!-- + Origin: Neo Kobe Collection + <rom name="Operation Wolf.ccd" size="1865" crc="257186d7" sha1="2a4c00717ac3547b5eb9eade3d0dd4af3b94cff6"/> + <rom name="Operation Wolf.cue" size="567" crc="adda63d4" sha1="05405d992aaf21cde3248b34bc2be5259bb7739c"/> + <rom name="Operation Wolf.img" size="311522400" crc="c942365a" sha1="02f0a0c0c01d1d802971e5c4b50e320adb8a591e"/> + <rom name="Operation Wolf.sub" size="12715200" crc="139ca72e" sha1="49a60f1d98b823f3a70af2f0b49e0e0ccc4a04fe"/> + --> <description>Operation Wolf</description> <year>1990</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199004xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="operation wolf" sha1="7d102b8918c67f8eafe841fc3ecb52e5eb760caa" /> @@ -3068,6 +5622,13 @@ User/save disks that can be created from the game itself are not included. </software> <software name="oshacook"> + <!-- + Origin: Neo Kobe Collection + <rom name="Oshare Cooking.ccd" size="4746" crc="d0a44b7f" sha1="28a145333fc404047066f95a99824c09def8e545"/> + <rom name="Oshare Cooking.cue" size="910" crc="0069795d" sha1="1a3fd4c2a597a86125304dc8c260b86b9ffdef51"/> + <rom name="Oshare Cooking.img" size="156996000" crc="2169e657" sha1="29e33ef9962844540b6ecc9d790e6047bca1dd98"/> + <rom name="Oshare Cooking.sub" size="6408000" crc="fc1997ee" sha1="322b2a01714f7cb0c84bf1758bc98b7af04dbaaa"/> + --> <description>Oshare Cooking</description> <year>1989</year> <publisher>Misawa Home</publisher> @@ -3079,9 +5640,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ourashin"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ougon no Rashimban.cue" size="1426" crc="8a96f578" sha1="7bc3da97c04ec392bb113ce03c437e278aa2bd70"/> + <rom name="Ougon no Rashimban.img" size="380694720" crc="e9badbda" sha1="b5cb62cef2379be9bd61009eb19ab571d3a9df50"/> + --> <description>Ougon no Rashinban</description> - <year>1990</year> - <publisher>Riverhill Soft</publisher> + <year>1991</year> + <publisher>リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft)</publisher> + <info name="release" value="199104xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ougon no rashimban" sha1="192ab79d6cd44db18a8410d35891fe4bc1f74528" /> @@ -3090,9 +5657,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="panzrdiv"> + <!-- + Origin: Neo Kobe Collection + <rom name="Panzer Division [Kikou Shidan].ccd" size="9806" crc="44bd3c10" sha1="59f646b254cbddb62ca62f5da94486c5b3c7a6d7"/> + <rom name="Panzer Division [Kikou Shidan].cue" size="2006" crc="664826ea" sha1="bd003fb23a82ed86092c333526ce6988c8c1821c"/> + <rom name="Panzer Division [Kikou Shidan].img" size="89082000" crc="ab104bef" sha1="0b8bfa7b58bec8f16dfde52f75315544eb6cb807"/> + <rom name="Panzer Division [Kikou Shidan].sub" size="3636000" crc="bfe1adf7" sha1="f31d28c1ce3c311ca0644e1e0cd6af638f1a6e5b"/> + --> <description>Panzer Division / Kikou Shidan</description> <year>1990</year> - <publisher>Artdink</publisher> + <publisher>アートディンク (Artdink)</publisher> + <info name="release" value="199012xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="panzer division [kikou shidan]" sha1="fae75398775e7f01d760e0e7c87c2e937a14ad87" /> @@ -3101,9 +5676,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="pegasus"> + <!-- + Origin: Neo Kobe Collection + <rom name="Pegasus.ccd" size="753" crc="d0ab7cf0" sha1="d2025fa54d7f76c4874de8e2d93e5be929fb37e1"/> + <rom name="Pegasus.cue" size="89" crc="fefd0954" sha1="23f10e3354bfd7a253d8cb214874b3bb6f8b817d"/> + <rom name="Pegasus.img" size="150894912" crc="d1d825b5" sha1="5c98deb2d1316f071094845b6fee46d929e4841d"/> + <rom name="Pegasus.sub" size="6158976" crc="2e65c3bf" sha1="1567d67b2909539e02ebb0f9b5de20ada8409c00"/> + --> <description>Pegasus</description> <year>1995</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="pegasus" sha1="294bb21d28e4d40f94a6b18ca3b0cf205f394b58" /> @@ -3112,9 +5694,45 @@ User/save disks that can be created from the game itself are not included. </software> <software name="planedge"> + <!-- + Origin: Neo Kobe Collection + <rom name="Planet's Edge.mdf" size="505977120" crc="c5b4995e" sha1="0b10f77379f32071901fb35ce564f6c37344e486"/> + <rom name="Planet's Edge.mds" size="2788" crc="7fd7420c" sha1="1858ebb841cb01779375d20a8ee35bac30c1648a"/> + + *after conversion with IsoBuster+EAC * + <rom name="planet's edge.cue" size="3979" crc="e306ba6e" sha1="74a7a43488f75044bca7d7a2998b0202857f3eb9"/> + <rom name="track01.bin" size="20815200" crc="b361ec6a" sha1="043e34c61c3c8294b37c062f0a97ee069f52218a"/> + <rom name="track02.bin" size="12171600" crc="29cb2a55" sha1="35aa60443e628121370cd6c5cd7d3b6269ab8919"/> + <rom name="track03.bin" size="16581600" crc="be2afd7d" sha1="34d0d1d541f705b2d08d1600d01657bee046e0c0"/> + <rom name="track04.bin" size="11070864" crc="960bc339" sha1="6a315e8336f0615dcfe96a87e07c85d711dadfca"/> + <rom name="track05.bin" size="39814656" crc="fc319e6f" sha1="6ab64f392b96259aef8b12501dfc504c4c8eb178"/> + <rom name="track06.bin" size="2163840" crc="94ccda2e" sha1="0c705b109f3ae5b270cea4a2a033af6844283bd3"/> + <rom name="track07.bin" size="2097984" crc="d4159ffa" sha1="125d262f1cd1964eff5bec63a0c56d9d365d53ef"/> + <rom name="track08.bin" size="17463600" crc="0b140ab0" sha1="cf7b342d015f96705719f93b4a55bce8d4109bf5"/> + <rom name="track09.bin" size="12202176" crc="0ec44d04" sha1="367965d08896be36e9342b410aa3504c0d781c73"/> + <rom name="track10.bin" size="14017920" crc="37fb71e9" sha1="0eee784ee975e2c88a728494f70545a516c958eb"/> + <rom name="track11.bin" size="18738384" crc="274abddd" sha1="03e36f4da08c672a756ea31accce8f77027a7421"/> + <rom name="track12.bin" size="15459696" crc="4bb5f86d" sha1="cd145576ef0aa65039ca5395c32eb027aeaa5110"/> + <rom name="track13.bin" size="28134624" crc="09d8677d" sha1="9d4a2a94ebfbbaa588f04fb8e60634c56eb45852"/> + <rom name="track14.bin" size="10849776" crc="2ccfa8f7" sha1="8f547916f93db5b0f9d17705a95fef952a34cb58"/> + <rom name="track15.bin" size="13159440" crc="15ef0fc8" sha1="651136eec6ccc501775b0ea2e6a1a66f6647ba42"/> + <rom name="track16.bin" size="7373520" crc="4137fa28" sha1="a24d498dfd60ec35dadc439d3bbb1db1562cbf8b"/> + <rom name="track17.bin" size="5339040" crc="a64fcf18" sha1="26592303aad0f5e18b5311138af4670b318f77d6"/> + <rom name="track18.bin" size="11360160" crc="77674747" sha1="fcb8444d1d2cc7e5afdd355d0e485aa89d863ebd"/> + <rom name="track19.bin" size="21349104" crc="5cd3ec1c" sha1="92eef0f5d7b8e492a6987d42b877c88284bf73e2"/> + <rom name="track20.bin" size="41395200" crc="cacc65c3" sha1="ad5c81158c694a275cf8e2770daeb76991dc01c1"/> + <rom name="track21.bin" size="12206880" crc="c0779ba5" sha1="89835128e4c23d7270214b657971cae9d9e64242"/> + <rom name="track22.bin" size="13382880" crc="8fc3fb6f" sha1="65f01b1c0e65542f7cd15d5816e56eff6f42e6f3"/> + <rom name="track23.bin" size="45334800" crc="1a632770" sha1="27c47d2ac8120ef04d357be3967004c95ca931be"/> + <rom name="track24.bin" size="23385936" crc="aa0d5326" sha1="0ef0c4e610978c68488ecc1091556d2edae01377"/> + <rom name="track25.bin" size="37561440" crc="950d3b2a" sha1="2099f5c41b49640c3a2c6b03643e76e81845aff1"/> + <rom name="track26.bin" size="10525200" crc="c57f022b" sha1="ee131353aff512fd48eec1ab770e534af042fbdc"/> + <rom name="track27.bin" size="22532160" crc="44eed348" sha1="5a5b6e1c4b6bcdd86a75650792daa1d98e005cd5"/> + --> <description>Planet's Edge</description> <year>1993</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199309xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="planet's edge" sha1="41c000e9a1f73d76437ab56bee363d481f56b58f" /> @@ -3123,9 +5741,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="pmaker2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Princess Maker 2.ccd" size="908" crc="dba2d512" sha1="196e444bccbedee24a79da2d3c3e352217ebc7f4"/> + <rom name="Princess Maker 2.cue" size="162" crc="f1f3b81e" sha1="50cc03f0970cc60a8d78dda0e7d5235a68ff66ec"/> + <rom name="Princess Maker 2.img" size="621214944" crc="4540f9f0" sha1="304fad2201aa58a6528b152e12b97fd21dff4377"/> + <rom name="Princess Maker 2.sub" size="25355712" crc="4e54a2ff" sha1="53c6325736f83d4cb079b0ec32a6771e4df6a15d"/> + --> <description>Princess Maker 2</description> <year>1994</year> - <publisher>Gainax</publisher> + <publisher>ガイナックス (Gainax)</publisher> + <info name="release" value="199409xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="princess maker 2" sha1="a0ed8d1a394ccfc109c3afdc6fdc6fd6a095643d" /> @@ -3134,9 +5760,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ponkan"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ponkan.ccd" size="769" crc="ac7485d2" sha1="abe81fe99430bf31ee8ffdf4af0ead170cbdfaa4"/> + <rom name="Ponkan.cue" size="70" crc="025509ee" sha1="e7e58834b704e65172fbbca0b7923e5bcfe087df"/> + <rom name="Ponkan.img" size="6402144" crc="5f89ee59" sha1="a369be404c99450e216016bc82c60c13b19eb6c0"/> + <rom name="Ponkan.sub" size="261312" crc="d605037a" sha1="a256597b61e8d9199352a284fca19e5ef16f630b"/> + --> <description>Ponkan</description> <year>1994</year> - <publisher>Ponytail Soft</publisher> + <publisher>ãƒãƒ‹ãƒ¼ãƒ†ãƒ¼ãƒ«ã‚½ãƒ•ト (PonyTale Soft)</publisher> + <info name="release" value="199407xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ponkan" sha1="2e02fbd3cafbfc385d21c97c8b91d771fdd22cc2" /> @@ -3145,9 +5779,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="populous"> + <!-- + Origin: Neo Kobe Collection + <rom name="Populous & The Promised Lands.ccd" size="768" crc="5186640f" sha1="f1487992f0c7ef1154468791b67813359f9d2b15"/> + <rom name="Populous & The Promised Lands.cue" size="93" crc="363e2845" sha1="cdc9250932ae9e121e3e6554bfdeff4dbf7c7ad2"/> + <rom name="Populous & The Promised Lands.img" size="11816448" crc="7dbb4b5d" sha1="15dbb35d8f513b5309b04d497218a62bbc35a7f5"/> + <rom name="Populous & The Promised Lands.sub" size="482304" crc="246862d1" sha1="7886b7a398d5e0f1385e242a7952071187c634cc"/> + --> <description>Populous & The Promised Lands</description> <year>1990</year> - <publisher>Imagineer</publisher> + <publisher>イマジニア (Imagineer)</publisher> + <info name="release" value="199007xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="populous & the promised lands" sha1="5e32724bd10a871146b38ecf1991b3f42f91f984" /> @@ -3155,23 +5797,33 @@ User/save disks that can be created from the game itself are not included. </part> </software> - <!-- + <!-- It should be possible to recreate the user disk by running the ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‡ã‚£ã‚¹ã‚¯ä½œæˆ program on the CD, but it doesn't seem to work. Not sure if it's an emulation issue or something else. - + The system disk is needed only for installing the game into a hard disk. - --> + --> <software name="powrdoll"> + <!-- + Origin: Neo Kobe Collection + <rom name="Power Dolls.ccd" size="2663" crc="ab55cc77" sha1="d99f063b36f3a7c0666211d5bcfd4a953f4c4264"/> + <rom name="Power Dolls.cue" size="467" crc="e7842606" sha1="3ac782b6fdb79c40cc43b2c1ac585bc69081d91d"/> + <rom name="Power Dolls.img" size="429181200" crc="fd3f758a" sha1="22ec8aa25ad7b2e24769a60545159d98a6fbc590"/> + <rom name="Power Dolls.sub" size="17517600" crc="6b532f45" sha1="41aae39e4c4d2f616bbdbe534593f35d5d5284c6"/> + --> <description>Power Dolls</description> <year>1994</year> - <publisher>Kogado</publisher> + <publisher>å·¥ç”»å ‚ (Kogado)</publisher> + <info name="release" value="199407xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> <dataarea name="flop" size="1261568"> <rom name="power dolls (user disk).hdm" size="1261568" crc="7b90b036" sha1="8cc2d7cdf2ffde4133cddd039f6620ba17b1e553" offset="000000" /> </dataarea> </part> <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="power dolls (system disk).hdm" size="1261568" crc="5f6c44c7" sha1="721dd113dc6bedfb2d212e3a4de15260c41805f7" offset="000000" /> </dataarea> @@ -3184,9 +5836,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="powrdol2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Power Dolls 2.ccd" size="2677" crc="c81560b2" sha1="ace60c9b20a9bb09477bb767d62fad8db3c05f22"/> + <rom name="Power Dolls 2.cue" size="469" crc="5a2f1ab9" sha1="68867b0c58e456177ab554c3155185696bbd0a5b"/> + <rom name="Power Dolls 2.img" size="385664496" crc="c3df8690" sha1="f7299ccaf16f4b0c5d69138f8932749aac211015"/> + <rom name="Power Dolls 2.sub" size="15741408" crc="19698eb9" sha1="c3219d969a89f9e1b00c678fec7a3be845d233d5"/> + --> <description>Power Dolls 2</description> <year>1995</year> - <publisher>Kogado</publisher> + <publisher>å·¥ç”»å ‚ (Kogado)</publisher> + <info name="release" value="199511xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="power dolls 2" sha1="248ec3f239e8d069490867d437ac0465dbf878b4" /> @@ -3195,15 +5855,25 @@ User/save disks that can be created from the game itself are not included. </software> <software name="powermon"> + <!-- + Origin: Neo Kobe Collection + <rom name="Powermonger.ccd" size="767" crc="f6acea7e" sha1="d596317501b8966ab6c4f6c114b098069135f652"/> + <rom name="Powermonger.cue" size="75" crc="cbc3ca53" sha1="2826ebb81743d88a588aa782fa77e72afef697da"/> + <rom name="Powermonger.img" size="10231200" crc="a52349ee" sha1="3b8dfefd8c00023eb23c277987d3ea2bafed4722"/> + <rom name="Powermonger.sub" size="417600" crc="85c37af1" sha1="278b6233d247a22ff5702f40c5cb2fccddbb46e6"/> + --> <description>Powermonger</description> <year>1992</year> - <publisher>Imagineer</publisher> + <publisher>イマジニア (Imagineer)</publisher> + <info name="release" value="199205xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk (En)" /> <dataarea name="flop" size="1261568"> <rom name="powermonger (en) (boot disk).hdm" size="1261568" crc="32bceed4" sha1="2bd713c50f4d8cd35d275c70f56acaff76ae5831" offset="000000" /> </dataarea> </part> <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk (Jp)" /> <dataarea name="flop" size="1261568"> <rom name="powermonger (jp) (boot disk).hdm" size="1261568" crc="46834f28" sha1="024edfc7b49f83d9b8054a0685fd7adbf79114af" offset="000000" /> </dataarea> @@ -3216,9 +5886,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="prinpers"> + <!-- + Origin: Neo Kobe Collection + <rom name="Prince of Persia.ccd" size="3806" crc="5c08c011" sha1="5d10789e220f77e549705a22c1aa1398287bd36e"/> + <rom name="Prince of Persia.cue" size="712" crc="bf28b9d2" sha1="dbe9d4cfb2d4e08efab3e52dfff7c458eda86d11"/> + <rom name="Prince of Persia.img" size="443469600" crc="a73104c5" sha1="1208836f87c57f14b96316b4e0f0418377631492"/> + <rom name="Prince of Persia.sub" size="18100800" crc="9fe57c70" sha1="6e266b21c414984b57e0a7dcb26143b29907a8f9"/> + --> <description>Prince of Persia</description> <year>1992</year> - <publisher>Riverhill Soft</publisher> + <publisher>リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft)</publisher> + <info name="release" value="199206xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="prince of persia" sha1="0d942e85b923c848cd3e66754d1b871fb66f81f5" /> @@ -3227,9 +5905,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="prinper2"> - <description>Prince of Persia 2: The Shadow and the Flame</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Prince of Persia 2.bin" size="537667200" crc="691de262" sha1="5813739a84322a52aa9a311ce67d173cba155e69"/> + <rom name="Prince of Persia 2.cue" size="125" crc="25a122a8" sha1="e7bfebff079701b0b6e886e320923dc7c511f00b"/> + --> + <description>Prince of Persia 2 - The Shadow and the Flame</description> <year>1994</year> - <publisher>Interprog</publisher> + <publisher>インタープãƒã‚° (Interprog)</publisher> + <info name="release" value="199407xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="prince of persia 2" sha1="7e46f99eb028afc8f955e5d4d7d3e38b6fefbc73" /> @@ -3238,10 +5922,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="prostudg"> + <!-- + Origin: Neo Kobe Collection + <rom name="Pro Student G.ccd" size="3122" crc="432b8400" sha1="4924d961cfd32c8801b895a2ba38c24b07e75150"/> + <rom name="Pro Student G.cue" size="1055" crc="c2d44694" sha1="bb660cfa5764653f9241f038771f5c7ba98f5bf2"/> + <rom name="Pro Student G.img" size="602504784" crc="ea3e84ba" sha1="ea6bf35f3450cfb981f284bd9e2cd48ac4bc5345"/> + <rom name="Pro Student G.sub" size="24592032" crc="10d9ec13" sha1="1a8d47c6314b40e69aa6260cd0a60e837f18a19f"/> + --> <description>Pro Student G</description> <year>1993</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199307xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1261568"> <rom name="pro student g (boot disk).hdm" size="1261568" crc="a068feeb" sha1="fa5e5b185cc452e9fa252eac61eb6f8a133cc080" offset="000000" /> </dataarea> @@ -3254,9 +5947,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="provvdnz"> - <description>Provvidenza: Legenda la Spada di Alfa</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Provvidenza.ccd" size="1179" crc="f0a1a16b" sha1="a7ef5529bf6c6532223ed683d41c4207833d8d56"/> + <rom name="Provvidenza.cue" size="180" crc="998968b0" sha1="5fd75cb0ea61390be09128e4ce05868bbca39599"/> + <rom name="Provvidenza.img" size="64562400" crc="ce38ece3" sha1="e10bd585a8e60c806e5cfba2129d79e3bdfb975b"/> + <rom name="Provvidenza.sub" size="2635200" crc="8da409c6" sha1="1db91a5e42f8df0ece1a3762a52a465d1422994b"/> + --> + <description>Provvidenza - Legenda la Spada di Alfa</description> <year>1991</year> <publisher>Sofcom</publisher> + <info name="release" value="199109xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="provvidenza" sha1="a104b48ade5fbe34b324f0c7f3a3fa0de7b482fc" /> @@ -3265,9 +5966,18 @@ User/save disks that can be created from the game itself are not included. </software> <software name="psydet1"> - <description>Psychic Detective Series Vol. 1: Invitation</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Psychic Detective Series Vol. 1 - Invitation (Track 1).bin" size="129830400" crc="952c98e2" sha1="aa66a3aca896d6c09eb1a49a19a9d6ebc6fa7df6"/> + <rom name="Psychic Detective Series Vol. 1 - Invitation (Track 2).bin" size="63504000" crc="c4b1f25e" sha1="2e43f87481d25da81ec2fd74eedac11218a26880"/> + <rom name="Psychic Detective Series Vol. 1 - Invitation (Track 3).bin" size="59623200" crc="5d7276f6" sha1="9431efea7f50a0064ba410b32b32883e69af0c66"/> + <rom name="Psychic Detective Series Vol. 1 - Invitation (Track 4).bin" size="4233600" crc="4580866a" sha1="aaefaba5020efb03452df764e2897d0f278e3151"/> + <rom name="Psychic Detective Series Vol. 1 - Invitation.cue" size="534" crc="3312b6bd" sha1="4a420300e0aebd9b7e971047c9ecddf0ce5ba43f"/> + --> + <description>Psychic Detective Series Vol. 1 - Invitation</description> <year>1989</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="198903xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="psychic detective series vol. 1 - invitation" sha1="4d53507fe063ae02cb1db77a0bf591dd62d5a014" /> @@ -3276,9 +5986,31 @@ User/save disks that can be created from the game itself are not included. </software> <software name="psydet2"> - <description>Psychic Detective Series Vol. 2: Memories</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 01).bin" size="117835200" crc="202de0b3" sha1="ad235fc51147753453452fc6e412ddaa1304d356"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 02).bin" size="57647520" crc="299ad0f1" sha1="f3ba45678de8b2e7ced85cf5629d1e497a16383e"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 03).bin" size="11124960" crc="d19657f5" sha1="59657792876b4da5d48513c2df51bc820e9c484d"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 04).bin" size="29929200" crc="b84e4104" sha1="50e12ab6191dc20fafd74f33839c567ff36dd520"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 05).bin" size="19533360" crc="be8f96ba" sha1="cd4aebaa431ca6083222ea1160c98d4cdbb24330"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 06).bin" size="17016720" crc="70a1d50e" sha1="579031a6272f5367cf0ec4b71da2f0bcd02102eb"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 07).bin" size="43535520" crc="f99cc0b3" sha1="5e85a6efec8d8ab46072d75956e2d09591bc74ea"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 08).bin" size="17757600" crc="df2cef38" sha1="1e5386715e1de96eb4c4bfa3c35884802901c3ea"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 09).bin" size="12406800" crc="c6b800c7" sha1="f647b4c50f0ccf786096f18900060c95e5e62d3b"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 10).bin" size="10972080" crc="9cf571dd" sha1="0b85b3416c52fcb50fe8957c6df3d17d2c267d5c"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 11).bin" size="10325280" crc="340f852d" sha1="df3b82cbf764bfa31bbd8abccf21a7ef82197450"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 12).bin" size="13923840" crc="ff93d3ab" sha1="30386141abfc04abb95064b4965677c5001b2122"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 13).bin" size="35574000" crc="7fe392ea" sha1="c0d9f520fcd7d13e0c8c20f00965c5608b6db397"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 14).bin" size="67196640" crc="d2e4a683" sha1="7f6adce21844ba8339574eb459b006b25536c4aa"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 15).bin" size="11842320" crc="64d157e2" sha1="b47fddc1559ead23b82ed6b0ad0d02ed8dcd7474"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 16).bin" size="54295920" crc="4674f9dc" sha1="8b77d00e426b3d06adbfba0b571a9cf68dbe53be"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 17).bin" size="6562080" crc="23cbd7c5" sha1="11cb731994a679c5803b189e20bcb9925431781f"/> + <rom name="Psychic Detective Series Vol. 2 - Memories (Track 18).bin" size="4233600" crc="4580866a" sha1="aaefaba5020efb03452df764e2897d0f278e3151"/> + <rom name="Psychic Detective Series Vol. 2 - Memories.cue" size="2448" crc="f97a66f6" sha1="c6a3b4621c40dffdbcdcf699e223e003439f5cb4"/> + --> + <description>Psychic Detective Series Vol. 2 - Memories</description> <year>1989</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="psychic detective series vol. 2 - memories" sha1="dc3d92414e77cf0220e10f46a92e2c24d07daa82" /> @@ -3287,9 +6019,22 @@ User/save disks that can be created from the game itself are not included. </software> <software name="psydet3"> - <description>Psychic Detective Series Vol. 3: Aya</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Psychic Detective Series Vol. 3 - Aya (Track 1).bin" size="158407200" crc="476a9efa" sha1="419edde4eef471df10e6756d7936aca1eeccaa04"/> + <rom name="Psychic Detective Series Vol. 3 - Aya (Track 2).bin" size="5633040" crc="517f6153" sha1="3f9ab93f125f952a196ea4652de0d37aace68177"/> + <rom name="Psychic Detective Series Vol. 3 - Aya (Track 3).bin" size="17393040" crc="0caea2b5" sha1="599875916665f0252d2322b3b5b5cce08d515a89"/> + <rom name="Psychic Detective Series Vol. 3 - Aya (Track 4).bin" size="36837024" crc="890f3bd1" sha1="7a746f73f026f90bf7f6f28ef1c4cf17b93763c9"/> + <rom name="Psychic Detective Series Vol. 3 - Aya (Track 5).bin" size="51339456" crc="53dedd5a" sha1="167c972030a74b7f1768dbb5edc0cc2aeec85e8e"/> + <rom name="Psychic Detective Series Vol. 3 - Aya (Track 6).bin" size="34833120" crc="71dc1ab9" sha1="b8db1ea28e4649b7fd1bc0909dd9478092ac595a"/> + <rom name="Psychic Detective Series Vol. 3 - Aya (Track 7).bin" size="58270800" crc="069b929e" sha1="05ee6de6df513fd09a7d20d5689018327aa0562b"/> + <rom name="Psychic Detective Series Vol. 3 - Aya (Track 8).bin" size="4233600" crc="4580866a" sha1="aaefaba5020efb03452df764e2897d0f278e3151"/> + <rom name="Psychic Detective Series Vol. 3 - Aya.cue" size="1030" crc="7ee451c0" sha1="7a78f47a67a0ec1c21f95902d3a3d97206d8949b"/> + --> + <description>Psychic Detective Series Vol. 3 - Aya</description> <year>1990</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199006xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="psychic detective series vol. 3 - aya" sha1="2ee820e859d4a6120ed6940a318d45c1101b4140" /> @@ -3298,9 +6043,22 @@ User/save disks that can be created from the game itself are not included. </software> <software name="psydet4"> - <description>Psychic Detective Series Vol. 4: Orgel</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Psychic Detective Series Vol. 4 - Orgel (Track 1).bin" size="179575200" crc="538840fa" sha1="473e195a5e250d6648ae938afa63cf5d5eaa2182"/> + <rom name="Psychic Detective Series Vol. 4 - Orgel (Track 2).bin" size="6827856" crc="4e055d3d" sha1="5dd9227d42df684ab595e7d0e6c4064b66e41d9b"/> + <rom name="Psychic Detective Series Vol. 4 - Orgel (Track 3).bin" size="52136784" crc="440be6ec" sha1="c3f39630c34e6f7ed3734e22d3c5a49b3f0a7ff0"/> + <rom name="Psychic Detective Series Vol. 4 - Orgel (Track 4).bin" size="31664976" crc="4eb891c0" sha1="0380a8b7939ab9c75bdac5041c5210a553efb217"/> + <rom name="Psychic Detective Series Vol. 4 - Orgel (Track 5).bin" size="22607424" crc="483501ae" sha1="786d56c8a9708db0d0f841dc3c5af0bcce626727"/> + <rom name="Psychic Detective Series Vol. 4 - Orgel (Track 6).bin" size="26843376" crc="edd78e19" sha1="e0daa87b1bcc4b271fe7929c4545afaef7556276"/> + <rom name="Psychic Detective Series Vol. 4 - Orgel (Track 7).bin" size="28875504" crc="e1ce6cc1" sha1="d243688d3b3e145b16ca86377c52a61ce92cf8e6"/> + <rom name="Psychic Detective Series Vol. 4 - Orgel (Track 8).bin" size="36197280" crc="732a69ae" sha1="81551f723c0f79d1e8e7c4ad2dc71cd9d0dbede4"/> + <rom name="Psychic Detective Series Vol. 4 - Orgel.cue" size="1046" crc="043a8cbc" sha1="2a6d1f743f3cff9f2147f8c4c746737086432de9"/> + --> + <description>Psychic Detective Series Vol. 4 - Orgel</description> <year>1991</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199104xx" /> <part name="flop1" interface="floppy_3_5"> <dataarea name="flop" size="1261568"> <rom name="psychic detective series vol. 4 - orgel.hdm" size="1261568" crc="81a557bf" sha1="e32d7a6b60a2265a7035a05f8272ac7938cf82bf" offset="000000" /> @@ -3314,10 +6072,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="psydet5"> - <description>Psychic Detective Series Vol. 5: Nightmare</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Psychic Detective Series Vol. 5 - Nightmare.ccd" size="2033" crc="2885783e" sha1="12137faa22970c3c08676dee732fffe4e5cd6ed5"/> + <rom name="Psychic Detective Series Vol. 5 - Nightmare.cue" size="660" crc="41c701c4" sha1="5844f2ba9e85136f5c3bf1d66c724045de3b9d31"/> + <rom name="Psychic Detective Series Vol. 5 - Nightmare.img" size="376790400" crc="45450153" sha1="f0b30fe77076028a3d8d68b41b8a03faf4ae363b"/> + <rom name="Psychic Detective Series Vol. 5 - Nightmare.sub" size="15379200" crc="dfd9f75a" sha1="719fda535ec124596e4280ef0d82b08f40435c70"/> + --> + <description>Psychic Detective Series Vol. 5 - Nightmare</description> <year>1991</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199111xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="psychic detective series vol. 5 - nightmare (system disk).hdm" size="1261568" crc="10de4174" sha1="9222ef4d56b96879dc26bcd99d4b61777556aeee" offset="000000" /> </dataarea> @@ -3330,9 +6097,21 @@ User/save disks that can be created from the game itself are not included. </software> <software name="psydetf1"> - <description>Psychic Detective Series Final: Solitude Joukan</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Psychic Detective Series Final - Solitude Joukan (Track 1).bin" size="278326272" crc="c377ac68" sha1="e75f0fdf00d4b707b603bd959b35ebdad7993958"/> + <rom name="Psychic Detective Series Final - Solitude Joukan (Track 2).bin" size="49631904" crc="c5a7c32f" sha1="bd1d89b874743dc53915f9ac424cba1bd26a04bd"/> + <rom name="Psychic Detective Series Final - Solitude Joukan (Track 3).bin" size="5995248" crc="7b1e2a7d" sha1="b854b1d07ae63267f68e670b7e1abf2f11e48072"/> + <rom name="Psychic Detective Series Final - Solitude Joukan (Track 4).bin" size="43392048" crc="ad6ccc2c" sha1="f246de89d0c2e90f2c4c83f258029e58b51d9844"/> + <rom name="Psychic Detective Series Final - Solitude Joukan (Track 5).bin" size="18164496" crc="69417cf3" sha1="8ed17cd69ff858ee4eb1a3dd2dcf62037c0646b0"/> + <rom name="Psychic Detective Series Final - Solitude Joukan (Track 6).bin" size="9979536" crc="5da46439" sha1="fd40e1201a76c151d99a7b28256e4e9da4498768"/> + <rom name="Psychic Detective Series Final - Solitude Joukan (Track 7).bin" size="49074480" crc="26509472" sha1="2009d73fd1536f47056e84076bd43d95a338cde0"/> + <rom name="Psychic Detective Series Final - Solitude Joukan.cue" size="976" crc="c0b0ba63" sha1="c9827261a2c1a9e5e71152bf806e0fefba106173"/> + --> + <description>Psychic Detective Series Final - Solitude Joukan</description> <year>1992</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199212xx" /> <part name="flop1" interface="floppy_3_5"> <dataarea name="flop" size="1261568"> <rom name="psychic detective series final - solitude joukan.hdm" size="1261568" crc="9dd1bf09" sha1="36f9557b45a606f54cebb180f88e37207a854e37" offset="000000" /> @@ -3346,9 +6125,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="psydetf2"> - <description>Psychic Detective Series Final: Solitude Gekan</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Psychic Detective Series Final - Solitude Gekan (Track 1).bin" size="454324080" crc="b07359f6" sha1="9986280cb7c8b7f5c6878eb1c4006ec1943affea"/> + <rom name="Psychic Detective Series Final - Solitude Gekan (Track 2).bin" size="64971648" crc="3d175e65" sha1="1927f5217bcc9d3df71ae4948efd6382848dbf00"/> + <rom name="Psychic Detective Series Final - Solitude Gekan (Track 3).bin" size="5971728" crc="2e932285" sha1="1655e409f3e2d068989ba952677ea76a9f40d8fe"/> + <rom name="Psychic Detective Series Final - Solitude Gekan (Track 4).bin" size="45466512" crc="f62efd87" sha1="191a8d97b6ee0d06fc85f571e6d2a6fc76ad12e3"/> + <rom name="Psychic Detective Series Final - Solitude Gekan (Track 5).bin" size="51910992" crc="988d84a3" sha1="b97e6b1f060ef12ed47fc239265ca27124178bc1"/> + <rom name="Psychic Detective Series Final - Solitude Gekan.cue" size="687" crc="d6efb6e2" sha1="c5007c6443420cc91328aacea84a36d3b90ad4eb"/> + --> + <description>Psychic Detective Series Final - Solitude Gekan</description> <year>1993</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199303xx" /> <part name="flop1" interface="floppy_3_5"> <dataarea name="flop" size="1261568"> <rom name="psychic detective series final - solitude gekan.hdm" size="1261568" crc="1e6f92b3" sha1="a0c3e96599e546c0c212091f52d42adbb2dbbb5b" offset="000000" /> @@ -3362,9 +6151,42 @@ User/save disks that can be created from the game itself are not included. </software> <software name="pulirula"> + <!-- + Origin: Neo Kobe Collection + <rom name="Pu-Li-Ru-La (Track 01).bin" size="20462400" crc="409635f3" sha1="1acb6300fa54880f96445bc34f59b184fb002ed9"/> + <rom name="Pu-Li-Ru-La (Track 02).bin" size="3909024" crc="3b602a96" sha1="6100e7c8e84a982f4ddf4d85d62b5154eef3bdae"/> + <rom name="Pu-Li-Ru-La (Track 03).bin" size="13625136" crc="da72f82e" sha1="cc8d204e184394a87581e68e40ea8d339af16740"/> + <rom name="Pu-Li-Ru-La (Track 04).bin" size="12559680" crc="60a5f3b6" sha1="9a3e678a4e493de84648fd49b669f3533bc83a64"/> + <rom name="Pu-Li-Ru-La (Track 05).bin" size="15076320" crc="92fd4126" sha1="8b5692a1e73b1a124f0d10743c5ea5afa0ab41a4"/> + <rom name="Pu-Li-Ru-La (Track 06).bin" size="12293904" crc="f47be75d" sha1="3f1071fbb9195796f7508b4f949769b9bd363149"/> + <rom name="Pu-Li-Ru-La (Track 07).bin" size="2359056" crc="27288e14" sha1="7d81297a89981b6faa65616b1717501bd1b8556b"/> + <rom name="Pu-Li-Ru-La (Track 08).bin" size="2669520" crc="9b63077a" sha1="b238b5873f7810c8716c5669c42d0900317e8d75"/> + <rom name="Pu-Li-Ru-La (Track 09).bin" size="11141424" crc="82121cad" sha1="90d23a9ab8eb2c836640bc4559aeda09b2b13269"/> + <rom name="Pu-Li-Ru-La (Track 10).bin" size="10743936" crc="9be1563d" sha1="81b2fe4059871f79cdcf486173383ba250edf45a"/> + <rom name="Pu-Li-Ru-La (Track 11).bin" size="11289600" crc="ee4306b8" sha1="ef6328c3563d1b2aebc90af4e8da6db325bfe8c5"/> + <rom name="Pu-Li-Ru-La (Track 12).bin" size="5550720" crc="78432421" sha1="4121d1def9dcf9f88f3260b09fdd2711e4feb6c2"/> + <rom name="Pu-Li-Ru-La (Track 13).bin" size="11211984" crc="aa210de7" sha1="f1cb01a45c133673f0873ae06bc1115633dab8c2"/> + <rom name="Pu-Li-Ru-La (Track 14).bin" size="17251920" crc="afd48557" sha1="22539565f03f77ae704a7dd61d7799cfd401aef0"/> + <rom name="Pu-Li-Ru-La (Track 15).bin" size="25044096" crc="7952a7f0" sha1="a4ee49b5ca9e89ff3417e349495c5cb25c8754a7"/> + <rom name="Pu-Li-Ru-La (Track 16).bin" size="24084480" crc="47c1d957" sha1="61bf7f4b6226f0d2a58497839355d4b9ba1508ef"/> + <rom name="Pu-Li-Ru-La (Track 17).bin" size="25001760" crc="4b7d5af6" sha1="dbc3309e058de46efd37e7f1d1721852559c56e6"/> + <rom name="Pu-Li-Ru-La (Track 18).bin" size="24606624" crc="9ecc1a4b" sha1="91d6e5e44ea0c071309a8dfb8d559f7f5de0d63e"/> + <rom name="Pu-Li-Ru-La (Track 19).bin" size="24578400" crc="3662573b" sha1="adb79c303ff1993943ffefebce605e9e47011beb"/> + <rom name="Pu-Li-Ru-La (Track 20).bin" size="24590160" crc="53420c17" sha1="3e523099729b487edd684954ee1a871c6843882d"/> + <rom name="Pu-Li-Ru-La (Track 21).bin" size="25149936" crc="b58281d9" sha1="23b2a03ad8b99e300c8f3ade381af0aef72bf2c2"/> + <rom name="Pu-Li-Ru-La (Track 22).bin" size="25053504" crc="26541f7b" sha1="84adff1adaa59cb38e714e256c12e4a70a765086"/> + <rom name="Pu-Li-Ru-La (Track 23).bin" size="23037840" crc="a16e3dc7" sha1="c447e1fe76a741b7e109770cf98d6d783913a3f8"/> + <rom name="Pu-Li-Ru-La (Track 24).bin" size="21915936" crc="9a0a0c58" sha1="29b9ce654bbac006e9768587e79630c036871743"/> + <rom name="Pu-Li-Ru-La (Track 25).bin" size="3850224" crc="92e3f97f" sha1="8036dd4a4e28f6352b08c9565349e39b8252ff13"/> + <rom name="Pu-Li-Ru-La (Track 26).bin" size="20022576" crc="7a2dddec" sha1="af0fc8dbc06da445f6d93288c6dfe7d586219545"/> + <rom name="Pu-Li-Ru-La (Track 27).bin" size="45962784" crc="14ef2926" sha1="39744f874e30c3fbd9c9666bfc9d0d8f5b5ae759"/> + <rom name="Pu-Li-Ru-La (Track 28).bin" size="45358320" crc="c297fb33" sha1="8ec32d9bb8e88beb19327102062855bec653dc06"/> + <rom name="Pu-Li-Ru-La.cue" size="2950" crc="86cd47e8" sha1="a5dddfafd6675710eccbebc7aeb2e33d3630e229"/> + --> <description>Pu-Li-Ru-La</description> <year>1994</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199411xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="pu-li-ru-la" sha1="eb21c2d89c6a01570af580985b1b3771d0f151d0" /> @@ -3373,9 +6195,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="puyopuyo"> + <!-- + Origin: Neo Kobe Collection + <rom name="Puyo Puyo.ccd" size="4259" crc="e2b3f2be" sha1="567df133d13d3abe0c6227a29d49ac80787a7dc8"/> + <rom name="Puyo Puyo.cue" size="1102" crc="022456a9" sha1="1c603f1a5aea3941f7b3a627bf48e2cd0d85a651"/> + <rom name="Puyo Puyo.img" size="391873776" crc="ff838cce" sha1="dcc77d9d7f4165e10f3d960b9712b53403fcb74f"/> + <rom name="Puyo Puyo.sub" size="15994848" crc="5276d1c5" sha1="4340ce4d40e58c30acb7b487e47349daa1348852"/> + --> <description>Puyo Puyo</description> <year>1994</year> <publisher>CRI</publisher> + <info name="release" value="199403xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="puyo puyo" sha1="46c7dcf22b24e4438370cfee7e75d6c075f0b26a" /> @@ -3384,9 +6214,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="puzznic"> + <!-- + Origin: Neo Kobe Collection + <rom name="Puzznic.nrg" size="295756162" crc="0ef4eada" sha1="e79fc8df08d30a96d57a54f8ceda1104d6774cf9"/> + --> <description>Puzznic</description> <year>1990</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199007xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="puzznic" sha1="7758fce062d6eaff0fded5607917226aeda122ef" /> @@ -3395,9 +6230,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="racrally"> + <!-- + Origin: Neo Kobe Collection + <rom name="RAC Rally.ccd" size="767" crc="8bdfb40f" sha1="cb635633c22c5bc81e7f51006c7c319eceb316c3"/> + <rom name="RAC Rally.cue" size="73" crc="969a0f1b" sha1="98caaa0634be081ccb5175d8e5a3a39560d0828a"/> + <rom name="RAC Rally.img" size="20815200" crc="83e3ed22" sha1="4e7e808a2d529753e3e8f6d166fc173387c4df9b"/> + <rom name="RAC Rally.sub" size="849600" crc="33bd68f0" sha1="3f88891c58b28e15968d8e5ca8638b9fd66665db"/> + --> <description>RAC Rally</description> <year>1995</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199501xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="rac rally" sha1="7298bfc4a5bc0c4eb7744337619f9321300a13b6" /> @@ -3407,9 +6250,17 @@ User/save disks that can be created from the game itself are not included. <!-- works well on fmtmarty, keyboard seems to interfere with movements on fmtowns --> <software name="raiden"> + <!-- + Origin: Neo Kobe Collection + <rom name="Raiden Trad [Raiden Densetsu].ccd" size="2277" crc="fe8e3aac" sha1="34e282606e49307c8772b8e699144ad190585cf9"/> + <rom name="Raiden Trad [Raiden Densetsu].cue" size="405" crc="ab2e3606" sha1="f2db4f4da16195dfac4acf1825f6ca4d871f6341"/> + <rom name="Raiden Trad [Raiden Densetsu].img" size="476456400" crc="b94bf7d4" sha1="b451f7c3222d4f51b3aab44d8b04f638385c75fe"/> + <rom name="Raiden Trad [Raiden Densetsu].sub" size="19447200" crc="d7f8596c" sha1="b9e729e4699ae009c4d5953c5bd746272a0fdbcd"/> + --> <description>Raiden Densetsu / Raiden Trad</description> <year>1991</year> - <publisher>Kid Corp / Seibu</publisher> + <publisher>KID</publisher> + <info name="release" value="199111xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="raiden densetsu (1991)(kid corp)(jp-en)" sha1="d7484fac0fa8d0fff06c70af341b25d8b4f21ab2" /> @@ -3418,9 +6269,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="raidy"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ikazuchi no Senshi Raidy.ccd" size="3636" crc="f35a60da" sha1="7c0a1ca01cdf442d09f5c94ae288f71a56136c7f"/> + <rom name="Ikazuchi no Senshi Raidy.cue" size="680" crc="b0f7be41" sha1="4e4b7520c3ef9473961fc1f137f6a7051986010e"/> + <rom name="Ikazuchi no Senshi Raidy.img" size="449001504" crc="ab4dc2f2" sha1="6beba6181c7e45bfa962b56b2d77aa75777005ad"/> + <rom name="Ikazuchi no Senshi Raidy.sub" size="18326592" crc="d5f09c73" sha1="da79a82dfc1efc3f4e63e33239e0dfbc9aa8e28f"/> + --> <description>Ikazuchi no Senshi Raidy</description> <year>1994</year> - <publisher>ZyX</publisher> + <publisher>ジックス (ZyX)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ikazuchi no senshi raidy" sha1="da27ad369e6a084c2b9b17401c9ccd7b7f5370cf" /> @@ -3429,9 +6287,26 @@ User/save disks that can be created from the game itself are not included. </software> <software name="raidy2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ikazuchi no Senshi Raidy II.ccd" size="2298" crc="1062dae1" sha1="80718cfb56b6a7551f0360c618db42a39df3db7d"/> + <rom name="Ikazuchi no Senshi Raidy II.img" size="603779568" crc="e3722290" sha1="72ae857608d01ac28858a862666baa10f12bcf13"/> + <rom name="Ikazuchi no Senshi Raidy II.sub" size="24644064" crc="02248b03" sha1="d70c766536132efde4b313a729789b5f1953e210"/> + + *after conversion with IsoBuster+EAC * + <rom name="ikazuchi no senshi raidy ii.cue" size="984" crc="a28e9188" sha1="810969e22c151581b3651918a0e98c06bdbaf888"/> + <rom name="track01.bin" size="500077536" crc="39b125f7" sha1="f215d931c02a4a2477b979bf31acb3b96e32a13d"/> + <rom name="track02.bin" size="7883904" crc="eca2459a" sha1="8f666ffac658e768b741758395d7e040d4996f42"/> + <rom name="track03.bin" size="7041888" crc="b069c1f6" sha1="7f751e5ad579341257bc27e172bac89731e12cef"/> + <rom name="track04.bin" size="15579648" crc="15b84d92" sha1="4b023f408b229b3756a733240711607d8f58b579"/> + <rom name="track05.bin" size="14812896" crc="30099a0d" sha1="b6d9db011e044aa2a2964983127502e781bbd483"/> + <rom name="track06.bin" size="28637952" crc="9d4a1c41" sha1="dfbb44e5853df5c5fca772ceb9c4f514fe58a4c3"/> + <rom name="track07.bin" size="29745744" crc="f79b2703" sha1="376e28429c5d4206dd4988333ac23ec7ffa368b7"/> + --> <description>Ikazuchi no Senshi Raidy 2</description> <year>1996</year> - <publisher>ZyX</publisher> + <publisher>ジックス (ZyX)</publisher> + <info name="release" value="199603xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ikazuchi no senshi raidy ii" sha1="798073ac9329aaf2a956ca30490914d46424a28d" /> @@ -3441,9 +6316,17 @@ User/save disks that can be created from the game itself are not included. <!-- Missing a floppy disk --> <software name="railtyc"> + <!-- + Origin: Neo Kobe Collection + <rom name="Railroad Tycoon.ccd" size="2223" crc="0d66b2f2" sha1="07a4e276d83d808f21f86b32a5b0dfafa26efdb9"/> + <rom name="Railroad Tycoon.cue" size="499" crc="b0946890" sha1="bab9c88d2d88a8740813c20feef037912752d465"/> + <rom name="Railroad Tycoon.img" size="72147600" crc="504a61f5" sha1="9e43aa8911b7408778d81778930d62987ef1ae5d"/> + <rom name="Railroad Tycoon.sub" size="2944800" crc="a7096a45" sha1="cdd143defed4563c9fd5a3ce95c9284964c7ca8a"/> + --> <description>Railroad Tycoon</description> <year>1993</year> - <publisher>MicroProse Japan</publisher> + <publisher>マイクãƒãƒ—ãƒãƒ¼ã‚ºã‚¸ãƒ£ãƒ‘ン (MicroProse Japan)</publisher> + <info name="release" value="199312xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="railroad tycoon" sha1="175a06c227bb9c61a86e808d45a976e9892155d1" /> @@ -3452,9 +6335,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="rance3"> - <description>Rance III: Leazas Kanraku</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Rance III.ccd" size="2638" crc="0a1e4485" sha1="67384f9138485517faf112481a36747a3b497f55"/> + <rom name="Rance III.cue" size="859" crc="ae02c816" sha1="407148f09963dff95153662a4f46c61379d00b0d"/> + <rom name="Rance III.img" size="602231952" crc="3f27e7f4" sha1="5d5f5ccf8e02eb4cfb75fef9c6c39e24e953dd1b"/> + <rom name="Rance III.sub" size="24580896" crc="5fd3a83c" sha1="ed46131da5956d324f4b68a1f3590c4ac6a4ad6f"/> + --> + <description>Rance III - Leazas Kanraku</description> <year>1992</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199205xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="rance iii" sha1="abe5a360f7a7871406d6f80a1744915f875fcadb" /> @@ -3463,10 +6354,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="rance4"> - <description>Rance IV: Kyoudan no Isan</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Rance IV.ccd" size="4860" crc="17800ac7" sha1="2d0151c029eee75b28ba9b544191c8b8c2ab0df1"/> + <rom name="Rance IV.cue" size="1754" crc="baa3dfc8" sha1="4ccb875c7122e182816869507b467b83f58f0072"/> + <rom name="Rance IV.img" size="400921920" crc="5ea9daf3" sha1="9df5dd75f4eb2e1e34a39245b51ffd67a7c4ed34"/> + <rom name="Rance IV.sub" size="16364160" crc="b9f43d38" sha1="6f42e82164320a093d5c74776fb57813c045eb42"/> + --> + <description>Rance IV - Kyoudan no Isan</description> <year>1994</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199403xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1261568"> <rom name="rance iv (boot disk).hdm" size="1261568" crc="45c0e9e5" sha1="0c905ca63b159a886c429944d1c09b01feaf73d3" offset="000000" /> </dataarea> @@ -3479,9 +6379,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="rance41"> - <description>Rance 4.1: Okusuri Koujou wo Sukue!</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Rance 4.1.ccd" size="4016" crc="b4498362" sha1="662b3c260343ef97e4d2486d1587bf66ecd0550d"/> + <rom name="Rance 4.1.cue" size="745" crc="bfddd3b6" sha1="cc88fc068cd916798f470fa5efc11aaf3b710d47"/> + <rom name="Rance 4.1.img" size="628325040" crc="b53d7ecc" sha1="6dc3f45ea6d7efecd0ae7c2714cf84117a291935"/> + <rom name="Rance 4.1.sub" size="25645920" crc="ea974b09" sha1="142042fd520b06432f3deaa474ecd9a46b4058f1"/> + --> + <description>Rance 4.1 - Okusuri Koujou wo Sukue!</description> <year>1995</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199512xx" /> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -3491,9 +6399,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="rance42"> - <description>Rance 4.2: Angel-gumi</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Rance 4.2.ccd" size="4396" crc="ff35e3c5" sha1="3acdeb69d2a46602dc8b17494aaec79be26320ce"/> + <rom name="Rance 4.2.cue" size="825" crc="65b94877" sha1="1a3b1d3f565bcb3436a8c27009df7206077e0da0"/> + <rom name="Rance 4.2.img" size="732104688" crc="d0e4dc53" sha1="441f7f3846e005f23a539c623c735786e8b1335a"/> + <rom name="Rance 4.2.sub" size="29881824" crc="5c096184" sha1="425aa6d1d738cd73d69b811e468c7e9eb5ca5e8b"/> + --> + <description>Rance 4.2 - Angel-gumi</description> <year>1995</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199512xx" /> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -3503,9 +6419,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ravnloft"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ravenloft.ccd" size="770" crc="858e0052" sha1="2d92be1ed3f46893d857d3d5f8932d8bc430fc6a"/> + <rom name="Ravenloft.cue" size="73" crc="819b02fa" sha1="36c69a88495ddf2e1b12a6cd3119667387a13d97"/> + <rom name="Ravenloft.img" size="391255200" crc="9daeb746" sha1="5f1f36bd5ec99d5518f71a9c1fa6690e725f72bd"/> + <rom name="Ravenloft.sub" size="15969600" crc="bed73e3c" sha1="22c0d57c6248bec8f1664801af259fd69c407b13"/> + --> <description>Ravenloft</description> <year>1995</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199504xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ravenloft" sha1="30ddd15c78dd03abbd91799256ba884548b54abb" /> @@ -3514,9 +6438,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="rayxanbr"> + <!-- + Origin: Neo Kobe Collection + <rom name="Rayxanber.ccd" size="3527" crc="7b3c29af" sha1="3077f1f119cfeb5e89262002bc6501fc5ea8c80c"/> + <rom name="Rayxanber.cue" size="670" crc="e0a2263d" sha1="153fc29eecde9cda783c5dc01b180b313a777d79"/> + <rom name="Rayxanber.img" size="417268320" crc="6cfe50cc" sha1="64843282a94d48fc2f185d9e5f2522ec145eef78"/> + <rom name="Rayxanber.sub" size="17031360" crc="c8fdc393" sha1="19257c49a93ba1ce34cdb32c42ae64f5427a9e7a"/> + --> <description>Rayxanber</description> <year>1990</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199004xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="rayxanber" sha1="5e7c36227d61be81f8a4cf4ef79889d12a72549c" /> @@ -3529,20 +6461,36 @@ User/save disks that can be created from the game itself are not included. manually from TownsOS, but it should be considered a bad dump. --> <software name="rbisland"> + <!-- + Origin: Neo Kobe Collection + <rom name="Rainbow Islands Extra.ccd" size="6072" crc="94599516" sha1="06ad75ae250a386c4bdd3d8b3ddcf7bfb07c8d01"/> + <rom name="Rainbow Islands Extra.cue" size="1197" crc="db2dc8e2" sha1="39929d36a169be75888a75b64f9f9064c8a436c0"/> + <rom name="Rainbow Islands Extra.img" size="354211200" crc="7bef26db" sha1="853c15c00aaa944e31f0a73d4070fa994d02880b"/> + <rom name="Rainbow Islands Extra.sub" size="14457600" crc="09ba3aa3" sha1="64437166662113fb6a9fce36ee47ddb5a841869d"/> + --> <description>Rainbow Islands Extra</description> <year>1992</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199204xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> - <disk name="rainbow islands extra" sha1="2c480a769d0f0340ab2c26988b5d37404606dc7e" /> + <disk name="rainbow islands extra" sha1="2c480a769d0f0340ab2c26988b5d37404606dc7e" status="baddump" /> </diskarea> </part> </software> - + <software name="regiopw2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Regional Power II.ccd" size="749" crc="124c89d3" sha1="378fc18f1f152235e9ba5772e8b764f9a5907069"/> + <rom name="Regional Power II.cue" size="99" crc="f2659bd5" sha1="40464857db74b6a20ca31f37c617cfe21947b508"/> + <rom name="Regional Power II.img" size="10231200" crc="8a826557" sha1="5fc8c300b9ddad05641e6dc83ebb550df50dee2f"/> + <rom name="Regional Power II.sub" size="417600" crc="5d4a4b29" sha1="250d104db3975b56e73c6b81f0d2492ca67251f5"/> + --> <description>Regional Power II</description> <year>1992</year> - <publisher>Cosmos</publisher> + <publisher>コスモス・コンピュータ (Cosmos Computer)</publisher> + <info name="release" value="199209xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="regional power ii" sha1="18e1100519fbfdfec7a9abc495b1a3719a5529d0" /> @@ -3555,9 +6503,17 @@ User/save disks that can be created from the game itself are not included. the title screen spells it as "Den-no Senshi" for whatever reason. --> <software name="rejectn"> - <description>Rejection: Den-no Senshi</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Rejection - Denno Senshi.ccd" size="4953" crc="3f0678ea" sha1="ba183b3eb39dc3d513c7f6faed73d25a89c22c22"/> + <rom name="Rejection - Denno Senshi.cue" size="960" crc="d6e229c8" sha1="d108c16c88e07b4ed43e2880eb1cb97f485a940d"/> + <rom name="Rejection - Denno Senshi.img" size="270138960" crc="29b9fa04" sha1="bb1a04a652862a0ebc33367c92c6f25ab483ca4b"/> + <rom name="Rejection - Denno Senshi.sub" size="11026080" crc="f4fbbf12" sha1="02a7fc2bf9a3c1190d2b3d840a1cd408230565f4"/> + --> + <description>Rejection - Den-no Senshi</description> <year>1992</year> - <publisher>Sur de Wave</publisher> + <publisher>シュールド・ウェーブ (Sur De Wave)</publisher> + <info name="release" value="199212xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="rejection - denno senshi" sha1="ed27051ac0deb746e97165008b9d19e4274af45e" /> @@ -3566,9 +6522,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="retzork"> + <!-- + Origin: Neo Kobe Collection + <rom name="Return to Zork.ccd" size="5568" crc="a0a0112a" sha1="97432f562d9ca57a104e57117a817c729dc774fd"/> + <rom name="Return to Zork.cue" size="1070" crc="b5ca3bb8" sha1="7273a4e6377da0c2e4e79df482af3385c601aa77"/> + <rom name="Return to Zork.img" size="467337696" crc="523cc4a6" sha1="4f999397c7f1136382ddbe17bbcd48ab39677365"/> + <rom name="Return to Zork.sub" size="19075008" crc="c9417b63" sha1="18abc4e8c977edf9f0790bec6f60d90edfad42c1"/> + --> <description>Return to Zork</description> <year>1994</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199410xx" /> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -3578,9 +6542,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ringout"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ring Out!!.ccd" size="2486" crc="1ba43240" sha1="5d105ef08eb749c775b410c251088e151d15cb8e"/> + <rom name="Ring Out!!.cue" size="426" crc="6d7e1995" sha1="02225e42c47ac2767bae4eabe47a83f94c14e586"/> + <rom name="Ring Out!!.img" size="388063536" crc="6b81b8a8" sha1="1a3f67dbce88c93b72857ac76bd4bd3b820b6eb1"/> + <rom name="Ring Out!!.sub" size="15839328" crc="65aabe40" sha1="0708f323eada701684ed1e2c33483c7e87f3c0f6"/> + --> <description>Ring Out!!</description> <year>1995</year> - <publisher>ZyX</publisher> + <publisher>ジックス (ZyX)</publisher> + <info name="release" value="199506xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ring out!!" sha1="2b50d05b278824e36a1b2fdf500a5ec4c9daeb3b" /> @@ -3589,9 +6561,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="rockrang"> + <!-- + Origin: Neo Kobe Collection + <rom name="Rocket Ranger.bin" size="12343296" crc="742d76d5" sha1="2ad97d12c74244cb3dcaefee0548701e327d83b0"/> + <rom name="Rocket Ranger.cue" size="79" crc="bc9698a1" sha1="80d18c522d32bf240fe55fee9092d7ae72570d23"/> + --> <description>Rocket Ranger</description> <year>1990</year> - <publisher>Pony Canyon</publisher> + <publisher>ãƒãƒ‹ãƒ¼ã‚ャニオン (Pony Canyon)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="rocket ranger" sha1="faee63cd159d68240360149887702560dedff780" /> @@ -3600,9 +6577,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ryuutou"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ryuutouden.ccd" size="1215" crc="b9661669" sha1="79e562c0f6bbd9962fce7c015f6aa36506013665"/> + <rom name="Ryuutouden.cue" size="284" crc="3766b0bf" sha1="73b31cc530f93fbf8e72951912e413b29fd9409b"/> + <rom name="Ryuutouden.img" size="145530000" crc="49ddf4a2" sha1="c8269105d2cb98327d7a00e993381d9378415f3e"/> + <rom name="Ryuutouden.sub" size="5940000" crc="c8be4f3f" sha1="00aef443283d2ca7e134f98117a470ad15d6b4d7"/> + --> <description>Ryuutouden</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199005xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ryuutouden" sha1="b3468afda6c697b270d49ccc89545dc57b0c6c80" /> @@ -3611,9 +6596,36 @@ User/save disks that can be created from the game itself are not included. </software> <software name="sayaka"> + <!-- + Origin: Neo Kobe Collection + <rom name="Sayaka & Miho.mdf" size="667018800" crc="9c5eff1b" sha1="06e6468e3fd035167f372aa352a5beffcd4a9654"/> + <rom name="Sayaka & Miho.mds" size="1982" crc="a9a62c25" sha1="5301a5f8d1e851ac082b20b81a2761c6a097e9b4"/> + + *after conversion with IsoBuster+EAC * + <rom name="sayaka & miho.cue" size="2683" crc="d06c5257" sha1="2ccc1c677ad0e318958c2df710fa82e35655b84f"/> + <rom name="track01.bin" size="20815200" crc="5c4797b7" sha1="ca33a80e9cf2cf15f917fa1f602e83a27cc769f8"/> + <rom name="track02.bin" size="35280000" crc="bb8361ca" sha1="3649fc4a33faf745597fbf35997f3b4ee7eb734b"/> + <rom name="track03.bin" size="29811600" crc="57a6e7dc" sha1="d8384d9c5eddb9eceed213829428402e5e3af906"/> + <rom name="track04.bin" size="40219200" crc="7a3030c9" sha1="524c42930a57244741f748860ebb76906efbedf1"/> + <rom name="track05.bin" size="49568400" crc="8eb57dd3" sha1="4c41f7fa8dae0a7e9528ce2e98a7a874ab420eb5"/> + <rom name="track06.bin" size="36338400" crc="49101532" sha1="c756745a4b4b4705d6e2ac40b315f0a220964187"/> + <rom name="track07.bin" size="27871200" crc="badc6227" sha1="e91945c06a197ac574620226aa26cb2a9f0ced9e"/> + <rom name="track08.bin" size="45158400" crc="5dfaf779" sha1="274f1d731706f9dc8f00f26af8a7fcef7f6ce48f"/> + <rom name="track09.bin" size="27342000" crc="cb700d3e" sha1="17c879f90d2e549830e4b1e6201285327e2830a5"/> + <rom name="track10.bin" size="57682800" crc="b0200cb5" sha1="e098d5909cda81a9bbca14dafb1625c98c07cbf8"/> + <rom name="track11.bin" size="28576800" crc="2a34f118" sha1="61896fdba29aec691f7b2e558750436ab9323259"/> + <rom name="track12.bin" size="8996400" crc="7a1b5762" sha1="e18719f02d7955fe0199ac5147a6762beac2297e"/> + <rom name="track13.bin" size="47275200" crc="e61f30ff" sha1="7b996123db409b2c6ff330fdc4668874795bc831"/> + <rom name="track14.bin" size="47804400" crc="7ca11047" sha1="a659a75b39ca8c61a56204fc89c9b43a8e8f7672"/> + <rom name="track15.bin" size="29458800" crc="9e38d6a5" sha1="507efb0730e03efa308b472175448cb268973ebe"/> + <rom name="track16.bin" size="44629200" crc="97dad1fa" sha1="8bafe8efa95b1dfc1edec1a6979e216a5eb80c34"/> + <rom name="track17.bin" size="27694800" crc="cf5c5e81" sha1="2557b72f15d7aaeced0a6ce7a78c41b9d12e8a21"/> + <rom name="track18.bin" size="36691200" crc="2e54cd80" sha1="5f79d16a645f6e444b3666590975b4250f7dd00b"/> + --> <description>Sayaka & Miho</description> <year>1994</year> - <publisher>Fairytale</publisher> + <publisher>フェアリーテール (Fairytale)</publisher> + <info name="release" value="199409xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="sayaka & miho" sha1="c1a31725589c0256e6e93c71033db07772fa550c" /> @@ -3622,9 +6634,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="scav4dmo"> + <!-- + Origin: Neo Kobe Collection + <rom name="Scavenger 4 (Demo Disc).bin" size="57859200" crc="aad41023" sha1="f716dea73a68170b495cdae4d82a4690bbf3d7ba"/> + <rom name="Scavenger 4 (Demo Disc).cue" size="112" crc="35a9c277" sha1="a070c7a99494f511eeabd00c78f80047b93b3180"/> + --> <description>Scavenger 4 Demo Disc</description> <year>1993</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="scavenger 4 (demo disc)" sha1="d94ff9ddc64c3acc20814f8290e5c5a0e6fe2217" /> @@ -3633,9 +6650,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="scav4"> + <!-- + Origin: Neo Kobe Collection + <rom name="Scavenger 4.ccd" size="752" crc="c591ef5f" sha1="2a1ad6e3dc43411c861457e88302642dd23fbb90"/> + <rom name="Scavenger 4.cue" size="93" crc="c1745e54" sha1="7270dc5eeead37728af2cac0c9cc087e5f52d87e"/> + <rom name="Scavenger 4.img" size="528847200" crc="177b3405" sha1="5738450c2f212634341c4d540c5350ec1c60f35a"/> + <rom name="Scavenger 4.sub" size="21585600" crc="e8c0f2a6" sha1="b6a7f3f5d155f80d813fad9228f3be2eebdb0227"/> + --> <description>Scavenger 4</description> <year>1993</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199311xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="scavenger 4" sha1="a78fff2a22e995afb7cbadcec026caf65ac3490e" /> @@ -3644,10 +6669,18 @@ User/save disks that can be created from the game itself are not included. </software> <software name="scholar"> + <!-- + Origin: Neo Kobe Collection + <rom name="Scholar Movie Magazine.ccd" size="771" crc="43f604ad" sha1="afc766ade7cb05fbd26e703baa1873ea043b346d"/> + <rom name="Scholar Movie Magazine.cue" size="86" crc="65ca84d7" sha1="3592e57c801ec41e424ce53b3c85f6099659aefa"/> + <rom name="Scholar Movie Magazine.img" size="381372096" crc="eb013a0a" sha1="22cc090752d7a2b03bb1fbfb4e413bc839e846e9"/> + <rom name="Scholar Movie Magazine.sub" size="15566208" crc="9b2057da" sha1="6fd82ee1fdd8d4933fb29de451274833a4ffef57"/> + --> <description>Scholar Movie Magazine</description> <year>1994</year> <publisher>King Records</publisher> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1261568"> <rom name="scholar movie magazine (boot disk).hdm" size="1261568" crc="6351e1a6" sha1="57e30fa44927653d88d30da0df3236852c669394" offset="000000" /> </dataarea> @@ -3660,10 +6693,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="schwarz"> + <!-- + Origin: Neo Kobe Collection + <rom name="Schwarzschild.ccd" size="2081" crc="6a519049" sha1="d0cdad25bf763bb34ca83d0d084e78c156dba6da"/> + <rom name="Schwarzschild.cue" size="350" crc="92f4e2a2" sha1="17324eac6af85d2c9296d8aa99f043a84e203314"/> + <rom name="Schwarzschild.img" size="233377200" crc="c095bc84" sha1="c0a193af7737359cbf49232962cb59772fb5de04"/> + <rom name="Schwarzschild.sub" size="9525600" crc="ea0379c2" sha1="fb9cd0438b70a5d6a16a78c4aefeda53742c8d2a"/> + --> <description>Schwarzschild</description> <year>1991</year> - <publisher>Kogado</publisher> + <publisher>å·¥ç”»å ‚ (Kogado)</publisher> + <info name="release" value="199111xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Game Disk" /> <dataarea name="flop" size="1261568"> <rom name="schwarzschild (game disk).hdm" size="1261568" crc="6a3658a7" sha1="e70e032a9ffe0f1454366a0d15fb2fb0ef224117" offset="000000" /> </dataarea> @@ -3676,9 +6718,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="schwarz4"> + <!-- + Origin: Neo Kobe Collection + <rom name="Schwarzschild IV.ccd" size="2662" crc="f86ebf8a" sha1="2cd8c8a109d20a725d33d304bf0a50dda3626f09"/> + <rom name="Schwarzschild IV.cue" size="472" crc="404c6385" sha1="de575b8a57fcc3671f6839e63f780ffec6cd5eb1"/> + <rom name="Schwarzschild IV.img" size="607168800" crc="0ed248e9" sha1="3cf6f3ec265c8378fee2699d26ec401c05dfd905"/> + <rom name="Schwarzschild IV.sub" size="24782400" crc="3c6b5926" sha1="9d434f932bbcc63b49afb7b1b5c4e86786a6cafd"/> + --> <description>Schwarzschild IV</description> <year>1993</year> - <publisher>Kogado</publisher> + <publisher>å·¥ç”»å ‚ (Kogado)</publisher> + <info name="release" value="199312xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="schwarzschild iv" sha1="813091a4a7fe385da8014f6d3e22a06dc5ec275e" /> @@ -3687,9 +6737,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="shangr2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Shangrlia 2.ccd" size="767" crc="8bdfb40f" sha1="cb635633c22c5bc81e7f51006c7c319eceb316c3"/> + <rom name="Shangrlia 2.cue" size="75" crc="dd933c8a" sha1="269a2359135b5fb79013cfb3c643ad0f1b16c534"/> + <rom name="Shangrlia 2.img" size="20815200" crc="41298c9a" sha1="1ac6ca680ce3c73a64548f2fc6111b0ccfb56dc1"/> + <rom name="Shangrlia 2.sub" size="849600" crc="4f418c0b" sha1="7017e03e20f31889be0af9456244aee7eaabd910"/> + --> <description>Shangrlia 2</description> <year>1993</year> - <publisher>Elf</publisher> + <publisher>エルフ (Elf)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="shangrlia 2" sha1="b774d673f3a49912e6ed857865b8a7a99b368b06" /> @@ -3698,9 +6755,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="sherlock"> - <description>Sherlock Holmes: Consulting Detective</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Sherlock Holmes no Tantei Kouza.ccd" size="770" crc="e4b0ba67" sha1="01e97932723ddd96a3240a07bf35eb5109c2a57b"/> + <rom name="Sherlock Holmes no Tantei Kouza.cue" size="95" crc="87021bcd" sha1="5d76b568d612c69347b0bb21f19f3842e1cfd090"/> + <rom name="Sherlock Holmes no Tantei Kouza.img" size="719359200" crc="b99d4037" sha1="45bf55fd953f81e5dc241e40dc236e0a12403c3f"/> + <rom name="Sherlock Holmes no Tantei Kouza.sub" size="29361600" crc="eec3883e" sha1="f7155ecc42b6552b73124a262b29347f98d8ccd8"/> + --> + <description>Sherlock Holmes - Consulting Detective</description> <year>1991</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199106xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="sherlock holmes no tantei kouza" sha1="df4dac06bc19ff169d9bdc958bfc25907aa7072e" /> @@ -3709,9 +6774,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="shinc"> + <!-- + Origin: Neo Kobe Collection + <rom name="Shinc.ccd" size="767" crc="b290b468" sha1="6794cc910b1e5f3af2395a61b76eed613be9db47"/> + <rom name="Shinc.cue" size="69" crc="f954a1c2" sha1="46afe6a40f275e081a784cefd0b0b3944e4630e6"/> + <rom name="Shinc.img" size="10231200" crc="8950777d" sha1="9f3461e8d7412f0f4081cc8895f14448ba3e6554"/> + <rom name="Shinc.sub" size="417600" crc="85c37af1" sha1="278b6233d247a22ff5702f40c5cb2fccddbb46e6"/> + --> <description>Shinc</description> <year>1993</year> - <publisher>Libido</publisher> + <publisher>リビドー (Libido)</publisher> + <info name="release" value="199304xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="shinc" sha1="5cb5158e300c504e987d0ab9564ddffa902c28ed" /> @@ -3720,9 +6793,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="shounenm"> + <!-- + Origin: Neo Kobe Collection + <rom name="Shounen Magazine History.ccd" size="2668" crc="cdd2679c" sha1="5ee2ee5ee36a73f5646d1939ae3b2d60fd938cfc"/> + <rom name="Shounen Magazine History.cue" size="480" crc="83f0b260" sha1="0fe4a00b08197cbc9d03a2f8dc165d784c1e6636"/> + <rom name="Shounen Magazine History.img" size="411541200" crc="f025557b" sha1="790b1f2c8385651c3df88dc0680abda5088df7e0"/> + <rom name="Shounen Magazine History.sub" size="16797600" crc="56a94a1b" sha1="e7d4f92a258d66d98a336ec5bef21951c1406fba"/> + --> <description>Shounen Magazine History</description> <year>1992</year> - <publisher>Datt Japan</publisher> + <publisher>ダットジャパン (Datt Japan)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="shounen magazine history" sha1="f453ee25f0f0da3ca23bbbd09632aa63f7a7d2fb" /> @@ -3731,9 +6811,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="simant"> + <!-- + Origin: Neo Kobe Collection + <rom name="SimAnt.bin" size="10231200" crc="912e1754" sha1="a5d19795b2c31231193df05b6d98910d3f2fc664"/> + <rom name="SimAnt.cue" size="95" crc="9d712f0c" sha1="fcffae86e1c68a611ef759bb23dc8925e8ca5751"/> + --> <description>SimAnt</description> <year>1993</year> - <publisher>Imagineer</publisher> + <publisher>イマジニア (Imagineer)</publisher> + <info name="release" value="199302xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="simant" sha1="56d7d642dd93073a76f19db4dde3418eb0f5ab17" /> @@ -3742,9 +6828,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="simcity"> + <!-- + Origin: Neo Kobe Collection + <rom name="SimCity.ccd" size="3615" crc="8cfd3c43" sha1="73bbff1ab3f4815dba59a4d06efbe924a584ec15"/> + <rom name="SimCity.cue" size="663" crc="0144bbeb" sha1="627f73edfbe12a485c85ae0b2c667b9df1fb32a2"/> + <rom name="SimCity.img" size="319100544" crc="9022bcdf" sha1="d2887ae8facca5a04b2b8a2b3e32135e10358b26"/> + <rom name="SimCity.sub" size="13024512" crc="4ce721ca" sha1="5783d0c685299b4f86b6325d2a0bfd7f0df5db64"/> + --> <description>SimCity</description> <year>1990</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199003xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="simcity" sha1="4f161a7cd9d5fb27f2ebd6d544310e2c42d26da6" /> @@ -3753,9 +6847,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="simc2000"> + <!-- + Origin: Neo Kobe Collection + <rom name="SimCity 2000.mdf" size="10231200" crc="139f97c2" sha1="08c09b66749cb40ccbf66540dab8c0644ceb084e"/> + <rom name="SimCity 2000.mds" size="486" crc="074eb736" sha1="1ed3df2e3207a94be87c0f7ab11da9eab7f4564d"/> + + *after conversion with IsoBuster+EAC * + <rom name="simcity 2000.bin" size="10231200" crc="139f97c2" sha1="08c09b66749cb40ccbf66540dab8c0644ceb084e"/> + <rom name="simcity 2000.cue" size="73" crc="637472be" sha1="43837e7c9f6edd018caf12fb12e9df0eb83a56f1"/> + --> <description>SimCity 2000</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199412xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="simcity 2000" sha1="b0a731372cc12dbdb5dd7140daa75cb99952cc77" /> @@ -3764,9 +6868,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="simearth"> + <!-- + Origin: Neo Kobe Collection + <rom name="SimEarth.ccd" size="6113" crc="4f860edf" sha1="198af871373683d7af8eb221ae81cae78762d398"/> + <rom name="SimEarth.cue" size="1184" crc="1e1aa2c4" sha1="987b81262a49ae2dece42ce1e11ce510f0416ad7"/> + <rom name="SimEarth.img" size="372521520" crc="20c3d4b4" sha1="87a87ac199a3f0e2b551bedf656182a56bddbfdd"/> + <rom name="SimEarth.sub" size="15204960" crc="8168beff" sha1="a3ed345ca53f58e0267c6689f79eb2a64d04ed03"/> + --> <description>SimEarth</description> <year>1991</year> - <publisher>Imagineer</publisher> + <publisher>イマジニア (Imagineer)</publisher> + <info name="release" value="199109xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="simearth" sha1="e14823bae0e649313d2dec35d889e06d2a42986a" /> @@ -3775,9 +6887,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="simfarm"> + <!-- + Origin: Neo Kobe Collection + <rom name="SimFarm.ccd" size="769" crc="e26bbad8" sha1="c1841449fe4048c64aa42ff7a3d6f85d987e275c"/> + <rom name="SimFarm.cue" size="71" crc="47a7d3b2" sha1="419e0672f851c0f1fc1e8c23db7704cbcf48733f"/> + <rom name="SimFarm.img" size="20812848" crc="dc1c9511" sha1="ffbef7b440ab38594b9c8fb2d1fac4805cec52b1"/> + <rom name="SimFarm.sub" size="849504" crc="8fa6cbb5" sha1="bd24ed0e08012943749c08ff6ba9f3fbbc21ea43"/> + --> <description>SimFarm</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199409xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="simfarm" sha1="4c87c0002006a539e04fd2bdb1b4a1c7435aa452" /> @@ -3786,9 +6906,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="smobius"> - <description>Silent Mobius</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Silent Mobius.ccd" size="10273" crc="a34a97b0" sha1="40cb769bed333c61e1835ce9cfdf3efba572c9a3"/> + <rom name="Silent Mobius.cue" size="3958" crc="a5277b33" sha1="8a8783a886b0394d825da2e13d0355430ecd7a37"/> + <rom name="Silent Mobius.img" size="605407152" crc="5af4a4ff" sha1="c7684e48842f3d341d0326e04a0804fee8e8d84a"/> + <rom name="Silent Mobius.sub" size="24710496" crc="504653ce" sha1="db15498da30eecb41b6f5b845a52b71cbc4b956a"/> + --> + <description>Silent Möbius</description> <year>1991</year> - <publisher>Gainax</publisher> + <publisher>ガイナックス (Gainax)</publisher> + <info name="release" value="199109xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="silent mobius" sha1="87a224ff3507b6ce8bc14a8f3a860ba07dcbabdf" /> @@ -3797,10 +6925,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="sotsu93"> - <description>Sotsugyou '93: Graduation</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Sotsugyou '93 - Graduation.ccd" size="1789" crc="979458af" sha1="db28d20c8c4d6535b0b72389fdb856306fb81442"/> + <rom name="Sotsugyou '93 - Graduation.cue" size="390" crc="5d7136ca" sha1="64d8771c59638859622bd03173080d833f271dfa"/> + <rom name="Sotsugyou '93 - Graduation.img" size="153044640" crc="15b362eb" sha1="3390ca78f2dbadfd353081f41977b35d84fb7647"/> + <rom name="Sotsugyou '93 - Graduation.sub" size="6246720" crc="3370d136" sha1="e06d6c05ab7a830015e147c6f0d3200ae4434988"/> + --> + <description>Sotsugyou '93 - Graduation</description> <year>1993</year> <publisher>JHV</publisher> + <info name="release" value="199310xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Play Disk" /> <dataarea name="flop" size="1261568"> <rom name="sotsugyou '93 - graduation (play disk).hdm" size="1261568" crc="fb4ac4d8" sha1="9ac7edfd20421df85d8fd469f45c3805a307023b" offset="000000" /> </dataarea> @@ -3813,9 +6950,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="splatter"> + <!-- + Origin: Neo Kobe Collection + <rom name="Splatterhouse.ccd" size="9427" crc="efe69150" sha1="ac8051d7d200dae6685681963e3fe0511d619ed6"/> + <rom name="Splatterhouse.cue" size="2593" crc="21229fde" sha1="00fbc0e25575ea4dd77c37a127d27068f6dbb46d"/> + <rom name="Splatterhouse.img" size="649857600" crc="9ceca1c0" sha1="95f708cb900a08f92d5ea31d89470b23bb173c91"/> + <rom name="Splatterhouse.sub" size="26524800" crc="6c0d9c84" sha1="db16a94f7012d6bb962a422513f8ef4b2e33ca9d"/> + --> <description>Splatterhouse</description> <year>1992</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199206xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="splatterhouse" sha1="ddd73172589f840d6feb5f55c17a011f2aa87c77" /> @@ -3824,9 +6969,37 @@ User/save disks that can be created from the game itself are not included. </software> <software name="sodyssey"> + <!-- + Origin: Neo Kobe Collection + <rom name="Super Odyssey.mdf" size="458797584" crc="6103c245" sha1="2f0576af169f4c6008d39d6ea1cc79ce08eafe7f"/> + <rom name="Super Odyssey.mds" size="2078" crc="9f1ee457" sha1="227aa5cc734e276d183040144a19713f278040dc"/> + + *after conversion with IsoBuster+EAC * + <rom name="super odyssey.cue" size="2436" crc="11f9b70c" sha1="0aa8e9d748dcc88df41e24cc288758a0049ec635"/> + <rom name="track01.bin" size="9878400" crc="8b81397f" sha1="f89c2312a5d5fba00c0bcd6c6106884aecc3570f"/> + <rom name="track02.bin" size="30851184" crc="67cc22ea" sha1="fd5b9befc721a58ef02f0acd5b7017bee712f9bc"/> + <rom name="track03.bin" size="32810400" crc="e2d4df1d" sha1="c5c13cbfd2b9b8913fa0a364a28415269c316734"/> + <rom name="track04.bin" size="31575600" crc="cbd7a6b8" sha1="90f3ad8614259e9023e811c781f00c0232364f4c"/> + <rom name="track05.bin" size="32398800" crc="d7f67e75" sha1="7f88afcfee06d75b2caa5131e54d626f3866d1fc"/> + <rom name="track06.bin" size="16405200" crc="96d32003" sha1="1e79aca0906e278c55d3634b073ebd9f344a59a8"/> + <rom name="track07.bin" size="21932400" crc="4ff67ffe" sha1="62f71752518fe809ae69a41fe07a4cced64f1a92"/> + <rom name="track08.bin" size="27518400" crc="1b22173b" sha1="6cad4cdf442050e50e95027f985ac6c0e81a9d90"/> + <rom name="track09.bin" size="26636400" crc="622eed8d" sha1="b6b4571b89515ee0db4a6cdf9e3a05e1c6ec817b"/> + <rom name="track10.bin" size="26930400" crc="84b5f65c" sha1="03e4a713217d7fb044a542def8f2c468641533d2"/> + <rom name="track11.bin" size="26871600" crc="4e95629e" sha1="44d4b74ea2ad3f1644e7651834a85cef27f6fe38"/> + <rom name="track12.bin" size="25930800" crc="4864bfb6" sha1="00f42595cfcc99196cec7ae620a948654e4f2575"/> + <rom name="track13.bin" size="26636400" crc="60681ba6" sha1="ad38fccf68861694851ac0c1f2e46056d4ae5b5f"/> + <rom name="track14.bin" size="27165600" crc="617fb392" sha1="4ebc3c5ba251413162f662097dc311fa97a74e98"/> + <rom name="track15.bin" size="26460000" crc="7ae43895" sha1="66b4902092378fe2e1f137e3fe0d565c4144bf9a"/> + <rom name="track16.bin" size="17992800" crc="860aaa1a" sha1="c5f4996218e33dd0aef5cafcab349886301981b2"/> + <rom name="track17.bin" size="16228800" crc="28a9c489" sha1="27cfa8cecfb2c1f55541e91aeb0d38f55639f3d3"/> + <rom name="track18.bin" size="18110400" crc="e914b72c" sha1="db8e1ceb94bd5de6b795762762798a47ebc0c43e"/> + <rom name="track19.bin" size="16816800" crc="1fe8aab8" sha1="381950f98ca3a8e4e31b4da550f5396baf25977e"/> + --> <description>Super Odyssey</description> <year>1989</year> - <publisher>Wave Train</publisher> + <publisher>ウェーブトレイン (Wave Train)</publisher> + <info name="release" value="198912xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="super odyssey" sha1="c96c408d52c6d89374b7236de7af9751b0bcdefb" /> @@ -3835,9 +7008,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="sotb"> - <description>Shadow of the Beast: Mashou no Okite</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Shadow of the Beast.bin" size="496152048" crc="c641b3e1" sha1="2d89c60f9890bad31de4fa7b99a9717ef50700d9"/> + <rom name="Shadow of the Beast.cue" size="372" crc="f5b6be57" sha1="9c0528ecc6b4693cf064084ade0cfaca7d1eeccf"/> + --> + <description>Shadow of the Beast - Mashou no Okite</description> <year>1991</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199109xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="shadow of the beast" sha1="0a87b1db41996c77b6552a598dc698f32c9a72df" /> @@ -3845,11 +7024,29 @@ User/save disks that can be created from the game itself are not included. </part> </software> - <!-- Original image from the redump.org database --> <software name="sotb2"> - <description>Shadow of the Beast II: Juushin no Jubaku</description> + <!-- + Origin: redump.org + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 01).bin" size="73735200" crc="153631da" sha1="f3f3109f0c5e95d549de3c63efe9e21baff638cb"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 02).bin" size="230027952" crc="a4bd4cd1" sha1="674cd62a5196348be87a98d97c47dcf8b6f7ba47"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 03).bin" size="26283600" crc="943f1f72" sha1="e247dd670c7e7ed93db6c5ca1509dffa60461f1f"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 04).bin" size="75675600" crc="53add578" sha1="b0694f2f7d94c29f99b073b8cc3dd1705404bc1b"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 05).bin" size="57506400" crc="a62fb91a" sha1="796fd5ef7338cd14cc64ab92104187e54b4ccdfa"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 06).bin" size="28400400" crc="1946251d" sha1="ea82bc3a5d9b2415de0ecad0f462bcda64b6166d"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 07).bin" size="24166800" crc="c774a5f6" sha1="d17a5e44d6b24c71c1a1569593c8f5473e3779d3"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 08).bin" size="23990400" crc="7dbf0f6b" sha1="e33ba03ba69c028849f4f38e942893aa8da18284"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 09).bin" size="24166800" crc="51a3727a" sha1="c68086d226104fc6d1cb7277bfee793e2f48c955"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 10).bin" size="32810400" crc="07f2e5d4" sha1="ec502f5f58052f61b1dbaa5a4d4cf22a1aff0d10"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 11).bin" size="27518400" crc="f8ba8152" sha1="f6013237810410a36a2b0fe044a8a4700a89539b"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 12).bin" size="6350400" crc="3e61ffee" sha1="6a3eff66fc8875bc97ae5805207d57cd197051bc"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 13).bin" size="6174000" crc="7b3fdd62" sha1="f999dbf2165edaae9da0633ae71cdbf485fc164f"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan) (track 14).bin" size="9525600" crc="304265dd" sha1="aa67c9461d147add5444612c96a851e2402944ce"/> + <rom name="shadow of the beast ii - juushin no jubaku (japan).cue" size="2035" crc="ae3b3ca9" sha1="c91ca1a0b2255feecc05aea14e0b615dace51cac"/> + --> + <description>Shadow of the Beast II - Juushin no Jubaku</description> <year>1993</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199306xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="shadow of the beast ii - juushin no jubaku (japan)" sha1="39c34e8c2bc89404431c1be99144a3cd32998664" /> @@ -3858,9 +7055,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="srmp23"> + <!-- + Origin: Neo Kobe Collection + <rom name="Super Real Mahjong PII & PIII.ccd" size="5684" crc="e5b7db87" sha1="2969da0c07c5cc09cc95f66424a46de1c17a1a5d"/> + <rom name="Super Real Mahjong PII & PIII.cue" size="1125" crc="076fbdbf" sha1="43569bbd393943acaa605c9010aaee66af9296c6"/> + <rom name="Super Real Mahjong PII & PIII.img" size="422125200" crc="7ce9b8de" sha1="5e7b600ff890b9c36797e1428c52b4e4dd9101d6"/> + <rom name="Super Real Mahjong PII & PIII.sub" size="17229600" crc="fb5d6afc" sha1="7d0a0853fa1a55cf5dc597dd62f40045ad3f8013"/> + --> <description>Super Real Mahjong PII & PIII</description> <year>1992</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199204xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="super real mahjong pii & piii" sha1="8bdb2f443e29fe0b193d162be3a497987fa340ec" /> @@ -3869,9 +7074,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="srmp4"> + <!-- + Origin: Neo Kobe Collection + <rom name="Super Real Mahjong PIV.ccd" size="3246" crc="bd709e7f" sha1="0fac66872e993450537d6453e256b4264718bc15"/> + <rom name="Super Real Mahjong PIV.cue" size="810" crc="69c7410d" sha1="4c2afb3a87b1fea674a9661f73c0aae0981f72e6"/> + <rom name="Super Real Mahjong PIV.img" size="631147440" crc="9a2828a2" sha1="480ff732dc3c00d76319aa0b60188ba0f9ffa7ae"/> + <rom name="Super Real Mahjong PIV.sub" size="25761120" crc="bba3c143" sha1="407479f464d5af8b979b22e70549451a21707893"/> + --> <description>Super Real Mahjong PIV</description> <year>1994</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199405xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="super real mahjong piv" sha1="f4bb6c4f57b02080fd734238ca7cf33e5d729eb3" /> @@ -3880,9 +7093,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="srogue"> + <!-- + Origin: Neo Kobe Collection + <rom name="Space Rogue.cue" size="2422" crc="505ed099" sha1="e7c51ba8a662bfb88c392cb1e71f051c80028533"/> + <rom name="Space Rogue.iso" size="341863200" crc="54c6360a" sha1="1eedb92c1c0668c5abe8d2a459f11263a48eb238"/> + --> <description>Space Rogue</description> <year>1990</year> - <publisher>Wave Train</publisher> + <publisher>ウェーブトレイン (Wave Train)</publisher> + <info name="release" value="199007xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="space rogue" sha1="f409d07391dfdff739241710df792ddd84531a85" /> @@ -3890,14 +7109,20 @@ User/save disks that can be created from the game itself are not included. </part> </software> - <!-- + <!-- This version seems to remove some kind of disc check (copy protection?). Not sure when it was made or who made it. --> <software name="sroguend"> + <!-- + Origin: Neo Kobe Collection + <rom name="Space Rogue (no disk check).cue" size="2438" crc="10b5891a" sha1="8456354802bb2dc2f2d01c11e9843d3e8d90849f"/> + <rom name="Space Rogue (no disk check).iso" size="341863200" crc="68031b4a" sha1="97b96446dd1717a1d9d00411d050a5082b2ef740"/> + --> <description>Space Rogue (no disc check)</description> <year>1990</year> - <publisher>Wave Train</publisher> + <publisher>ウェーブトレイン (Wave Train)</publisher> + <info name="release" value="199007xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="space rogue (no disk check)" sha1="29b752371f08eb772eb91b4f8c268ea7efd8102f" /> @@ -3906,9 +7131,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ssf2"> - <description>Super Street Fighter II: The New Challengers</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Super Street Fighter II.ccd" size="9988" crc="95fcd44b" sha1="06be9b207e6e45356ac451d1f1b9c2552ad63f4a"/> + <rom name="Super Street Fighter II.cue" size="2037" crc="016977eb" sha1="010dd60e3fdd13f28d954e729785584020f37b75"/> + <rom name="Super Street Fighter II.img" size="465733632" crc="ccc32114" sha1="cbe65c9f0839339a74867ac1758b9de441c96fdd"/> + <rom name="Super Street Fighter II.sub" size="19009536" crc="e0c73ae0" sha1="871fb0e535d2418ac8008d5b9817f09f7e9db37c"/> + --> + <description>Super Street Fighter II - The New Challengers</description> <year>1994</year> - <publisher>Capcom</publisher> + <publisher>カプコン (Capcom)</publisher> + <info name="release" value="199410xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="super street fighter ii" sha1="97ddbbc746d7b7f6fb72e57a6b443efab384b30c" /> @@ -3917,9 +7150,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ssf2samp"> - <description>Super Street Fighter II: The New Challengers (Sample Disc)</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Super Street Fighter II (Sample Disc).bin" size="33311376" crc="e51369b5" sha1="813e8435518d71468f05fe1b2977a71a304ee4a8"/> + <rom name="Super Street Fighter II (Sample Disc).cue" size="421" crc="df35d025" sha1="a3aaa59d86716feda3b29e594d456810c2b703db"/> + --> + <description>Super Street Fighter II - The New Challengers (Sample Disc)</description> <year>1994</year> - <publisher>Capcom</publisher> + <publisher>カプコン (Capcom)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="super street fighter ii (sample disc)" sha1="6eae776377e80ae43950f47c4f930df36b63c6d6" /> @@ -3928,9 +7166,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="sshang"> - <description>Super Shanghai: Dragon's Eye</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Super Shanghai - Dragon's Eye.ccd" size="5342" crc="7c747654" sha1="d7b25c34dd9992a03ee1b5157bfa1f66f1ef4350"/> + <rom name="Super Shanghai - Dragon's Eye.cue" size="1045" crc="60dc8a26" sha1="4bd3ea8d37f6d55741fdf9e0bba22db334af863c"/> + <rom name="Super Shanghai - Dragon's Eye.img" size="499917600" crc="1d6e5c1e" sha1="8d5056af7328d2e00ba9e9cb57bd880060c2c64f"/> + <rom name="Super Shanghai - Dragon's Eye.sub" size="20404800" crc="cc998f20" sha1="a55336efbd1ce9261a1efa159cf7d13b00b22c0b"/> + --> + <description>Super Shanghai - Dragon's Eye</description> <year>1991</year> - <publisher>Hot-B</publisher> + <publisher>HOT・B</publisher> + <info name="release" value="199111xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="super shanghai - dragon's eye" sha1="3e8abecc76e6cb5f98c3d40398e71a0f3600e45a" /> @@ -3943,25 +7189,40 @@ User/save disks that can be created from the game itself are not included. Also, the floppy disk seems to be an overdump. --> <software name="sspirits"> + <!-- + Origin: Neo Kobe Collection + <rom name="Samurai Spirits.bin" size="524020896" crc="f48ab264" sha1="bbb99a5209d5513a3dbee8f9a6730545aa7718fd"/> + <rom name="Samurai Spirits.cue" size="1414" crc="68d636f8" sha1="a92650884363dd1b6c8252ac0ae9ed8ba3a1bc11"/> + --> <description>Samurai Spirits</description> <year>1995</year> <publisher>JHV</publisher> + <info name="release" value="199509xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1281280"> <rom name="samurai spirits (boot disk).bin" size="1281280" crc="2f1793ac" sha1="bd0f7f5f3fc4b0bd58d04812449cae853b58b5a8" offset="000000" /> </dataarea> </part> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> - <disk name="samurai spirits" sha1="a84aa3a6017000284af369e5bccd3904e9aceaeb" /> + <disk name="samurai spirits" sha1="a84aa3a6017000284af369e5bccd3904e9aceaeb" status="baddump" /> </diskarea> </part> </software> <software name="sshootin"> + <!-- + Origin: Neo Kobe Collection + <rom name="Super Shooting Towns.ccd" size="2659" crc="fe3d8ed3" sha1="f27a4c308ceda7cdbfab5ce964f3e9d853b27ae1"/> + <rom name="Super Shooting Towns.cue" size="476" crc="8c00594a" sha1="dac0da195d421b6bf5123b4c2ce54666b2a670eb"/> + <rom name="Super Shooting Towns.img" size="356328000" crc="55c5c739" sha1="13443141afa1ac481391d328e4cb6353e06d83b8"/> + <rom name="Super Shooting Towns.sub" size="14544000" crc="8fa3ec47" sha1="dc6d42ab4ba10cd2f319098a177867db9e48d626"/> + --> <description>Super Shooting Towns</description> <year>1991</year> - <publisher>Amorphous</publisher> + <publisher>アモルファス (Amorphous)</publisher> + <info name="release" value="199112xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="super shooting towns" sha1="64dd74baedfc4ef6c2bcdd96b8dd449c8beb36a2" /> @@ -3970,10 +7231,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="starcru2"> - <description>Star Cruiser II: The Odysseus Project</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Star Cruiser 2.ccd" size="2281" crc="6c5ccd00" sha1="f774316f9c4dddb02bd131de0441207a84e1a1e0"/> + <rom name="Star Cruiser 2.cue" size="390" crc="cb334842" sha1="ca7e587aefe8f4b49ffc470e6a30b2717f398592"/> + <rom name="Star Cruiser 2.img" size="241849104" crc="de3aeac6" sha1="d452aa0f644f737a87137327a4b80931b8e0bddb"/> + <rom name="Star Cruiser 2.sub" size="9871392" crc="fcc2e4d4" sha1="62a5d3b88563dc365298ca59ee60b664f0726d66"/> + --> + <description>Star Cruiser II - The Odysseus Project</description> <year>1994</year> <publisher>JHV</publisher> + <info name="release" value="199404xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> <dataarea name="flop" size="1261568"> <rom name="star cruiser 2 (user disk).hdm" size="1261568" crc="7d3863c4" sha1="2327aa7adb0209306dfd3c3945fcb115730175cd" offset="000000" /> </dataarea> @@ -3986,9 +7256,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="strike"> + <!-- + Origin: Neo Kobe Collection + <rom name="Strike Commander.ccd" size="770" crc="91c09160" sha1="c1b6eb7520ccc118fb806363f08f130d414057fb"/> + <rom name="Strike Commander.cue" size="80" crc="2aeb3159" sha1="c5aa55eee16773628a5d891961eae748af64122e"/> + <rom name="Strike Commander.img" size="126321216" crc="58db3c67" sha1="e7c96197ef9252234bbed00a33332b71ed82f5d4"/> + <rom name="Strike Commander.sub" size="5155968" crc="b1b319dd" sha1="f67a0af1c4e9bf9561f57ded66dbaa1bf46d8bb6"/> + --> <description>Strike Commander</description> <year>1994</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199408xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="strike commander" sha1="4ce5635dfe368cedfe0d61fb46a11d8f7fb2c083" /> @@ -3997,9 +7275,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="strikpls"> + <!-- + Origin: Neo Kobe Collection + <rom name="Strike Commander Plus.ccd" size="783" crc="43cb88e0" sha1="75987bb1be0b59730854bc118c18ca59f644da35"/> + <rom name="Strike Commander Plus.cue" size="85" crc="d3f9e194" sha1="7cb8ae66d1f02abf530e949b1d73dcbb22afa6ed"/> + <rom name="Strike Commander Plus.img" size="94218768" crc="74939c73" sha1="3a8151bbc1ff1f34e9728ddbd2cbf987d2c2158c"/> + <rom name="Strike Commander Plus.sub" size="3845664" crc="6860d444" sha1="3a8439fcbc5c5ff809fd1305d64eb4e9f660edf9"/> + --> <description>Strike Commander Plus</description> <year>1995</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199504xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="strike commander plus" sha1="c926c123e3c0c8e439b16c27ecca3b420e1964bb" /> @@ -4008,9 +7294,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="strghold"> + <!-- + Origin: Neo Kobe Collection + <rom name="Stronghold.ccd" size="767" crc="b290b468" sha1="6794cc910b1e5f3af2395a61b76eed613be9db47"/> + <rom name="Stronghold.cue" size="74" crc="0d723c5b" sha1="8c73cf3ec172a40c7e9de6a1ea948c78487236af"/> + <rom name="Stronghold.img" size="10231200" crc="d6331e64" sha1="aa09a63e13b2a7ebbc2aab50636e74d524eaef11"/> + <rom name="Stronghold.sub" size="417600" crc="85c37af1" sha1="278b6233d247a22ff5702f40c5cb2fccddbb46e6"/> + --> <description>Stronghold</description> <year>1994</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199406xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="stronghold" sha1="dfebcbaaa112dfd262945e20bb881fc6f54e7f07" /> @@ -4019,9 +7313,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="syndcate"> + <!-- + Origin: Neo Kobe Collection + <rom name="Syndicate.mdf" size="20815200" crc="2ee5e8a4" sha1="efa2c4272df66b1cd239197410f16e882adc5f72"/> + <rom name="Syndicate.mds" size="486" crc="bc9564e9" sha1="d860d2fca76ac74becf88ab2eb85b11323ff899f"/> + + *after conversion with IsoBuster+EAC * + <rom name="syndicate.bin" size="20815200" crc="2ee5e8a4" sha1="efa2c4272df66b1cd239197410f16e882adc5f72"/> + <rom name="syndicate.cue" size="70" crc="631bc9c8" sha1="83df5bc028ec0542fef2b5e3ebc2de210df216a8"/> + --> <description>Syndicate</description> <year>1994</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199407xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="syndicate" sha1="d676fb5d4345ec464740c1b9c53327df0925a46a" /> @@ -4030,9 +7334,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="taiken93"> + <!-- + Origin: Neo Kobe Collection + <rom name="Taikenban CD.ccd" size="753" crc="5f366f82" sha1="9e3905d566e7cde8cfdd2ace47e870838d7f61ae"/> + <rom name="Taikenban CD.cue" size="94" crc="a5ee2a98" sha1="7c432e082de327e5330db6522d227f46a7f02aee"/> + <rom name="Taikenban CD.img" size="284709600" crc="772123dc" sha1="07d373dc9de8c7f421a49a359d9f8e11437512d5"/> + <rom name="Taikenban CD.sub" size="11620800" crc="edf596b4" sha1="a60cd2a8c98045917dfa41f7eed5bf78d0354e52"/> + --> <description>Towns Taikenban CD '93</description> <year>1993</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="taikenban cd" sha1="4bfe5252ef91a95b06a2ece9b60f110cf913d980" /> @@ -4041,9 +7352,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="taikou"> + <!-- + Origin: Neo Kobe Collection + <rom name="Taikou Risshinden.ccd" size="3261" crc="e1a4304d" sha1="8dff4c1b3ad4693b5b5b6b6f4fe63b931cc37a64"/> + <rom name="Taikou Risshinden.cue" size="614" crc="0db78a9d" sha1="6285de87776e5980fcd0fd4ba0f916e0769239a5"/> + <rom name="Taikou Risshinden.img" size="513102912" crc="0c67d2e6" sha1="c3abc281bee2c74eaf75ab0a444d3fb15d50683a"/> + <rom name="Taikou Risshinden.sub" size="20942976" crc="c38fc15e" sha1="bff84a3b38dde076c8aeb9c972b4e71bfbdc9f57"/> + --> <description>Taikou Risshinden</description> <year>1992</year> - <publisher>Koei</publisher> + <publisher>å…‰æ „ (Koei)</publisher> + <info name="release" value="199205xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="taikou risshinden" sha1="b66a2e514c893103f7fdc8b0c5850529d96f51ea" /> @@ -4052,9 +7371,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="takamiza"> - <description>Takamizawa Kyosuke: Nekketsu!! Kyouiku Kenshuu</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Takamizawa Kyosuke - Nekketsu!! Kyouiku Kenshuu.ccd" size="3627" crc="523d5414" sha1="38a3d547c0c351e201fb2faa2f4fe05080d81b01"/> + <rom name="Takamizawa Kyosuke - Nekketsu!! Kyouiku Kenshuu.cue" size="703" crc="81f0c8ab" sha1="f0bc997d4643da5ebb15341f67981507587eac16"/> + <rom name="Takamizawa Kyosuke - Nekketsu!! Kyouiku Kenshuu.img" size="445943904" crc="0f83a769" sha1="b417cc433d6946ea6939e4f80b722bccb038318f"/> + <rom name="Takamizawa Kyosuke - Nekketsu!! Kyouiku Kenshuu.sub" size="18201792" crc="1412cb19" sha1="28071814e73145f6e9ca4eb16a1704fb00ab6109"/> + --> + <description>Takamizawa Kyosuke - Nekketsu!! Kyouiku Kenshuu</description> <year>1995</year> - <publisher>ZyX</publisher> + <publisher>ジックス (ZyX)</publisher> + <info name="release" value="199501xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="takamizawa kyosuke - nekketsu!! kyouiku kenshuu" sha1="ce13831f3094f9ab53c392480ece497c9b3c7997" /> @@ -4063,10 +7390,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tanjou"> - <description>Tanjou: Debut</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Tanjou - Debut.ccd" size="972" crc="b9c249db" sha1="50d96c9509eb76c8de503d152295de03aa29a232"/> + <rom name="Tanjou - Debut.cue" size="138" crc="eed9520f" sha1="b0f9dccd2843b62b078925d2ef1fb798e7e4ea93"/> + <rom name="Tanjou - Debut.img" size="55401360" crc="e7fa4c3b" sha1="1387e54fad5bd7636afee3d7a0b9ac1c8baecd3f"/> + <rom name="Tanjou - Debut.sub" size="2261280" crc="d37b24b0" sha1="9a288b4a6d53e9edf3b4f4b15e3a5c695bf0645b"/> + --> + <description>Tanjou - Debut</description> <year>1994</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199404xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Key Disk" /> <dataarea name="flop" size="1261568"> <rom name="tanjou - debut (key disk).hdm" size="1261568" crc="d731671d" sha1="7da7523a000aee0e4a3ee7cd73ee78109f54ea85" offset="000000" /> </dataarea> @@ -4079,9 +7415,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tatsuou"> + <!-- + Origin: Neo Kobe Collection + <rom name="Tatsujin Oh.ccd" size="2677" crc="5385c746" sha1="cdd05fe21013bef94dccf38481b7bc1e6790ac6b"/> + <rom name="Tatsujin Oh.cue" size="488" crc="851f0921" sha1="fa6fc02d54cb17582255e64780b948aa346f8a73"/> + <rom name="Tatsujin Oh.img" size="344325744" crc="b6298ebe" sha1="175e8b6e1a7fec115785f288e22db374d959c364"/> + <rom name="Tatsujin Oh.sub" size="14054112" crc="6cd82894" sha1="84b64a44c9ade15319205bd62cbd69e29b5e8489"/> + --> <description>Tatsujin Ou</description> <year>1993</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199304xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="tatsujin oh" sha1="ee1b312958a139fc3a5329f4a9dae662286d3705" /> @@ -4090,9 +7434,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tdf"> - <description>TDF: Terrestrial Defense Force</description> + <!-- + Origin: Neo Kobe Collection + <rom name="TDF - Terrestrial Defense Force.ccd" size="1896" crc="f869642e" sha1="c0c5e17b27a49f12fc0f20542500c2bfda4d46f3"/> + <rom name="TDF - Terrestrial Defense Force.cue" size="329" crc="9de63ba6" sha1="85644f425978c5a08eceaa3171eeef18eb376064"/> + <rom name="TDF - Terrestrial Defense Force.img" size="160606320" crc="1adea170" sha1="79296eec6cbc866e81ff1b862deedc1d723331e4"/> + <rom name="TDF - Terrestrial Defense Force.sub" size="6555360" crc="589616ea" sha1="f63ee1d3114a90445a6765c8afd9fb691b231f57"/> + --> + <description>TDF - Terrestrial Defense Force</description> <year>1990</year> - <publisher>Data West</publisher> + <publisher>データウエスト (Data West)</publisher> + <info name="release" value="199009xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="tdf - terrestrial defense force" sha1="584ac4f25e5cc1f38857d26b5dc988219ae5646b" /> @@ -4101,10 +7453,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tenkagom"> + <!-- + Origin: Neo Kobe Collection + <rom name="Tenka Gomen.ccd" size="1981" crc="f1273e79" sha1="c0bf56d18f4518081c83f7d82efe693fc9914710"/> + <rom name="Tenka Gomen.cue" size="435" crc="2d9100ef" sha1="60680160dea16fca4ccc820c2273afa39c63e01a"/> + <rom name="Tenka Gomen.img" size="131241600" crc="4c277c73" sha1="5c42676059c6a0f88427b40088a67d93d9e2efad"/> + <rom name="Tenka Gomen.sub" size="5356800" crc="ba17a61c" sha1="4d8c31f194311277c21b8c3021a42e9c8ad34499"/> + --> <description>Tenka Gomen</description> <year>1994</year> - <publisher>Artdink</publisher> + <publisher>アートディンク (Artdink)</publisher> + <info name="release" value="199406xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="tenka gomen (system disk).hdm" size="1261568" crc="ed6a772a" sha1="b67203849d45824fcb6afac6610621ca95b23966" offset="000000" /> </dataarea> @@ -4117,6 +7478,13 @@ User/save disks that can be created from the game itself are not included. </software> <software name="thedate"> + <!-- + Origin: Neo Kobe Collection + <rom name="The Date.ccd" size="13039" crc="40f3ce4d" sha1="34477c78066e6dc9d089a285f292e761ea4bc9b3"/> + <rom name="The Date.cue" size="2624" crc="45e91022" sha1="5bfbb845c4b2c936f96f84a6c27b4ad67282a3cd"/> + <rom name="The Date.img" size="409777200" crc="0a716a03" sha1="488cb7fb1d8bec43aab898415db7db5d34d4e357"/> + <rom name="The Date.sub" size="16725600" crc="976e582f" sha1="8338e4a5208abbdb6cbd9c1da80920628853e8e9"/> + --> <description>The Date</description> <year>1990</year> <publisher>JAMP</publisher> @@ -4128,9 +7496,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="thehorde"> + <!-- + Origin: Neo Kobe Collection + <rom name="The Horde.ccd" size="3063" crc="72d2dad6" sha1="4cce603c4e734e24bdf1c92c69e77e4d9e67f869"/> + <rom name="The Horde.cue" size="545" crc="3d6563a0" sha1="3bb73919091305cc9c3f97f633e199f3014a510c"/> + <rom name="The Horde.img" size="594475056" crc="9051c6ae" sha1="891ebf3a54d3cbc90f19eca53937ea2fe58ec771"/> + <rom name="The Horde.sub" size="24264288" crc="3f5c25df" sha1="382903ea64069ae6c8755fe664ad5dade291ac60"/> + --> <description>The Horde</description> <year>1995</year> - <publisher>Arrow Micro-Techs</publisher> + <publisher>ã‚¢ãƒãƒ¼ãƒžã‚¤ã‚¯ãƒãƒ†ãƒƒã‚¯ã‚¹ (Arrow Micro-Techs)</publisher> + <info name="release" value="199504xx" /> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -4140,9 +7516,26 @@ User/save disks that can be created from the game itself are not included. </software> <software name="titan"> + <!-- + Origin: Neo Kobe Collection + <rom name="Titan.mdf" size="219824976" crc="2ade491f" sha1="cd0bf80ccaa1ba8956b4da84266c6769a2abeeb7"/> + <rom name="Titan.mds" size="1722" crc="5ed8ebc9" sha1="1c94068577cad32df2b3766dcfb1772bfebb3036"/> + + *after conversion with IsoBuster+EAC * + <rom name="titan.cue" size="1105" crc="ac985fdd" sha1="97fe25cc4460a9c6af9559b0ae0a4b963fde198b"/> + <rom name="track01.bin" size="3880800" crc="38fc974e" sha1="95e6d3c8494d2c5879e9f201904f81aab3207601"/> + <rom name="track02.bin" size="33715920" crc="e6246e57" sha1="e3d55438231ff139e460a4ac360269842cc891b8"/> + <rom name="track03.bin" size="30658320" crc="dda98071" sha1="b50165fffc55b87f53104246546cca09919ff3dc"/> + <rom name="track04.bin" size="24841824" crc="e74a2642" sha1="634c16f383621b5ab9a3f09f5c8eceae6eac6e17"/> + <rom name="track05.bin" size="39226656" crc="6335cfa0" sha1="b05c5a772c5961ae74e62b0b7ab6fdf8ee423aa6"/> + <rom name="track06.bin" size="25025280" crc="68cca47d" sha1="b6cc1687108b0a955143fe2ba3673b84f2573400"/> + <rom name="track07.bin" size="35378784" crc="2519e64a" sha1="c9248610aba38747f7909d1d908422dc7e706180"/> + <rom name="track08.bin" size="27450192" crc="f152951e" sha1="160e46559b32606dbe889195ae50c629cbd390f4"/> + --> <description>Titan</description> <year>1989</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="198911xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="titan" sha1="bb35134376680af0908f7a85501fbd9e50e81168" /> @@ -4151,9 +7544,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tnzs"> - <description>The NewZealand Story</description> + <!-- + Origin: Neo Kobe Collection + <rom name="The New Zealand Story.ccd" size="773" crc="067f2f1f" sha1="f373b160cabc4b5d7e0d606f78336b3c5a217a08"/> + <rom name="The New Zealand Story.cue" size="126" crc="2453d23b" sha1="6911ebc304b60122b49933e4dc940a16eb254a6b"/> + <rom name="The New Zealand Story.img" size="3528000" crc="1aa9de77" sha1="41ad193cfa00c6a66b16a11a466025bb6b00f4a2"/> + <rom name="The New Zealand Story.sub" size="144000" crc="ca7fa012" sha1="c9b7ab8bef81071416697e7a7b764f8beac732dc"/> + --> + <description>The New Zealand Story</description> <year>1989</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="198908xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="the new zealand story" sha1="d523a6bc0fbee6aa874de47de192c639ae97a3cf" /> @@ -4162,10 +7563,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tokio"> + <!-- + Origin: Neo Kobe Collection + <rom name="Tokio.ccd" size="3068" crc="ee1b902c" sha1="49352ac299c92a2011884b5cc2978b414c0da49d"/> + <rom name="Tokio.cue" size="541" crc="8c781c27" sha1="94abda4280582349a82234c5a3c2b5d58c3c9bb1"/> + <rom name="Tokio.img" size="675506160" crc="4b68b3fe" sha1="26595128de9848ad53ae565a282d7308ea642b50"/> + <rom name="Tokio.sub" size="27571680" crc="2c0b48b3" sha1="ba27324c973cff63f27892795cf9b4fc6471a780"/> + --> <description>Tokio</description> <year>1992</year> - <publisher>Artdink</publisher> + <publisher>アートディンク (Artdink)</publisher> + <info name="release" value="199212xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> <dataarea name="flop" size="1261568"> <rom name="tokio (system disk).hdm" size="1261568" crc="664f6038" sha1="d2ceb4c0488cf252edf8eb912d707270c886747e" offset="000000" /> </dataarea> @@ -4178,9 +7588,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="toushin2"> - <description>Toushin Toshi II: Soshite, Sorekara...</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Toushin Toshi II - Soshite Sorekara....ccd" size="3809" crc="9c8e2336" sha1="02d5cc4f6c53bf8119209973cc8997e0419baa2c"/> + <rom name="Toushin Toshi II - Soshite Sorekara....cue" size="734" crc="3e4aeed0" sha1="1255131b3bc12841660561cb72bd1e6936d469ff"/> + <rom name="Toushin Toshi II - Soshite Sorekara....img" size="340814208" crc="b51f44d5" sha1="c5595ca4e7db9b15b4b802b1c8d94decf9f56b35"/> + <rom name="Toushin Toshi II - Soshite Sorekara....sub" size="13910784" crc="b64a2761" sha1="c1c3ad052d27c34c7f2a4fdd731e52d0a33fd27d"/> + --> + <description>Toushin Toshi II - Soshite, Sorekara...</description> <year>1995</year> - <publisher>Alice Soft</publisher> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199512xx" /> <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> @@ -4190,10 +7608,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tqod"> + <!-- + Origin: Neo Kobe Collection + <rom name="The Queen Of Duellist.cue" size="479" crc="d249b1cd" sha1="56ff832f3bcdf066f3022fae3b40a7d66deddd72"/> + <rom name="The Queen Of Duellist.img" size="542100720" crc="12c515ea" sha1="d8b65e806f02006c3cef3c485c2ecf4f73283bc4"/> + --> <description>The Queen of Duellist</description> <year>1993</year> - <publisher>Agumix</publisher> + <publisher>アグミックス (Agumix)</publisher> + <info name="release" value="199306xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> <dataarea name="flop" size="1261568"> <rom name="the queen of duellist (user disk).hdm" size="1261568" crc="4be69833" sha1="b41753c9994b71a4c6634807fe437b465defde5a" offset="000000" /> </dataarea> @@ -4206,9 +7631,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="toutrun"> + <!-- + Origin: Neo Kobe Collection + <rom name="Turbo OutRun.bin" size="320871600" crc="034e98e6" sha1="3a0a476e0874697f745ae4f9c3b2c8bd7cc48892"/> + <rom name="Turbo OutRun.cue" size="427" crc="ebc64d8b" sha1="ab24153f572c8dbb4cda729b0d01b00221056c22"/> + --> <description>Turbo Out Run</description> <year>1989</year> <publisher>CRI</publisher> + <info name="release" value="198912xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="turbo outrun" sha1="35a8ec4cf334ee803abfdadd798e1fccee644776" /> @@ -4217,9 +7648,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="townsmg1"> + <!-- + Origin: Neo Kobe Collection + <rom name="Towns Magazine Vol. 1.bin" size="294366912" crc="f2fd6eb1" sha1="5e20836562d807c7c1f1f4041cef8214b92b3c59"/> + <rom name="Towns Magazine Vol. 1.cue" size="87" crc="d8b288cf" sha1="1e7badb77f299b3049f2ec259f99e55a16d0061d"/> + --> <description>Towns Magazine Vol. 1</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="towns magazine vol. 1" sha1="eab53db6a65d7d7030da1b9e7c5a93a19bd2f279" /> @@ -4228,9 +7664,21 @@ User/save disks that can be created from the game itself are not included. </software> <software name="townsmg2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Towns Magazine Vol. 2 (Disc 1).ccd" size="754" crc="5c5ac8b1" sha1="0e4a0d1113c21e5df78f5b9267ddc624a978d23f"/> + <rom name="Towns Magazine Vol. 2 (Disc 1).cue" size="112" crc="74a74a29" sha1="7fccdc2aa133ee77a3aa1a56bcf356f569a5cf00"/> + <rom name="Towns Magazine Vol. 2 (Disc 1).img" size="503934816" crc="98f1294a" sha1="28f6eeb20a8094b54b189f98ea28bdad6cfc6337"/> + <rom name="Towns Magazine Vol. 2 (Disc 1).sub" size="20568768" crc="a2162c51" sha1="0c29b09dbf223035a1e43c45eee6af783b929544"/> + + <rom name="Towns Magazine Vol. 2 (Disc 2).ccd" size="5011" crc="0e3d17e5" sha1="0055a9fcba055864c3fe8cd80e5fc0d72918371f"/> + <rom name="Towns Magazine Vol. 2 (Disc 2).cue" size="1840" crc="92aa48bc" sha1="3ddb4dd28cb5c790af0776cf98f31cb8d81607a9"/> + <rom name="Towns Magazine Vol. 2 (Disc 2).img" size="680551200" crc="d97df31f" sha1="8064a1cc858f8f4089a32519081d285b2aa39281"/> + <rom name="Towns Magazine Vol. 2 (Disc 2).sub" size="27777600" crc="44b99036" sha1="c3ddeb7942be63e1b36e63525dd40024890281bb"/> + --> <description>Towns Magazine Vol. 2</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom1" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="towns magazine vol. 2 (disc 1)" sha1="65d208a41d0089eb11f7607e0a78fba60fbdbaa4" /> @@ -4244,9 +7692,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="trigger"> + <!-- + Origin: Neo Kobe Collection + <rom name="Trigger.ccd" size="1335" crc="ce397f34" sha1="4c862a13fb30162b64b56558ac91cafba82f03fd"/> + <rom name="Trigger.cue" size="188" crc="3fbd34d9" sha1="690c4d21ecc3e4c19ba513039d48397c09ad060f"/> + <rom name="Trigger.img" size="153319824" crc="b01773aa" sha1="13e992f0c663a7a9a11d993d670eb46a9b2423a3"/> + <rom name="Trigger.sub" size="6257952" crc="91bf4518" sha1="3a2d9fc3fdf30fff772eaaf1522469da83a2e544"/> + --> <description>Trigger</description> <year>1994</year> - <publisher>ZyX</publisher> + <publisher>ジックス (ZyX)</publisher> + <info name="release" value="199406xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="trigger" sha1="4e6040576d084861e6fd478a8fbfb6b6723c7596" /> @@ -4255,9 +7711,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tss1110"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] Towns System Software v1.1 L10.bin" size="409732480" crc="441b8037" sha1="ae188a5d94430e0d8820b10e1e265c426124b90d"/> + <rom name="[OS] Towns System Software v1.1 L10.cue" size="1123" crc="9d95bc5c" sha1="0a5ce0ee30ed7bc8f5d0192ee9c5c3ae3d2ea71b"/> + --> <description>Towns System Software v1.1 L10</description> <year>1989</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="[os] towns system software v1.1 l10" sha1="4cc560ebcf22337d4b6ae7143dafc2410c07907a" /> @@ -4266,9 +7727,34 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tss1120"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] Towns System Software v1.1 L20 (Track 01).iso" size="91852800" crc="df89936d" sha1="12e6611faa3e5a154719c29bf50252f4e63337ac"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 02).flac" size="1505788" crc="a6a7e47d" sha1="2e3a95c7c931a24b9dd3795f28c2c72b963dd71d"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 03).flac" size="3360024" crc="8d99f4fd" sha1="827d3521140359bba53cf2d4e87cf81dfa88b25d"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 04).flac" size="1669920" crc="489312df" sha1="c81f95c1103a8f21faea65ff0cda7b7691d0c9c5"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 05).flac" size="1226450" crc="49c27e14" sha1="8baf6b8a796cc5c55e873c224dcb2a16110dee4d"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 06).flac" size="1078022" crc="08735aee" sha1="01e1de9cf9ed24d715227069a3f73e26669f76e9"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 07).flac" size="1685763" crc="2addf478" sha1="5aee6f7621f0a83d2f08a39e5eab6e4d8763364a"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 08).flac" size="1105345" crc="9409f5d6" sha1="7d7c4b1cccd9fa54414291542abff94bff69d8ee"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 09).flac" size="1771088" crc="d2634ba4" sha1="0edd96b8bb638777eae9fd855b73923dfebdf94f"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 10).flac" size="1418108" crc="db9d4110" sha1="635390b051df58173405632e1f20bbaed0f8005a"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 11).flac" size="879921" crc="03c2767d" sha1="bef10c3e1a6a2802c7b973640d976baa177f0a6b"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 12).flac" size="24237627" crc="0e918027" sha1="86114f286e80be8c846dc1e52660431eea44d852"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 13).flac" size="15883237" crc="85a72c48" sha1="cc367cdf7d15689c0c9e3496e68d330597c866c5"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 14).flac" size="12972809" crc="c748d472" sha1="ad42488497f21fb4cc67a4b425e636802fcf1175"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 15).flac" size="24612858" crc="0dfcaff0" sha1="e40f5c6881149eb4ef38a681957c242c7f844ecb"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 16).flac" size="16700375" crc="dbd455b6" sha1="9d9393de314ce1ac9a94effc52534515ebd23812"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 17).flac" size="13151621" crc="5d453280" sha1="62da596a7b4083e0ae928ad428fbda7b82e631f5"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 18).flac" size="23660421" crc="9c4410c4" sha1="101fec0beae2ffb212b6213c1b23ead77c5d657f"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 19).flac" size="17276740" crc="587aa624" sha1="b377b31f32eacb70625829d7efce17d97e8a633f"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 20).flac" size="11842761" crc="3b28fd61" sha1="2fbc646587b7747fc2ba09c8171e871073013895"/> + <rom name="[OS] Towns System Software v1.1 L20 (Track 21).flac" size="22070145" crc="92478ec5" sha1="db34f45878c1e9d8c632caf04280b4c51ef138f9"/> + <rom name="[OS] Towns System Software v1.1 L20.cue" size="2696" crc="980832a2" sha1="7aad2063115f5b73d8a81623db868f2b9674f0c8"/> + --> <description>Towns System Software v1.1 L20</description> <year>1989</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="[os] towns system software v1.1 l20" sha1="d866918df900ff885e50da7ab96354cf4b9aae24" /> @@ -4277,9 +7763,14 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tss1130"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] Towns System Software v1.1 L30.bin" size="632782080" crc="180685d9" sha1="b551aa849f671094fe92607bd7a6b214edc9edf5"/> + <rom name="[OS] Towns System Software v1.1 L30.cue" size="659" crc="91bc4e4b" sha1="ff1f8c7b7171c9af21d0a73c2d522974daaac9dd"/> + --> <description>Towns System Software v1.1 L30</description> <year>1990</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="[os] towns system software v1.1 l30" sha1="b67bc80774182e641f713920712410be4e715171" /> @@ -4288,9 +7779,24 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tss2110a"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] Towns System Software v2.1 L10A (Track 01).bin" size="317167200" crc="12b38388" sha1="a7736100098611839fcb8199eae41dd7213ddcaf"/> + <rom name="[OS] Towns System Software v2.1 L10A (Track 02).bin" size="11799984" crc="47372237" sha1="5b643250e4a8abf3671fd38715557f161c4d620f"/> + <rom name="[OS] Towns System Software v2.1 L10A (Track 03).bin" size="8885856" crc="28cd028e" sha1="8a848d850d3b122dc3f0f15efb3b888cfc197c02"/> + <rom name="[OS] Towns System Software v2.1 L10A (Track 04).bin" size="11301360" crc="d53228f5" sha1="a208cf49fb3a8ca38d2fd4d51256edfab470b85a"/> + <rom name="[OS] Towns System Software v2.1 L10A (Track 05).bin" size="11136720" crc="f9d2a991" sha1="d9e0bb8657978c05fcce4f1d9020e07f397fb44b"/> + <rom name="[OS] Towns System Software v2.1 L10A (Track 06).bin" size="94449264" crc="cf75e950" sha1="91d9e93d9886027b9c66bb86d810ad012a27b0dd"/> + <rom name="[OS] Towns System Software v2.1 L10A (Track 07).bin" size="22955520" crc="cbc73605" sha1="440e07218bc63c136e0d8446ebeda19b52547e98"/> + <rom name="[OS] Towns System Software v2.1 L10A (Track 08).bin" size="116435760" crc="46115cb5" sha1="ea482c6088166b956a1596c4b91beeaa0849e519"/> + <rom name="[OS] Towns System Software v2.1 L10A (Track 09).bin" size="11578896" crc="71242193" sha1="d043dcd84d6c2e6a48ce14807825ec5456a5e736"/> + <rom name="[OS] Towns System Software v2.1 L10A (Track 10).bin" size="10595760" crc="49237f87" sha1="67343b528937a0d940165d5f84737797fd6667dc"/> + <rom name="[OS] Towns System Software v2.1 L10A (Track 11).bin" size="11054400" crc="02411027" sha1="3f68418b53d65396f588902ade208bf27b471d76"/> + <rom name="[OS] Towns System Software v2.1 L10A.cue" size="1423" crc="e7397a9f" sha1="5d248df6c9e8046c1ddf83e8e2849ad45243f8a1"/> + --> <description>Towns System Software v2.1 L10A</description> <year>1991</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="[os] towns system software v2.1 l10a" sha1="17c7e8ab678ac7ff258242c1aad75673848e66d6" /> @@ -4299,9 +7805,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tss2151"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] Towns System Software v2.1 L51.ccd" size="2294" crc="6ad5818a" sha1="2743a87d3d86f019c4b748bf8b83e93c25604aa3"/> + <rom name="[OS] Towns System Software v2.1 L51.cue" size="411" crc="be52ece2" sha1="f3951729651f65e8c0b629d780995d261096bba1"/> + <rom name="[OS] Towns System Software v2.1 L51.img" size="593767104" crc="b05c859d" sha1="5c954b6567d5e579866afa69ff3521fe42cfb5b1"/> + <rom name="[OS] Towns System Software v2.1 L51.sub" size="24235392" crc="5f06885b" sha1="56ee6cfa222595ce149a634fb3bada003e4870fa"/> + --> <description>Towns System Software v2.1 L51</description> <year>1995</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="[os] towns system software v2.1 l51" sha1="58f008662746287e4ce4b2c02f77605fc1ebd440" /> @@ -4310,9 +7823,31 @@ User/save disks that can be created from the game itself are not included. </software> <software name="tuntroll"> + <!-- + Origin: Neo Kobe Collection + <rom name="Tunnels and Trolls.mdf" size="176929200" crc="5f61e6c3" sha1="12f1c1c6a718d9837a2e8d09f6d1c971d9062e03"/> + <rom name="Tunnels and Trolls.mds" size="1550" crc="6d577287" sha1="ff70c805befbbc024f8dfa4595b12109c40fb5fc"/> + + *after conversion with IsoBuster+EAC * + <rom name="track01.bin" size="20286000" crc="c2414a55" sha1="8a889a9d14f8509bd592f145efbbcf825af3a5c1"/> + <rom name="track02.bin" size="19404000" crc="dfaf532f" sha1="45b19968f41500a58c0a49e2cb930c14ebaba057"/> + <rom name="track03.bin" size="28047600" crc="88189cc0" sha1="35c497395900fdf29f45dc0ab564cebd3014bc0a"/> + <rom name="track04.bin" size="12171600" crc="b2e4193a" sha1="e104286ecac9e986c6445ab013bbf8ad066ab35b"/> + <rom name="track05.bin" size="9525600" crc="b6d6d389" sha1="280e2d5d44dcfdef33ea8a657ca8a85c445afb68"/> + <rom name="track06.bin" size="17287200" crc="a178227c" sha1="31c3006059aa40e5f63a059e0b83fcbef37321b1"/> + <rom name="track07.bin" size="20991600" crc="f9a6bff7" sha1="7a3ebdea92b0a61ee77028a83a6fe6d6bc01f15e"/> + <rom name="track08.bin" size="8290800" crc="80f1b504" sha1="b390db22f6c64fa256995a089a54d9dce9fa6460"/> + <rom name="track09.bin" size="8643600" crc="d5f63b96" sha1="bf051374dc14bc6ca929ddb9e5c3688615788751"/> + <rom name="track10.bin" size="3175200" crc="5f1dcbe5" sha1="866ca8b0849507227d67012ddae39b0e9c439a9d"/> + <rom name="track11.bin" size="13230000" crc="79959a32" sha1="a119b7e25fee2e97f8af96cbf0d2d2a9bb378d9a"/> + <rom name="track12.bin" size="9349200" crc="4ada562f" sha1="aaa443c92a747e323ee9d772126372da37904558"/> + <rom name="track13.bin" size="6879600" crc="c2191ed4" sha1="7bf96bff35197f435dc5f248f538097073cd06db"/> + <rom name="tunnels and trolls.cue" size="1710" crc="a7fbc735" sha1="32aa1fe7d45d852f53ac99a8906296677d22faa9"/> + --> <description>Tunnels and Trolls</description> <year>1990</year> - <publisher>Starcraft</publisher> + <publisher>スタークラフト (Starcraft)</publisher> + <info name="release" value="199011xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="tunnels and trolls" sha1="098e7889db2229e69fe4ebbb9af0728154c94658" /> @@ -4321,9 +7856,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ultima4"> - <description>Ultima IV: Quest of the Avatar</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Ultima IV - Quest of the Avatar.bin" size="83260800" crc="cacc08b9" sha1="9194eb85d514e71e07ea3b1e0615a01c9d09f416"/> + <rom name="Ultima IV - Quest of the Avatar.cue" size="200" crc="8f8e7041" sha1="e70d908fa5fe464e6d88c6d14a5110e9c7b243f3"/> + --> + <description>Ultima IV - Quest of the Avatar</description> <year>1992</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199204xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ultima iv - quest of the avatar" sha1="b848a6330b0aa8c197079708ca6533d780cf067d" /> @@ -4332,9 +7873,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ultima5"> - <description>Ultima V: Warriors of Destiny</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Ultima V - Warriors of Destiny.ccd" size="1182" crc="d9e61bbd" sha1="3348645d2dbfceaff3868f751686765c5a2bef08"/> + <rom name="Ultima V - Warriors of Destiny.cue" size="199" crc="73c7dd6c" sha1="448746515fcf7e109c6382c83934d66434a5214f"/> + <rom name="Ultima V - Warriors of Destiny.img" size="128595600" crc="dfc1dbe5" sha1="a0cfebf22f4b0563fb12f7c745305b45cd458f73"/> + <rom name="Ultima V - Warriors of Destiny.sub" size="5248800" crc="57c99837" sha1="086b83fe4b0303cd0cb11dd0fa68a71a2186c56b"/> + --> + <description>Ultima V - Warriors of Destiny</description> <year>1992</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199208xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ultima v - warriors of destiny" sha1="70aa1bf29817f583317426fde3a7ceb5a22703fa" /> @@ -4343,9 +7892,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ultima6"> - <description>Ultima VI: The False Prophet</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Ultima VI - The False Prophet.ccd" size="788" crc="412311ab" sha1="66855cb375a7d84284eba0f87c4e487ea50b16fc"/> + <rom name="Ultima VI - The False Prophet.cue" size="95" crc="d451fe60" sha1="592bd6fa929ccaad9c9adf259dd6f0ab11e566d1"/> + <rom name="Ultima VI - The False Prophet.img" size="503090448" crc="045e6cf8" sha1="7b96e1c090e870edcc6661d93d9651afcf500683"/> + <rom name="Ultima VI - The False Prophet.sub" size="20534304" crc="c6918e77" sha1="cb33c7f8f54252b6609722601c5960c5be3576ef"/> + --> + <description>Ultima VI - The False Prophet</description> <year>1991</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199112xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ultima vi - the false prophet" sha1="1add2897492af4ff236743e712ae2244dda80319" /> @@ -4354,9 +7911,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="ultimatr"> + <!-- + Origin: Neo Kobe Collection + <rom name="Ultima Trilogy I-II-III.ccd" size="2137" crc="f4885a69" sha1="3dd7aaae03d10649a23b0ff361c15eaea897bafd"/> + <rom name="Ultima Trilogy I-II-III.cue" size="397" crc="872a0556" sha1="cc712c97318488ddda3b7e55a64b52aebc7d7064"/> + <rom name="Ultima Trilogy I-II-III.img" size="141649200" crc="7cc51ef2" sha1="793da1219f89f6d44f531047d01759f7090c054d"/> + <rom name="Ultima Trilogy I-II-III.sub" size="5781600" crc="12ae36db" sha1="3a488da61154541cc6ae20cdee74de8e47c141d4"/> + --> <description>Ultima Trilogy I-II-III</description> <year>1990</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199010xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ultima trilogy i-ii-iii" sha1="75b22d990d1b70b32b3e542778b1621aa6db420c" /> @@ -4365,9 +7930,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="uuw"> - <description>Ultima Underworld: The Stygian Abyss</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Ultima Underworld.ccd" size="8923" crc="261f8af6" sha1="b0cff7096e6794f2e9d32fabceab09d2e6d93844"/> + <rom name="Ultima Underworld.cue" size="1867" crc="086e99a8" sha1="1f86251d52f9f9d559a302172304bfac233fd3ae"/> + <rom name="Ultima Underworld.img" size="87527328" crc="9c4e58f3" sha1="1602c3f7cf668319f2e2cbba2ef925ed2e79a1db"/> + <rom name="Ultima Underworld.sub" size="3572544" crc="4fc2ecd4" sha1="6ede888227097aa54c0fa333474f0d5dee70b687"/> + --> + <description>Ultima Underworld - The Stygian Abyss</description> <year>1993</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199312xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ultima underworld" sha1="048ed1c5cfc5b8c7ea1d8f9cc3ea6aa7cf39390c" /> @@ -4376,9 +7949,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="uuw2"> - <description>Ultima Underworld II: Labyrinth of Worlds</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Ultima Underworld 2.mdf" size="67140192" crc="2f005f36" sha1="fbdd8df467050403bc7047239418284ab4173847"/> + <rom name="Ultima Underworld 2.mds" size="486" crc="ad984380" sha1="204aeb2f016ed8f5375cbaca9b6ca2afb935056b"/> + + *after conversion with IsoBuster+EAC * + <rom name="ultima underworld 2.bin" size="67140192" crc="2f005f36" sha1="fbdd8df467050403bc7047239418284ab4173847"/> + <rom name="ultima underworld 2.cue" size="80" crc="d6b87614" sha1="1f12d627578632ef2e9e7667e27cf1ebb7744263"/> + --> + <description>Ultima Underworld II - Labyrinth of Worlds</description> <year>1995</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199502xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="ultima underworld 2" sha1="dd93343e311ad7fe5f933a004b346ff6429855f5" /> @@ -4387,10 +7970,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="uwaki"> + <!-- + Origin: Neo Kobe Collection + <rom name="Uwaki na Anata.ccd" size="772" crc="945be786" sha1="978bcc2ea2b3609048c103382ef794d6d22f1332"/> + <rom name="Uwaki na Anata.cue" size="78" crc="0b767425" sha1="08ebc0f26da61a75c9b16b91c58958b8771329b5"/> + <rom name="Uwaki na Anata.img" size="329837424" crc="83d4184b" sha1="472e75e5585630c6b3c9da876f51427f76b01de9"/> + <rom name="Uwaki na Anata.sub" size="13462752" crc="e93ef365" sha1="022b39a867b7f36d042822d5b982e41f43c0359f"/> + --> <description>Uwaki na Anata</description> <year>1994</year> <publisher>HOP</publisher> + <info name="release" value="199406xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> <dataarea name="flop" size="1261568"> <rom name="uwaki na anata (boot disk).hdm" size="1261568" crc="27b0fc8b" sha1="4010114d203a210175b59e3d4dc46df0cf805f03" offset="000000" /> </dataarea> @@ -4402,10 +7994,194 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <software name="vaindrm"> + <!-- + Origin: Neo Kobe Collection + <rom name="Vain Dream.ccd" size="5336" crc="6ca23780" sha1="efd21c5faccd975ccb17de97704a062caab45dc6"/> + <rom name="Vain Dream.cue" size="1026" crc="59135064" sha1="e55e4c396e5aae99a6665ad191d3e47f50b88217"/> + <rom name="Vain Dream.img" size="650210400" crc="5b37808b" sha1="5845a1a1bcb8809399dc98bd322d787aab216ccd"/> + <rom name="Vain Dream.sub" size="26539200" crc="24336d6f" sha1="151281f57a9d5abbd43bd8a750456ae7894a74d5"/> + --> + <description>Vain Dream</description> + <year>1993</year> + <publisher>ã‚°ãƒãƒ¼ãƒ‡ã‚£ã‚¢ (Glodia)</publisher> + <info name="release" value="199304xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="vain dream (system disk).hdm" size="1261568" crc="193225c1" sha1="2d3ee819482517b3b9d5d5c6e3877f2def4fbc20" offset="000000" /> + </dataarea> + </part> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="vain dream" sha1="947209a09f094536f30bb804bbcf34896f23dfef" /> + </diskarea> + </part> + </software> + + <software name="vaindrm2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Vain Dream II.ccd" size="3637" crc="faca527c" sha1="f4823c89008482c16534f18fb7de43b84e0200bd"/> + <rom name="Vain Dream II.cue" size="669" crc="9bae5ce6" sha1="baa3ae3c05ba2e184d6677cb0756a363675b3a67"/> + <rom name="Vain Dream II.img" size="429733920" crc="12760df3" sha1="888534ece969871623d3558ea17f6a338f62882b"/> + <rom name="Vain Dream II.sub" size="17540160" crc="4a37f0c9" sha1="18ad81c2c3cf02691d23f0cc932cfadf96bb3a46"/> + --> + <description>Vain Dream II</description> + <year>1993</year> + <publisher>ã‚°ãƒãƒ¼ãƒ‡ã‚£ã‚¢ (Glodia)</publisher> + <info name="release" value="199309xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="vain dream ii (system disk).hdm" size="1261568" crc="a95283e8" sha1="a61fd855e256c7216a8d8d5b7f72dcaed319e727" offset="000000" /> + </dataarea> + </part> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="vain dream ii" sha1="9e913130175e0c73ea346a90ed46fe5709aee67b" /> + </diskarea> + </part> + </software> + + <software name="vastness"> + <!-- + Origin: Neo Kobe Collection + <rom name="Vastness.ccd" size="1525" crc="41bb06da" sha1="764c09836fc45e09f6efe47ed2b9da4c49a97e7f"/> + <rom name="Vastness.cue" size="228" crc="e8656a96" sha1="193c31c0fa10f79dd7c2601bf42bb764edb2d353"/> + <rom name="Vastness.img" size="463666224" crc="ff249f28" sha1="21c024c9f4bc2fcfaadf84072e094998facad4a7"/> + <rom name="Vastness.sub" size="18925152" crc="1f3a4a5d" sha1="7d26e94d29997ae4c1f204a143194c9a08c74860"/> + --> + <description>Vastness - Kuukyo no Ikenie-tachi</description> + <year>1993</year> + <publisher>CD Bros.</publisher> + <info name="release" value="199309xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="vastness" sha1="12d1fbe66e92cd580616814077eebb402d4e0332" /> + </diskarea> + </part> + </software> + + <software name="veildark"> + <!-- + Origin: Neo Kobe Collection + <rom name="Veil of Darkness.mdf" size="10648800" crc="a6a3495a" sha1="94c27245b4212049ae4114c0bd9e32614d80a807"/> + <rom name="Veil of Darkness.mds" size="532" crc="c616006c" sha1="c89e23e946e17b79d2628ff185869190b74ea1f9"/> + + *after conversion with IsoBuster+EAC * + <rom name="veil of darkness.bin" size="10231200" crc="11c093a4" sha1="0c1e887213248e6e900aa9878b2ce7b001345127"/> + <rom name="veil of darkness.cue" size="77" crc="39dbcfd4" sha1="4d66775c1c6e1dd684a879002827c0f4aa529362"/> + --> + <description>Veil of Darkness</description> + <year>1994</year> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199408xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="veil of darkness" sha1="bf61510fbd3893f086297ad0c3e27655a08bde1c" /> + </diskarea> + </part> + </software> + + <software name="viewpoin"> + <!-- + Origin: Tokugawa Corporate Forums (wushu) + <rom name="Viewpoint.ccd" size="3443" crc="7540457a" sha1="64a84097b761edeaf13ccdfb5ef7b146de7fa078"/> + <rom name="Viewpoint.cue" size="858" crc="ca18b334" sha1="850438e7d1332871cccf38fa91b159cbeaf702bc"/> + <rom name="Viewpoint.img" size="478961280" crc="fd8a4b22" sha1="c4771fc1db50dba1fc57f8aa10482e8ebf680cd8"/> + <rom name="Viewpoint.sub" size="19549440" crc="d15c8b5a" sha1="ff4cbd245aaee1acd1ef44db63a8d4a101c7a3a8"/> + --> + <description>Viewpoint</description> + <year>1993</year> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199311xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="viewpoint" sha1="c977abc3e3ab7d675b6be7aacac69a57bc6e52be" /> + </diskarea> + </part> + </software> + + <software name="viperv6"> + <!-- + Origin: Neo Kobe Collection + <rom name="Viper V6 Turbo RS.ccd" size="750" crc="318ccd71" sha1="a47f5847de0fe5af93fc8d3b19a85800774b5244"/> + <rom name="Viper V6 Turbo RS.cue" size="99" crc="159b0b0f" sha1="6775947743d352f6608709ca51514474990fac75"/> + <rom name="Viper V6 Turbo RS.img" size="63151200" crc="307627bb" sha1="832dced51299a3f13ffc4532c76215f1b558c6d0"/> + <rom name="Viper V6 Turbo RS.sub" size="2577600" crc="b7dcf321" sha1="0993fbd9fcd53cffd0ca231f5180a9d233af319c"/> + --> + <description>Viper V6 Turbo RS</description> + <year>1995</year> + <publisher>ソニア (Sogna)</publisher> + <info name="release" value="199504xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="viper v6 turbo rs" sha1="3ba0afc8b3cfbdae0e37c0e049d8ed6d9dd4e4ff" /> + </diskarea> + </part> + </software> + + <software name="viperv10"> + <!-- + Origin: Neo Kobe Collection + <rom name="Viper V10 Turbo RS.ccd" size="782" crc="a5ba1d7c" sha1="6d16e338de23ff02145c648537558cfd50efd3a5"/> + <rom name="Viper V10 Turbo RS.cue" size="82" crc="3320346c" sha1="f93d377ee8aab8c26023a226b986552295cb14ed"/> + <rom name="Viper V10 Turbo RS.img" size="45911040" crc="b3d25f40" sha1="f6a2ace6e0c37402f2504fb4f4c2724db2b7dd4f"/> + <rom name="Viper V10 Turbo RS.sub" size="1873920" crc="5fe696ea" sha1="784729f33c6b2eabeed60dfdc6b3edbd64349d31"/> + --> + <description>Viper V10 Turbo RS</description> + <year>1995</year> + <publisher>ソニア (Sogna)</publisher> + <info name="release" value="199507xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="viper v10 turbo rs" sha1="0afcc96abbe300b9b0499948fede525dcf084ba0" /> + </diskarea> + </part> + </software> + + <!-- + There are two other images of the save disk: + Virtuacall (Disk A) [Alt 1].hdm / c36be7e424fecd61c83c50258e8a8b4b02ad551f + Virtuacall (Disk A) [Alt 2].hdm / 5f452d3b6582942cbbb37f97631ddf63a88e580c + but this one seems to be cleaner (no modified/deleted files). + --> + <software name="vircall"> + <!-- + Origin: Neo Kobe Collection + <rom name="Virtuacall.ccd" size="3219" crc="9641b5ab" sha1="6112fb12258b08353bfb2050292808d9fe6a56d7"/> + <rom name="Virtuacall.cue" size="777" crc="a5e6bf11" sha1="19b41206946e4eff77cf80eb0ae01e1a4ca3604d"/> + <rom name="Virtuacall.img" size="528670800" crc="6df1cadf" sha1="6d1cebf90ca74ad8c6a7257219a9436a81cd58b8"/> + <rom name="Virtuacall.sub" size="21578400" crc="28a07ee6" sha1="8995c5fffaf4ad8b03c20e70fa9a0a2ac2f6a2b4"/> + --> + <description>Virtuacall</description> + <year>1995</year> + <publisher>フェアリーテール (Fairytale)</publisher> + <info name="release" value="199503xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Save Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="virtuacall (disk a).hdm" size="1261568" crc="ebdfc4b9" sha1="b4240a3b28093c832a38be17cf72495f4f094f88" offset="000000" /> + </dataarea> + </part> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="virtuacall" sha1="5db49ac6cf4d8ed15e5f2e42ebd3b431f3b885c5" /> + </diskarea> + </part> + </software> + <software name="volfied"> + <!-- + Origin: Neo Kobe Collection + <rom name="Volfied.mdf" size="150936336" crc="93cd91d9" sha1="3bd9e05d701b289cf8507a8deb445c4349891674"/> + <rom name="Volfied.mds" size="838" crc="746eeb64" sha1="b19100a0dab2eec3cdf533452e7fd8d62f6b2447"/> + --> <description>Volfied</description> <year>1991</year> - <publisher>Ving</publisher> + <publisher>ビング (Ving)</publisher> + <info name="release" value="199112xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="volfied" sha1="353db36abf89433dfc2f63659f471fd9edfbaf8d" /> @@ -4413,8 +8189,39 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <software name="wakoku"> + <!-- + Origin: Neo Kobe Collection + <rom name="Wakoku Seiha Den.ccd" size="769" crc="e3eef86d" sha1="3290f0e3ed6ce9265d0d77cb13be6c43a9ed2a5d"/> + <rom name="Wakoku Seiha Den.cue" size="80" crc="c6973696" sha1="40c4fa261b55dc4ecb396e76c9ed9301de873e60"/> + <rom name="Wakoku Seiha Den.img" size="10228848" crc="768685d5" sha1="07896849fae030641bd726eb18a8ec6c588ef455"/> + <rom name="Wakoku Seiha Den.sub" size="417504" crc="632a643c" sha1="fc7ab5135b4fdf57bec8567e45fd9827a2b466fd"/> + --> + <description>Wakoku Seiha Den</description> + <year>1994</year> + <publisher>Mic</publisher> + <info name="release" value="199404xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="wakoku seiha den" sha1="c678cf3231d465243e898f81259032635bc7aaf5" /> + </diskarea> + </part> + </software> + <!-- Missing a floppy disk --> <software name="win31"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] Windows 3.1 L11 (Track 1).bin" size="210974400" crc="f1c0baee" sha1="b6b3a75c06dda9f2c7df10703b2640871db84d34"/> + <rom name="[OS] Windows 3.1 L11 (Track 2).bin" size="24296160" crc="84ca1c64" sha1="a5a76ce4664e31a431f0ede7fb595f68f91ea70e"/> + <rom name="[OS] Windows 3.1 L11 (Track 3).bin" size="33280800" crc="c715fa2a" sha1="d1f949e98d6721569224f487662b4be4379930d1"/> + <rom name="[OS] Windows 3.1 L11 (Track 4).bin" size="31203984" crc="ddc80416" sha1="e416686251a310ca37ab28d71422aa0a4b8aad5c"/> + <rom name="[OS] Windows 3.1 L11 (Track 5).bin" size="33687696" crc="6dc2adb0" sha1="f15fbaa51ef779119ea20c2559b2942e0d660bea"/> + <rom name="[OS] Windows 3.1 L11 (Track 6).bin" size="24484320" crc="6003c48f" sha1="06cf72ab1a8a97967cf505ebf63ababeb253f64d"/> + <rom name="[OS] Windows 3.1 L11 (Track 7).bin" size="66366384" crc="14c119e5" sha1="f5fc90b31f35f2fff7fe2a71f66359baecb047dc"/> + <rom name="[OS] Windows 3.1 L11 (Track 8).bin" size="41049456" crc="7ac70a73" sha1="a51becc2bb7686925441a2538f238aa151807006"/> + <rom name="[OS] Windows 3.1 L11.cue" size="894" crc="ab55a50e" sha1="3abf8be459bea341e253641bd230091fa6b2d02d"/> + --> <description>Windows 3.1 L11</description> <year>1994</year> <publisher>Microsoft</publisher> @@ -4426,6 +8233,11 @@ User/save disks that can be created from the game itself are not included. </software> <software name="win95"> + <!-- + Origin: Neo Kobe Collection + <rom name="[OS] Windows 95.bin" size="313792080" crc="31bba6de" sha1="97ec04fe48112e8964708d135a47da2a1f0bb528"/> + <rom name="[OS] Windows 95.cue" size="81" crc="b016d01a" sha1="003db6f266b5a600bbdac108b93d31370a4f2672"/> + --> <description>Windows 95</description> <year>1996</year> <publisher>Microsoft</publisher> @@ -4437,9 +8249,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="wingcmar"> + <!-- + Origin: Neo Kobe Collection + <rom name="Wing Commander Armada.mdf" size="17195472" crc="1c7c60bb" sha1="5dfade18828211a040785f884a4a3cae40f379d1"/> + <rom name="Wing Commander Armada.mds" size="486" crc="6b7bade4" sha1="4c86335e757ec71ff21e4ce2c6f3943c3007c307"/> + --> <description>Wing Commander Armada</description> <year>1995</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199507xx" /> + <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="wing commander armada" sha1="fa9ff6997c774c59bf3a97b710049a22b3348e32" /> @@ -4448,9 +8267,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="wingcmdr"> + <!-- + Origin: Neo Kobe Collection + <rom name="Wing Commander.ccd" size="8792" crc="7d3209e5" sha1="23441501ac6bcd70520b904987c05dc72dd0d2e2"/> + <rom name="Wing Commander.cue" size="1750" crc="faae9a20" sha1="ceb6966ce035d9a21616c8d29722ea3da7848579"/> + <rom name="Wing Commander.img" size="597114000" crc="d5be8a45" sha1="6d03363605925a41b5c5c80a43a8cc32bb585c73"/> + <rom name="Wing Commander.sub" size="24372000" crc="df14155f" sha1="c2ec744fb13ddbb4f039cc88e26eb3dfeb8ae0c2"/> + --> <description>Wing Commander</description> <year>1992</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199212xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="wing commander" sha1="0d2b8647d02e025a2a397f218d1eb104eae64c5b" /> @@ -4459,9 +8286,16 @@ User/save disks that can be created from the game itself are not included. </software> <software name="wingcmsm"> - <description>Wing Commander: Secret Missions</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Wing Commander - Secret Missions.mdf" size="10231200" crc="f75ba7a5" sha1="63b8d24b3f376edef3ca0363aa9cfec0d0908d6a"/> + <rom name="Wing Commander - Secret Missions.mds" size="486" crc="15e78ee3" sha1="c0b6da8915c861eb0f826689efb7b6b237f25f2b"/> + --> + <description>Wing Commander - Secret Missions</description> <year>1994</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199411xx" /> + <info name="usage" value="Requires HDD installation"/> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="wing commander - secret missions" sha1="68edf6a505bac8462dee5154d25c6a0d50d0d31c" /> @@ -4470,9 +8304,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="wingcm2s"> + <!-- + Origin: Neo Kobe Collection + <rom name="Wing Commander II and Special Operations.mdf" size="549478944" crc="34dc8d03" sha1="d2b2df03e86db28bd0e9c3be20824a4d97a9a5f4"/> + <rom name="Wing Commander II and Special Operations.mds" size="4182" crc="8fbdd04e" sha1="aad86b8d10376642afb7fc7c17735d5c9c662b21"/> + --> <description>Wing Commander II and Special Operations</description> <year>1995</year> - <publisher>Electronic Arts Victor</publisher> + <publisher>エレクトãƒãƒ‹ãƒƒã‚¯ãƒ»ã‚¢ãƒ¼ãƒ„・ビクター (Electronic Arts Victor)</publisher> + <info name="release" value="199507xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="wing commander ii and special operations" sha1="936038a14140fc7901a6642e1e43f38376703ddd" /> @@ -4481,10 +8321,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="wiz5"> - <description>Wizardry V: Heart of the Maelstrom</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Wizardry V - Heart of the Maelstrom.mdf" size="242197200" crc="fe7c9dfa" sha1="45c01ea042b534a4b91fb0aeb5b4e5af4a510cb3"/> + <rom name="Wizardry V - Heart of the Maelstrom.mds" size="1982" crc="eff072ba" sha1="ebfb946672e85270336f864d9a67c83dfb4a2c2e"/> + --> + <description>Wizardry V - Heart of the Maelstrom</description> <year>1990</year> - <publisher>Sir-Tech</publisher> + <publisher>アスã‚ー (ASCII)</publisher> + <info name="release" value="199012xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> <dataarea name="flop" size="1089776"> <rom name="wizardry v - heart of the maelstrom (user disk).d88" size="1089776" crc="0cd772c2" sha1="149e7bc2ab3537444f71b565330e1ecea911dafa" offset="000000" /> </dataarea> @@ -4497,10 +8344,19 @@ User/save disks that can be created from the game itself are not included. </software> <software name="wiz6"> - <description>Wizardry VI: Bane of the Cosmic Forge</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Wizardry VI - Bane of the Cosmic Forge.ccd" size="2459" crc="8f3a8dcc" sha1="82efdf56483d3f16465ed47e502ed39759ebda34"/> + <rom name="Wizardry VI - Bane of the Cosmic Forge.cue" size="454" crc="6c9eebff" sha1="44e37ea699d8de58eeaa85fb8cbcee8cc80a80e7"/> + <rom name="Wizardry VI - Bane of the Cosmic Forge.img" size="153468000" crc="33b91709" sha1="09ac3f62a16dd7fcdcb9270a347505c98b98719b"/> + <rom name="Wizardry VI - Bane of the Cosmic Forge.sub" size="6264000" crc="d7b1b7b0" sha1="20845962384bc0043cf0b5c0b3ed1c449fd6e423"/> + --> + <description>Wizardry VI - Bane of the Cosmic Forge</description> <year>1991</year> - <publisher>ASCII</publisher> + <publisher>アスã‚ー (ASCII)</publisher> + <info name="release" value="199112xx" /> <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> <dataarea name="flop" size="1261568"> <rom name="wizardry vi - bane of the cosmic forge (user disk).hdm" size="1261568" crc="0092a1da" sha1="557e3bedbd8c3f546ac30fe9d8ce9fd386eda90e" offset="000000" /> </dataarea> @@ -4513,9 +8369,15 @@ User/save disks that can be created from the game itself are not included. </software> <software name="wiz7"> - <description>Wizardry VII: Crusaders of the Dark Savant</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Wizardry VII - Crusaders of the Dark Savant.mdf" size="45689952" crc="5146397e" sha1="cf1d06bbdf340de84ae3dd41af7f6ebf0919e4f4"/> + <rom name="Wizardry VII - Crusaders of the Dark Savant.mds" size="574" crc="b1adbcf4" sha1="e3391b016ffd3779032df192ad2595196091417d"/> + --> + <description>Wizardry VII - Crusaders of the Dark Savant</description> <year>1994</year> - <publisher>ASCII</publisher> + <publisher>アスã‚ー (ASCII)</publisher> + <info name="release" value="199409xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="wizardry vii - crusaders of the dark savant" sha1="642aa1d0e649f62bfe69538f91e12a1f10abe429" /> @@ -4523,10 +8385,73 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <!-- + There's another image of the save disk (Wrestle Angels 3 (Save disk) [Alt 1].hdm, + SHA1 dcfb0b2da665aa4bd1630003c6a1b719c11b6dce), but this one seems to be cleaner + (no modified/deleted files). + --> + <software name="wresang3"> + <!-- + Origin: Neo Kobe Collection + <rom name="Wrestle Angels 3.ccd" size="771" crc="dc5d3961" sha1="68b25e0a4b49996ac3f47d4be88b1c920ad83b7f"/> + <rom name="Wrestle Angels 3.cue" size="80" crc="589d9e69" sha1="36097866d210b633d214c91ec40e15bb23286b27"/> + <rom name="Wrestle Angels 3.img" size="146586048" crc="9dbc67f2" sha1="b997acc457d71c74935bcbbfa2f394adda77774b"/> + <rom name="Wrestle Angels 3.sub" size="5983104" crc="11cac79b" sha1="9c812343a72770a9c8da1ecdeceba71746565522"/> + --> + <description>Wrestle Angels 3</description> + <year>1994</year> + <publisher>グレイト (Great)</publisher> + <info name="release" value="199408xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Save Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels 3 (save disk).hdm" size="1261568" crc="c29e2e9c" sha1="1f4d99366200b8938cc3a1868bc2540a20720740" offset="000000" /> + </dataarea> + </part> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="wrestle angels 3" sha1="2d5cde32541789c456d6e0ebb7a4ef7c91886f6d" /> + </diskarea> + </part> + </software> + + <software name="wresangs"> + <!-- + Origin: Neo Kobe Collection + <rom name="Wrestle Angels Special.ccd" size="769" crc="4550faa6" sha1="7a15aec79ce31faf6ccea4b2fd95d7c097e25659"/> + <rom name="Wrestle Angels Special.cue" size="86" crc="6cb5709e" sha1="4aa75f6cf1910b64f0cc5636c38ed8bb29561a64"/> + <rom name="Wrestle Angels Special.img" size="158407200" crc="0e218caa" sha1="5f2bd58a6468b4d33777106bfa06f16d0c4a8519"/> + <rom name="Wrestle Angels Special.sub" size="6465600" crc="340c016d" sha1="3a09a187e09c78ff7108fcf212ec2e01afc9641b"/> + --> + <description>Wrestle Angels Special</description> + <year>1994</year> + <publisher>グレイト (Great)</publisher> + <info name="release" value="199410xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels special (user disk).hdm" size="1261568" crc="7df5c0a6" sha1="09c2ecaba12aabc2b2cf8f4527f491ccd257faac" offset="000000" /> + </dataarea> + </part> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="wrestle angels special" sha1="8411c536a37c0a59f42831c906c5d39c19b86df4" /> + </diskarea> + </part> + </software> + <software name="wwcarmen"> + <!-- + Origin: Neo Kobe Collection + <rom name="Where in the World is Carmen Sandiego.ccd" size="770" crc="f0949d02" sha1="fbffe498730e20f16f9073c9bf9e9517c7787734"/> + <rom name="Where in the World is Carmen Sandiego.cue" size="101" crc="14d34f17" sha1="c38762c79811e9129247cf99e18ff43ff7d714c1"/> + <rom name="Where in the World is Carmen Sandiego.img" size="370087200" crc="bbd95a1b" sha1="ae25012a231dc05db202079e14d7debf60bdb91c"/> + <rom name="Where in the World is Carmen Sandiego.sub" size="15105600" crc="670a6d5c" sha1="4ce44b77a6f03f0fbbf22e854dc8bf4dad7953a7"/> + --> <description>Where in the World is Carmen Sandiego?</description> <year>1993</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199304xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="where in the world is carmen sandiego" sha1="cc3fe8d265784809b893a8e8375153060b162a1d" /> @@ -4534,21 +8459,56 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <software name="wworth"> + <!-- + Origin: Neo Kobe Collection + <rom name="Words Worth.ccd" size="767" crc="8bdfb40f" sha1="cb635633c22c5bc81e7f51006c7c319eceb316c3"/> + <rom name="Words Worth.cue" size="75" crc="87fafa58" sha1="b69addeaf7d675625c52bba7a925c545acd5a3a9"/> + <rom name="Words Worth.img" size="20815200" crc="5f1b4cd2" sha1="4ce432ac1147d0a55bf7898f23085f4fe0cead62"/> + <rom name="Words Worth.sub" size="849600" crc="33bd68f0" sha1="3f88891c58b28e15968d8e5ca8638b9fd66665db"/> + --> + <description>Words Worth</description> + <year>1993</year> + <publisher>エルフ (Elf)</publisher> + <info name="release" value="199309xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="words worth" sha1="63c9e54e3cc6db4e716377ac15a08c5941327fef" /> + </diskarea> + </part> + </software> + <software name="xak2"> - <description>Xak II: Rising of the Redmoon</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Xak II - Rising of the Redmoon.ccd" size="6311" crc="04782865" sha1="47786fd213f9599957a7b3a14c0936e2ce5db375"/> + <rom name="Xak II - Rising of the Redmoon.cue" size="1246" crc="5c3cbc41" sha1="4cfaadb4cde1ec5f82a49f2c2488fb42cfd9ed45"/> + <rom name="Xak II - Rising of the Redmoon.img" size="737681280" crc="97a091d7" sha1="8754a54544277acf76e34b160fcffc0f966438b5"/> + <rom name="Xak II - Rising of the Redmoon.sub" size="30109440" crc="138201f9" sha1="4cbc46c52275ee709da5960fff8cce2f913d5ace"/> + --> + <description>Xak II - Rising of the Redmoon</description> <year>1991</year> - <publisher>Micro Cabin</publisher> + <publisher>マイクãƒã‚ャビン (Micro Cabin)</publisher> + <info name="release" value="199107xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> - <disk name="Xak II - Rising of the redmoon" sha1="b5383012b7d6e39b42edda4d13af7d5cc62b9191" /> + <disk name="xak ii - rising of the redmoon" sha1="b5383012b7d6e39b42edda4d13af7d5cc62b9191" /> </diskarea> </part> </software> <software name="xak3"> - <description>Xak III: The Eternal Recurrence</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Xak III - The Eternal Recurrence.ccd" size="1520" crc="e0b3fd12" sha1="b2555bf0be05e1698f9367b803a245dac25a1675"/> + <rom name="Xak III - The Eternal Recurrence.cue" size="252" crc="cbd01292" sha1="22cb83b6dc95191b32000c142aebc217b1980a9e"/> + <rom name="Xak III - The Eternal Recurrence.img" size="160124160" crc="0540cc47" sha1="67922d84c5612465991e42b53be5534da7593fdc"/> + <rom name="Xak III - The Eternal Recurrence.sub" size="6535680" crc="05a826ad" sha1="2cd50216b025cfb095fc23be1d7b99d6f137db59"/> + --> + <description>Xak III - The Eternal Recurrence</description> <year>1993</year> - <publisher>Micro Cabin</publisher> + <publisher>マイクãƒã‚ャビン (Micro Cabin)</publisher> + <info name="release" value="199309xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="xak iii - the eternal recurrence" sha1="71f9b0dd3906a1c6d6e2b1ccb646e25530a66df3" /> @@ -4557,9 +8517,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="xenon"> + <!-- + Origin: Neo Kobe Collection + <rom name="Xenon.ccd" size="1069" crc="028f8413" sha1="8b4b449b63ab30a2b8e49d39a117e06715546d07"/> + <rom name="Xenon.cue" size="192" crc="a3463528" sha1="e5b1135a8971c323213d715ae14d5de8fca6746c"/> + <rom name="Xenon.img" size="326937408" crc="594213b2" sha1="1307189e44ccca2154486421f82b9b1df393b73a"/> + <rom name="Xenon.sub" size="13344384" crc="257b6cd3" sha1="51a3f6a3ff4646cce4f7130a4ae550d95e79330b"/> + --> <description>Xenon</description> <year>1995</year> - <publisher>C's Ware</publisher> + <publisher>シーズウェア (C's Ware)</publisher> + <info name="release" value="199503xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="xenon" sha1="d6544b946ece77ce93fb6cf1db3ffb231b464ac0" /> @@ -4567,10 +8535,104 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <software name="yamikets"> + <!-- + Origin: Neo Kobe Collection + <rom name="Yami no Ketsuzoku Special.ccd" size="8295" crc="3278257f" sha1="be9eb079667a5591b361d3bd6452f22233c2e4bf"/> + <rom name="Yami no Ketsuzoku Special.cue" size="3179" crc="c39054c2" sha1="fcba6129871554abeee099a3bae405292ce38272"/> + <rom name="Yami no Ketsuzoku Special.img" size="688312800" crc="a6819d7e" sha1="774a42f852819af28434f06984247a631e4ea124"/> + <rom name="Yami no Ketsuzoku Special.sub" size="28094400" crc="12c99335" sha1="2983c0025adffa7e21636cc23335de37a499cbaf"/> + --> + <description>Yami no Ketsuzoku Special</description> + <year>1991</year> + <publisher>システムサコム(System Sacom)</publisher> + <info name="release" value="199106xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="yami no ketsuzoku special (user disk).hdm" size="1261568" crc="62e6f35a" sha1="ee1e86547bac53e5e9dc7a010bc60f3b511965b6" offset="000000" /> + </dataarea> + </part> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="yami no ketsuzoku special" sha1="17fb4fcf02935c509a87f6d8c5b7809b633f64a8" /> + </diskarea> + </part> + </software> + + <software name="yojuusen"> + <!-- + Origin: Neo Kobe Collection + <rom name="Youjuu Senki - A.D. 2048.ccd" size="750" crc="a09a1ad0" sha1="3199c6d1df270dc278fb56b4f7e105321f72a5e4"/> + <rom name="Youjuu Senki - A.D. 2048.cue" size="106" crc="54a3720c" sha1="8c83400b75bf1afbfd3e242c04175a70ab7e9c1e"/> + <rom name="Youjuu Senki - A.D. 2048.img" size="73735200" crc="c564c47f" sha1="74cb81be807b323f0abf8de633ae4c00dfe9b486"/> + <rom name="Youjuu Senki - A.D. 2048.sub" size="3009600" crc="7f503cf3" sha1="4e802b74e492bd1321f932de6c0bfdc473a5ebfb"/> + --> + <description>Yojuu Senki - A.D. 2048</description> + <year>1993</year> + <publisher>ディー・オー (D.O.)</publisher> + <info name="release" value="199311xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="youjuu senki - a.d. 2048" sha1="724d7aaaae57be82231eacfca5fe0501a9683277" /> + </diskarea> + </part> + </software> + + <software name="yumimimx"> + <!-- + Origin: Neo Kobe Collection + <rom name="Yumimi Mix.ccd" size="1252" crc="ddadfc50" sha1="d29d5838085ab5018254edef9548c6055239ebd6"/> + <rom name="Yumimi Mix.cue" size="307" crc="72240e43" sha1="b65c52c544c5c13c8f0e6ad32016a6b1b14ea37a"/> + <rom name="Yumimi Mix.img" size="362090400" crc="79b3b466" sha1="4fa1ba317edbcf965e3c43341d4424780efb337a"/> + <rom name="Yumimi Mix.sub" size="14779200" crc="0346df2b" sha1="653d8ada9aea1f16b0526631d4703ec8e5075448"/> + --> + <description>Yumimi Mix</description> + <year>1993</year> + <publisher>CRI</publisher> + <info name="release" value="199312xx" /> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="yumimi mix" sha1="3b3f323e8c70ced7fe47850b1910c318a9a23f10" /> + </diskarea> + </part> + </software> + + <software name="yuuwaku"> + <!-- + Origin: Neo Kobe Collection + <rom name="Yuuwaku.ccd" size="768" crc="41c497c7" sha1="7aa20414075051a15ae792785c9938c23f1b353d"/> + <rom name="Yuuwaku.cue" size="71" crc="835ffabf" sha1="43c38183372c3a6d8ca0197d277d8970123b29cf"/> + <rom name="Yuuwaku.img" size="6703200" crc="d0b9ef59" sha1="4113f989c6acf05b5859748b55ddda36acc5fb12"/> + <rom name="Yuuwaku.sub" size="273600" crc="0f0c21b5" sha1="5c704409f417ff8e514a6117e0032c0337dc9c7a"/> + --> + <description>Yuuwaku</description> + <year>1996</year> + <publisher>ティーツー (T2)</publisher> + <info name="release" value="199605xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="yuuwaku (user disk).hdm" size="1261568" crc="985a282d" sha1="fbdbf25410b554156becc935fbf34ea103870c42" offset="000000" /> + </dataarea> + </part> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="yuuwaku" sha1="5448539447e40144bb0b24d5e9298449ecd1c7b1" /> + </diskarea> + </part> + </software> + <software name="zak"> + <!-- + Origin: Neo Kobe Collection + <rom name="Zak McKracken.mdf" size="759834720" crc="a1351dd7" sha1="3661d59a79d0adf97d6443da733bd5f46e40020a"/> + <rom name="Zak McKracken.mds" size="3304" crc="a006e8da" sha1="7df4355cd7dc90405930880e06c6aec4235c6e8d"/> + --> <description>Zak McKracken and The Alien Mindbenders</description> <year>1990</year> - <publisher>Fujitsu</publisher> + <publisher>富士通 (Fujitsu)</publisher> + <info name="release" value="199102xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="zak mckracken" sha1="0a06dcd3aaebcd79ec3c03dd0b179b9047e2bccd" /> @@ -4578,10 +8640,66 @@ User/save disks that can be created from the game itself are not included. </part> </software> + <software name="zan2"> + <!-- + Origin: Neo Kobe Collection + <rom name="Zan 2 Towns Special.mdf" size="219771648" crc="b224b08b" sha1="a028d7223c0255cecf26380371ea4c817b683c71"/> + <rom name="Zan 2 Towns Special.mds" size="750" crc="c834648b" sha1="313182cab9a5ab3b09bd71d83e199f7ab7e2b182"/> + + *after conversion with IsoBuster+EAC * + <rom name="track01.bin" size="10231200" crc="95767f0f" sha1="efd5a74ed5d8fa5706f0a2886782a642e0cc4822"/> + <rom name="track02.bin" size="36164352" crc="459bd0e2" sha1="4ed3f03b812df7222adbf3bb68d4dd3a80ae09ce"/> + <rom name="track03.bin" size="91198800" crc="d11ea63c" sha1="4fcd026081d3fdd3c49cc61fcbf575accc2b6611"/> + <rom name="track04.bin" size="73911600" crc="e6694e61" sha1="9c1611325495fdb80e957cc4eb5da819f4a4c10e"/> + <rom name="zan 2 towns special.cue" size="690" crc="a07806e3" sha1="02cf38214074c540b51eccb3642950957e12a2ef"/> + --> + <description>Zan II - Towns Special</description> + <year>1992</year> + <publisher>ウルフãƒãƒ¼ãƒ (WolfTeam)</publisher> + <info name="release" value="199204xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="zan 2 towns special (user disk).hdm" size="1261568" crc="863e02e3" sha1="28622691fd1a431055f4c586cfe585e0920a6153" offset="000000" /> + </dataarea> + </part> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="zan 2 towns special" sha1="e1a85e9691abb531bdef1cdf9373630ffa2338d7" /> + </diskarea> + </part> + </software> + + <software name="zatsuon"> + <!-- + Origin: Neo Kobe Collection + <rom name="Zatsuon Ryouiki.ccd" size="3446" crc="10ee6de3" sha1="0c4b1a6601826a41f9f459fcd7582d3453def178"/> + <rom name="Zatsuon Ryouiki.cue" size="631" crc="529007d8" sha1="db8c3270e3e27577d350dcf9318f53ed3b253ba0"/> + <rom name="Zatsuon Ryouiki.img" size="552301344" crc="36d5957f" sha1="faf0bb06a3e4bcf7963d2a845cb28ffa1436f2fe"/> + <rom name="Zatsuon Ryouiki.sub" size="22542912" crc="ab5c6fd4" sha1="f2992eeff16cce212cab087640be7a83d6ce52e2"/> + --> + <description>Zatsuon Ryouiki</description> + <year>1995</year> + <publisher>ディー・オー (D.O.)</publisher> + <part name="cdrom" interface="fmt_cdrom"> + <diskarea name="cdrom"> + <disk name="zatsuon ryouiki" sha1="f61c4277ef4a2ec49f127d6b798e30d9b7b0b3af" /> + </diskarea> + </part> + </software> + <software name="zenith"> + <!-- + Origin: Neo Kobe Collection + <rom name="Zenith.ccd" size="2872" crc="4426b6e6" sha1="7783bb8cd8cec3d812925d3edbdac4f6bd7dc625"/> + <rom name="Zenith.cue" size="502" crc="b24661ae" sha1="6873712a9eaf075f7f10d6d93c0632de4675f5df"/> + <rom name="Zenith.img" size="635263440" crc="59a86e0b" sha1="e30974c5d832961713cee73134e787fd880ad7fc"/> + <rom name="Zenith.sub" size="25929120" crc="751d0315" sha1="d4e2ec606815d6abd72a7a98606bc9a975f3ce58"/> + --> <description>Zenith</description> <year>1995</year> - <publisher>Himeya Soft</publisher> + <publisher>姫屋ソフト (Himeya Soft)</publisher> + <info name="release" value="199502xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="zenith" sha1="3709c5434e21c060895b0ee0d7921e7f2d0c4ca0" /> @@ -4590,9 +8708,17 @@ User/save disks that can be created from the game itself are not included. </software> <software name="zokudm"> - <description>Zoku Dungeon Master: Chaos no Gyakushuu</description> + <!-- + Origin: Neo Kobe Collection + <rom name="Zoku Dungeon Master - Chaos no Gyakushuu.ccd" size="6509" crc="c5e53d3a" sha1="7c40c6f773eed816411443701680c3a5c69eb9dc"/> + <rom name="Zoku Dungeon Master - Chaos no Gyakushuu.cue" size="1296" crc="7fcc15b8" sha1="76a403e6411a65f45f422af25df6ce8bf4601e6b"/> + <rom name="Zoku Dungeon Master - Chaos no Gyakushuu.img" size="507062976" crc="c99fc7ea" sha1="c03933fbc0c6a761a2ea56909b08c5439f9016c5"/> + <rom name="Zoku Dungeon Master - Chaos no Gyakushuu.sub" size="20696448" crc="85a1d575" sha1="7c1a263a45d652c298d130dc44a3ba79baa8495c"/> + --> + <description>Zoku Dungeon Master - Chaos no Gyakushuu</description> <year>1990</year> - <publisher>Victor</publisher> + <publisher>ãƒ“ã‚¯ã‚¿ãƒ¼éŸ³æ¥½ç”£æ¥ (Victor Musical Industries)</publisher> + <info name="release" value="199012xx" /> <part name="cdrom" interface="fmt_cdrom"> <diskarea name="cdrom"> <disk name="zoku dungeon master - chaos no gyakushuu" sha1="a4010dad3499bc7d87806a12e270890b1154032e" /> diff --git a/hash/fmtowns_flop.xml b/hash/fmtowns_flop.xml new file mode 100644 index 00000000000..237086c20cf --- /dev/null +++ b/hash/fmtowns_flop.xml @@ -0,0 +1,1646 @@ +<?xml version="1.0"?> +<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> +<softwarelist name="fmtowns_flop" description="Fujitsu FM Towns disk images"> + +<!-- + +Known undumped discs (possibly more exist), based on Blitzkrieg's researches + +:Loop: Izanahi no Kaikiten Sep-95 Grocer (FDx5) +? Dennou Sakka DX XXX-93 Nichikonren Kikaku (FDx2) +2069 A.D. Nov-91 Homedata (FDx3) +A Ressha de Ikou 4: Map Construction + Power-Up Kit Apr-94 Artdink (FDx3) +Ai Shimai: Futari no Kajitsu Sep-94 Silky's (FDx4) +Cameltry Nov-94 KID Corporation (FDx1) +Cannon Sight XXX-93 Nichikonren Kikaku (FDx2) +Crescent Nov-93 Silky's (FDx4) +D-Return Nov-90 Nichikonren Kikaku (FDx2) +Daisenryaku 3'90 Map Collection Vol.1 Jul-92 Pegasus Japan (FDx1) +Daisenryaku 3'90 Map Collection Vol.2 Jul-92 Pegasus Japan (FDx1) +Darwin's Dilemma Aug-91 Star Craft (FDx1) +DOR May-92 D.O. (FDx4) +DOR Part 2 XXX-92 D.O. (FDx1) +DOR Part 3 Nov-92 D.O. (FDx4) +Dragon Slayer: The Legend of Heroes Jun-90 Falcom (FDx3) +Dragon Slayer: The Legend of Heroes 2 Feb-93 Falcom (FDx5) +Elle Nov-91 Elf (FDx5) +Fukkatsusai Asticaya no Majo Nov-92 Grocer (FDx7) +Go Taishou === Shoudai Sangyou (FDx3) +Go Taishou 2 Feb-93 Shoudai Sangyou (FDx2) +Gokanshi Jul-95 Tensui Software (FDx1) +Gorby no Pipeline Daisakusen Apr-91 Compile (FDx1) +Gyakutama Ou: Wedding Errantry Jan-95 Grocer (FDx5) +Hana Yori Dango Apr-92 Active (FDx3) +Igo DB Jul-92 Fujitsu (FDx2) +Illusion City Mar-93 Takeru (FDx8) +Image May-94 Software House Parsley (FDx2) +Image 2 Jun-94 Software House Parsley (FDx4) +Kiwame Jouseki Shuu Nov-92 Log (FDx1) +Links Championship Course: Banff Springs Feb-95 Cybelle (FDx3) +Links Championship Course: Firestone Country Club Feb-95 Cybelle (FDx2) +Links Championship Course: Innisbrook Feb-95 Cybelle (FDx3) +Links Championship Course: Mauna Kea Feb-95 Cybelle (FDx3) +Loop Eraser Sep-94 Nichikonren Kikaku (FDx2) +Lord Monarch Nov-91 Falcom (FDx3) +Magic Ayako Suzume May-92 Computer Cosmos (FDx3) +Mahjong Clinic Zoukan Gou Nov-91 Homedata (FDx2) +Mahjong Elegance Nov-94 C-CLASS (FDx2) +Mahjong Fantasia Jul-92 Active (FDx4) +Misty Mei Tantei Toujou Jun-89 Data West (FDx1) +Misty Mei Tantei Toujou 2 Nov-89 Data West (FDx1) +Misty Mei Tantei Toujou 3 Jan-90 Data West (FDx1) +Misty Mei Tantei Toujou 4 Jul-90 Data West (FDx1) +Misty Mei Tantei Toujou 5 Sep-90 Data West (FDx1) +Misty Mei Tantei Toujou 6 Nov-90 Data West (FDx1) +Misty Mei Tantei Toujou 7 Jan-91 Data West (FDx1) +Nonomura Byouin no Hitobito Jul-94 Silky's (FDx5) +Oh! Pai Sep-93 Silky's (FDx5) +Planetary Campaign XXX-93 Nichikonren Kikaku (FDx1) +Pleria: The Royal Emblem Jul-92 Orange House (FDx5) +Ponyon Sep-92 Ponytail Soft (FDx4) +Premium Nov-92 Silky's (FDx4) +Present 2 Oct-92 Orange House (FDx5) +Quiz Banchou Santa-kun 2 May-92 Active (FDx3) +Shangrlia Jan-92 Elf (FDx4) +Shangrlia 2 Oct-94 Elf (FDx1) +Shisetsu Sangokushi Sep-93 Tensui Software (FDx1) +Shisetsu Sangokushi Jidai Jun-94 Tensui Software (FDx1) +Shogi Taisho Dec-92 Shoudai Sangyou (FDx2) +Shogi Taisho 2 Jan-93 Shoudai Sangyou (FDx1) +Sim City Terrain Editor Jun-92 Fujitsu (FDx1) +Super Daisenryaku XXX-89 System Soft (FDx1) +Super Ultra Mucchin Puripuri Cyborg Marilyn DX Apr-94 Jast (FDx4) +Sweet Angel Nov-92 Active (FDx2) +Tenshi-Tachi no Gogo 6: My Fair Teacher Aug-93 Jast (FDx3) +Tenshi-Tachi no Gogo Collection Mar-95 Jast (FDx4) +Totsugeki! Bakkon Street Jan-94 Jast (FDx2) +Totsugeki! Bakkon Street 2: Hunting Roulette Sep-94 Jast (FDx3) +Traffic Confusion Jun-92 Masterpiece (FDx2) +Youjuu Club Mar-92 D.O. (FDx3) +Yuki Neko Apr-95 Jast (FDx4) + +--> + + + +<!-- SYSTEM DISCS --> + + <software name="tssl20"> + <description>Towns System Software v1.1 L20 English</description> + <year>199?</year> + <publisher>富士通 (Fujitsu)</publisher> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v1.1 l20 english (boot disk).hdm" size="1261568" crc="77aeeba6" sha1="c8a298e57eddda9cd9205ab1a8c62c4683ceaac2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk 1" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v1.1 l20 english (disk 1).hdm" size="1261568" crc="e3eef6f7" sha1="bd834b0c6cdb3b7effffb5f9aa78e0f3820a2a9d" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk 2" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v1.1 l20 english (disk 2).hdm" size="1261568" crc="843fb912" sha1="d5fae04613c2b94b0fa52eb42682aefcae722a2d" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Disk 3" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v1.1 l20 english (disk 3).hdm" size="1261568" crc="f3759ed3" sha1="1a0e3a57164cae8d7fe1e1f42a81a2ccf2f48270" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Disk 4" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v1.1 l20 english (disk 4).hdm" size="1261568" crc="e5a85b66" sha1="9c5b2cd9c757e20b90bdcd966b1ce231a7a351b1" offset="0" /> + </dataarea> + </part> + </software> + + <software name="tssl20a" cloneof="tssl20"> + <description>Towns System Software v1.1 L20 English (Alt Disk 2)</description> + <year>199?</year> + <publisher>富士通 (Fujitsu)</publisher> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v1.1 l20 english (boot disk).hdm" size="1261568" crc="77aeeba6" sha1="c8a298e57eddda9cd9205ab1a8c62c4683ceaac2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk 1" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v1.1 l20 english (disk 1).hdm" size="1261568" crc="e3eef6f7" sha1="bd834b0c6cdb3b7effffb5f9aa78e0f3820a2a9d" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk 2" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v1.1 l20 english (disk 2) [alt 1].hdm" size="1261568" crc="a420a122" sha1="5b42db0578f9ff0b8b19e34f0eea1057dfe30e92" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Disk 3" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v1.1 l20 english (disk 3).hdm" size="1261568" crc="f3759ed3" sha1="1a0e3a57164cae8d7fe1e1f42a81a2ccf2f48270" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Disk 4" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v1.1 l20 english (disk 4).hdm" size="1261568" crc="e5a85b66" sha1="9c5b2cd9c757e20b90bdcd966b1ce231a7a351b1" offset="0" /> + </dataarea> + </part> + </software> + + <software name="tssl51"> + <description>Towns System Software v2.1 L51</description> + <year>1995</year> + <publisher>富士通 (Fujitsu)</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v2.1 l51.hdm" size="1261568" crc="0fc9176c" sha1="7d96f648912102b69e1a0329aeebf386a78ece75" offset="0" /> + </dataarea> + </part> + </software> + + <software name="tssl51a" cloneof="tssl51"> + <description>Towns System Software v2.1 L51 (Alt)</description> + <year>1995</year> + <publisher>富士通 (Fujitsu)</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="[os] towns system software v2.1 l51 [set 1].hdm" size="1261568" crc="a5bff98a" sha1="6c5d2cb94fd7d7bb31e6d55ee8700403569e5831" offset="0" /> + </dataarea> + </part> + </software> + + <software name="msdos31"> + <description>MS-DOS 3.1 L24</description> + <year>1992</year> + <publisher>富士通 (Fujitsu)</publisher> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 3.1 l24 (disk 1 - system).hdm" size="1261568" crc="c9a3378f" sha1="2c423f85ceea732b41cc195b065ada9e1f09b67c" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Utility" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 3.1 l24 (disk 2 - utility).hdm" size="1261568" crc="c6f4c86c" sha1="86e64a6744e2c7d1d5d4e3159ebd1885c691b33b" offset="0" /> + </dataarea> + </part> + </software> + + <software name="msdos62"> + <description>MS-DOS 6.2 L10</description> + <year>1994</year> + <publisher>富士通 (Fujitsu)</publisher> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Boot Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 6.2 l10 (boot disk).hdm" size="1261568" crc="16a72ad3" sha1="995b709506811697eceddcbd1812ca809d7230e8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Utility 1" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 6.2 l10 (utility 1).hdm" size="1261568" crc="189b0d6f" sha1="b8a04dbda831a7bacf782135510b6fc70faa01f3" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Utility 2" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 6.2 l10 (utility 2).hdm" size="1261568" crc="eb9fdbb1" sha1="5afa97f3061ab3394c6a38b0b8d233113dbd3d06" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Utility 3" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 6.2 l10 (utility 3).hdm" size="1261568" crc="80be3828" sha1="61a484f0cd085da7f6911e98e39295730d202055" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Utility 4" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 6.2 l10 (utility 4).hdm" size="1261568" crc="4016cf1a" sha1="870f7b747c3612c8f915da4f32fd86d8868d9d38" offset="0" /> + </dataarea> + </part> + </software> + + <software name="msdos62a" cloneof="msdos62"> + <description>MS-DOS 6.2 L10 (Bad Disk 1?)</description> + <year>1994</year> + <publisher>富士通 (Fujitsu)</publisher> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 6.2 l10 (startup) [bad - missing data].hdm" size="1261568" crc="e7eec864" sha1="22a98bcb36566487a0253657de1a00e44e459b6a" offset="0" status="baddump" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Utility 1" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 6.2 l10 (utility 1).hdm" size="1261568" crc="189b0d6f" sha1="b8a04dbda831a7bacf782135510b6fc70faa01f3" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Utility 2" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 6.2 l10 (utility 2).hdm" size="1261568" crc="eb9fdbb1" sha1="5afa97f3061ab3394c6a38b0b8d233113dbd3d06" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Utility 3" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 6.2 l10 (utility 3).hdm" size="1261568" crc="80be3828" sha1="61a484f0cd085da7f6911e98e39295730d202055" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Utility 4" /> + <dataarea name="flop" size="1261568"> + <rom name="[os] ms-dos 6.2 l10 (utility 4).hdm" size="1261568" crc="4016cf1a" sha1="870f7b747c3612c8f915da4f32fd86d8868d9d38" offset="0" /> + </dataarea> + </part> + </software> + + + +<!-- GAME DISCS --> + + <software name="abunaten"> + <description>Abunai Tengu Densetsu</description> + <year>1990</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199004xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="abunai tengu densetsu (disk a).hdm" size="1261568" crc="f2f5c92d" sha1="e2639b4746e228d786eceb00de98d64a5cea6cba" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="abunai tengu densetsu (disk b).hdm" size="1261568" crc="fd289b9f" sha1="5454ed981f260f41c3d8f8707a0990c23fc03dc6" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="abunai tengu densetsu (disk c).hdm" size="1261568" crc="4271f241" sha1="a6cf43f58681d06151ec8acbbd02fd98df44ed7b" offset="0" /> + </dataarea> + </part> + </software> + + <software name="asuka120"> + <description>Asuka 120% Burning Fest.</description> + <year>1994</year> + <publisher>ファミリーソフト (Family Soft)</publisher> + <info name="release" value="199403xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="asuka 120% burning fest. (disk a).hdm" size="1261568" crc="46a5074d" sha1="8efb863ea0878f9236082f7d7935f494c4522899" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="asuka 120% burning fest. (disk b).hdm" size="1261568" crc="2a448e8f" sha1="3b57fd0a2fecec56a3362884de0770ec4538f5eb" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="asuka 120% burning fest. (disk c).hdm" size="1261568" crc="ac9a582e" sha1="726b05d573e0776006cee6aa8c71009b1e66b5cc" offset="0" /> + </dataarea> + </part> + </software> + + <software name="brandish"> + <description>Brandish</description> + <year>1991</year> + <publisher>日本ファルコム(Nihon Falcom)</publisher> + <info name="release" value="199112xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="brandish (disk 1).hdm" size="1261568" crc="d41db5b4" sha1="c64aa555bd2beb0b32458cab8d38803acaf982dd" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="brandish (disk 2).hdm" size="1261568" crc="85f4c5fc" sha1="f50824579ea4a142be1fbce6a59b8712576a2e6e" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="brandish (disk 3).hdm" size="1261568" crc="711d5e6d" sha1="0315531f8f7aec540163e4dda7d4cab0fe4894fe" offset="0" /> + </dataarea> + </part> + </software> + + <software name="columns"> + <description>Columns</description> + <year>1990</year> + <publisher>日本テレãƒãƒƒãƒˆ (Nihon Telenet)</publisher> + <info name="release" value="199012xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="columns.hdm" size="1261568" crc="4ad9c624" sha1="8fc4fc56767c94864e8aceb2ae77a23cf5781e74" offset="0" /> + </dataarea> + </part> + </software> + + <software name="dps"> + <description>D.P.S - Dream Program System</description> + <year>1990</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199004xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="d.p.s - dream program system (disk 1).hdm" size="1261568" crc="26a600e3" sha1="0a4d4966aa19540445d032e93d7b2ca22979720f" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="d.p.s - dream program system (disk 2).hdm" size="1261568" crc="1ba383fb" sha1="591d14189e9ccda81eff8fa756e2f50718ed0f85" offset="0" /> + </dataarea> + </part> + </software> + + <software name="dpssg"> + <description>D.P.S SG - Dream Program System SG</description> + <year>1990</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199009xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg (disk 1 - system).hdm" size="1261568" crc="525e09d5" sha1="a3f06b510030f1a1885c24eb7c3ae3b61678d0c4" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Kateikyoushi wa Suteki na Oshigoto" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg (disk 2 - kateikyoushi wa suteki na oshigoto).hdm" size="1261568" crc="030bbe44" sha1="7fe3bd38370c67fbd80c9b069299abcf914c45ab" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Fahnen Fliegen" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg (disk 3 - fahnen fliegen).hdm" size="1261568" crc="ee47af10" sha1="3db3f994df5701ec2811c4f628ca7552845a07ab" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Nobunaga no Inbou" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg (disk 4 - nobunaga no inbou).hdm" size="1261568" crc="a96f5768" sha1="3b84125f81d610ba218a2df9aab163d044ee84d4" offset="0" /> + </dataarea> + </part> + </software> + + <software name="dpssg2"> + <description>D.P.S SG 2 - Dream Program System SG Set 2</description> + <year>1991</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199104xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg set 2 (disk 1 - system).hdm" size="1261568" crc="9133028a" sha1="a344c08dfe37f8da333eee2f2f85a538ffa00e62" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Antique House" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg set 2 (disk 2 - antique house).hdm" size="1261568" crc="b8d09260" sha1="d4067d8c87e3fe6f66396145edeb64fdcbe22842" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Akai Yoru" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg set 2 (disk 3 - akai yoru).hdm" size="1261568" crc="d1bdb2bf" sha1="ea58a504414d0824ddd9adc23ca504a974573f26" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Ikenai Naika Kenshin Futatabi" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg set 2 (disk 4 - ikenai naika kenshin futatabi).hdm" size="1261568" crc="10250dff" sha1="550696eb596e0c3ffbb670d2fd003faf664866d5" offset="0" /> + </dataarea> + </part> + </software> + + <software name="dpssg3"> + <description>D.P.S SG 3 - Dream Program System SG Set 3</description> + <year>1991</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199111xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg set 3 (disk 1 - system).hdm" size="1261568" crc="9133028a" sha1="a344c08dfe37f8da333eee2f2f85a538ffa00e62" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Sotsugyou" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg set 3 (disk 2 - sotsugyou).hdm" size="1261568" crc="6a9aad37" sha1="4447e8d1ef989d5927f85014b5598d9687f2f0c5" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Rabbit P4P" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg set 3 (disk 3 - rabbit p4p).hdm" size="1261568" crc="eeadc748" sha1="80fd11fefde38b4abcbce95dbe2042d5016c8c06" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Shinkonsan Monogatari" /> + <dataarea name="flop" size="1261568"> + <rom name="dream program system sg set 3 (disk 4 - shinkonsan monogatari).hdm" size="1261568" crc="868fe008" sha1="0f3a452e4614cf5f1c72ee5a31fa678b3f059a84" offset="0" /> + </dataarea> + </part> + </software> + + <software name="dinosaur"> + <description>Dinosaur</description> + <year>1991</year> + <publisher>日本ファルコム(Nihon Falcom)</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="dinosaur (disk 1 - program).hdm" size="1261568" crc="2f652873" sha1="190dc1a07c1b4ac1ccc96295e8b178c15eaf89b1" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="dinosaur (disk 2 - scenario 1).hdm" size="1261568" crc="e230629d" sha1="a2d0f382a49bb8b9c71d0cd23c7ec9f7b13f823b" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="dinosaur (disk 3 - scenario 2).hdm" size="1261568" crc="6a449cdc" sha1="792c40cd43ab723b4832995e55ef1367a6e462ae" offset="0" /> + </dataarea> + </part> + </software> + + <software name="drstop"> + <description>Dr. Stop!</description> + <year>1990</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199204xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="dr. stop! (disk a).hdm" size="1261568" crc="622bc757" sha1="7b0e12a71c8b531ac355d733239d72a4223a5bd6" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="dr. stop! (disk b).hdm" size="1261568" crc="faf6169c" sha1="c1cf3ecbcda6da2e581b0b00f481abef33c0c626" offset="0" /> + </dataarea> + </part> + </software> + + <software name="futoph02"> + <description>Futoppara FD Heisei #02</description> + <year>199?</year> + <publisher>SoftBank</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="futoppara fd heisei #02.hdm" size="1261568" crc="cca4f1ae" sha1="7d73d7e2f6174f09273c7b38218294ce32380fb9" offset="0" /> + </dataarea> + </part> + </software> + + <software name="futoph03"> + <description>Futoppara FD Heisei #03</description> + <year>199?</year> + <publisher>SoftBank</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="futoppara fd heisei #03.hdm" size="1261568" crc="1009e7c2" sha1="2f3af3115de077a0a69dc045085851d9001814a8" offset="0" /> + </dataarea> + </part> + </software> + + <software name="futoph04"> + <description>Futoppara FD Heisei #04</description> + <year>199?</year> + <publisher>SoftBank</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="futoppara fd heisei #04.hdm" size="1261568" crc="75ceb8be" sha1="0650754491576875b02e07b573c4a5a06e275ba5" offset="0" /> + </dataarea> + </part> + </software> + + <software name="futoph05"> + <description>Futoppara FD Heisei #05</description> + <year>199?</year> + <publisher>SoftBank</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="futoppara fd heisei #05.hdm" size="1261568" crc="bb41215a" sha1="655f955ad7ee44dc1035c238f8e17b91a34b6bc6" offset="0" /> + </dataarea> + </part> + </software> + + <software name="futoph06"> + <description>Futoppara FD Heisei #06</description> + <year>199?</year> + <publisher>SoftBank</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="futoppara fd heisei #06.hdm" size="1261568" crc="14bdb0d5" sha1="d6f32df1be6fa3aaa54ec3209af84d4a430ff5cb" offset="0" /> + </dataarea> + </part> + </software> + + <software name="futoph07"> + <description>Futoppara FD Heisei #07</description> + <year>199?</year> + <publisher>SoftBank</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="futoppara fd heisei #07.hdm" size="1261568" crc="91d8bc3f" sha1="54eef9754dec15b4ede6a4f16fe2c15eb101255c" offset="0" /> + </dataarea> + </part> + </software> + + <software name="futoph08"> + <description>Futoppara FD Heisei #08</description> + <year>199?</year> + <publisher>SoftBank</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="futoppara fd heisei #08.hdm" size="1261568" crc="f8061488" sha1="fbe9fa3a916b38154ddae4576993855354120ee6" offset="0" /> + </dataarea> + </part> + </software> + + <software name="futoph09"> + <description>Futoppara FD Heisei #09</description> + <year>199?</year> + <publisher>SoftBank</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="futoppara fd heisei #09.hdm" size="1261568" crc="8d917956" sha1="10560f07227a6ce945b27deac9a86df96fef0edd" offset="0" /> + </dataarea> + </part> + </software> + + <software name="futoph10"> + <description>Futoppara FD Heisei #10</description> + <year>199?</year> + <publisher>SoftBank</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="futoppara fd heisei #10.hdm" size="1261568" crc="ae02ab66" sha1="39a2921484d1f6b141fe43af046003593b07cf0d" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt01"> + <description>Houma Hunter Lime Vol. 01</description> + <year>1993</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199305xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 01 (disk 1).hdm" size="1261568" crc="bcacfc71" sha1="ff4f4cd0846d0fdab5d60d163d8d4a91b06ca8cb" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 01 (disk 2).hdm" size="1261568" crc="d29bb913" sha1="27ed3acf34e5eecb6295386db3a111ce3acf0e53" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt02"> + <description>Houma Hunter Lime Vol. 02</description> + <year>1993</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199306xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 02 (disk 1).hdm" size="1261568" crc="fde9b8e5" sha1="08274b1e0912d7a03194279a814be4421ab79e75" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 02 (disk 2).hdm" size="1261568" crc="17c31391" sha1="d2584da1ac2e01e30256f5341f35e21513130cc1" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt03"> + <description>Houma Hunter Lime Vol. 03</description> + <year>1993</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199308xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 03 (disk 1).hdm" size="1261568" crc="ab3d77d0" sha1="14ca7e31131d411408e4c532ae0a9c77d28160f8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 03 (disk 2).hdm" size="1261568" crc="10b66445" sha1="447ff2266a281c7352bf0439e7fe16e49e6fb254" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt04"> + <description>Houma Hunter Lime Vol. 04</description> + <year>1993</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199309xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 04 (disk 1).hdm" size="1261568" crc="cd83229e" sha1="3a52b0cee6a15de47c322157997cb7176abdee98" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 04 (disk 2).hdm" size="1261568" crc="2a56cba4" sha1="3a81e2ac38d8b610f64f90b7f93c01da5ca80f46" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt05"> + <description>Houma Hunter Lime Vol. 05</description> + <year>1993</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199310xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 05 (disk 1).hdm" size="1261568" crc="87c29800" sha1="3872d0b64d9973c78cd482d6bfdd489002b483d6" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 05 (disk 2).hdm" size="1261568" crc="2064f50f" sha1="14bee84e524ac603c94bcca791dafe3cb2c3719e" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt06"> + <description>Houma Hunter Lime Vol. 06</description> + <year>1993</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199311xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 06 (disk 1).hdm" size="1261568" crc="8bfd3e9b" sha1="aa626bb3356839cf7071ce8d8d8cc09c9951b220" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 06 (disk 2).hdm" size="1261568" crc="9c669e28" sha1="a917938337a10b5ab73418ecc1bcddd55cd87d04" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt07"> + <description>Houma Hunter Lime Vol. 07</description> + <year>1993</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199312xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 07 (disk 1).hdm" size="1261568" crc="ed76de63" sha1="af2d6bcd4373245bfd7a66ac0f4c7c61a5942f9d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 07 (disk 2).hdm" size="1261568" crc="cd174cc7" sha1="a866fb6c898f2488113232c9d179aeb2545d504d" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 07 (disk 3).hdm" size="1261568" crc="076aa899" sha1="2a4e91e20ea87657edc18ff61d6274b8aa056e54" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt08"> + <description>Houma Hunter Lime Vol. 08</description> + <year>1994</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199401xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 08 (disk 1).hdm" size="1261568" crc="f8954bcb" sha1="796336813e695c6073e334c2fc7aae7f1fa6fe6a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 08 (disk 2).hdm" size="1261568" crc="550bbff0" sha1="636b8d763757e43f0225765ae05a3ded263f20cd" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 08 (disk 3).hdm" size="1261568" crc="d17cdd8c" sha1="e6c7542dcaa407d3e4e507702fe1a068f79e5b0b" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt09"> + <description>Houma Hunter Lime Vol. 09</description> + <year>1994</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199402xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 09 (disk 1).hdm" size="1261568" crc="92e7dd6c" sha1="815405e0a58ee2105e86472281757ca4b5826f3d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 09 (disk 2).hdm" size="1261568" crc="a0bf31d3" sha1="24ec5c3103080a7191c5027d16533944c33d6cce" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 09 (disk 3).hdm" size="1261568" crc="65c7c667" sha1="45269774f1f6cb977262f57d03bf3c20d3b71024" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt10"> + <description>Houma Hunter Lime Vol. 10</description> + <year>1994</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199403xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 10 (disk 1).hdm" size="1261568" crc="be436f73" sha1="2d9f8a0b90d59c48a25ac3c18cf753e87aae22ce" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 10 (disk 2).hdm" size="1261568" crc="e9cf9de2" sha1="6c1dcc4d40b9d9f55f9953eeb36d0375d00e2ccd" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 10 (disk 3).hdm" size="1261568" crc="d675e169" sha1="44bc603ba6293bda6fcdcf4afcd526cd21f7adc7" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt11"> + <description>Houma Hunter Lime Vol. 11</description> + <year>1994</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199404xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 11 (disk 1).hdm" size="1261568" crc="11c06a95" sha1="97a260b2d26215518d180a2ac6959f6032049909" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 11 (disk 2).hdm" size="1261568" crc="9a339a06" sha1="04ddab9becb7d337d58123f1db41f61ce370a1e8" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 11 (disk 3).hdm" size="1261568" crc="94f78df9" sha1="6a318d7b3766b7cc97dbcd53208a4fe17bdc2951" offset="0" /> + </dataarea> + </part> + </software> + + <software name="hhunt12"> + <description>Houma Hunter Lime Vol. 12</description> + <year>1994</year> + <publisher>タケル (Takeru)</publisher> + <info name="release" value="199405xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 12 (disk 1).hdm" size="1261568" crc="1e8f5e4e" sha1="13a081f80bd8d18dd1454c5ffeffb0430382e82d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 12 (disk 2).hdm" size="1261568" crc="c2c125e6" sha1="62ea776500763d4ca79c76a0ad5c7f7d39e51660" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 12 (disk 3).hdm" size="1261568" crc="8e85a5ad" sha1="7e11e491786fef1ef71e0d29f2539003f40053c7" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="houma hunter lime vol. 12 (disk 4).hdm" size="1261568" crc="21a00337" sha1="fa8b7dc24933fe52cf3bfe0e3bccdcb92d6a56e1" offset="0" /> + </dataarea> + </part> + </software> + + <software name="irium"> + <description>Irium</description> + <year>1993</year> + <publisher>オレンジãƒã‚¦ã‚¹ (Orange House)</publisher> + <info name="release" value="199306xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="irium (disk 1 - system).hdm" size="1261568" crc="7d6b858f" sha1="1670641115935a85164a58f58cdeb2b4514652a2" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="irium (disk 2 - a).hdm" size="1261568" crc="0d11cb39" sha1="0ef37fb4abd4cd473ba6518d3dfce40aaefeba05" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="irium (disk 3 - b).hdm" size="1261568" crc="193a7e6d" sha1="895d7c1ff30b64612ac18aedb3b1d67f79738322" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="irium (disk 4 - c).hdm" size="1261568" crc="c7032ea8" sha1="35c8158074c8024dd65217727161c6f920f9ef06" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Disk D" /> + <dataarea name="flop" size="1261568"> + <rom name="irium (disk 5 - d).hdm" size="1261568" crc="7485ce43" sha1="c16a5acf65b732676496b9fd89e337609283cb12" offset="0" /> + </dataarea> + </part> + </software> + + <software name="kawaichi"> + <description>Kawarazaki-ke no Ichizoku</description> + <year>1993</year> + <publisher>シルã‚ーズ (Silky's)</publisher> + <info name="release" value="199312xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="kawarazaki-ke no ichizoku (disk a).hdm" size="1261568" crc="8e5377bb" sha1="1b977a5dbc3bae53f995cce516be29eef231267d" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="kawarazaki-ke no ichizoku (disk b).hdm" size="1261568" crc="28cc3fe4" sha1="402e71d702b3af458110e602c3109e82bc26afb0" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="kawarazaki-ke no ichizoku (disk c).hdm" size="1261568" crc="e7647e74" sha1="49053fc637a6d704fc766c3428741fafc6e06e5a" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Disk D" /> + <dataarea name="flop" size="1261568"> + <rom name="kawarazaki-ke no ichizoku (disk d).hdm" size="1261568" crc="12a2bc4b" sha1="57eec756df31ea4e4a2aaf822a7a7200004fcd4a" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Disk E" /> + <dataarea name="flop" size="1261568"> + <rom name="kawarazaki-ke no ichizoku (disk e).hdm" size="1261568" crc="7999334a" sha1="c4e1abf0be91e679867709319fb876f6c6789aa4" offset="0" /> + </dataarea> + </part> + </software> + + <software name="musicpro"> + <description>Music Pro-Towns</description> + <year>1989</year> + <publisher>Musical Plan</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="music pro-towns (1989)(musical plan)(jp).hdm" size="1261568" crc="f5f61d98" sha1="2abb5e9042d8aae0480b551568ac2f8053126209" offset="0" /> + </dataarea> + </part> + </software> + + <software name="premium2"> + <description>Premium 2</description> + <year>1993</year> + <publisher>シルã‚ーズ (Silky's)</publisher> + <info name="release" value="199301xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="premium 2 (disk 1).hdm" size="1261568" crc="1fef893a" sha1="907617847040a74ef6d92a33e9430e46d500076e" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="premium 2 (disk 2).hdm" size="1261568" crc="5d645e54" sha1="dd9c4c649d273b7dd0730806837bdc3c953d3272" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="premium 2 (disk 3).hdm" size="1261568" crc="26d67acd" sha1="70289de0b14909480769216904707116cafbcbcb" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="premium 2 (disk 4).hdm" size="1261568" crc="5723ce84" sha1="5948e0ba82688fe321be6b49402722768996c63e" offset="0" /> + </dataarea> + </part> + </software> + + <software name="rance"> + <description>Rance - Hikari o Motomete.hdm</description> + <year>1990</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199003xx" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="rance - hikari o motomete (disk 1).hdm" size="1261568" crc="fc54292a" sha1="a6dde9bfc776bdaa703be54a5fe68cee3c5a3b13" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="rance - hikari o motomete (disk 2).hdm" size="1261568" crc="775b7c12" sha1="f5f5487207b156459cce136a09ca4f3e92309046" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="rance - hikari o motomete (disk 3).hdm" size="1261568" crc="38e84c46" sha1="2ade9200c6aed67b6e895e144226d36ca3376145" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="rance - hikari o motomete (disk 4).hdm" size="1261568" crc="ec2cb963" sha1="eb23dd3f8ba77c3922651eb7e32f09a73d7bf717" offset="0" /> + </dataarea> + </part> + </software> + + <software name="rance2"> + <description>Rance 2 - Hangyaku no Shoujotachi</description> + <year>1990</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199006xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="rance 2 - hangyaku no shoujotachi (disk a).hdm" size="1261568" crc="8d06cd43" sha1="1c8dcee98e01e5ec34bd3b2caabf90fccf800011" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="rance 2 - hangyaku no shoujotachi (disk b).hdm" size="1261568" crc="116f4cd2" sha1="5d1acf08309a3c33b2578d1d608d73122c2029d0" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="rance 2 - hangyaku no shoujotachi (disk c).hdm" size="1261568" crc="18c701c0" sha1="5379383e7acebc189712e3cb4cfc8a5dfda37f4c" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Disk D" /> + <dataarea name="flop" size="1261568"> + <rom name="rance 2 - hangyaku no shoujotachi (disk d).hdm" size="1261568" crc="4657f014" sha1="ff5ae040d04383a8c5f19cc2d665877056f4fed0" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Disk E" /> + <dataarea name="flop" size="1261568"> + <rom name="rance 2 - hangyaku no shoujotachi (disk e).hdm" size="1261568" crc="446c28e8" sha1="cdcb1c27b7a6dcaa091176e0522a28daa188b222" offset="0" /> + </dataarea> + </part> + <part name="flop6" interface="floppy_3_5"> + <feature name="part_id" value="Disk F" /> + <dataarea name="flop" size="1261568"> + <rom name="rance 2 - hangyaku no shoujotachi (disk f).hdm" size="1261568" crc="c5b0b6bd" sha1="76eec3eec751007c690e36045b6bcf390acb99c7" offset="0" /> + </dataarea> + </part> + </software> + + <software name="reira"> + <description>Reira</description> + <year>1994</year> + <publisher>シルã‚ーズ (Silky's)</publisher> + <info name="release" value="199407xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk a).hdm" size="1261568" crc="7ca28bcc" sha1="bcbd502d3aca183f00211dd91b34b9c6a8a53419" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk b).hdm" size="1261568" crc="3d66ddc6" sha1="05d1d20dd5c535dfe653e6afd23e0e256c3639ec" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk c).hdm" size="1261568" crc="03fa528c" sha1="635043a3490b03ee0ef06d901e774ae46f14963c" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Disk D" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk d).hdm" size="1261568" crc="d26f5aef" sha1="9d59989831b58ed6098b517b29f45514932c8580" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Disk E" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk e).hdm" size="1261568" crc="9008a977" sha1="32cf426ce9f15489c92dd1effc58da5380ea6f16" offset="0" /> + </dataarea> + </part> + <part name="flop6" interface="floppy_3_5"> + <feature name="part_id" value="Disk F" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk f).hdm" size="1261568" crc="fa05a62c" sha1="1990124f647a164b18380b1686094ef29ee100e2" offset="0" /> + </dataarea> + </part> + </software> + + <software name="reiraa" cloneof="reira"> + <description>Reira (Alt Disk 1)</description> + <year>1994</year> + <publisher>シルã‚ーズ (Silky's)</publisher> + <info name="release" value="199407xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk a) [alt 1].hdm" size="1261568" crc="d82d5732" sha1="ac51e1ee6be9afa79f984a9ddcd5109347d31c35" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk b).hdm" size="1261568" crc="3d66ddc6" sha1="05d1d20dd5c535dfe653e6afd23e0e256c3639ec" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk c).hdm" size="1261568" crc="03fa528c" sha1="635043a3490b03ee0ef06d901e774ae46f14963c" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Disk D" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk d).hdm" size="1261568" crc="d26f5aef" sha1="9d59989831b58ed6098b517b29f45514932c8580" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Disk E" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk e).hdm" size="1261568" crc="9008a977" sha1="32cf426ce9f15489c92dd1effc58da5380ea6f16" offset="0" /> + </dataarea> + </part> + <part name="flop6" interface="floppy_3_5"> + <feature name="part_id" value="Disk F" /> + <dataarea name="flop" size="1261568"> + <rom name="reira (disk f).hdm" size="1261568" crc="fa05a62c" sha1="1990124f647a164b18380b1686094ef29ee100e2" offset="0" /> + </dataarea> + </part> + </software> + + <software name="shogisei"> + <description>Shougi Seiten</description> + <year>1992</year> + <publisher>ホームデータ (Home Data)</publisher> + <info name="release" value="199204xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="shogi seiten (disk 1 - system).hdm" size="1261568" crc="3b19e6db" sha1="2a5cf638bddee29e06171f98eb3a981f3d5784b0" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Data Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="shogi seiten (disk 2 - data).hdm" size="1261568" crc="b496bcb9" sha1="4bf4a0fe3d90d62dd14ecfd442063cd511967f9a" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="User Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="shogi seiten (user disk).hdm" size="1261568" crc="1d010eba" sha1="7e07385ff880096ee1e6923ff2dc4c3f75b30eca" offset="0" status="baddump" /> + </dataarea> + </part> + </software> + + <software name="sorenanp"> + <description>Soreyuke Nanpa-kun</description> + <year>1991</year> + <publisher>ヴァージンãƒã‚¦ã‚¹ (Virgin House)</publisher> + <info name="release" value="199108xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="soreyuke nanpa-kun (disk a).hdm" size="1261568" crc="26d312fd" sha1="aaccaf41db22c44da1f637b11110d8dbf3f7c9cc" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="soreyuke nanpa-kun (disk b).hdm" size="1261568" crc="36f63243" sha1="a55c8075fc0430a5288224c36b0719fe33ce329e" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="soreyuke nanpa-kun (disk c).hdm" size="1261568" crc="c60eb344" sha1="c88788f4156f88d80e368ee12dc486e32544ce52" offset="0" /> + </dataarea> + </part> + </software> + + <software name="superdps"> + <description>Super D.P.S.</description> + <year>1992</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <info name="release" value="199209xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="System Disk" /> + <dataarea name="flop" size="1261568"> + <rom name="super d.p.s. (disk 1 - system).hdm" size="1261568" crc="af618979" sha1="bfaf62b06e25f92a731a76208ab8bf69d6ac965a" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Maria to Kanpan" /> + <dataarea name="flop" size="1261568"> + <rom name="super d.p.s. (disk 2 - maria to kanpan a).hdm" size="1261568" crc="5c762738" sha1="f09d00215967e015258e7bde7fb22094927d0a17" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Kaizoku Kagyou Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="super d.p.s. (disk 3 - kaizoku kagyou a).hdm" size="1261568" crc="2728576a" sha1="406741790efc9106a7b51df07035d49d78015db2" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Kaizoku Kagyou Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="super d.p.s. (disk 4 - kaizoku kagyou b).hdm" size="1261568" crc="dc71038d" sha1="245001245db86d8631c74c2e4378c0e7b0de97c3" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Tonoo no Mori Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="super d.p.s. (disk 5 - toono no mori a).hdm" size="1261568" crc="4fcf0a92" sha1="d5c6ef8c599c9f418e273e7493ae28aa9808f5cd" offset="0" /> + </dataarea> + </part> + <part name="flop6" interface="floppy_3_5"> + <feature name="part_id" value="Tonoo no Mori Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="super d.p.s. (disk 6 - toono no mori b).hdm" size="1261568" crc="78ae11c6" sha1="8410d7c8932eb94178d821d93afd6ce3f03b0c00" offset="0" /> + </dataarea> + </part> + </software> + + <software name="toshinto"> + <description>Toushin Toshi</description> + <year>1991</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 1).hdm" size="1261568" crc="a003c2f4" sha1="cc0f908542051f011d9f620ed9cb9632c60a46f1" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 2).hdm" size="1261568" crc="092e59ef" sha1="509adda6a0260e2da433af8305f6c360175fd5e2" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 3).hdm" size="1261568" crc="ff4377b2" sha1="0ea45b4a9cf6be8bcabe394c46fab6fb96497d4f" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 4).hdm" size="1261568" crc="37d5d673" sha1="9297cc507996bd48c533e51ac1a7a6ecdeddfc90" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 5).hdm" size="1261568" crc="e7511be5" sha1="efda6d406431ac838acc50d18a0aa05d63782bd5" offset="0" /> + </dataarea> + </part> + <part name="flop6" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 6).hdm" size="1261568" crc="d4d0f12e" sha1="d0d09ff3f5215797672bcb6d78b1d11a04588f1f" offset="0" /> + </dataarea> + </part> + <part name="flop7" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 7).hdm" size="1261568" crc="32cc36a0" sha1="db3a14ac9f389f8ba75d775023d8c7d297b7f2f3" offset="0" /> + </dataarea> + </part> + </software> + + <software name="toshintoa" cloneof="toshinto"> + <description>Toushin Toshi (Alt Disk 2)</description> + <year>1991</year> + <publisher>アリスソフト (AliceSoft)</publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 1).hdm" size="1261568" crc="a003c2f4" sha1="cc0f908542051f011d9f620ed9cb9632c60a46f1" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 2) [alt 1].hdm" size="1261568" crc="e7881beb" sha1="438bce9cb6ffd117642269344e3ba719519c94bf" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 3).hdm" size="1261568" crc="ff4377b2" sha1="0ea45b4a9cf6be8bcabe394c46fab6fb96497d4f" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 4).hdm" size="1261568" crc="37d5d673" sha1="9297cc507996bd48c533e51ac1a7a6ecdeddfc90" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 5).hdm" size="1261568" crc="e7511be5" sha1="efda6d406431ac838acc50d18a0aa05d63782bd5" offset="0" /> + </dataarea> + </part> + <part name="flop6" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 6).hdm" size="1261568" crc="d4d0f12e" sha1="d0d09ff3f5215797672bcb6d78b1d11a04588f1f" offset="0" /> + </dataarea> + </part> + <part name="flop7" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="toushin toshi (disk 7).hdm" size="1261568" crc="32cc36a0" sha1="db3a14ac9f389f8ba75d775023d8c7d297b7f2f3" offset="0" /> + </dataarea> + </part> + </software> + + <software name="ushinawa"> + <description>Ushinawareta Rakuen</description> + <year>1995</year> + <publisher>シルã‚ーズ (Silky's)</publisher> + <info name="release" value="199504xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="ushinawareta rakuen (disk a).hdm" size="1261568" crc="43a4ab96" sha1="49848270471a59cbeeb9aaa0fbfee7512f06b448" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="ushinawareta rakuen (disk b).hdm" size="1261568" crc="2cd5aac5" sha1="f42b32087061aa4f0bfa87f712f263744233424c" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="ushinawareta rakuen (disk c).hdm" size="1261568" crc="45b0d218" sha1="787c8709d5173d4c63b8acc50b646ec06e64be26" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Disk D" /> + <dataarea name="flop" size="1261568"> + <rom name="ushinawareta rakuen (disk d).hdm" size="1261568" crc="af3eb06d" sha1="a4e9a37f5ae6a61eae587f4cbe0f6c0cf62e185b" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Disk E" /> + <dataarea name="flop" size="1261568"> + <rom name="ushinawareta rakuen (disk e).hdm" size="1261568" crc="1481c370" sha1="95676fc68d7e402fd9e463a5ad9d82490ac544a8" offset="0" /> + </dataarea> + </part> + </software> + + <software name="wang"> + <description>Wrestle Angels</description> + <year>1993</year> + <publisher>グレイト (Great)</publisher> + <info name="release" value="199306xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels (disk a).hdm" size="1261568" crc="cc6b4a9b" sha1="7964cc098f71d191ad23c98e4ebc3645c7b51289" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels (disk b).hdm" size="1261568" crc="3dde7236" sha1="a46d733f53dd4bd23fc298e06ce6352e316447cb" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels (disk c).hdm" size="1261568" crc="286d5d85" sha1="c6dfc2a5bd021f7e7d41ba281a4eec17e56a899c" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Disk D" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels (disk d).hdm" size="1261568" crc="44414c9e" sha1="94fc30387a7b83acaa51cf20feb2e5e28b703350" offset="0" /> + </dataarea> + </part> + </software> + + <software name="wang2"> + <description>Wrestle Angels 2</description> + <year>1993</year> + <publisher>グレイト (Great)</publisher> + <info name="release" value="199310xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels 2 (disk a).hdm" size="1261568" crc="81f2f905" sha1="e56a00bf56422f7964ed50e43753ab9e55a7ff56" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels 2 (disk b).hdm" size="1261568" crc="9876b409" sha1="d1cbdadfdcd26d05b15943ace576c39df721052b" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels 2 (disk c).hdm" size="1261568" crc="4b238566" sha1="0acfd1dc58f4e9416399b3b17572ba582d6efe9b" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Disk D" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels 2 (disk d).hdm" size="1261568" crc="a4f395a6" sha1="b994961a2e400880bcc5924a53c9c48820eadf7a" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Disk E" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels 2 (disk e).hdm" size="1261568" crc="ab3474d9" sha1="ea36d0bd3bbfdf057e9487be6a2ed761c3b66e9e" offset="0" /> + </dataarea> + </part> + </software> + + <software name="wang2a" cloneof="wang2"> + <description>Wrestle Angels 2 (Alt)</description> + <year>1993</year> + <publisher>グレイト (Great)</publisher> + <info name="release" value="199310xx" /> + <part name="flop1" interface="floppy_3_5"> + <feature name="part_id" value="Disk A" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels 2 (disk a) [alt 1].hdm" size="1261568" crc="5cacfdb6" sha1="b44ff4b32a5181196a1375924c577f5b92f06dd5" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_3_5"> + <feature name="part_id" value="Disk B" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels 2 (disk b) [alt 1].hdm" size="1261568" crc="21f596e8" sha1="2983f111dea21e5a3655db204b921e3d647d7602" offset="0" /> + </dataarea> + </part> + <part name="flop3" interface="floppy_3_5"> + <feature name="part_id" value="Disk C" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels 2 (disk c) [alt 1].hdm" size="1261568" crc="36f4fbe1" sha1="4d384118a9167c51eafa0cccbc1f01f5c2cef21e" offset="0" /> + </dataarea> + </part> + <part name="flop4" interface="floppy_3_5"> + <feature name="part_id" value="Disk D" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels 2 (disk d).hdm" size="1261568" crc="a4f395a6" sha1="b994961a2e400880bcc5924a53c9c48820eadf7a" offset="0" /> + </dataarea> + </part> + <part name="flop5" interface="floppy_3_5"> + <feature name="part_id" value="Disk E" /> + <dataarea name="flop" size="1261568"> + <rom name="wrestle angels 2 (disk e).hdm" size="1261568" crc="ab3474d9" sha1="ea36d0bd3bbfdf057e9487be6a2ed761c3b66e9e" offset="0" /> + </dataarea> + </part> + </software> + + + +<!-- DOUJIN / HOMEBREW DISCS --> + + <!-- + This program patches the executable of Afterburner II for FM-TOWNS to make it easier to play + (original joypad design made it virtually unplayable, according to YS-11). + --> + <software name="ab2again"> + <description>AfterBurner 2 Again</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="YS-11" /> + <info name="usage" value="Requires AfterBurner II CD to work" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="after burner 2 again.hdm" size="1261568" crc="59135c6d" sha1="0d76f0e628ac61e56a5cb69f6252e4e8088410be" offset="0" /> + </dataarea> + </part> + </software> + + <software name="airraidr"> + <description>Air Raider</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="YS-11" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="air raider.hdm" size="1261568" crc="b59eb70b" sha1="464b0be803d03dbe514514242b0fa83bfcabf2e0" offset="0" /> + </dataarea> + </part> + </software> + + <software name="bliss1"> + <description>Bliss Collection #01 - Whips Ct. 1</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="M.J. Kozou" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="bliss collection #01 - whips ct. 1.hdm" size="1261568" crc="40f6e006" sha1="5792731e65d92832e58f9c92e25ee49c402cfaa8" offset="0" /> + </dataarea> + </part> + </software> + + <software name="bliss2"> + <description>Bliss Collection #02 - Vips</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="M.J. Kozou" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="bliss collection #02 - vips.hdm" size="1261568" crc="5a046d38" sha1="5a7591b4aeff03a2b0d6a0995423647e0be8921b" offset="0" /> + </dataarea> + </part> + </software> + + <software name="bliss2a" cloneof="bliss2"> + <description>Bliss Collection #02 - Vips (Alt)</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="M.J. Kozou" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="bliss collection #02 - vips [set 1].hdm" size="1261568" crc="addf99cb" sha1="93f46d54cc8736bb0a547f2a8851648486d2901a" offset="0" /> + </dataarea> + </part> + </software> + + <software name="bliss3"> + <description>Bliss Collection #03 - Whips Ct. 2 Pro</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="M.J. Kozou" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="bliss collection #03 - whips ct. 2 pro.hdm" size="1261568" crc="2537528d" sha1="15463f7961f658e1f69781946545edf23719b4b5" offset="0" /> + </dataarea> + </part> + </software> + + <software name="bliss7"> + <description>Bliss Collection #07 - Whips Ct. 4</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="M.J. Kozou" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="bliss collection #07 - whips ct. 4.hdm" size="1261568" crc="a4e41cca" sha1="cd3738b5e40c510813a1506653fbb74d9907efba" offset="0" /> + </dataarea> + </part> + </software> + + <software name="ayareiks"> + <description>Doushite Ii ka Wakaranai - Ayanami Rei Kannou Shashin-shuu</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="Studio Die in Scene" /> <!-- unsure about this one --> + <info name="alt_title" value="綾波レイ官能写真集" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="doushite ii ka wakaranai - ayanami rei kannou shashin-shuu.hdm" size="1261568" crc="f5377bd7" sha1="4139aa0eab2998fe206423fdd721cd1a0a8f0484" offset="0" /> + </dataarea> + </part> + </software> + + <software name="exgmaze"> + <description>Exgmaze</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="YS-11" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="exgmaze.hdm" size="1261568" crc="91549a87" sha1="513f70b6b45b0d90491f05c80bcd0af012017299" offset="0" /> + </dataarea> + </part> + </software> + + <software name="kiss"> + <description>KISS - KISekae Set system</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="MIO.H" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="kiss - kisekae set system.hdm" size="1261568" crc="642554e6" sha1="a462109795fa23e677cc7bdb6c5885a52cc92303" offset="0" /> + </dataarea> + </part> + </software> + + <software name="planatkr"> + <description>Planet Attacker</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="YS-11" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="planet attacker.hdm" size="1261568" crc="5f61b43e" sha1="0f809ea7a3f5ac74e6940260026b429f2365a417" offset="0" /> + </dataarea> + </part> + </software> + + <software name="rks"> + <description>Realtime Kaigi Simulator</description> + <year>199?</year> + <publisher><doujin></publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="realtime kaigi simulator.hdm" size="1261568" crc="489cce66" sha1="ce9c9cd28fc9f07e3a790cb31faff83243737231" offset="0" /> + </dataarea> + </part> + </software> + + <software name="swordedg"> + <description>Sword Edge</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="YS-11" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="sword edge.hdm" size="1261568" crc="4d6c28b7" sha1="a1634b970a22ea6f1b800f7ca55ab762b83f121d" offset="0" /> + </dataarea> + </part> + </software> + + <software name="swordedgme" cloneof="swordedg"> + <description>Sword Edge - Map Editor</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="YS-11" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="sword edge (map editor).hdm" size="1261568" crc="36ddef97" sha1="2cd272d7df959c4210931b2743a01e3ff9050df4" offset="0" /> + </dataarea> + </part> + </software> + + <software name="swordedgse" cloneof="swordedg"> + <description>Sword Edge - Sprite Editor</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="YS-11" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="sword edge (sprite editor).hdm" size="1261568" crc="72947abc" sha1="c5bd8ae472dc54712f9c4094e203dcb908d777ac" offset="0" /> + </dataarea> + </part> + </software> + + <software name="tactairw"> + <description>Tactical Air Wing</description> + <year>199?</year> + <publisher><doujin></publisher> + <info name="developer" value="YS-11" /> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1261568"> + <rom name="tactical air wing.hdm" size="1261568" crc="eef1aa60" sha1="d94798c490464ebf73803900ee5eec80b55939f8" offset="0" /> + </dataarea> + </part> + </software> + + <software name="vzedit"> + <description>VZ Editor 1.6 with ATOK 7</description> + <year>199?</year> + <publisher><doujin></publisher> + <part name="flop1" interface="floppy_3_5"> + <dataarea name="flop" size="1281280"> + <rom name="vz editor 1.6 with atok 7.bin" size="1281280" crc="514f8e0b" sha1="cc1a7fa78e6fb3c44d1c3c17dd00e863a80a191f" offset="0" /> + </dataarea> + </part> + </software> + +</softwarelist> +
\ No newline at end of file diff --git a/hash/pc98.xml b/hash/pc98.xml index 3c2838d0363..2624fffdca1 100644 --- a/hash/pc98.xml +++ b/hash/pc98.xml @@ -21433,7 +21433,7 @@ only have some part of Windows file and a Video driver(CLGD?). </part> </software> -<!-- confirmed as good by pete_j --> +<!-- confirmed as good by peter_j --> <software name="dismix1"> <description>Kikan Dismix Soukan-gou</description> <year>1990</year> @@ -21486,7 +21486,7 @@ only have some part of Windows file and a Video driver(CLGD?). </part> </software> -<!-- confirmed as good by pete_j --> +<!-- confirmed as good by peter_j --> <software name="dismix2"> <description>Kikan Dismix Dai-2-Gou</description> <year>1990?</year> @@ -27836,6 +27836,27 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) </dataarea> </part> </software> + +<!-- confirmed as good by peter_j --> + <software name="3dgolfb" cloneof="3dgolf"> + <description>New 3D Golf Simulation - Harukanaru Augusta (Alt Format)</description> + <year>1989</year> + <publisher>ティーアンドイーソフト (T&E Soft)</publisher> + <info name="alt_title" value="3Dゴルフシュミレーション スーパーãƒãƒ¼ã‚¸ãƒ§ãƒ³ é™ã‹ãªã‚‹ã‚ªãƒ¼ã‚¬ã‚¹ã‚¿" /> + <info name="release" value="19891020" /> + <part name="flop1" interface="floppy_5_25"> + <feature name="part_id" value="System Disk"/> + <dataarea name="flop" size="1261568"> + <rom name="new3dgolf.hdm" size="1261568" crc="8e447d00" sha1="c793efb25bdc6773e9a2ceec40d3412ecc338af8" offset="0" /> + </dataarea> + </part> + <part name="flop2" interface="floppy_5_25"> + <feature name="part_id" value="Course Disk (Harukanaru Augusta)"/> + <dataarea name="flop" size="1261568"> + <rom name="new3dgolf_augustamasters.hdm" size="1261568" crc="9bfb26f2" sha1="76ece544361e74010213cc65b08dc0d584a90f12" offset="0" /> + </dataarea> + </part> + </software> <software name="3dgolf8l" cloneof="3dgolf"> <description>New 3D Golf Simulation - Eight Lakes G.C.</description> @@ -27851,6 +27872,22 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) </dataarea> </part> </software> + +<!-- confirmed as good by peter_j --> + <software name="3dgolf8la" cloneof="3dgolf"> + <description>New 3D Golf Simulation - Eight Lakes G.C. (Alt Format)</description> + <year>1990</year> + <publisher>ティーアンドイーソフト (T&E Soft)</publisher> + <info name="alt_title" value="エイトレイクス ゴルフクラブ" /> + <info name="release" value="19900323" /> + <info name="usage" value="Requires "NEW 3D Golf Simulation" to work" /> + <part name="flop1" interface="floppy_5_25"> + <feature name="part_id" value="Course Disk (Eight Lakes G.C.)"/> + <dataarea name="flop" size="1261568"> + <rom name="new3dgolf_eightlakes.hdm" size="1261568" crc="462a0e93" sha1="d66e541fb995ca2380f34cbec4923fb98d179482" offset="0" /> + </dataarea> + </part> + </software> <software name="3dgolfsel" cloneof="3dgolf"> <description>New 3D Golf Simulation - T&E Selection</description> @@ -27880,6 +27917,21 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) </dataarea> </part> </software> + +<!-- confirmed as good by peter_j --> + <software name="3dgolfwka" cloneof="3dgolf"> + <description>New 3D Golf Simulation - Waialae no Kiseki (Alt Format)</description> + <year>1991</year> + <publisher>ティーアンドイーソフト (T&E Soft)</publisher> + <info name="alt_title" value="ワイアラエã®å¥‡è¹Ÿ" /> + <info name="usage" value="Requires "NEW 3D Golf Simulation" to work" /> + <part name="flop1" interface="floppy_5_25"> + <feature name="part_id" value="Course Disk (Waialae no Kiseki)"/> + <dataarea name="flop" size="1261568"> + <rom name="new3dgolf_waialae.hdm" size="1261568" crc="0731b826" sha1="4193d9a861e005deca3fc604dd2e0baff86a9d0c" offset="0" /> + </dataarea> + </part> + </software> <!-- Expansion of Pebble Beach no Hatou ?? --> <software name="devilc"> @@ -45742,7 +45794,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) </part> </software> -<!-- confirmed as good by pete_j --> +<!-- confirmed as good by peter_j --> <software name="nankaisha" cloneof="nankaish" supported="no"> <description>Daikairei - Nankai no Shitou (Alt Format)</description> <year>1989</year> @@ -46268,7 +46320,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) </part> </software> -<!-- confirmed as good by pete_j --> +<!-- confirmed as good by peter_j --> <software name="fundatna" cloneof="fundatn" supported="no"> <description>Fundation - Shinjuku Story (Alt Format)</description> <year>1990</year> @@ -49227,7 +49279,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) </part> </software> -<!-- confirmed as good by pete_j --> +<!-- confirmed as good by peter_j --> <software name="puyopuyob" cloneof="puyopuyo" supported="no"> <description>Puyo Puyo (Alt Format 2)</description> <year>1993</year> @@ -49868,7 +49920,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) </part> </software> -<!-- confirmed as good by pete_j --> +<!-- confirmed as good by peter_j --> <software name="slayersa" cloneof="slayers" supported="no"> <description>Slayers (Alt Format)</description> <year>1994</year> @@ -49971,7 +50023,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) </part> </software> -<!-- confirmed as good by pete_j --> +<!-- confirmed as good by peter_j --> <software name="slipst93a" cloneof="slipst93" supported="no"> <description>Slip Stream '93 Rev-LIMIT (Alt Format)</description> <year>1994</year> @@ -50276,7 +50328,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) </part> </software> -<!-- confirmed as good by pete_j --> +<!-- confirmed as good by peter_j --> <software name="tenchia" cloneof="tenchi" supported="no"> <description>Tenchi Muyo! - Ryououki (Alt Format)</description> <year>1994</year> @@ -50583,7 +50635,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) </part> </software> -<!-- confirmed as good by pete_j --> +<!-- confirmed as good by peter_j --> <software name="trial4" supported="no"> <description>Trial of Fours</description> <year>1992</year> @@ -55441,7 +55493,7 @@ SPACE EMPIRE </part> </software> - <software name="kawaraza" supported="no"> + <software name="kawaichi" supported="no"> <description>Kawarazaki-ke no Ichizoku</description> <year>1992</year> <publisher>シルã‚ーズ (Silky's)</publisher> @@ -60617,7 +60669,7 @@ SPACE EMPIRE </part> </software> -<!-- confirmed as good by pete_j --> +<!-- confirmed as good by peter_j --> <software name="bio100a" cloneof="bio100" supported="no"> <description>Bio 100% Free Games Collection (Alt Format)</description> <year>199?</year> diff --git a/hash/pico.xml b/hash/pico.xml index 5853cc567b7..77e1808613f 100644 --- a/hash/pico.xml +++ b/hash/pico.xml @@ -2006,7 +2006,7 @@ Published by Others (T-yyy*** serial codes, for yyy depending on the publisher) <feature name="pcb" value="" /> <feature name="ic1" value="PICO-9515I" /> <dataarea name="flop" size="2097152"> - <rom name="pico-9515i.ic1" size="2097152" crc="63e37ab9" sha1="a7ff319deaffbb27d732d86ad42458f26e4fcb12" offset="0" loadflag="load16_word_swap" /> + <rom name="pico-9515i.ic1" size="1048576" crc="c7eb7f24" sha1="5058640eb70268345e6e630ac78958c99121e294" offset="0" loadflag="load16_word_swap" /> </dataarea> </part> </software> diff --git a/hash/pofo.xml b/hash/pofo.xml new file mode 100644 index 00000000000..3255a1aaaba --- /dev/null +++ b/hash/pofo.xml @@ -0,0 +1,53 @@ +<?xml version="1.0"?> +<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> +<softwarelist name="pofo" description="Atari Portfolio cartridges"> +<!-- + Undumped Atari cartridges: + + Utility-Card HPC-701 + Finance-Card HPC-702 + Science-Card HPC-703 + File Manager / Tutorial HPC-704 + PowerBASIC HPC-705 + Instant Spell HPC-709 + Hyperlist HPC-713 + Bridge Baron HPC-724 + Wine Companion HPC-725 + Diet / Cholesterol Counter HPC-726 + Astrologer HPC-728 + Stock Tracker HPC-729 + Chess HPC-750 + + + Undumped 3rd party cartridges: + + Adcalc AAC-1000 + Alpha Paging Interface SAMpage + Business Contacts and Information Manager BCIM + Checkwriter + Colossal Cave Adventure + Drug Interactions + Dynapulse 200M-A + Form Letters + FORTH programming system UTIL + FX-3 DUAT Flight Software + FX-4 Flight Planner + Graphics Screens + Marine Device Interface CM380 UMPIRE + Message Mover (Mac) MSG-PKG6 + Message Mover (PC) MSG-PKG5 + Micro Hedge + Micro-Roentgen Radiation Monitor RM-60 + Patient Management + PBase + PDD2 Utilities + Pharmaceuticals + Physician's Reference I + PIPELINE Fuel Management + REACT + Stocks Games + Terminal+ + Timekeeper + TIMEPAC-5 +--> +</softwarelist> diff --git a/hash/sorcerer_cass.xml b/hash/sorcerer_cass.xml index 0454db025f8..9dbbc9f78f9 100644 --- a/hash/sorcerer_cass.xml +++ b/hash/sorcerer_cass.xml @@ -511,6 +511,42 @@ </dataarea> </part> </software> + <software name="adv4"> + <description>Voodoo Castle</description> + <year>1979</year> + <publisher>unknown</publisher> + <info name="developer" value="Scott and Alexis Adams"/> + <info name="usage" value="Boot to Monitor, LOG" /> + <part name="cass" interface="sorcerer_cass"> + <dataarea name="cass" size="13867098"> + <rom name="adv4.wav" size="13867098" crc="9fec95d9" sha1="ec714db72efeb3e3a8e41bde2fbca069038cdd54" offset="0" /> + </dataarea> + </part> + </software> + <software name="adv7"> + <description>Mystery Fun House</description> + <year>1979</year> + <publisher>unknown</publisher> + <info name="developer" value="Scott Adams"/> + <info name="usage" value="Boot to Monitor, LOG" /> + <part name="cass" interface="sorcerer_cass"> + <dataarea name="cass" size="13658750"> + <rom name="adv7.wav" size="13658750" crc="36832c51" sha1="7fd1805a78a0d0db3d446d2d1609058d5000796a" offset="0" /> + </dataarea> + </part> + </software> + <software name="adv8"> + <description>Pyramid of Doom</description> + <year>1979</year> + <publisher>unknown</publisher> + <info name="developer" value="Scott Adams"/> + <info name="usage" value="Boot to Monitor, LOG" /> + <part name="cass" interface="sorcerer_cass"> + <dataarea name="cass" size="13658750"> + <rom name="adv8.wav" size="13658750" crc="fac6fb02" sha1="de3437f174e88b6a84b652bc15aa2cae298c6f80" offset="0" /> + </dataarea> + </part> + </software> <software name="arrow"> <description>Arrows and Alleys</description> <year>1980</year> @@ -714,6 +750,27 @@ </dataarea> </part> </software> - - + <software name="invaders"> + <description>Sorcerer Invaders</description> + <year>198?</year> + <publisher>unknown</publisher> + <info name="developer" value="Brian Wyvill"/> + <info name="usage" value="Boot to Monitor, LOG" /> + <part name="cass" interface="sorcerer_cass"> + <dataarea name="cass" size="4804332"> + <rom name="invaders.wav" size="4804332" crc="f020fa5b" sha1="ccc44f29fe7fa2844130ec3078f1839654be8a91" offset="0" /> + </dataarea> + </part> + </software> + <software name="spider"> + <description>Spider</description> + <year>198?</year> + <publisher>unknown</publisher> + <info name="usage" value="Boot to Monitor, LOG" /> + <part name="cass" interface="sorcerer_cass"> + <dataarea name="cass" size="1707474"> + <rom name="spider.wav" size="1707474" crc="9fa56c8b" sha1="829d884dcf7f733f3a073ccc9c874627d6b5ebe0" offset="0" /> + </dataarea> + </part> + </software> </softwarelist> diff --git a/hash/vsmile_cart.xml b/hash/vsmile_cart.xml index dfa15253dd6..a5d13ac1ac3 100644 --- a/hash/vsmile_cart.xml +++ b/hash/vsmile_cart.xml @@ -201,8 +201,8 @@ Language: 80-084465(FR) | Oui-Oui - Detective d'un jour 80-084467(SP) | Noddy - Detective por un Dia - -80-084480(US) | The Princess and the Frog -80-084481(US) | The Princess and the Frog ('pocket' version) +80-084480(US) | The Princess and the Frog (motion version) +80-084481(US) | The Princess and the Frog (pocket version) 80-084482(NL) | Prinses en de Kikker (label in english) 80-084483(UK) | The Princess and the Frog 80-084484(GE) | Kuess den Frosch @@ -223,7 +223,7 @@ Language: - 80-084560(US) | <Unknown> - -80-084580(US) | Cars 2 +80-084580(US) | Cars 2 (motion version) 80-084581(US) | Cars 2 (pocket version) 80-084583(UK) | Cars 2 80-084584(GE) | Cars 2 @@ -901,7 +901,18 @@ V.Baby (NOT V.Smile Baby) </dataarea> </part> </software> - + + <software name="cinderlaa" cloneof="cinderla" supported="no"> + <description>Cinderella - Cinderella's Magic Wishes (USA, Alt)</description> + <year>200?</year> + <publisher>VTech</publisher> + <part name="cart" interface="vsmile_cart"> + <dataarea name="rom" size="8388608"> + <rom name="disney princess cinderella - cinderella's magic wishes [52-92240(us)].bin" size="8388608" crc="0a89723c" sha1="15082b565f6f71a0f993c2734cb807f37611eb17" offset="0" /> + </dataarea> + </part> + </software> + <software name="cinderlaf" cloneof="cinderla" supported="no"> <description>Cendrillon - Le Rêve Enchanté de Cendrillon (Fra)</description> <year>200?</year> @@ -1111,8 +1122,19 @@ V.Baby (NOT V.Smile Baby) </dataarea> </part> </software> - + <software name="mickymag" supported="no"> + <description>Disney's Mickey Mouse - Mickey's Magical Adventure (USA)</description> + <year>200?</year> + <publisher>VTech</publisher> + <part name="cart" interface="vsmile_cart"> + <dataarea name="rom" size="8388608"> + <rom name="disney's mickey mouse - mickey's magical adventure [no id].bin" size="8388608" crc="997a8a07" sha1="cd70c7249e25a37aeb3a3b85f56bd2b39dbf3d73" offset="0" /> + </dataarea> + </part> + </software> + + <software name="mickymagg" cloneof="mickymag" supported="no"> <description>Micky - Mickys magisches Abenteuer (Ger)</description> <year>200?</year> <publisher>VTech</publisher> @@ -1452,8 +1474,19 @@ V.Baby (NOT V.Smile Baby) </dataarea> </part> </software> - + <software name="toystor2" supported="no"> + <description>Toy Story 2 - Operation: Rescue Woody! (USA)</description> + <year>2005</year> + <publisher>VTech</publisher> + <part name="cart" interface="vsmile_cart"> + <dataarea name="rom" size="8388608"> + <rom name="toy story 2 - operation- rescue woody! [52-92220(us)] (2005).bin" size="8388608" crc="6335b0e1" sha1="ddb4bcc5f9b155041bf4ffce236f57cfae3fdec2" offset="0" /> + </dataarea> + </part> + </software> + + <software name="toystor2g" cloneof="toystor2" supported="no"> <description>Toy Story 2 - Woodys Spannende Rettung (Ger)</description> <year>200?</year> <publisher>VTech</publisher> @@ -1584,8 +1617,19 @@ V.Baby (NOT V.Smile Baby) </dataarea> </part> </software> - + <software name="zayzoo" supported="no"> + <description>Zayzoo - My Alien Classmate (USA)</description> + <year>200?</year> + <publisher>VTech</publisher> + <part name="cart" interface="vsmile_cart"> + <dataarea name="rom" size="8388608"> + <rom name="zayzoo - my alien classmate [52-92360(us)].bin" size="8388608" crc="76ff9718" sha1="be783c1abe96f785564f5b5b6b4ea089b799c1d4" offset="0" /> + </dataarea> + </part> + </software> + + <software name="zayzoog" cloneof="zayzoo" supported="no"> <description>Zayzoo's Lernall (Ger)</description> <year>200?</year> <publisher>VTech</publisher> @@ -1621,8 +1665,19 @@ V.Baby (NOT V.Smile Baby) </dataarea> </part> </software> + + <software name="poohhawa" supported="no"> + <description>Pooh's Hundred Acre Wood Adventure (USA) (V.Smile Baby)</description> + <year>2007</year> + <publisher>VTech</publisher> + <part name="cart" interface="vsmile_cart"> + <dataarea name="rom" size="8388608"> + <rom name="pooh's hundred acre wood adventure [099020] (2007) (baby).bin" size="8388608" crc="a3ac4cd4" sha1="3562c632e0a1e70cb9e382ebb823449757afed67" offset="0" /> + </dataarea> + </part> + </software> - <software name="poohvb" supported="no"> + <software name="poohvb" cloneof="poohhawa" supported="no"> <description>Nalle Puhs Aeventyr i Sjumilaskogen (Swe) (V.Smile Baby)</description> <year>200?</year> <publisher>VTech</publisher> diff --git a/hash/vsmile_cd.xml b/hash/vsmile_cd.xml index 74ad7c6e20f..e079d2b8543 100644 --- a/hash/vsmile_cd.xml +++ b/hash/vsmile_cd.xml @@ -2,7 +2,7 @@ <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> <!-- -NOTE: This list is here only to document available dumps and it's not used (yet) by MESS! +NOTE: This list is here only to document available dumps and it's not used (yet) by MAME Known as V.Flash in the USA, V.Smile Pro elsewhere @@ -73,12 +73,23 @@ Language: --> + + +<!-- CloneCD images are not fully supported by CHDMAN, thus the following US images might need to be recreated at a later stage from the original disks --> + + <softwarelist name="vsmile_cd" description="VTech V.Flash/V.Smile Pro V.Disc images"> <!-- disk mounted as 93060_001 --> - <!-- CHD v4? --> - <software name="spidermn"> + <software name="spidermn" supported="no"> + <!-- + Original files: unsure, maybe the following + <rom name="amazing spider-man, the - countdown to doom (us).ccd" size="754" crc="b1e32fe8" sha1="b22bb98ca6e0e51d5056b27491ef91364a5d3611" /> + <rom name="amazing spider-man, the - countdown to doom (us).cue" size="967" crc="db64a43d" sha1="9bf0f640933d63b7971cb45f34bb34b5b5e88c4f" /> + <rom name="amazing spider-man, the - countdown to doom (us).img" size="377178480" crc="8b81146a" sha1="eb1627908b34bedfab60d61088d5ff67069ffb48" /> + <rom name="amazing spider-man, the - countdown to doom (us).sub" size="15395040" crc="cdece136" sha1="0d03f2a97d5d92079525a940630a7affc5e60a10" /> + --> <description>The Amazing Spider-Man - Countdown to Doom (USA)</description> <year>200?</year> <publisher>VTech</publisher> @@ -90,7 +101,7 @@ Language: </part> </software> - <software name="spidermng" cloneof="spidermn"> + <software name="spidermng" cloneof="spidermn" supported="no"> <!-- Original files (from TeamEurope) <rom name="93064_000.bin" size="378956592" crc="5039f062" sha1="80a0ae321273a4b7190ba79854b21fdfb96b75f4" /> @@ -106,10 +117,104 @@ Language: </diskarea> </part> </software> + + <software name="bratz" supported="no"> + <!-- + Original files: + <rom name="bratz - fashion pixiez - the secret necklace (us).ccd" size="754" crc="97d7a3bf" sha1="6ddf210341cde9c0944e4cc3b04681d78e9db24f" /> + <rom name="bratz - fashion pixiez - the secret necklace (us).cue" size="968" crc="44b2cdec" sha1="26b413156226b0f089e4a79ccd43b7886d1b9fc1" /> + <rom name="bratz - fashion pixiez - the secret necklace (us).img" size="559354992" crc="46e8e1fd" sha1="d63b998729e990ceb7f1fa3842fd1c9e58f57bbe" /> + <rom name="bratz - fashion pixiez - the secret necklace (us).sub" size="22830816" crc="d003eb3b" sha1="7851b0b7c47fee6af38420439eecc91d0f0237db" /> + --> + <description>Bratz - Fashion Pixiez - The Secret Necklace (USA)</description> + <year>200?</year> + <publisher>VTech</publisher> + <part name="cdrom" interface="vsmile_vdisk"> + <diskarea name="cdrom"> + <disk name="bratz - fashion pixiez - the secret necklace (us)" sha1="3e7de8679810e35ae2d449aaef9117639c268d16"/> + </diskarea> + </part> + </software> + + <software name="cars" supported="no"> + <!-- + Original files: + <rom name="disney - pixar cars - in the fast lane (us).ccd" size="754" crc="741b37b3" sha1="f63cd8f1da67beec1decbf3983f0ecc1de8af95d" /> + <rom name="disney - pixar cars - in the fast lane (us).cue" size="962" crc="f9383e9e" sha1="a5cffb68bc0177828f5a3d9b3158739450f2baa3" /> + <rom name="disney - pixar cars - in the fast lane (us).img" size="506249184" crc="33b3b437" sha1="b7522abe11f1dab3e5adc56ae4cdc2c9f9957a3a" /> + <rom name="disney - pixar cars - in the fast lane (us).sub" size="20663232" crc="450daa44" sha1="c96a38c5a4cc8d1cad4c3a1f0d33cc68c3f0ad08" /> + --> + <description>Disney Pixar Cars - In the Fast Lane (USA)</description> + <year>200?</year> + <publisher>VTech</publisher> + <part name="cdrom" interface="vsmile_vdisk"> + <diskarea name="cdrom"> + <disk name="disney - pixar cars - in the fast lane (us)" sha1="b90f3a4752d3326639ba95c1c38fd7ac161e9a1a"/> + </diskarea> + </part> + </software> + + <software name="carsg" cloneof="cars" supported="no"> + <!-- + Original files (from TeamEurope) + <rom name="93104_000.bin" size="562353792" crc="e487ef85" sha1="2794bb37d03435c1318ee632d067d64aaecbbebf" /> + <rom name="93104_000.cue" size="75" crc="80141b8e" sha1="c2c1e974ee5e063ff320034a7ea82da346f303a9" /> + --> + <description>Cars - Auf der Überholspur (Ger)</description> + <year>200?</year> + <publisher>VTech</publisher> + <info name="serial" value="80-093104" /> + <part name="cdrom" interface="vsmile_vdisk"> + <diskarea name="cdrom"> + <disk name="093104_000" sha1="7347c93144f06648973a60f0fef74c74db69ddf9" /> + </diskarea> + </part> + </software> + + <software name="princess" supported="no"> + <!-- + Original files: + <rom name="disney princess - the crystal ball adventure (us).ccd" size="754" crc="889c3811" sha1="64372e79d6c85a8987b5d05ddfee336c720e8c09" /> + <rom name="disney princess - the crystal ball adventure (us).cue" size="968" crc="c3c53542" sha1="24d7abd039a3f2e812c7bbea3b9b93335767178f" /> + <rom name="disney princess - the crystal ball adventure (us).img" size="470098944" crc="49f568d1" sha1="b5dd0d446da323db37b671a06d14ba4d6a900ea7" /> + <rom name="disney princess - the crystal ball adventure (us).sub" size="19187712" crc="fa6c622c" sha1="1d2ee95a8a4ce659dc35af363da42f26e24f22fa" /> + --> + <description>Disney Princess - The Crystal Ball Adventure (USA)</description> + <year>200?</year> + <publisher>VTech</publisher> + <part name="cdrom" interface="vsmile_vdisk"> + <diskarea name="cdrom"> + <disk name="disney princess - the crystal ball adventure (us)" sha1="c4e6c5a24cda03c721577ccb4f304932ed7486c6"/> + </diskarea> + </part> + </software> + + <software name="princessg" cloneof="princess" supported="no"> + <!-- + Original files (from TeamEurope) + <rom name="93004.bin" size="467570544" crc="f919071f" sha1="d50f91fb7c79b8851cb3b6fbb80b66d78def511e" /> + <rom name="93004.cue" size="71" crc="0af679dd" sha1="7e7e773aac1f9f8d2102cacbe5367340ac5198ba" /> + --> + <description>Disney Princess - Das zauberhafte Märchen-Abenteuer (Ger)</description> + <year>200?</year> + <publisher>VTech</publisher> + <info name="serial" value="80-093004" /> + <part name="cdrom" interface="vsmile_vdisk"> + <diskarea name="cdrom"> + <disk name="93004" sha1="62d5ed13ddf7ccb2b32613e4ef44399957535355"/> + </diskarea> + </part> + </software> <!-- disk mounted as 93020 --> - <!-- CHD v4? --> - <software name="incredib"> + <software name="incredib" supported="no"> + <!-- + Original files: unsure, maybe the following + <rom name="incredibles, the - mission incredible (us).ccd" size="754" crc="e2868c5d" sha1="e6fcb78b07de68e555a8bf972c11dbfd878970a2" /> + <rom name="incredibles, the - mission incredible (us).cue" size="961" crc="aadbe385" sha1="c2673c402d9d22aea16be45ff333e94501ba7314" /> + <rom name="incredibles, the - mission incredible (us).img" size="358705872" crc="8fffffeb" sha1="859bab005788a5c23bb7c40c0e729eed04da6750" /> + <rom name="incredibles, the - mission incredible (us).sub" size="14641056" crc="3b26b5f3" sha1="d771cd5fa8326bb65c67ef466b906d637cda4323" /> + --> <description>The Incredibles - Mission Incredible (USA)</description> <year>200?</year> <publisher>VTech</publisher> @@ -121,7 +226,7 @@ Language: </part> </software> - <software name="incredibg" cloneof="incredib"> + <software name="incredibg" cloneof="incredib" supported="no"> <!-- Original files (from TeamEurope) <rom name="93024.bin" size="365481984" crc="4ac35678" sha1="6745971dab69942f85d32a4e1484b9d79c2163ee" /> @@ -137,53 +242,63 @@ Language: </diskarea> </part> </software> - - <!-- disk mounted as 93080_001 --> - <!-- CHD v4? --> - <software name="scooby"> - <description>Scooby-Doo! Ancient Adventure (USA)</description> + + <software name="msportg" supported="no"> + <!-- + Original files (from TeamEurope) + <rom name="93204_000.bin" size="295248912" crc="fd73e33a" sha1="091567e473d996182c5157f2f34b729f2bc7dcff" /> + <rom name="93204_000.cue" size="75" crc="cca73127" sha1="faf73ec0967f7811a58293e7eac8c29e52ca06e4" /> + --> + <description>Multisports (Ger)</description> <year>200?</year> <publisher>VTech</publisher> - <info name="serial" value="80-093080" /> + <info name="serial" value="80-093204" /> <part name="cdrom" interface="vsmile_vdisk"> <diskarea name="cdrom"> - <disk name="093080" sha1="3ec7e1ac4435666c3cc1b1844eac5f271b5357e8"/> + <disk name="093204_000" sha1="eb89c8b5cacb619c1fbcb700b971ad2791f1c5b6" /> </diskarea> </part> </software> - <!-- disk mounted as 93120_003 --> - <!-- CHD v4? --> - <software name="wackyrac"> - <description>Wacky Race on Jumpin' Bean Island (USA)</description> + <!-- disk mounted as 93080_001 --> + <software name="scooby" supported="no"> + <!-- + Original files: unsure, maybe the following + <rom name="scooby-doo! ancient adventure (us).ccd" size="753" crc="1a45cfda" sha1="1c2a5593dc64656cedeb0851db829242e37b93f0" /> + <rom name="scooby-doo! ancient adventure (us).cue" size="953" crc="05956f43" sha1="5b31fb89130c1489c3f009c9c4293ac7dce56026" /> + <rom name="scooby-doo! ancient adventure (us).img" size="638582112" crc="d6d3c531" sha1="24e753c394d8a6d9aed462be4c0c2b41dd6e79e6" /> + <rom name="scooby-doo! ancient adventure (us).sub" size="26064576" crc="72632c94" sha1="36fb895c8e8a224f028788e5f5e86f39562a7b2c" /> + --> + <description>Scooby-Doo! Ancient Adventure (USA)</description> <year>200?</year> <publisher>VTech</publisher> - <info name="serial" value="80-093120" /> + <info name="serial" value="80-093080" /> <part name="cdrom" interface="vsmile_vdisk"> <diskarea name="cdrom"> - <disk name="093120" sha1="dbc128608e64d40aaf3456aac2c0dd07e0f73ef4"/> + <disk name="093080" sha1="3ec7e1ac4435666c3cc1b1844eac5f271b5357e8"/> </diskarea> </part> </software> - - <software name="carsg"> + + <software name="shrek3" supported="no"> <!-- - Original files (from TeamEurope) - <rom name="93104_000.bin" size="562353792" crc="e487ef85" sha1="2794bb37d03435c1318ee632d067d64aaecbbebf" /> - <rom name="93104_000.cue" size="75" crc="80141b8e" sha1="c2c1e974ee5e063ff320034a7ea82da346f303a9" /> - --> - <description>Cars - Auf der Überholspur (Ger)</description> + Original files: + <rom name="shrek the third - the search for arthur (us).ccd" size="753" crc="89fd984d" sha1="15decf11c48c4e13ac9d9b2219977f38cdf1b09b" /> + <rom name="shrek the third - the search for arthur (us).cue" size="963" crc="ac930eb5" sha1="1e3d7f9fe17223c94c159d2ae33bd3c913b976fb" /> + <rom name="shrek the third - the search for arthur (us).img" size="614031936" crc="6c27be68" sha1="e671b64b248cbe976a131c6e5bc229d26f0c60c6" /> + <rom name="shrek the third - the search for arthur (us).sub" size="25062528" crc="6da65891" sha1="25dac0246d8f0b87b6b9402125bc339d5365f0b6" /> + --> + <description>Shrek the Third - The Search for Arthur (USA)</description> <year>200?</year> <publisher>VTech</publisher> - <info name="serial" value="80-093104" /> <part name="cdrom" interface="vsmile_vdisk"> <diskarea name="cdrom"> - <disk name="093104_000" sha1="7347c93144f06648973a60f0fef74c74db69ddf9" /> + <disk name="shrek the third - the search for arthur (us)" sha1="be3d6ed22526dbbfc7cc781c8d6f1443d62560ad"/> </diskarea> </part> </software> - - <software name="shrek3g"> + + <software name="shrek3g" cloneof="shrek3" supported="no"> <!-- Original files (from TeamEurope) <rom name="93144_000.bin" size="623663376" crc="968ff493" sha1="28c486e6b5b9c6e4e79aa3151be82534f0f1245f" /> @@ -199,54 +314,58 @@ Language: </diskarea> </part> </software> - - <software name="msportg"> + + <software name="spongeis" supported="no"> <!-- - Original files (from TeamEurope) - <rom name="93204_000.bin" size="295248912" crc="fd73e33a" sha1="091567e473d996182c5157f2f34b729f2bc7dcff" /> - <rom name="93204_000.cue" size="75" crc="cca73127" sha1="faf73ec0967f7811a58293e7eac8c29e52ca06e4" /> - --> - <description>Multisports (Ger)</description> + Original files: + <rom name="spongebob squarepants - idea sponge (us).ccd" size="754" crc="51c96a38" sha1="bbd5f937a3a358d0db724492d265018911cc05ad" /> + <rom name="spongebob squarepants - idea sponge (us).cue" size="959" crc="065b5760" sha1="8c2dced3caa84c264194806f501ed4788bf772b0" /> + <rom name="spongebob squarepants - idea sponge (us).img" size="373038960" crc="f3dcd059" sha1="bc70d3a4017b6282bea065e4ed8a05c601471069" /> + <rom name="spongebob squarepants - idea sponge (us).sub" size="15226080" crc="f8ef603f" sha1="84515fb53c4de9a0072dc051d365b1cbc1065b0f" /> + --> + <description>SpongeBob Squarepants - Idea Sponge (USA)</description> <year>200?</year> <publisher>VTech</publisher> - <info name="serial" value="80-093204" /> <part name="cdrom" interface="vsmile_vdisk"> <diskarea name="cdrom"> - <disk name="093204_000" sha1="eb89c8b5cacb619c1fbcb700b971ad2791f1c5b6" /> + <disk name="spongebob squarepants - idea sponge (us)" sha1="2ede68aa9df7712a1060e8f3b1be3307c38abd80"/> </diskarea> </part> </software> - - <software name="princesg"> + + <software name="hupfbohn" supported="no"> <!-- Original files (from TeamEurope) - <rom name="93004.bin" size="467570544" crc="f919071f" sha1="d50f91fb7c79b8851cb3b6fbb80b66d78def511e" /> - <rom name="93004.cue" size="71" crc="0af679dd" sha1="7e7e773aac1f9f8d2102cacbe5367340ac5198ba" /> + <rom name="93124_000.bin" size="457901472" crc="92a0ebe0" sha1="a3a8e54d5f12094bfc0c89954987cc793d83d3f9" /> + <rom name="93124_000.cue" size="75" crc="13c741b0" sha1="7a5b6a928922cee744fc579a7f8a785c0537a5ac" /> --> - <description>Disney Princess - Das zauberhafte Märchen-Abenteuer (Ger)</description> + <description>Das verrückte Rennen der Hüpf-Bohnel Insel (Ger)</description> <year>200?</year> <publisher>VTech</publisher> - <info name="serial" value="80-093004" /> + <info name="serial" value="80-093124" /> <part name="cdrom" interface="vsmile_vdisk"> <diskarea name="cdrom"> - <disk name="93004" sha1="62d5ed13ddf7ccb2b32613e4ef44399957535355"/> + <disk name="93124_000" sha1="90b2723c68da81de677b82d565c7e0364a7cbb53"/> </diskarea> </part> </software> - <software name="hupfbohn"> + <!-- disk mounted as 93120_003 --> + <software name="wackyrac" supported="no"> <!-- - Original files (from TeamEurope) - <rom name="93124_000.bin" size="457901472" crc="92a0ebe0" sha1="a3a8e54d5f12094bfc0c89954987cc793d83d3f9" /> - <rom name="93124_000.cue" size="75" crc="13c741b0" sha1="7a5b6a928922cee744fc579a7f8a785c0537a5ac" /> - --> - <description>Das verrückte Rennen der Hüpf-Bohnel Insel (Ger)</description> + Original files: unsure, maybe the following + <rom name="wacky race on jumpin' bean island (console 80-70010) (us).ccd" size="754" crc="d6a6247e" sha1="86ff6701988f4f163816d80f9094a61fda61290e" /> + <rom name="wacky race on jumpin' bean island (console 80-70010) (us).cue" size="976" crc="d8310d43" sha1="2e9caa99f4e5a861edd060b1e180a4dab4ace171" /> + <rom name="wacky race on jumpin' bean island (console 80-70010) (us).img" size="394752624" crc="6af8435e" sha1="b643d8fd3f0f46459d2313e2c256bc6b5f33fd54" /> + <rom name="wacky race on jumpin' bean island (console 80-70010) (us).sub" size="16112352" crc="f2f1b667" sha1="d4321d7d6ed2c4bae699d1e06752c893dac0af1c" /> + --> + <description>Wacky Race on Jumpin' Bean Island (USA)</description> <year>200?</year> <publisher>VTech</publisher> - <info name="serial" value="80-093124" /> + <info name="serial" value="80-093120" /> <part name="cdrom" interface="vsmile_vdisk"> <diskarea name="cdrom"> - <disk name="93124_000" sha1="90b2723c68da81de677b82d565c7e0364a7cbb53"/> + <disk name="093120" sha1="dbc128608e64d40aaf3456aac2c0dd07e0f73ef4"/> </diskarea> </part> </software> diff --git a/hash/x68k_flop.xml b/hash/x68k_flop.xml index 1ca90815df2..60604d60768 100644 --- a/hash/x68k_flop.xml +++ b/hash/x68k_flop.xml @@ -6407,7 +6407,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup </part> </software> - <software name="hhunt1"> + <software name="hhunt01"> <description>Houma Hunter Lime Dai-1-wa</description> <year>1993</year> <publisher>ãƒ–ãƒ©ã‚¶ãƒ¼å·¥æ¥ (Brother Industries)</publisher> @@ -6427,7 +6427,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup </part> </software> - <software name="hhunt2"> + <software name="hhunt02"> <description>Houma Hunter Lime Dai-2-wa</description> <year>1993</year> <publisher>ãƒ–ãƒ©ã‚¶ãƒ¼å·¥æ¥ (Brother Industries)</publisher> @@ -6447,7 +6447,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup </part> </software> - <software name="hhunt3"> + <software name="hhunt03"> <description>Houma Hunter Lime Dai-3-wa</description> <year>1993</year> <publisher>ãƒ–ãƒ©ã‚¶ãƒ¼å·¥æ¥ (Brother Industries)</publisher> @@ -6467,7 +6467,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup </part> </software> - <software name="hhunt6"> + <software name="hhunt06"> <description>Houma Hunter Lime Dai-6-wa</description> <year>1994</year> <publisher>ãƒ–ãƒ©ã‚¶ãƒ¼å·¥æ¥ (Brother Industries)</publisher> @@ -14678,7 +14678,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup </part> </software> - <software name="wrestan3"> + <software name="wang3"> <description>Wrestle Angels 3</description> <year>1994</year> <publisher>エクシング (Xing)</publisher> @@ -14722,7 +14722,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup </part> </software> - <software name="wrestans"> + <software name="wangsp"> <description>Wrestle Angels Special - Mouhitori no Top Eventer</description> <year>1994</year> <publisher>エクシング (Xing)</publisher> diff --git a/language/Italian/strings.po b/language/Italian/strings.po index 6c11a9d09fe..e180e7d505b 100644 --- a/language/Italian/strings.po +++ b/language/Italian/strings.po @@ -698,7 +698,7 @@ msgstr "Configurazione Macchina" #: src/emu/ui/mainmenu.cpp:69 msgid "Bookkeeping Info" -msgstr "Info Crediti e Tempi d'Utilizzo" +msgstr "Info Crediti e Tempi di Utilizzo" #: src/emu/ui/mainmenu.cpp:72 msgid "Machine Information" @@ -861,12 +861,12 @@ msgstr "" #: src/emu/ui/miscmenu.cpp:258 msgid "Coin %1$c: NA%3$s\n" -msgstr "" +msgstr "Monete %1$c: NA%3$s\n" #: src/emu/ui/miscmenu.cpp:258 #, c-format msgid "Coin %1$c: %2$d%3$s\n" -msgstr "" +msgstr "Monete %1$c: %2$d%3$s\n" #: src/emu/ui/miscmenu.cpp:261 msgid " (locked)" @@ -1123,7 +1123,7 @@ msgstr "Sistema: %1$-.100s" #: src/emu/ui/selgame.cpp:900 src/emu/ui/selsoft.cpp:804 #, c-format msgid "Software is clone of: %1$-.100s" -msgstr "Il software è clone di: %1$-.100s" +msgstr "Il software è Clone di: %1$-.100s" #: src/emu/ui/selgame.cpp:902 src/emu/ui/selsoft.cpp:806 msgid "Software is parent" @@ -1316,12 +1316,12 @@ msgstr "" #: src/emu/ui/selsoft.cpp:683 #, c-format msgid "%1$s %2$s ( %3$d / %4$d software packages )" -msgstr "" +msgstr "%1$s %2$s ( %3$d / %4$d pacchetti software )" #: src/emu/ui/selsoft.cpp:684 #, c-format msgid "Driver: \"%1$s\" software list " -msgstr "" +msgstr "Driver: \"%1$s\" lista software " #: src/emu/ui/selsoft.cpp:687 #, c-format @@ -1487,7 +1487,7 @@ msgstr "Registra" #: src/emu/ui/tapectrl.cpp:103 msgid "Rewind" -msgstr "" +msgstr "Riavvolgi" #: src/emu/ui/tapectrl.cpp:106 msgid "Fast Forward" @@ -1607,7 +1607,7 @@ msgid "" msgstr "" "\n" "\n" -"Ci sono cloni funzionanti di questa macchina: " +"Ci sono Cloni funzionanti di questa macchina: " #: src/emu/ui/ui.cpp:1167 msgid "" @@ -15,6 +15,7 @@ # REGENIE = 1 # VERBOSE = 1 # NOWERROR = 1 +# IGNORE_GIT = 1 # TARGET = mame # SUBTARGET = tiny @@ -112,6 +113,11 @@ endif ################## END USER-CONFIGURABLE OPTIONS ###################### ########################################################################### + +ifndef MAKETYPE +MAKETYPE := gmake +endif + MAKEPARAMS := -R # @@ -888,26 +894,26 @@ $(error Python is not available in path) endif ifneq ($(GIT_AVAILABLE),git) -PARAMS += --IGNORE_GIT='1' + IGNORE_GIT := 1 endif ifeq ($(wildcard .git/*),) -PARAMS += --IGNORE_GIT='1' + IGNORE_GIT := 1 endif -ifeq ($(GIT_AVAILABLE),git) -NEW_GIT_VERSION := $(shell git describe) ifeq (posix,$(SHELLTYPE)) -OLD_GIT_VERSION := $(shell cat .mame_version 2> /dev/null) +OLD_GIT_VERSION := $(shell cat $(GENDIR)/git_desc 2> /dev/null) else -OLD_GIT_VERSION := $(shell cat .mame_version 2> NUL) +OLD_GIT_VERSION := $(shell cat $(GENDIR)/git_desc 2> NUL) endif -ifneq ($(NEW_GIT_VERSION),$(OLD_GIT_VERSION)) -$(shell git describe > .mame_version) -$(shell touch $(SRC)/version.cpp) +ifneq ($(IGNORE_GIT),1) +NEW_GIT_VERSION := $(shell git describe --dirty) +else +NEW_GIT_VERSION := unknown endif +ifeq ($(NEW_GIT_VERSION),) +NEW_GIT_VERSION := unknown endif - GENIE := 3rdparty/genie/bin/$(GENIEOS)/genie$(EXE) ifeq ($(TARGET),$(SUBTARGET_FULL)) @@ -927,19 +933,19 @@ regenie: # gmake-mingw64-gcc #------------------------------------------------- -$(PROJECTDIR)/gmake-mingw64-gcc/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR)/$(MAKETYPE)-mingw64-gcc/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef MINGW64 $(error MINGW64 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw64-gcc --gcc_version=$(GCC_VERSION) gmake + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw64-gcc --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: windows_x64 -windows_x64: generate $(PROJECTDIR)/gmake-mingw64-gcc/Makefile +windows_x64: generate $(PROJECTDIR)/$(MAKETYPE)-mingw64-gcc/Makefile ifndef MINGW64 $(error MINGW64 is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw64-gcc config=$(CONFIG)64 WINDRES=$(WINDRES) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw64-gcc config=$(CONFIG)64 WINDRES=$(WINDRES) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw64-gcc config=$(CONFIG)64 WINDRES=$(WINDRES) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw64-gcc config=$(CONFIG)64 WINDRES=$(WINDRES) #------------------------------------------------- # gmake-mingw32-gcc @@ -948,36 +954,36 @@ endif .PHONY: windows windows: windows_x86 -$(PROJECTDIR)/gmake-mingw32-gcc/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR)/$(MAKETYPE)-mingw32-gcc/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef MINGW32 $(error MINGW32 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw32-gcc --gcc_version=$(GCC_VERSION) gmake + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw32-gcc --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: windows_x86 -windows_x86: generate $(PROJECTDIR)/gmake-mingw32-gcc/Makefile +windows_x86: generate $(PROJECTDIR)/$(MAKETYPE)-mingw32-gcc/Makefile ifndef MINGW32 $(error MINGW32 is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw32-gcc config=$(CONFIG)32 WINDRES=$(WINDRES) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw32-gcc config=$(CONFIG)32 WINDRES=$(WINDRES) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw32-gcc config=$(CONFIG)32 WINDRES=$(WINDRES) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw32-gcc config=$(CONFIG)32 WINDRES=$(WINDRES) #------------------------------------------------- # gmake-mingw-clang #------------------------------------------------- -$(PROJECTDIR)/gmake-mingw-clang/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw-clang --gcc_version=$(CLANG_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-mingw-clang/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw-clang --gcc_version=$(CLANG_VERSION) $(MAKETYPE) .PHONY: windows_x64_clang -windows_x64_clang: generate $(PROJECTDIR)/gmake-mingw-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw-clang config=$(CONFIG)64 WINDRES=$(WINDRES) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw-clang config=$(CONFIG)64 WINDRES=$(WINDRES) +windows_x64_clang: generate $(PROJECTDIR)/$(MAKETYPE)-mingw-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw-clang config=$(CONFIG)64 WINDRES=$(WINDRES) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw-clang config=$(CONFIG)64 WINDRES=$(WINDRES) .PHONY: windows_x86_clang -windows_x86_clang: generate $(PROJECTDIR)/gmake-mingw-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw-clang config=$(CONFIG)32 WINDRES=$(WINDRES) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw-clang config=$(CONFIG)32 WINDRES=$(WINDRES) +windows_x86_clang: generate $(PROJECTDIR)/$(MAKETYPE)-mingw-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw-clang config=$(CONFIG)32 WINDRES=$(WINDRES) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw-clang config=$(CONFIG)32 WINDRES=$(WINDRES) #------------------------------------------------- # Visual Studio 2013 @@ -1060,185 +1066,185 @@ endif # android-arm #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-arm/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_ARM $(error ANDROID_NDK_ARM is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 $(MAKETYPE) .PHONY: android-arm -android-arm: generate $(PROJECTDIR_SDL)/gmake-android-arm/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG) +android-arm: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm config=$(CONFIG) #------------------------------------------------- # android-arm64 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-arm64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_ARM64 $(error ANDROID_NDK_ARM64 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 $(MAKETYPE) .PHONY: android-arm64 -android-arm64: generate $(PROJECTDIR_SDL)/gmake-android-arm64/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG) +android-arm64: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm64/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm64 config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm64 config=$(CONFIG) #------------------------------------------------- # android-mips #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-mips/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_MIPS $(error ANDROID_NDK_MIPS is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 $(MAKETYPE) .PHONY: android-mips -android-mips: generate $(PROJECTDIR_SDL)/gmake-android-mips/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG) +android-mips: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips config=$(CONFIG) #------------------------------------------------- # android-mips64 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-mips64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_MIPS64 $(error ANDROID_NDK_MIPS64 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 $(MAKETYPE) .PHONY: android-mips64 -android-mips64: generate $(PROJECTDIR_SDL)/gmake-android-mips64/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG) +android-mips64: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips64/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips64 config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips64 config=$(CONFIG) #------------------------------------------------- # android-x86 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-x86/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-x86/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_X86 $(error ANDROID_NDK_X86 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x86 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x86 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x86 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x86 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 $(MAKETYPE) .PHONY: android-x86 -android-x86: generate $(PROJECTDIR_SDL)/gmake-android-x86/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG) +android-x86: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x86/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x86 config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x86 config=$(CONFIG) #------------------------------------------------- # android-x64 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-x64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-x64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_X64 $(error ANDROID_NDK_X64 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 $(MAKETYPE) .PHONY: android-x64 -android-x64: generate $(PROJECTDIR_SDL)/gmake-android-x64/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG) +android-x64: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x64/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x64 config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x64 config=$(CONFIG) #------------------------------------------------- # asmjs / Emscripten #------------------------------------------------- -$(PROJECTDIR)/gmake-asmjs/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR)/$(MAKETYPE)-asmjs/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef EMSCRIPTEN $(error EMSCRIPTEN is not set) endif - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=asmjs --gcc_version=3.7.0 gmake + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=asmjs --gcc_version=3.7.0 $(MAKETYPE) .PHONY: asmjs -asmjs: generate $(PROJECTDIR)/gmake-asmjs/Makefile +asmjs: generate $(PROJECTDIR)/$(MAKETYPE)-asmjs/Makefile ifndef EMSCRIPTEN $(error EMSCRIPTEN is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-asmjs config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-asmjs config=$(CONFIG) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-asmjs config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-asmjs config=$(CONFIG) #------------------------------------------------- # gmake-linux #------------------------------------------------- -$(PROJECTDIR)/gmake-linux/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=linux-gcc --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-linux/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=linux-gcc --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: linux_x64 -linux_x64: generate $(PROJECTDIR)/gmake-linux/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG)64 +linux_x64: generate $(PROJECTDIR)/$(MAKETYPE)-linux/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG)64 .PHONY: linux_x86 -linux_x86: generate $(PROJECTDIR)/gmake-linux/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG)32 +linux_x86: generate $(PROJECTDIR)/$(MAKETYPE)-linux/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG)32 .PHONY: linux -linux: generate $(PROJECTDIR)/gmake-linux/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG) +linux: generate $(PROJECTDIR)/$(MAKETYPE)-linux/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG) #------------------------------------------------- # gmake-linux-clang #------------------------------------------------- -$(PROJECTDIR)/gmake-linux-clang/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=linux-clang --gcc_version=$(CLANG_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-linux-clang/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=linux-clang --gcc_version=$(CLANG_VERSION) $(MAKETYPE) .PHONY: linux_x64_clang -linux_x64_clang: generate $(PROJECTDIR)/gmake-linux-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux-clang config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux-clang config=$(CONFIG)64 +linux_x64_clang: generate $(PROJECTDIR)/$(MAKETYPE)-linux-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux-clang config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux-clang config=$(CONFIG)64 .PHONY: linux_x86_clang -linux_x86_clang: generate $(PROJECTDIR)/gmake-linux-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux-clang config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux-clang config=$(CONFIG)32 +linux_x86_clang: generate $(PROJECTDIR)/$(MAKETYPE)-linux-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux-clang config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux-clang config=$(CONFIG)32 #------------------------------------------------- # gmake-osx #------------------------------------------------- -$(PROJECTDIR)/gmake-osx/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=osx --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-osx/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=osx --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: macosx_x64 -macosx_x64: generate $(PROJECTDIR)/gmake-osx/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx config=$(CONFIG)64 +macosx_x64: generate $(PROJECTDIR)/$(MAKETYPE)-osx/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx config=$(CONFIG)64 .PHONY: macosx macosx: macosx_x86 .PHONY: macosx_x86 -macosx_x86: generate $(PROJECTDIR)/gmake-osx/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx config=$(CONFIG)32 +macosx_x86: generate $(PROJECTDIR)/$(MAKETYPE)-osx/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx config=$(CONFIG)32 #------------------------------------------------- # gmake-osx-clang #------------------------------------------------- -$(PROJECTDIR)/gmake-osx-clang/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=osx-clang --gcc_version=$(CLANG_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-osx-clang/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=osx-clang --gcc_version=$(CLANG_VERSION) $(MAKETYPE) .PHONY: macosx_x64_clang -macosx_x64_clang: generate $(PROJECTDIR)/gmake-osx-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx-clang config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx-clang config=$(CONFIG)64 +macosx_x64_clang: generate $(PROJECTDIR)/$(MAKETYPE)-osx-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx-clang config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx-clang config=$(CONFIG)64 .PHONY: macosx_x86_clang -macosx_x86_clang: generate $(PROJECTDIR)/gmake-osx-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx-clang config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx-clang config=$(CONFIG)32 +macosx_x86_clang: generate $(PROJECTDIR)/$(MAKETYPE)-osx-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx-clang config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx-clang config=$(CONFIG)32 .PHONY: xcode4 xcode4: generate @@ -1253,154 +1259,154 @@ xcode4-ios: generate #------------------------------------------------- -$(PROJECTDIR)/gmake-solaris/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=solaris --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-solaris/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=solaris --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: solaris_x64 -solaris_x64: generate $(PROJECTDIR)/gmake-solaris/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-solaris config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-solaris config=$(CONFIG)64 +solaris_x64: generate $(PROJECTDIR)/$(MAKETYPE)-solaris/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-solaris config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-solaris config=$(CONFIG)64 .PHONY: solaris solaris: solaris_x86 .PHONY: solaris_x86 -solaris_x86: generate $(PROJECTDIR)/gmake-solaris/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-solaris config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-solaris config=$(CONFIG)32 +solaris_x86: generate $(PROJECTDIR)/$(MAKETYPE)-solaris/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-solaris config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-solaris config=$(CONFIG)32 #------------------------------------------------- # gmake-freebsd #------------------------------------------------- -$(PROJECTDIR)/gmake-freebsd/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=freebsd --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-freebsd/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=freebsd --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: freebsd_x64 -freebsd_x64: generate $(PROJECTDIR)/gmake-freebsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-freebsd config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-freebsd config=$(CONFIG)64 +freebsd_x64: generate $(PROJECTDIR)/$(MAKETYPE)-freebsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-freebsd config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-freebsd config=$(CONFIG)64 .PHONY: freebsd freebsd: freebsd_x86 .PHONY: freebsd_x86 -freebsd_x86: generate $(PROJECTDIR)/gmake-freebsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-freebsd config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-freebsd config=$(CONFIG)32 +freebsd_x86: generate $(PROJECTDIR)/$(MAKETYPE)-freebsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-freebsd config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-freebsd config=$(CONFIG)32 #------------------------------------------------- # gmake-netbsd #------------------------------------------------- -$(PROJECTDIR)/gmake-netbsd/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=netbsd --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-netbsd/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=netbsd --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: netbsd_x64 -netbsd_x64: generate $(PROJECTDIR)/gmake-netbsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-netbsd config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-netbsd config=$(CONFIG)64 +netbsd_x64: generate $(PROJECTDIR)/$(MAKETYPE)-netbsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-netbsd config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-netbsd config=$(CONFIG)64 .PHONY: netbsd netbsd: netbsd_x86 .PHONY: netbsd_x86 -netbsd_x86: generate $(PROJECTDIR)/gmake-netbsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-netbsd config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-netbsd config=$(CONFIG)32 +netbsd_x86: generate $(PROJECTDIR)/$(MAKETYPE)-netbsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-netbsd config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-netbsd config=$(CONFIG)32 #------------------------------------------------- # gmake-openbsd #------------------------------------------------- -$(PROJECTDIR)/gmake-openbsd/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=openbsd --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-openbsd/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=openbsd --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: openbsd_x64 -openbsd_x64: generate $(PROJECTDIR)/gmake-openbsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-openbsd config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-openbsd config=$(CONFIG)64 +openbsd_x64: generate $(PROJECTDIR)/$(MAKETYPE)-openbsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-openbsd config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-openbsd config=$(CONFIG)64 .PHONY: openbsd openbsd: openbsd_x86 .PHONY: openbsd_x86 -openbsd_x86: generate $(PROJECTDIR)/gmake-openbsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-openbsd config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-openbsd config=$(CONFIG)32 +openbsd_x86: generate $(PROJECTDIR)/$(MAKETYPE)-openbsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-openbsd config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-openbsd config=$(CONFIG)32 #------------------------------------------------- # gmake-steamlink #------------------------------------------------- -$(PROJECTDIR)/gmake-steamlink/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR)/$(MAKETYPE)-steamlink/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef MARVELL_SDK_PATH $(error MARVELL_SDK_PATH is not set) endif ifndef MARVELL_ROOTFS $(error MARVELL_ROOTFS is not set) endif - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=steamlink --gcc_version=$(GCC_VERSION) --NO_OPENGL=1 --NO_USE_MIDI=1 --NO_X11=1 --NOASM=1 --SDL_INSTALL_ROOT=$(MARVELL_ROOTFS)/usr gmake + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=steamlink --gcc_version=$(GCC_VERSION) --NO_OPENGL=1 --NO_USE_MIDI=1 --NO_X11=1 --NOASM=1 --SDL_INSTALL_ROOT=$(MARVELL_ROOTFS)/usr $(MAKETYPE) .PHONY: steamlink -steamlink: generate $(PROJECTDIR)/gmake-steamlink/Makefile +steamlink: generate $(PROJECTDIR)/$(MAKETYPE)-steamlink/Makefile ifndef MARVELL_SDK_PATH $(error MARVELL_SDK_PATH is not set) endif ifndef MARVELL_ROOTFS $(error MARVELL_ROOTFS is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-steamlink config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-steamlink config=$(CONFIG) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-steamlink config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-steamlink config=$(CONFIG) #------------------------------------------------- # gmake-rpi #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-rpi/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-rpi/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef RASPBERRY_SDK_PATH $(error RASPBERRY_SDK_PATH is not set) endif ifndef RASPBERRY_SYSROOT $(error RASPBERRY_SYSROOT is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=rpi --gcc_version=4.9.2 --osd=sdl --targetos=rpi --targetos=rpi --NO_USE_MIDI=1 --PLATFORM=arm --NOASM=1 --USE_QTDEBUG=0 --SDL_INSTALL_ROOT=$(RASPBERRY_SYSROOT)/usr gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=rpi --gcc_version=4.9.2 --osd=sdl --targetos=rpi --targetos=rpi --NO_USE_MIDI=1 --PLATFORM=arm --NOASM=1 --USE_QTDEBUG=0 --SDL_INSTALL_ROOT=$(RASPBERRY_SYSROOT)/usr $(MAKETYPE) .PHONY: rpi -rpi: generate $(PROJECTDIR_SDL)/gmake-rpi/Makefile +rpi: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-rpi/Makefile ifndef RASPBERRY_SDK_PATH $(error RASPBERRY_SDK_PATH is not set) endif ifndef RASPBERRY_SYSROOT $(error RASPBERRY_SYSROOT is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-rpi config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-rpi config=$(CONFIG) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-rpi config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-rpi config=$(CONFIG) #------------------------------------------------- # gmake-ci20 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-ci20/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-ci20/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef MIPS_LINUXGNU_ROOT $(error MIPS_LINUXGNU_ROOT is not set) endif ifndef CI20_SYSROOT $(error CI20_SYSROOT is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=ci20 --gcc_version=4.9.2 --osd=sdl --targetos=ci20 --targetos=ci20 --NO_USE_MIDI=1 --PLATFORM=arm --NOASM=1 --USE_QTDEBUG=0 --SDL_INSTALL_ROOT=$(RASPBERRY_SYSROOT)/usr gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=ci20 --gcc_version=4.9.2 --osd=sdl --targetos=ci20 --targetos=ci20 --NO_USE_MIDI=1 --PLATFORM=arm --NOASM=1 --USE_QTDEBUG=0 --SDL_INSTALL_ROOT=$(RASPBERRY_SYSROOT)/usr $(MAKETYPE) .PHONY: ci20 -ci20: generate $(PROJECTDIR_SDL)/gmake-ci20/Makefile +ci20: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-ci20/Makefile ifndef MIPS_LINUXGNU_ROOT $(error MIPS_LINUXGNU_ROOT is not set) endif ifndef CI20_SYSROOT $(error CI20_SYSROOT is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-ci20 config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-ci20 config=$(CONFIG) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-ci20 config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-ci20 config=$(CONFIG) #------------------------------------------------- # cmake @@ -1408,7 +1414,7 @@ endif .PHONY: cmake cmake: generate $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) cmake -ifeq ($(OS),windows) +ifneq (posix,$(SHELLTYPE)) $(SILENT)echo cmake_minimum_required(VERSION 2.8.4) > CMakeLists.txt $(SILENT)echo add_subdirectory($(PROJECTDIR)/cmake) >> CMakeLists.txt else @@ -1458,6 +1464,7 @@ genie: $(GENIE) generate: \ genie \ $(GEN_FOLDERS) \ + $(GENDIR)/version.cpp \ $(patsubst %.po,%.mo,$(call rwildcard, language/, *.po)) \ $(patsubst $(SRC)/%.lay,$(GENDIR)/%.lh,$(LAYOUTS)) \ $(GENDIR)/mame/drivers/ymmu100.hxx \ @@ -1468,6 +1475,32 @@ $(GENDIR)/includes/SDL2: -$(call MKDIR,$@) -$(call COPY,3rdparty/SDL2/include/,$(GENDIR)/includes/SDL2) +ifneq ($(NEW_GIT_VERSION),$(OLD_GIT_VERSION)) +stale: + +.PHONY: stale + +$(GENDIR)/git_desc: stale | $(GEN_FOLDERS) + @echo $(NEW_GIT_VERSION) > $@ +endif + +ifeq (posix,$(SHELLTYPE)) +$(GENDIR)/version.cpp: $(GENDIR)/git_desc | $(GEN_FOLDERS) + @echo '#define BARE_BUILD_VERSION "0.174"' > $@ + @echo 'extern const char bare_build_version[];' >> $@ + @echo 'extern const char build_version[];' >> $@ + @echo 'const char bare_build_version[] = BARE_BUILD_VERSION;' >> $@ + @echo 'const char build_version[] = BARE_BUILD_VERSION " ($(NEW_GIT_VERSION))";' >> $@ +else +$(GENDIR)/version.cpp: $(GENDIR)/git_desc + @echo #define BARE_BUILD_VERSION "0.174" > $@ + @echo extern const char bare_build_version[]; >> $@ + @echo extern const char build_version[]; >> $@ + @echo const char bare_build_version[] = BARE_BUILD_VERSION; >> $@ + @echo const char build_version[] = BARE_BUILD_VERSION " ($(NEW_GIT_VERSION))"; >> $@ +endif + + $(GENDIR)/%.lh: $(SRC)/%.lay scripts/build/complay.py | $(GEN_FOLDERS) @echo Compressing $<... $(SILENT)$(PYTHON) scripts/build/complay.py $< $@ layout_$(basename $(notdir $<)) diff --git a/plugins/cheatfind/init.lua b/plugins/cheatfind/init.lua index cce26177cfb..55ef7beb00e 100644 --- a/plugins/cheatfind/init.lua +++ b/plugins/cheatfind/init.lua @@ -588,7 +588,7 @@ function cheatfind.startplugin() if dev.space.shortname then cheat.ram = { ram = dev.tag } - cheat.script.on = "ram:write(" .. match.addr .. "," .. match.newval .. ")" + cheat.script.run = "ram:write(" .. match.addr .. "," .. match.newval .. ")" else cheat.space = { cpu = { tag = dev.tag, type = "program" } } cheat.script.run = "cpu:write_" .. wid .. "(" .. match.addr .. "," .. match.newval .. ")" diff --git a/scripts/genie.lua b/scripts/genie.lua index 95bb6dba6af..5eebe355e2c 100644 --- a/scripts/genie.lua +++ b/scripts/genie.lua @@ -350,15 +350,6 @@ newoption { } newoption { - trigger = "IGNORE_GIT", - description = "Ignore usage of git command in build process", - allowed = { - { "0", "Do not ignore" }, - { "1", "Ingore" }, - }, -} - -newoption { trigger = "SOURCES", description = "List of sources to compile.", } @@ -521,7 +512,7 @@ if (_OPTIONS["SOURCES"] == nil) then dofile (path.join("target", _OPTIONS["target"],_OPTIONS["subtarget"] .. ".lua")) end -configuration { "gmake" } +configuration { "gmake or ninja" } flags { "SingleOutputDir", } @@ -681,7 +672,7 @@ end "LUA_COMPAT_5_2", } - if _ACTION == "gmake" then + if _ACTION == "gmake" or _ACTION == "ninja" then --we compile C-only to C99 standard with GNU extensions @@ -714,7 +705,7 @@ end -- this speeds it up a bit by piping between the preprocessor/compiler/assembler if not ("pnacl" == _OPTIONS["gcc"]) then buildoptions { - "--pipe", + "-pipe", } end -- add -g if we need symbols, and ensure we have frame pointers diff --git a/scripts/src/3rdparty.lua b/scripts/src/3rdparty.lua index 484e13c1de0..d8e6c9e2fff 100644 --- a/scripts/src/3rdparty.lua +++ b/scripts/src/3rdparty.lua @@ -88,7 +88,7 @@ project "zlib" local version = str_to_version(_OPTIONS["gcc_version"]) if _OPTIONS["gcc"]~=nil and ((string.find(_OPTIONS["gcc"], "clang") or string.find(_OPTIONS["gcc"], "asmjs") or string.find(_OPTIONS["gcc"], "android"))) then - configuration { "gmake" } + configuration { "gmake or ninja" } if (version >= 30700) then buildoptions { "-Wno-shift-negative-value", @@ -113,7 +113,7 @@ end "verbose=-1", } - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions_c { "-Wno-strict-prototypes", } @@ -299,7 +299,7 @@ end "HAVE_CONFIG_H=1", } - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions_c { "-Wno-unused-function", "-O0", @@ -352,7 +352,7 @@ project "7z" uuid "ad573d62-e76a-4b11-ae34-5110a6789a42" kind "StaticLib" - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions_c { "-Wno-undef", "-Wno-strict-prototypes", @@ -446,7 +446,7 @@ project "lua" -- "ForceCPP", --} - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions_c { "-Wno-bad-function-cast" } @@ -717,7 +717,7 @@ end MAME_DIR .. "3rdparty/bx/include/compat/freebsd", } - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions { "-Wno-uninitialized", "-Wno-unused-function", @@ -795,15 +795,12 @@ end MAME_DIR .. "3rdparty/bgfx/examples/common/font/utf8.cpp", MAME_DIR .. "3rdparty/bgfx/examples/common/imgui/imgui.cpp", MAME_DIR .. "3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp", - MAME_DIR .. "3rdparty/bgfx/examples/common/imgui/scintilla.cpp", MAME_DIR .. "3rdparty/bgfx/examples/common/nanovg/nanovg.cpp", MAME_DIR .. "3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp", MAME_DIR .. "3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompression.cpp", MAME_DIR .. "3rdparty/bgfx/3rdparty/ib-compress/indexbufferdecompression.cpp", MAME_DIR .. "3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp", - MAME_DIR .. "3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp", MAME_DIR .. "3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp", - MAME_DIR .. "3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_node_graph_test.cpp", MAME_DIR .. "3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_wm.cpp", } if _OPTIONS["targetos"]=="macosx" then @@ -845,7 +842,7 @@ end -- "/wd4456", -- warning C4456: declaration of 'xxx' hides previous local declaration -- } -- --- configuration { "gmake" } +-- configuration { "gmake or ninja" } -- buildoptions_c { -- "-Wno-strict-prototypes", -- "-Wno-bad-function-cast", @@ -982,7 +979,7 @@ project "uv" MAME_DIR .. "3rdparty/libuv/src/win", } - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions_c { "-Wno-strict-prototypes", "-Wno-bad-function-cast", diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 5b6cd19f659..571c75fd48b 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -1092,6 +1092,23 @@ end --------------------------------------------------- -- +--@src/devices/bus/pofo/exp.h,BUSES["POFO"] = true +--------------------------------------------------- + +if (BUSES["POFO"]~=null) then + files { + MAME_DIR .. "src/devices/bus/pofo/exp.cpp", + MAME_DIR .. "src/devices/bus/pofo/exp.h", + MAME_DIR .. "src/devices/bus/pofo/hpc101.cpp", + MAME_DIR .. "src/devices/bus/pofo/hpc101.h", + MAME_DIR .. "src/devices/bus/pofo/hpc102.cpp", + MAME_DIR .. "src/devices/bus/pofo/hpc102.h", + } +end + + +--------------------------------------------------- +-- --@src/devices/bus/s100/s100.h,BUSES["S100"] = true --------------------------------------------------- diff --git a/scripts/src/emu.lua b/scripts/src/emu.lua index 2449faa0ae5..a446a6ccaae 100644 --- a/scripts/src/emu.lua +++ b/scripts/src/emu.lua @@ -33,6 +33,7 @@ includedirs { ext_includedir("lua"), ext_includedir("zlib"), ext_includedir("flac"), + ext_includedir("jpeg"), } files { diff --git a/scripts/src/lib.lua b/scripts/src/lib.lua index 77f6f4344dd..2352dd6a3a3 100644 --- a/scripts/src/lib.lua +++ b/scripts/src/lib.lua @@ -80,7 +80,6 @@ project "utils" MAME_DIR .. "src/lib/util/sha1.cpp", MAME_DIR .. "src/lib/util/sha1.h", MAME_DIR .. "src/lib/util/strformat.h", - MAME_DIR .. "src/lib/util/tagmap.h", MAME_DIR .. "src/lib/util/unicode.cpp", MAME_DIR .. "src/lib/util/unicode.h", MAME_DIR .. "src/lib/util/unzip.cpp", diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua index 1d061199208..7ddf031d76d 100644 --- a/scripts/src/machine.lua +++ b/scripts/src/machine.lua @@ -1178,6 +1178,18 @@ end --------------------------------------------------- -- +--@src/devices/machine/ldp1000.h,MACHINES["LDP1000"] = true +--------------------------------------------------- + +if (MACHINES["LDP1000"]~=null) then + files { + MAME_DIR .. "src/devices/machine/ldp1000.cpp", + MAME_DIR .. "src/devices/machine/ldp1000.h", + } +end + +--------------------------------------------------- +-- --@src/devices/machine/ldvp931.h,MACHINES["LDVP931"] = true --------------------------------------------------- @@ -2034,6 +2046,18 @@ end --------------------------------------------------- -- +--@src/devices/machine/scnxx562.h,MACHINES["DUSCC"] = true +--------------------------------------------------- + +if (MACHINES["DUSCC"]~=null) then + files { + MAME_DIR .. "src/devices/machine/scnxx562.cpp", + MAME_DIR .. "src/devices/machine/scnxx562.h", + } +end + +--------------------------------------------------- +-- --@src/devices/machine/serflash.h,MACHINES["SERFLASH"] = true --------------------------------------------------- @@ -2856,6 +2880,7 @@ if (MACHINES["APPLE_FDC"]~=null) then MAME_DIR .. "src/devices/machine/applefdc.h", } end + --------------------------------------------------- -- --@src/devices/machine/sonydriv.h,MACHINES["SONY_DRIVE"] = true @@ -2866,3 +2891,14 @@ if (MACHINES["SONY_DRIVE"]~=null) then MAME_DIR .. "src/devices/machine/sonydriv.h", } end + +--------------------------------------------------- +-- +--@src/devices/machine/scnxx562.h,MACHINES["SCNXX562"] = true +--------------------------------------------------- +if (MACHINES["SCNXX562"]~=null) then + files { + MAME_DIR .. "src/devices/machine/scnxx562.cpp", + MAME_DIR .. "src/devices/machine/scnxx562.h", + } +end diff --git a/scripts/src/main.lua b/scripts/src/main.lua index d5cce436dce..42615bedebb 100644 --- a/scripts/src/main.lua +++ b/scripts/src/main.lua @@ -147,17 +147,7 @@ end end configuration { } - -if _OPTIONS["IGNORE_GIT"]~="1" then - GIT_VERSION = backtick( "git describe --dirty" ) - local p = string.find(GIT_VERSION, '-', 1) - if (p~=nil) then - defines { - "GIT_VERSION=" .. string.sub(GIT_VERSION,p+1) - } - end -end - + if _OPTIONS["targetos"]=="android" then includedirs { MAME_DIR .. "3rdparty/SDL2/include", @@ -277,7 +267,7 @@ if (STANDALONE~=true) then "-sectcreate __TEXT __info_plist " .. _MAKE.esc(GEN_DIR) .. "resource/" .. _subtarget .. "-Info.plist" } custombuildtask { - { MAME_DIR .. "src/version.cpp" , GEN_DIR .. "resource/" .. _subtarget .. "-Info.plist", { MAME_DIR .. "scripts/build/verinfo.py" }, {"@echo Emitting " .. _subtarget .. "-Info.plist" .. "...", PYTHON .. " $(1) -p -b " .. _subtarget .. " $(<) > $(@)" }}, + { GEN_DIR .. "version.cpp" , GEN_DIR .. "resource/" .. _subtarget .. "-Info.plist", { MAME_DIR .. "scripts/build/verinfo.py" }, {"@echo Emitting " .. _subtarget .. "-Info.plist" .. "...", PYTHON .. " $(1) -p -b " .. _subtarget .. " $(<) > $(@)" }}, } dependency { { "$(TARGET)" , GEN_DIR .. "resource/" .. _subtarget .. "-Info.plist", true }, @@ -312,7 +302,7 @@ if (STANDALONE~=true) then end files { mainfile, - MAME_DIR .. "src/version.cpp", + GEN_DIR .. "version.cpp", GEN_DIR .. _target .. "/" .. _subtarget .."/drivlist.cpp", } @@ -355,14 +345,14 @@ if (STANDALONE~=true) then configuration { "mingw*" } custombuildtask { - { MAME_DIR .. "src/version.cpp" , GEN_DIR .. "resource/" .. rctarget .. "vers.rc", { MAME_DIR .. "scripts/build/verinfo.py" }, {"@echo Emitting " .. rctarget .. "vers.rc" .. "...", PYTHON .. " $(1) -r -b " .. rctarget .. " $(<) > $(@)" }}, + { GEN_DIR .. "version.cpp" , GEN_DIR .. "resource/" .. rctarget .. "vers.rc", { MAME_DIR .. "scripts/build/verinfo.py" }, {"@echo Emitting " .. rctarget .. "vers.rc" .. "...", PYTHON .. " $(1) -r -b " .. rctarget .. " $(<) > $(@)" }}, } configuration { "vs*" } prebuildcommands { "mkdir " .. path.translate(GEN_DIR .. "resource/","\\") .. " 2>NUL", "@echo Emitting ".. rctarget .. "vers.rc...", - PYTHON .. " " .. path.translate(MAME_DIR .. "scripts/build/verinfo.py","\\") .. " -r -b " .. rctarget .. " " .. path.translate(MAME_DIR .. "src/version.cpp","\\") .. " > " .. path.translate(GEN_DIR .. "resource/" .. rctarget .. "vers.rc", "\\") , + PYTHON .. " " .. path.translate(MAME_DIR .. "scripts/build/verinfo.py","\\") .. " -r -b " .. rctarget .. " " .. path.translate(GEN_DIR .. "version.cpp","\\") .. " > " .. path.translate(GEN_DIR .. "resource/" .. rctarget .. "vers.rc", "\\") , } end diff --git a/scripts/src/mame/frontend.lua b/scripts/src/mame/frontend.lua index ea9bb933cfc..e35bed2da07 100644 --- a/scripts/src/mame/frontend.lua +++ b/scripts/src/mame/frontend.lua @@ -75,6 +75,8 @@ files { MAME_DIR .. "src/frontend/mame/pluginopts.h", MAME_DIR .. "src/frontend/mame/ui/ui.cpp", MAME_DIR .. "src/frontend/mame/ui/ui.h", + MAME_DIR .. "src/frontend/mame/ui/text.cpp", + MAME_DIR .. "src/frontend/mame/ui/text.h", MAME_DIR .. "src/frontend/mame/ui/devctrl.h", MAME_DIR .. "src/frontend/mame/ui/menu.cpp", MAME_DIR .. "src/frontend/mame/ui/menu.h", diff --git a/scripts/src/osd/modules.lua b/scripts/src/osd/modules.lua index 5fb1d23c1bc..b8e5bb61b83 100644 --- a/scripts/src/osd/modules.lua +++ b/scripts/src/osd/modules.lua @@ -244,7 +244,7 @@ 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" } + configuration { "gmake or ninja" } if (version >= 30600) then buildoptions { "-Wno-inconsistent-missing-override", diff --git a/scripts/src/osd/windows.lua b/scripts/src/osd/windows.lua index 8b48b8f0771..9307c6dec71 100644 --- a/scripts/src/osd/windows.lua +++ b/scripts/src/osd/windows.lua @@ -154,8 +154,6 @@ project ("osd_" .. _OPTIONS["osd"]) } files { - MAME_DIR .. "src/osd/modules/render/d3d/d3d9intf.cpp", - MAME_DIR .. "src/osd/modules/render/d3d/d3dintf.h", MAME_DIR .. "src/osd/modules/render/d3d/d3dhlsl.cpp", MAME_DIR .. "src/osd/modules/render/d3d/d3dcomm.h", MAME_DIR .. "src/osd/modules/render/d3d/d3dhlsl.h", diff --git a/scripts/src/tests.lua b/scripts/src/tests.lua index b5bb5b37366..e0a8da88d75 100644 --- a/scripts/src/tests.lua +++ b/scripts/src/tests.lua @@ -16,7 +16,7 @@ project "gtest" uuid "fa306a8d-fb10-4d4a-9d2e-fdb9076407b4" kind "StaticLib" - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions { "-Wno-undef", "-Wno-unused-variable", @@ -52,7 +52,7 @@ project("mametests") targetdir(MAME_DIR) end - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions { "-Wno-undef", } diff --git a/scripts/src/tools.lua b/scripts/src/tools.lua index a2e5ad73496..87192f53d5b 100644 --- a/scripts/src/tools.lua +++ b/scripts/src/tools.lua @@ -87,7 +87,7 @@ includedirs { files { MAME_DIR .. "src/tools/chdman.cpp", MAME_DIR .. "src/emu/emucore.cpp", - MAME_DIR .. "src/version.cpp", + GEN_DIR .. "version.cpp", } configuration { "mingw*" or "vs*" } diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index b2d06ebc5b6..8496640ed76 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -429,6 +429,7 @@ MACHINES["LC89510"] = true MACHINES["LDPR8210"] = true MACHINES["LDSTUB"] = true MACHINES["LDV1000"] = true +MACHINES["LDP1000"] = true MACHINES["LDVP931"] = true --MACHINES["LH5810"] = true MACHINES["LINFLASH"] = true @@ -1168,6 +1169,8 @@ files { MAME_DIR .. "src/mame/machine/mathbox.cpp", MAME_DIR .. "src/mame/machine/mathbox.h", MAME_DIR .. "src/mame/machine/slapstic.cpp", + MAME_DIR .. "src/mame/machine/atarixga.cpp", + MAME_DIR .. "src/mame/machine/atarixga.h", MAME_DIR .. "src/mame/audio/atarijsa.cpp", MAME_DIR .. "src/mame/audio/atarijsa.h", MAME_DIR .. "src/mame/audio/cage.cpp", @@ -2114,6 +2117,9 @@ files { MAME_DIR .. "src/mame/drivers/ddribble.cpp", MAME_DIR .. "src/mame/includes/ddribble.h", MAME_DIR .. "src/mame/video/ddribble.cpp", + MAME_DIR .. "src/mame/drivers/divebomb.cpp", + MAME_DIR .. "src/mame/includes/divebomb.h", + MAME_DIR .. "src/mame/video/divebomb.cpp", MAME_DIR .. "src/mame/drivers/djmain.cpp", MAME_DIR .. "src/mame/includes/djmain.h", MAME_DIR .. "src/mame/video/djmain.cpp", @@ -4220,6 +4226,11 @@ files { -------------------------------------------------- createMAMEProjects(_target, _subtarget, "misc") + +includedirs { + ext_includedir("jpeg"), +} + files { MAME_DIR .. "src/mame/drivers/1945kiii.cpp", MAME_DIR .. "src/mame/drivers/39in1.cpp", diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index d43417a7404..76b52c9f669 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -584,6 +584,7 @@ MACHINES["SMARTMEDIA"] = true MACHINES["APPLE_DRIVE"] = true MACHINES["APPLE_FDC"] = true MACHINES["SONY_DRIVE"] = true +MACHINES["SCNXX562"] = true -------------------------------------------------- -- specify available bus cores @@ -655,6 +656,7 @@ BUSES["PC_JOY"] = true BUSES["PC_KBD"] = true BUSES["PET"] = true BUSES["PLUS4"] = true +BUSES["POFO"] = true BUSES["PSX_CONTROLLER"] = true BUSES["QL"] = true BUSES["RS232"] = true @@ -1306,8 +1308,7 @@ files { MAME_DIR .. "src/mame/audio/lynx.cpp", MAME_DIR .. "src/mame/audio/lynx.h", MAME_DIR .. "src/mame/machine/lynx.cpp", - MAME_DIR .. "src/mame/drivers/portfoli.cpp", - MAME_DIR .. "src/mame/includes/portfoli.h", + MAME_DIR .. "src/mame/drivers/pofo.cpp", } createMESSProjects(_target, _subtarget, "att") @@ -1727,6 +1728,7 @@ files { createMESSProjects(_target, _subtarget, "force") files { + MAME_DIR .. "src/mame/drivers/fccpu30.cpp", MAME_DIR .. "src/mame/drivers/force68k.cpp", } @@ -2900,7 +2902,7 @@ files { createMESSProjects(_target, _subtarget, "usp") files { MAME_DIR .. "src/mame/drivers/patinho_feio.cpp", - MAME_DIR .. "src/mame/includes/patinho_feio.h", + MAME_DIR .. "src/mame/includes/patinhofeio.h", } createMESSProjects(_target, _subtarget, "veb") diff --git a/scripts/toolchain.lua b/scripts/toolchain.lua index 8536845c266..6046b4d97d8 100644 --- a/scripts/toolchain.lua +++ b/scripts/toolchain.lua @@ -109,7 +109,7 @@ function toolchain(_buildDir, _subDir) windowsPlatform = _OPTIONS["with-windows"] end - if _ACTION == "gmake" then + if _ACTION == "gmake" or _ACTION == "ninja" then if nil == _OPTIONS["gcc"] or nil == _OPTIONS["gcc_version"] then print("GCC flavor and version must be specified!") diff --git a/src/devices/bus/a1bus/a1bus.cpp b/src/devices/bus/a1bus/a1bus.cpp index 5b29e44049f..273452fd2c1 100644 --- a/src/devices/bus/a1bus/a1bus.cpp +++ b/src/devices/bus/a1bus/a1bus.cpp @@ -139,12 +139,12 @@ void a1bus_device::install_device(offs_t start, offs_t end, read8_delegate rhand m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler); } -void a1bus_device::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void a1bus_device::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { -// printf("install_bank: %s @ %x->%x mask %x mirror %x\n", tag, start, end, mask, mirror); +// printf("install_bank: %s @ %x->%x\n", tag, start, end); m_maincpu = machine().device<cpu_device>(m_cputag); address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_readwrite_bank(start, end, mask, mirror, tag ); + space.install_readwrite_bank(start, end, tag ); machine().root_device().membank(siblingtag(tag).c_str())->set_base(data); } @@ -199,7 +199,7 @@ void device_a1bus_card_interface::install_device(offs_t start, offs_t end, read8 m_a1bus->install_device(start, end, rhandler, whandler); } -void device_a1bus_card_interface::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, char *tag, UINT8 *data) +void device_a1bus_card_interface::install_bank(offs_t start, offs_t end, char *tag, UINT8 *data) { - m_a1bus->install_bank(start, end, mask, mirror, tag, data); + m_a1bus->install_bank(start, end, tag, data); } diff --git a/src/devices/bus/a1bus/a1bus.h b/src/devices/bus/a1bus/a1bus.h index e9726073ddb..5bfe4b632a5 100644 --- a/src/devices/bus/a1bus/a1bus.h +++ b/src/devices/bus/a1bus/a1bus.h @@ -87,7 +87,7 @@ public: void set_nmi_line(int state); void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); DECLARE_WRITE_LINE_MEMBER( irq_w ); DECLARE_WRITE_LINE_MEMBER( nmi_w ); @@ -132,7 +132,7 @@ public: void lower_slot_nmi() { m_a1bus->set_nmi_line(CLEAR_LINE); } void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, char *tag, UINT8 *data); // inline configuration static void static_set_a1bus_tag(device_t &device, const char *tag, const char *slottag); diff --git a/src/devices/bus/a1bus/a1cassette.cpp b/src/devices/bus/a1bus/a1cassette.cpp index 7168133647c..94eab958858 100644 --- a/src/devices/bus/a1bus/a1cassette.cpp +++ b/src/devices/bus/a1bus/a1cassette.cpp @@ -81,7 +81,7 @@ void a1bus_cassette_device::device_start() m_rom = device().machine().root_device().memregion(this->subtag(CASSETTE_ROM_REGION).c_str())->base(); install_device(0xc000, 0xc0ff, read8_delegate(FUNC(a1bus_cassette_device::cassette_r), this), write8_delegate(FUNC(a1bus_cassette_device::cassette_w), this)); - install_bank(0xc100, 0xc1ff, 0, 0, (char *)"bank_a1cas", m_rom); + install_bank(0xc100, 0xc1ff, (char *)"bank_a1cas", m_rom); save_item(NAME(m_cassette_output_flipflop)); } diff --git a/src/devices/bus/a1bus/a1cffa.cpp b/src/devices/bus/a1bus/a1cffa.cpp index 912401a0642..fc0ff3da3a1 100644 --- a/src/devices/bus/a1bus/a1cffa.cpp +++ b/src/devices/bus/a1bus/a1cffa.cpp @@ -76,7 +76,7 @@ void a1bus_cffa_device::device_start() m_rom = device().machine().root_device().memregion(this->subtag(CFFA_ROM_REGION).c_str())->base(); install_device(0xafe0, 0xafff, read8_delegate(FUNC(a1bus_cffa_device::cffa_r), this), write8_delegate(FUNC(a1bus_cffa_device::cffa_w), this)); - install_bank(0x9000, 0xafdf, 0, 0, (char *)"bank_cffa1", m_rom); + install_bank(0x9000, 0xafdf, (char *)"bank_cffa1", m_rom); save_item(NAME(m_lastdata)); save_item(NAME(m_writeprotect)); diff --git a/src/devices/bus/abcbus/lux21046.cpp b/src/devices/bus/abcbus/lux21046.cpp index 5a7f693d275..1931cbad35a 100644 --- a/src/devices/bus/abcbus/lux21046.cpp +++ b/src/devices/bus/abcbus/lux21046.cpp @@ -108,12 +108,14 @@ const device_type ABC850_FLOPPY = &device_creator<abc850_floppy_device>; ROM_START( luxor_55_21046 ) ROM_REGION( 0x4000, Z80_TAG, 0 ) ROM_DEFAULT_BIOS( "v107" ) - ROM_SYSTEM_BIOS( 0, "v107", "Luxor v1.07 (1985-07-03)" ) - ROMX_LOAD( "cntr 1.07 6490318-07.6cd", 0x0000, 0x4000, CRC(db8c1c0e) SHA1(8bccd5bc72124984de529ee058df779f06d2c1d5), ROM_BIOS(1) ) - ROM_SYSTEM_BIOS( 1, "v108", "Luxor v1.08 (1986-03-12)" ) - ROMX_LOAD( "cntr 108.6cd", 0x2000, 0x2000, CRC(229764cb) SHA1(a2e2f6f49c31b827efc62f894de9a770b65d109d), ROM_BIOS(2) ) - ROM_SYSTEM_BIOS( 2, "v207", "DiAB v2.07 (1987-06-24)" ) - ROMX_LOAD( "diab 207.6cd", 0x2000, 0x2000, CRC(86622f52) SHA1(61ad271de53152c1640c0b364fce46d1b0b4c7e2), ROM_BIOS(3) ) + ROM_SYSTEM_BIOS( 0, "v105", "Luxor v1.05 (1984-10-04)" ) + ROMX_LOAD( "cntr 105.6cd", 0x2000, 0x2000, CRC(44043025) SHA1(17487ca35b399bb49d4015bbeede0809db8e772f), ROM_BIOS(1) ) + ROM_SYSTEM_BIOS( 1, "v107", "Luxor v1.07 (1985-07-03)" ) + ROMX_LOAD( "cntr 1.07 6490318-07.6cd", 0x0000, 0x4000, CRC(db8c1c0e) SHA1(8bccd5bc72124984de529ee058df779f06d2c1d5), ROM_BIOS(2) ) + ROM_SYSTEM_BIOS( 2, "v108", "Luxor v1.08 (1986-03-12)" ) + ROMX_LOAD( "cntr 108.6cd", 0x2000, 0x2000, CRC(229764cb) SHA1(a2e2f6f49c31b827efc62f894de9a770b65d109d), ROM_BIOS(3) ) + ROM_SYSTEM_BIOS( 3, "v207", "DiAB v2.07 (1987-06-24)" ) + ROMX_LOAD( "diab 207.6cd", 0x2000, 0x2000, CRC(86622f52) SHA1(61ad271de53152c1640c0b364fce46d1b0b4c7e2), ROM_BIOS(4) ) ROM_REGION( 0x104, "plds", 0 ) ROM_LOAD( "pal16r4.2a", 0x000, 0x104, NO_DUMP) @@ -153,7 +155,7 @@ static ADDRESS_MAP_START( luxor_55_21046_io, AS_IO, 8, luxor_55_21046_device ) AM_RANGE(0x2c, 0x2c) AM_MIRROR(0xff03) AM_WRITE(_4b_w) AM_RANGE(0x3c, 0x3c) AM_MIRROR(0xff03) AM_WRITE(_9b_w) AM_RANGE(0x4c, 0x4c) AM_MIRROR(0xff03) AM_WRITE(_8a_w) - AM_RANGE(0x5c, 0x5c) AM_MIRROR(0xff07) AM_MASK(0xff00) AM_READ(_9a_r) + AM_RANGE(0x58, 0x58) AM_MIRROR(0x0007) AM_SELECT(0xff00) AM_READ(_9a_r) AM_RANGE(0x68, 0x6b) AM_MIRROR(0xff00) AM_DEVREAD(SAB1793_TAG, fd1793_t, read) AM_RANGE(0x78, 0x7b) AM_MIRROR(0xff00) AM_DEVWRITE(SAB1793_TAG, fd1793_t, write) AM_RANGE(0x80, 0x80) AM_MIRROR(0xff77) AM_DEVREADWRITE(Z80DMA_TAG, z80dma_device, read, write) diff --git a/src/devices/bus/cpc/amdrum.cpp b/src/devices/bus/cpc/amdrum.cpp index 87e5af428ce..6f8453e3750 100644 --- a/src/devices/bus/cpc/amdrum.cpp +++ b/src/devices/bus/cpc/amdrum.cpp @@ -52,7 +52,7 @@ void cpc_amdrum_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - space.install_write_handler(0xff00,0xffff,0,0,write8_delegate(FUNC(cpc_amdrum_device::dac_w),this)); + space.install_write_handler(0xff00,0xffff,write8_delegate(FUNC(cpc_amdrum_device::dac_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/brunword4.cpp b/src/devices/bus/cpc/brunword4.cpp index c4cbc0b0b1f..278ef4ed183 100644 --- a/src/devices/bus/cpc/brunword4.cpp +++ b/src/devices/bus/cpc/brunword4.cpp @@ -74,7 +74,7 @@ void cpc_brunword4_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - space.install_write_handler(0xdf00,0xdfff,0,0,write8_delegate(FUNC(cpc_brunword4_device::rombank_w),this)); + space.install_write_handler(0xdf00,0xdfff,write8_delegate(FUNC(cpc_brunword4_device::rombank_w),this)); } void cpc_brunword4_device::device_reset() diff --git a/src/devices/bus/cpc/cpc_pds.cpp b/src/devices/bus/cpc/cpc_pds.cpp index 1bff1c869a0..292efd3f7cf 100644 --- a/src/devices/bus/cpc/cpc_pds.cpp +++ b/src/devices/bus/cpc/cpc_pds.cpp @@ -52,7 +52,7 @@ void cpc_pds_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - space.install_readwrite_handler(0xfbec,0xfbef,0,0,read8_delegate(FUNC(cpc_pds_device::pio_r),this),write8_delegate(FUNC(cpc_pds_device::pio_w),this)); + space.install_readwrite_handler(0xfbec,0xfbef,read8_delegate(FUNC(cpc_pds_device::pio_r),this),write8_delegate(FUNC(cpc_pds_device::pio_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/cpc_rs232.cpp b/src/devices/bus/cpc/cpc_rs232.cpp index ccf4165edf1..42e4b83221f 100644 --- a/src/devices/bus/cpc/cpc_rs232.cpp +++ b/src/devices/bus/cpc/cpc_rs232.cpp @@ -114,8 +114,8 @@ void cpc_rs232_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - space.install_readwrite_handler(0xfadc,0xfadf,0,0,read8_delegate(FUNC(cpc_rs232_device::dart_r),this),write8_delegate(FUNC(cpc_rs232_device::dart_w),this)); - space.install_readwrite_handler(0xfbdc,0xfbdf,0,0,read8_delegate(FUNC(cpc_rs232_device::pit_r),this),write8_delegate(FUNC(cpc_rs232_device::pit_w),this)); + space.install_readwrite_handler(0xfadc,0xfadf,read8_delegate(FUNC(cpc_rs232_device::dart_r),this),write8_delegate(FUNC(cpc_rs232_device::dart_w),this)); + space.install_readwrite_handler(0xfbdc,0xfbdf,read8_delegate(FUNC(cpc_rs232_device::pit_r),this),write8_delegate(FUNC(cpc_rs232_device::pit_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/cpc_ssa1.cpp b/src/devices/bus/cpc/cpc_ssa1.cpp index a86847d100c..a4a0836dfc4 100644 --- a/src/devices/bus/cpc/cpc_ssa1.cpp +++ b/src/devices/bus/cpc/cpc_ssa1.cpp @@ -188,8 +188,8 @@ void cpc_ssa1_device::device_start() // m_sp0256_device = subdevice("sp0256"); - space.install_readwrite_handler(0xfaee,0xfaee,0,0,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); - space.install_readwrite_handler(0xfbee,0xfbee,0,0,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); + space.install_readwrite_handler(0xfaee,0xfaee,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); + space.install_readwrite_handler(0xfbee,0xfbee,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); } void cpc_dkspeech_device::device_start() @@ -202,7 +202,7 @@ void cpc_dkspeech_device::device_start() // m_sp0256_device = subdevice("sp0256"); - space.install_readwrite_handler(0xfbfe,0xfbfe,0,0,read8_delegate(FUNC(cpc_dkspeech_device::dkspeech_r),this),write8_delegate(FUNC(cpc_dkspeech_device::dkspeech_w),this)); + space.install_readwrite_handler(0xfbfe,0xfbfe,read8_delegate(FUNC(cpc_dkspeech_device::dkspeech_r),this),write8_delegate(FUNC(cpc_dkspeech_device::dkspeech_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/ddi1.cpp b/src/devices/bus/cpc/ddi1.cpp index c9b4adb1a2d..de747473f7b 100644 --- a/src/devices/bus/cpc/ddi1.cpp +++ b/src/devices/bus/cpc/ddi1.cpp @@ -79,9 +79,9 @@ void cpc_ddi1_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - space.install_write_handler(0xfa7e,0xfa7f,0,0,write8_delegate(FUNC(cpc_ddi1_device::motor_w),this)); - space.install_readwrite_handler(0xfb7e,0xfb7f,0,0,read8_delegate(FUNC(cpc_ddi1_device::fdc_r),this),write8_delegate(FUNC(cpc_ddi1_device::fdc_w),this)); - space.install_write_handler(0xdf00,0xdfff,0,0,write8_delegate(FUNC(cpc_ddi1_device::rombank_w),this)); + space.install_write_handler(0xfa7e,0xfa7f,write8_delegate(FUNC(cpc_ddi1_device::motor_w),this)); + space.install_readwrite_handler(0xfb7e,0xfb7f,read8_delegate(FUNC(cpc_ddi1_device::fdc_r),this),write8_delegate(FUNC(cpc_ddi1_device::fdc_w),this)); + space.install_write_handler(0xdf00,0xdfff,write8_delegate(FUNC(cpc_ddi1_device::rombank_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/doubler.cpp b/src/devices/bus/cpc/doubler.cpp index 9876263c323..632130dc08f 100644 --- a/src/devices/bus/cpc/doubler.cpp +++ b/src/devices/bus/cpc/doubler.cpp @@ -53,7 +53,7 @@ void cpc_doubler_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - space.install_read_handler(0xf0e0,0xf0e0,0,0,read8_delegate(FUNC(cpc_doubler_device::ext_tape_r),this)); + space.install_read_handler(0xf0e0,0xf0e0,read8_delegate(FUNC(cpc_doubler_device::ext_tape_r),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/hd20.cpp b/src/devices/bus/cpc/hd20.cpp index 3e19640be8e..d10bf0cd828 100644 --- a/src/devices/bus/cpc/hd20.cpp +++ b/src/devices/bus/cpc/hd20.cpp @@ -65,8 +65,8 @@ void cpc_hd20_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - space.install_write_handler(0xfbe0,0xfbe4,0,0,write8_delegate(FUNC(cpc_hd20_device::hdc_w),this)); - space.install_read_handler(0xfbe0,0xfbe4,0,0,read8_delegate(FUNC(cpc_hd20_device::hdc_r),this)); + space.install_write_handler(0xfbe0,0xfbe4,write8_delegate(FUNC(cpc_hd20_device::hdc_w),this)); + space.install_read_handler(0xfbe0,0xfbe4,read8_delegate(FUNC(cpc_hd20_device::hdc_r),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/magicsound.cpp b/src/devices/bus/cpc/magicsound.cpp index c289db92ddd..6f9a6313a64 100644 --- a/src/devices/bus/cpc/magicsound.cpp +++ b/src/devices/bus/cpc/magicsound.cpp @@ -90,10 +90,10 @@ void al_magicsound_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - space.install_readwrite_handler(0xf8d0,0xf8df,0,0,read8_delegate(FUNC(al_magicsound_device::dmac_r),this),write8_delegate(FUNC(al_magicsound_device::dmac_w),this)); - space.install_write_handler(0xf9d0,0xf9df,0,0,write8_delegate(FUNC(al_magicsound_device::timer_w),this)); - space.install_write_handler(0xfad0,0xfadf,0,0,write8_delegate(FUNC(al_magicsound_device::volume_w),this)); - space.install_write_handler(0xfbd0,0xfbdf,0,0,write8_delegate(FUNC(al_magicsound_device::mapper_w),this)); + space.install_readwrite_handler(0xf8d0,0xf8df,read8_delegate(FUNC(al_magicsound_device::dmac_r),this),write8_delegate(FUNC(al_magicsound_device::dmac_w),this)); + space.install_write_handler(0xf9d0,0xf9df,write8_delegate(FUNC(al_magicsound_device::timer_w),this)); + space.install_write_handler(0xfad0,0xfadf,write8_delegate(FUNC(al_magicsound_device::volume_w),this)); + space.install_write_handler(0xfbd0,0xfbdf,write8_delegate(FUNC(al_magicsound_device::mapper_w),this)); m_ramptr = machine().device<ram_device>(":" RAM_TAG); diff --git a/src/devices/bus/cpc/playcity.cpp b/src/devices/bus/cpc/playcity.cpp index 8d6fd109453..181a8fb3b0b 100644 --- a/src/devices/bus/cpc/playcity.cpp +++ b/src/devices/bus/cpc/playcity.cpp @@ -71,11 +71,11 @@ void cpc_playcity_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - space.install_readwrite_handler(0xf880,0xf883,0,0,read8_delegate(FUNC(cpc_playcity_device::ctc_r),this),write8_delegate(FUNC(cpc_playcity_device::ctc_w),this)); - space.install_readwrite_handler(0xf884,0xf884,0,0,read8_delegate(FUNC(cpc_playcity_device::ymz1_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz1_data_w),this)); - space.install_readwrite_handler(0xf888,0xf888,0,0,read8_delegate(FUNC(cpc_playcity_device::ymz2_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz2_data_w),this)); - space.install_write_handler(0xf984,0xf984,0,0,write8_delegate(FUNC(cpc_playcity_device::ymz1_address_w),this)); - space.install_write_handler(0xf988,0xf988,0,0,write8_delegate(FUNC(cpc_playcity_device::ymz2_address_w),this)); + space.install_readwrite_handler(0xf880,0xf883,read8_delegate(FUNC(cpc_playcity_device::ctc_r),this),write8_delegate(FUNC(cpc_playcity_device::ctc_w),this)); + space.install_readwrite_handler(0xf884,0xf884,read8_delegate(FUNC(cpc_playcity_device::ymz1_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz1_data_w),this)); + space.install_readwrite_handler(0xf888,0xf888,read8_delegate(FUNC(cpc_playcity_device::ymz2_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz2_data_w),this)); + space.install_write_handler(0xf984,0xf984,write8_delegate(FUNC(cpc_playcity_device::ymz1_address_w),this)); + space.install_write_handler(0xf988,0xf988,write8_delegate(FUNC(cpc_playcity_device::ymz2_address_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/smartwatch.cpp b/src/devices/bus/cpc/smartwatch.cpp index e4304323932..4b5c1850fe2 100644 --- a/src/devices/bus/cpc/smartwatch.cpp +++ b/src/devices/bus/cpc/smartwatch.cpp @@ -69,8 +69,8 @@ void cpc_smartwatch_device::device_reset() { device_t* cpu = machine().device(":maincpu"); address_space& space = cpu->memory().space(AS_PROGRAM); - space.install_read_handler(0xc000,0xc001,0,0,read8_delegate(FUNC(cpc_smartwatch_device::rtc_w),this)); - space.install_read_handler(0xc004,0xc004,0,0,read8_delegate(FUNC(cpc_smartwatch_device::rtc_r),this)); + space.install_read_handler(0xc000,0xc001,read8_delegate(FUNC(cpc_smartwatch_device::rtc_w),this)); + space.install_read_handler(0xc004,0xc004,read8_delegate(FUNC(cpc_smartwatch_device::rtc_r),this)); m_bank = membank(":bank7"); } diff --git a/src/devices/bus/cpc/symbfac2.cpp b/src/devices/bus/cpc/symbfac2.cpp index f64b6cfa131..a1df95d48fd 100644 --- a/src/devices/bus/cpc/symbfac2.cpp +++ b/src/devices/bus/cpc/symbfac2.cpp @@ -94,11 +94,11 @@ void cpc_symbiface2_device::device_start() m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - space.install_readwrite_handler(0xfd00,0xfd07,0,0,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_w),this)); - space.install_readwrite_handler(0xfd08,0xfd0f,0,0,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_w),this)); - space.install_read_handler(0xfd10,0xfd10,0,0,read8_delegate(FUNC(cpc_symbiface2_device::mouse_r),this)); - space.install_readwrite_handler(0xfd14,0xfd15,0,0,read8_delegate(FUNC(cpc_symbiface2_device::rtc_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rtc_w),this)); - space.install_readwrite_handler(0xfd17,0xfd17,0,0,read8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_w),this)); + space.install_readwrite_handler(0xfd00,0xfd07,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_w),this)); + space.install_readwrite_handler(0xfd08,0xfd0f,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_w),this)); + space.install_read_handler(0xfd10,0xfd10,read8_delegate(FUNC(cpc_symbiface2_device::mouse_r),this)); + space.install_readwrite_handler(0xfd14,0xfd15,read8_delegate(FUNC(cpc_symbiface2_device::rtc_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rtc_w),this)); + space.install_readwrite_handler(0xfd17,0xfd17,read8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_w),this)); // set up ROM space (these can be writable, when mapped to &4000, or completely disabled, allowing the built-in ROMs to be visible) // 32 banks of 16kB (512kB) diff --git a/src/devices/bus/cpc/transtape.cpp b/src/devices/bus/cpc/transtape.cpp index 680a40890d4..b1892f3a31e 100644 --- a/src/devices/bus/cpc/transtape.cpp +++ b/src/devices/bus/cpc/transtape.cpp @@ -63,8 +63,8 @@ void cpc_transtape_device::device_start() m_ram = make_unique_clear<UINT8[]>(0x2000); - m_space->install_write_handler(0xfbf0,0xfbf0,0,0,write8_delegate(FUNC(cpc_transtape_device::output_w),this)); - m_space->install_read_handler(0xfbff,0xfbff,0,0,read8_delegate(FUNC(cpc_transtape_device::input_r),this)); + m_space->install_write_handler(0xfbf0,0xfbf0,write8_delegate(FUNC(cpc_transtape_device::output_w),this)); + m_space->install_read_handler(0xfbff,0xfbff,read8_delegate(FUNC(cpc_transtape_device::input_r),this)); } //------------------------------------------------- diff --git a/src/devices/bus/dmv/k220.cpp b/src/devices/bus/dmv/k220.cpp index cd1c55a39a6..b753e7aa20c 100644 --- a/src/devices/bus/dmv/k220.cpp +++ b/src/devices/bus/dmv/k220.cpp @@ -149,8 +149,8 @@ dmv_k220_device::dmv_k220_device(const machine_config &mconfig, const char *tag, void dmv_k220_device::device_start() { address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO); - space.install_readwrite_handler(0x08, 0x0b, 0, 0, read8_delegate(FUNC(pit8253_device::read), &(*m_pit)), write8_delegate(FUNC(pit8253_device::write), &(*m_pit)), 0); - space.install_readwrite_handler(0x0c, 0x0f, 0, 0, read8_delegate(FUNC(i8255_device::read), &(*m_ppi)), write8_delegate(FUNC(i8255_device::write), &(*m_ppi)), 0); + space.install_readwrite_handler(0x08, 0x0b, read8_delegate(FUNC(pit8253_device::read), &(*m_pit)), write8_delegate(FUNC(pit8253_device::write), &(*m_pit)), 0); + space.install_readwrite_handler(0x0c, 0x0f, read8_delegate(FUNC(i8255_device::read), &(*m_ppi)), write8_delegate(FUNC(i8255_device::write), &(*m_ppi)), 0); } //------------------------------------------------- diff --git a/src/devices/bus/dmv/k230.cpp b/src/devices/bus/dmv/k230.cpp index 33e2c917024..7ac9b984216 100644 --- a/src/devices/bus/dmv/k230.cpp +++ b/src/devices/bus/dmv/k230.cpp @@ -165,7 +165,7 @@ void dmv_k230_device::device_start() void dmv_k234_device::device_start() { dmv_k230_device::device_start(); - m_io->install_readwrite_handler(0xd8, 0xdf, 0, 0, read8_delegate(FUNC(dmv_k234_device::snr_r), this), write8_delegate(FUNC(dmv_k234_device::snr_w), this), 0); + m_io->install_readwrite_handler(0xd8, 0xdf, read8_delegate(FUNC(dmv_k234_device::snr_r), this), write8_delegate(FUNC(dmv_k234_device::snr_w), this), 0); } //------------------------------------------------- diff --git a/src/devices/bus/ep64/exdos.cpp b/src/devices/bus/ep64/exdos.cpp index d5910c07ee3..093499c401d 100644 --- a/src/devices/bus/ep64/exdos.cpp +++ b/src/devices/bus/ep64/exdos.cpp @@ -151,10 +151,10 @@ ep64_exdos_device::ep64_exdos_device(const machine_config &mconfig, const char * void ep64_exdos_device::device_start() { - m_slot->program().install_rom(0x080000, 0x087fff, 0, 0, m_rom->base()); + m_slot->program().install_rom(0x080000, 0x087fff, m_rom->base()); - m_slot->io().install_readwrite_handler(0x10, 0x13, 0, 0x04, READ8_DEVICE_DELEGATE(m_fdc, wd_fdc_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, wd_fdc_t, write)); - m_slot->io().install_readwrite_handler(0x18, 0x18, 0, 0x04, READ8_DELEGATE(ep64_exdos_device, read), WRITE8_DELEGATE(ep64_exdos_device, write)); + m_slot->io().install_readwrite_handler(0x10, 0x13, 0, 0x04, 0, READ8_DEVICE_DELEGATE(m_fdc, wd_fdc_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, wd_fdc_t, write)); + m_slot->io().install_readwrite_handler(0x18, 0x18, 0, 0x04, 0, READ8_DELEGATE(ep64_exdos_device, read), WRITE8_DELEGATE(ep64_exdos_device, write)); } diff --git a/src/devices/bus/epson_sio/tf20.cpp b/src/devices/bus/epson_sio/tf20.cpp index 07fdf31e858..3acb7ba28a8 100644 --- a/src/devices/bus/epson_sio/tf20.cpp +++ b/src/devices/bus/epson_sio/tf20.cpp @@ -174,7 +174,7 @@ void epson_tf20_device::device_reset() m_mpsc->rxb_w(1); // enable rom - m_cpu->space(AS_PROGRAM).install_rom(0x0000, 0x07ff, 0, 0x7800, memregion("rom")->base()); + m_cpu->space(AS_PROGRAM).install_rom(0x0000, 0x07ff, 0x7800, memregion("rom")->base()); } //------------------------------------------------- diff --git a/src/devices/bus/imi7000/imi5000h.cpp b/src/devices/bus/imi7000/imi5000h.cpp index bca1e9f0083..ab4af469ee9 100644 --- a/src/devices/bus/imi7000/imi5000h.cpp +++ b/src/devices/bus/imi7000/imi5000h.cpp @@ -81,7 +81,7 @@ static ADDRESS_MAP_START( imi5000h_io, AS_IO, 8, imi5000h_device ) AM_RANGE(0x00, 0x03) AM_DEVREADWRITE(Z80PIO_0_TAG, z80pio_device, read, write) AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE(Z80PIO_2_TAG, z80pio_device, read, write) AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE(Z80PIO_3_TAG, z80pio_device, read, write) - AM_RANGE(0x10, 0x13) AM_MIRROR(0x03) // BEGRDY + AM_RANGE(0x10, 0x10) AM_MIRROR(0x03) // BEGRDY AM_RANGE(0x14, 0x14) AM_MIRROR(0x03) // HSXCLR AM_RANGE(0x18, 0x18) AM_MIRROR(0x03) // XFERSTB AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write) diff --git a/src/devices/bus/isa/3c503.cpp b/src/devices/bus/isa/3c503.cpp index f0522e7fdbd..e1f44cbe4d5 100644 --- a/src/devices/bus/isa/3c503.cpp +++ b/src/devices/bus/isa/3c503.cpp @@ -35,8 +35,8 @@ void el2_3c503_device::device_start() { memset(m_rom, 0, 8*1024); // empty m_dp8390->set_mac(mac); set_isa_device(); - m_isa->install_device(0x0300, 0x030f, 0, 0, read8_delegate(FUNC(el2_3c503_device::el2_3c503_loport_r), this), write8_delegate(FUNC(el2_3c503_device::el2_3c503_loport_w), this)); - m_isa->install_device(0x0700, 0x070f, 0, 0, read8_delegate(FUNC(el2_3c503_device::el2_3c503_hiport_r), this), write8_delegate(FUNC(el2_3c503_device::el2_3c503_hiport_w), this)); + m_isa->install_device(0x0300, 0x030f, read8_delegate(FUNC(el2_3c503_device::el2_3c503_loport_r), this), write8_delegate(FUNC(el2_3c503_device::el2_3c503_loport_w), this)); + m_isa->install_device(0x0700, 0x070f, read8_delegate(FUNC(el2_3c503_device::el2_3c503_hiport_r), this), write8_delegate(FUNC(el2_3c503_device::el2_3c503_hiport_w), this)); // TODO: This is wrong, fix if anything actually uses it // DMA can change in runtime @@ -57,8 +57,8 @@ void el2_3c503_device::device_reset() { m_regs.pcfr = 0x20; // address 0xcc000 m_regs.ctrl = 0x0a; m_irq_state = CLEAR_LINE; - m_isa->unmap_bank(SADDR, SADDR + 0x1fff, 0, 0); - m_isa->install_bank(SADDR, SADDR + 0x1fff, 0, 0, "3c503 rom", m_rom); + m_isa->unmap_bank(SADDR, SADDR + 0x1fff); + m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 rom", m_rom); } void el2_3c503_device::set_irq(int state) { @@ -193,16 +193,16 @@ WRITE8_MEMBER(el2_3c503_device::el2_3c503_hiport_w) { return; case 5: if((m_regs.gacfr & 0xf) != (data & 0xf)) { - m_isa->unmap_bank(SADDR, SADDR + 0x1fff, 0, 0); + m_isa->unmap_bank(SADDR, SADDR + 0x1fff); switch(data & 0xf) { case 0: - m_isa->install_bank(SADDR, SADDR + 0x1fff, 0, 0, "3c503 rom", m_rom); + m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 rom", m_rom); break; case 9: - m_isa->install_bank(SADDR, SADDR + 0x1fff, 0, 0, "3c503 ram", m_board_ram); + m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 ram", m_board_ram); break; default: - m_isa->install_bank(SADDR, SADDR + 0x1fff, 0, 0, "3c503 no map", m_rom); + m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 no map", m_rom); break; } } diff --git a/src/devices/bus/isa/3c505.cpp b/src/devices/bus/isa/3c505.cpp index 85c316a6452..6c4dcd234a5 100644 --- a/src/devices/bus/isa/3c505.cpp +++ b/src/devices/bus/isa/3c505.cpp @@ -400,14 +400,14 @@ void threecom3c505_device::device_reset() m_irq = m_irqdrq->read() & 0xf; m_drq = (m_irqdrq->read() >> 4) & 0x7; - m_isa->install16_device(base, base + ELP_IO_EXTENT - 1, 0, 0, read16_delegate(FUNC(threecom3c505_device::read), this), write16_delegate(FUNC(threecom3c505_device::write), this)); + m_isa->install16_device(base, base + ELP_IO_EXTENT - 1, read16_delegate(FUNC(threecom3c505_device::read), this), write16_delegate(FUNC(threecom3c505_device::write), this)); if (m_romopts->read() & 1) { // host ROM is enabled, get base address static const int rom_bases[4] = { 0x0000, 0x2000, 0x4000, 0x6000 }; int rom_base = rom_bases[(m_romopts->read() >> 1) & 3]; - m_isa->install_rom(this, rom_base, rom_base + 0x01fff, 0, 0, "threecom3c505", "threecom3c505"); + m_isa->install_rom(this, rom_base, rom_base + 0x01fff, "threecom3c505", "threecom3c505"); } m_installed = true; diff --git a/src/devices/bus/isa/adlib.cpp b/src/devices/bus/isa/adlib.cpp index 42e2afd9604..66e7bc29ca3 100644 --- a/src/devices/bus/isa/adlib.cpp +++ b/src/devices/bus/isa/adlib.cpp @@ -75,7 +75,7 @@ isa8_adlib_device::isa8_adlib_device(const machine_config &mconfig, const char * void isa8_adlib_device::device_start() { set_isa_device(); - m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate( FUNC(isa8_adlib_device::ym3812_16_r), this ), write8_delegate( FUNC(isa8_adlib_device::ym3812_16_w), this ) ); + m_isa->install_device(0x0388, 0x0389, read8_delegate( FUNC(isa8_adlib_device::ym3812_16_r), this ), write8_delegate( FUNC(isa8_adlib_device::ym3812_16_w), this ) ); } //------------------------------------------------- diff --git a/src/devices/bus/isa/aga.cpp b/src/devices/bus/isa/aga.cpp index 9146f2ce581..6d065194978 100644 --- a/src/devices/bus/isa/aga.cpp +++ b/src/devices/bus/isa/aga.cpp @@ -110,9 +110,9 @@ void isa8_aga_device::device_start() m_videoram = std::make_unique<UINT8[]>(0x10000); set_isa_device(); - m_isa->install_memory(0xb0000, 0xbffff, 0, 0, read8_delegate(FUNC(isa8_aga_device::pc_aga_videoram_r),this), write8_delegate(FUNC(isa8_aga_device::pc_aga_videoram_w),this)); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate( FUNC(isa8_aga_device::pc_aga_mda_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_mda_w), this ) ); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_aga_device::pc_aga_cga_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_cga_w), this ) ); + m_isa->install_memory(0xb0000, 0xbffff, read8_delegate(FUNC(isa8_aga_device::pc_aga_videoram_r),this), write8_delegate(FUNC(isa8_aga_device::pc_aga_videoram_w),this)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate( FUNC(isa8_aga_device::pc_aga_mda_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_mda_w), this ) ); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_aga_device::pc_aga_cga_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_cga_w), this ) ); /* Initialise the cga palette */ int i; @@ -197,9 +197,9 @@ void isa8_aga_pc200_device::device_start() m_videoram = std::make_unique<UINT8[]>(0x10000); set_isa_device(); - m_isa->install_memory(0xb0000, 0xbffff, 0, 0, read8_delegate(FUNC(isa8_aga_pc200_device::pc200_videoram_r),this), write8_delegate(FUNC(isa8_aga_pc200_device::pc200_videoram_w),this)); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate( FUNC(isa8_aga_device::pc_aga_mda_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_mda_w), this ) ); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_aga_pc200_device::pc200_cga_r), this ), write8_delegate( FUNC(isa8_aga_pc200_device::pc200_cga_w), this ) ); + m_isa->install_memory(0xb0000, 0xbffff, read8_delegate(FUNC(isa8_aga_pc200_device::pc200_videoram_r),this), write8_delegate(FUNC(isa8_aga_pc200_device::pc200_videoram_w),this)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate( FUNC(isa8_aga_device::pc_aga_mda_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_mda_w), this ) ); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_aga_pc200_device::pc200_cga_r), this ), write8_delegate( FUNC(isa8_aga_pc200_device::pc200_cga_w), this ) ); /* Initialise the cga palette */ int i; diff --git a/src/devices/bus/isa/aha1542.cpp b/src/devices/bus/isa/aha1542.cpp index cc557c47eaa..b3394f1e25c 100644 --- a/src/devices/bus/isa/aha1542.cpp +++ b/src/devices/bus/isa/aha1542.cpp @@ -192,8 +192,8 @@ aha1542_device::aha1542_device(const machine_config &mconfig, const char *tag, d void aha1542_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xdc000, 0xdffff, 0, 0, "aha1542", "aha1542"); - m_isa->install_device(0x330, 0x333, 0, 0, read8_delegate(FUNC( aha1542_device::aha1542_r ), this), + m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542"); + m_isa->install_device(0x330, 0x333, read8_delegate(FUNC( aha1542_device::aha1542_r ), this), write8_delegate(FUNC( aha1542_device::aha1542_w ), this) ); } diff --git a/src/devices/bus/isa/cga.cpp b/src/devices/bus/isa/cga.cpp index 888318f65d7..2dc3a5cd300 100644 --- a/src/devices/bus/isa/cga.cpp +++ b/src/devices/bus/isa/cga.cpp @@ -348,8 +348,10 @@ void isa8_cga_device::device_start() set_isa_device(); m_vram.resize(m_vram_size); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_cga_device::io_read), this ), write8_delegate( FUNC(isa8_cga_device::io_write), this ) ); - m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, 0, m_vram_size & 0x4000, "bank_cga", &m_vram[0]); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_cga_device::io_read), this ), write8_delegate( FUNC(isa8_cga_device::io_write), this ) ); + m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, "bank_cga", &m_vram[0]); + if(m_vram_size == 0x4000) + m_isa->install_bank(0xbc000, 0xbffff, "bank_cga", &m_vram[0]); /* Initialise the cga palette */ int i; @@ -1578,12 +1580,13 @@ void isa8_cga_pc1512_device::device_start() { isa8_cga_device::device_start(); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_cga_pc1512_device::io_read), this ), write8_delegate( FUNC(isa8_cga_pc1512_device::io_write), this ) ); - m_isa->install_bank(0xb8000, 0xbbfff, 0, 0, "bank1", &m_vram[0]); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_cga_pc1512_device::io_read), this ), write8_delegate( FUNC(isa8_cga_pc1512_device::io_write), this ) ); + m_isa->install_bank(0xb8000, 0xbbfff, "bank1", &m_vram[0]); address_space &space = machine().firstcpu->space( AS_PROGRAM ); - space.install_write_handler( 0xb8000, 0xbbfff, 0, 0x0C000, write8_delegate( FUNC(isa8_cga_pc1512_device::vram_w), this ) ); + space.install_write_handler( 0xb8000, 0xbbfff, write8_delegate( FUNC(isa8_cga_pc1512_device::vram_w), this ) ); + space.install_write_handler( 0xbc000, 0xbffff, write8_delegate( FUNC(isa8_cga_pc1512_device::vram_w), this ) ); } void isa8_cga_pc1512_device::device_reset() @@ -1716,9 +1719,9 @@ void isa8_wyse700_device::device_start() { isa8_cga_device::device_start(); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_wyse700_device::io_read), this ), write8_delegate( FUNC(isa8_wyse700_device::io_write), this ) ); - m_isa->install_bank(0xa0000, 0xaffff, 0, 0, "bank_wy1", &m_vram[0x00000]); - m_isa->install_bank(0xb0000, 0xbffff, 0, 0, "bank_cga", &m_vram[0x10000]); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_wyse700_device::io_read), this ), write8_delegate( FUNC(isa8_wyse700_device::io_write), this ) ); + m_isa->install_bank(0xa0000, 0xaffff, "bank_wy1", &m_vram[0x00000]); + m_isa->install_bank(0xb0000, 0xbffff, "bank_cga", &m_vram[0x10000]); } void isa8_wyse700_device::device_reset() @@ -1778,7 +1781,7 @@ void isa8_ec1841_0002_device::device_start() { isa8_cga_device::device_start(); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_ec1841_0002_device::io_read), this ), write8_delegate( FUNC(isa8_ec1841_0002_device::io_write), this ) ); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_ec1841_0002_device::io_read), this ), write8_delegate( FUNC(isa8_ec1841_0002_device::io_write), this ) ); } void isa8_ec1841_0002_device::device_reset() @@ -1810,11 +1813,17 @@ WRITE8_MEMBER( isa8_ec1841_0002_device::io_write ) case 0x0f: m_p3df = data; if (data & 1) { - m_isa->install_memory(0xb8000, 0xb9fff, 0, m_vram_size & 0x4000, - read8_delegate( FUNC(isa8_ec1841_0002_device::char_ram_read), this), - write8_delegate(FUNC(isa8_ec1841_0002_device::char_ram_write), this) ); + m_isa->install_memory(0xb8000, 0xb9fff, + read8_delegate( FUNC(isa8_ec1841_0002_device::char_ram_read), this), + write8_delegate(FUNC(isa8_ec1841_0002_device::char_ram_write), this) ); + if(m_vram_size == 0x4000) + m_isa->install_memory(0xbc000, 0xbdfff, + read8_delegate( FUNC(isa8_ec1841_0002_device::char_ram_read), this), + write8_delegate(FUNC(isa8_ec1841_0002_device::char_ram_write), this) ); } else { - m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, 0, m_vram_size & 0x4000, "bank_cga", &m_vram[0]); + m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, "bank_cga", &m_vram[0]); + if(m_vram_size == 0x4000) + m_isa->install_bank(0xbc000, 0xbffff, "bank_cga", &m_vram[0]); } break; default: diff --git a/src/devices/bus/isa/com.cpp b/src/devices/bus/isa/com.cpp index e61777c63c2..cd374756229 100644 --- a/src/devices/bus/isa/com.cpp +++ b/src/devices/bus/isa/com.cpp @@ -115,10 +115,10 @@ isa8_com_device::isa8_com_device(const machine_config &mconfig, device_type type void isa8_com_device::device_start() { set_isa_device(); - m_isa->install_device(0x03f8, 0x03ff, 0, 0, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_0")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_0")) ); - m_isa->install_device(0x02f8, 0x02ff, 0, 0, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_1")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_1")) ); -// m_isa->install_device(0x03e8, 0x03ef, 0, 0, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_2")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_2")) ); -// m_isa->install_device(0x02e8, 0x02ef, 0, 0, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_3")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_3")) ); + m_isa->install_device(0x03f8, 0x03ff, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_0")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_0")) ); + m_isa->install_device(0x02f8, 0x02ff, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_1")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_1")) ); +// m_isa->install_device(0x03e8, 0x03ef, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_2")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_2")) ); +// m_isa->install_device(0x02e8, 0x02ef, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice<ins8250_uart_device>("uart_3")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice<ins8250_uart_device>("uart_3")) ); } //------------------------------------------------- diff --git a/src/devices/bus/isa/dectalk.cpp b/src/devices/bus/isa/dectalk.cpp index 169748eeae6..cae8f8733f3 100644 --- a/src/devices/bus/isa/dectalk.cpp +++ b/src/devices/bus/isa/dectalk.cpp @@ -217,7 +217,7 @@ READ8_MEMBER(dectalk_isa_device::read) void dectalk_isa_device::device_start() { set_isa_device(); - m_isa->install_device(0x0250, 0x0257, 0, 0, read8_delegate(FUNC(dectalk_isa_device::read), this), write8_delegate(FUNC(dectalk_isa_device::write), this)); + m_isa->install_device(0x0250, 0x0257, read8_delegate(FUNC(dectalk_isa_device::read), this), write8_delegate(FUNC(dectalk_isa_device::write), this)); } void dectalk_isa_device::device_reset() diff --git a/src/devices/bus/isa/ega.cpp b/src/devices/bus/isa/ega.cpp index 85d943b92ac..bc57b61eb8f 100644 --- a/src/devices/bus/isa/ega.cpp +++ b/src/devices/bus/isa/ega.cpp @@ -636,10 +636,10 @@ void isa8_ega_device::device_start() m_crtc_ega = subdevice<crtc_ega_device>(EGA_CRTC_NAME); - m_isa->install_rom(this, 0xc0000, 0xc3fff, 0, 0, "ega", "user2"); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_w), this)); + m_isa->install_rom(this, 0xc0000, 0xc3fff, "ega", "user2"); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_w), this)); } //------------------------------------------------- @@ -693,53 +693,53 @@ void isa8_ega_device::install_banks() case 0x00: /* 0xA0000, 128KB */ if ( m_misc_output & 0x02 ) { - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); } else { - m_isa->unmap_bank(0xa0000, 0xaffff,0,0); - m_isa->unmap_bank(0xb0000, 0xb7fff,0,0); - m_isa->unmap_bank(0xb8000, 0xbffff,0,0); + m_isa->unmap_bank(0xa0000, 0xaffff); + m_isa->unmap_bank(0xb0000, 0xb7fff); + m_isa->unmap_bank(0xb8000, 0xbffff); } break; case 0x04: /* 0xA0000, 64KB */ if ( m_misc_output & 0x02 ) { - m_isa->install_memory(0xa0000, 0xaffff, 0, 0, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); + m_isa->install_memory(0xa0000, 0xaffff, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); } else { - m_isa->unmap_bank(0xa0000, 0xaffff,0,0); + m_isa->unmap_bank(0xa0000, 0xaffff); } /* These unmaps may break multi graphics card support */ - m_isa->unmap_bank(0xb0000, 0xb7fff,0,0); - m_isa->unmap_bank(0xb8000, 0xbffff,0,0); + m_isa->unmap_bank(0xb0000, 0xb7fff); + m_isa->unmap_bank(0xb8000, 0xbffff); break; case 0x08: /* 0xB0000, 32KB */ if ( m_misc_output & 0x02 ) { - m_isa->install_memory(0xb0000, 0xb7fff, 0, 0, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); + m_isa->install_memory(0xb0000, 0xb7fff, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); } else { - m_isa->unmap_bank(0xb0000, 0xb7fff,0,0); + m_isa->unmap_bank(0xb0000, 0xb7fff); } /* These unmaps may break multi graphics card support */ - m_isa->unmap_bank(0xa0000, 0xaffff,0,0); - m_isa->unmap_bank(0xb8000, 0xbffff,0,0); + m_isa->unmap_bank(0xa0000, 0xaffff); + m_isa->unmap_bank(0xb8000, 0xbffff); break; case 0x0c: /* 0xB8000, 32KB */ if ( m_misc_output & 0x02 ) { - m_isa->install_memory(0xb8000, 0xbffff, 0, 0, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); + m_isa->install_memory(0xb8000, 0xbffff, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); } else { - m_isa->unmap_bank(0xb8000, 0xbffff,0,0); + m_isa->unmap_bank(0xb8000, 0xbffff); } /* These unmaps may break multi graphics card support */ - m_isa->unmap_bank(0xa0000, 0xaffff,0,0); - m_isa->unmap_bank(0xb0000, 0xb7fff,0,0); + m_isa->unmap_bank(0xa0000, 0xaffff); + m_isa->unmap_bank(0xb0000, 0xb7fff); break; } } diff --git a/src/devices/bus/isa/finalchs.cpp b/src/devices/bus/isa/finalchs.cpp index c55414a62e1..222381d6435 100644 --- a/src/devices/bus/isa/finalchs.cpp +++ b/src/devices/bus/isa/finalchs.cpp @@ -104,7 +104,7 @@ void isa8_finalchs_device::device_start() set_isa_device(); //the included setup program allows any port from 0x100 to 0x1F0 to be selected, at increments of 0x10 //picked the following at random until we get dips hooked up - m_isa->install_device(0x160, 0x0161, 0, 0, read8_delegate(FUNC(isa8_finalchs_device::finalchs_r), this), write8_delegate(FUNC(isa8_finalchs_device::finalchs_w), this)); + m_isa->install_device(0x160, 0x0161, read8_delegate(FUNC(isa8_finalchs_device::finalchs_r), this), write8_delegate(FUNC(isa8_finalchs_device::finalchs_w), this)); // timer_pulse(machine, ATTOTIME_IN_HZ(1), nullptr, 0, cause_M6502_irq); } diff --git a/src/devices/bus/isa/gblaster.cpp b/src/devices/bus/isa/gblaster.cpp index 22cb5edd328..3f36f791c69 100644 --- a/src/devices/bus/isa/gblaster.cpp +++ b/src/devices/bus/isa/gblaster.cpp @@ -112,9 +112,9 @@ isa8_gblaster_device::isa8_gblaster_device(const machine_config &mconfig, const void isa8_gblaster_device::device_start() { set_isa_device(); - m_isa->install_device(0x0220, 0x0221, 0, 0, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_1_16_w), this ) ); - m_isa->install_device(0x0222, 0x0223, 0, 0, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_2_16_w), this ) ); - m_isa->install_device(0x0224, 0x022F, 0, 0, read8_delegate( FUNC(isa8_gblaster_device::detect_r), this ), write8_delegate( FUNC(isa8_gblaster_device::detect_w), this ) ); + m_isa->install_device(0x0220, 0x0221, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_1_16_w), this ) ); + m_isa->install_device(0x0222, 0x0223, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_2_16_w), this ) ); + m_isa->install_device(0x0224, 0x022F, read8_delegate( FUNC(isa8_gblaster_device::detect_r), this ), write8_delegate( FUNC(isa8_gblaster_device::detect_w), this ) ); } //------------------------------------------------- diff --git a/src/devices/bus/isa/gus.cpp b/src/devices/bus/isa/gus.cpp index 2928aaa252c..b4294d306ce 100644 --- a/src/devices/bus/isa/gus.cpp +++ b/src/devices/bus/isa/gus.cpp @@ -1283,10 +1283,10 @@ isa16_gus_device::isa16_gus_device(const machine_config &mconfig, const char *ta void isa16_gus_device::device_start() { set_isa_device(); - m_isa->install_device(0x0200, 0x0201, 0, 0, read8_delegate(FUNC(isa16_gus_device::joy_r),this), write8_delegate(FUNC(isa16_gus_device::joy_w),this) ); - m_isa->install_device(0x0220, 0x022f, 0, 0, read8_delegate(FUNC(isa16_gus_device::board_r),this), write8_delegate(FUNC(isa16_gus_device::board_w),this) ); - m_isa->install_device(0x0320, 0x0327, 0, 0, read8_delegate(FUNC(isa16_gus_device::synth_r),this), write8_delegate(FUNC(isa16_gus_device::synth_w),this) ); - m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate(FUNC(isa16_gus_device::adlib_r),this), write8_delegate(FUNC(isa16_gus_device::adlib_w),this) ); + m_isa->install_device(0x0200, 0x0201, read8_delegate(FUNC(isa16_gus_device::joy_r),this), write8_delegate(FUNC(isa16_gus_device::joy_w),this) ); + m_isa->install_device(0x0220, 0x022f, read8_delegate(FUNC(isa16_gus_device::board_r),this), write8_delegate(FUNC(isa16_gus_device::board_w),this) ); + m_isa->install_device(0x0320, 0x0327, read8_delegate(FUNC(isa16_gus_device::synth_r),this), write8_delegate(FUNC(isa16_gus_device::synth_w),this) ); + m_isa->install_device(0x0388, 0x0389, read8_delegate(FUNC(isa16_gus_device::adlib_r),this), write8_delegate(FUNC(isa16_gus_device::adlib_w),this) ); } void isa16_gus_device::device_reset() diff --git a/src/devices/bus/isa/hdc.cpp b/src/devices/bus/isa/hdc.cpp index 7708d341abd..8c7f65c0c0d 100644 --- a/src/devices/bus/isa/hdc.cpp +++ b/src/devices/bus/isa/hdc.cpp @@ -945,7 +945,7 @@ isa8_hdc_ec1841_device::isa8_hdc_ec1841_device(const machine_config &mconfig, co void isa8_hdc_device::device_start() { set_isa_device(); - m_isa->install_device(0x0320, 0x0323, 0, 0, read8_delegate( FUNC(isa8_hdc_device::pc_hdc_r), this ), write8_delegate( FUNC(isa8_hdc_device::pc_hdc_w), this ) ); + m_isa->install_device(0x0320, 0x0323, read8_delegate( FUNC(isa8_hdc_device::pc_hdc_r), this ), write8_delegate( FUNC(isa8_hdc_device::pc_hdc_w), this ) ); m_isa->set_dma_channel(3, this, FALSE); } @@ -958,7 +958,7 @@ void isa8_hdc_device::device_reset() dip = ioport("HDD")->read(); if (ioport("ROM")->read() == 1) - m_isa->install_rom(this, 0xc8000, 0xc9fff, 0, 0, "hdc", "hdc"); + m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc", "hdc"); } /************************************************************************* diff --git a/src/devices/bus/isa/ibm_mfc.cpp b/src/devices/bus/isa/ibm_mfc.cpp index b6445c9385f..4a715ec797a 100644 --- a/src/devices/bus/isa/ibm_mfc.cpp +++ b/src/devices/bus/isa/ibm_mfc.cpp @@ -467,7 +467,7 @@ isa8_ibm_mfc_device::isa8_ibm_mfc_device(const machine_config &mconfig, const ch void isa8_ibm_mfc_device::device_start() { set_isa_device(); - m_isa->install_device(0x2a20, 0x2a20 + 15, 0, 0, read8_delegate(FUNC(isa8_ibm_mfc_device::ibm_mfc_r), this), write8_delegate(FUNC(isa8_ibm_mfc_device::ibm_mfc_w), this)); + m_isa->install_device(0x2a20, 0x2a20 + 15, read8_delegate(FUNC(isa8_ibm_mfc_device::ibm_mfc_r), this), write8_delegate(FUNC(isa8_ibm_mfc_device::ibm_mfc_w), this)); } diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp index fb449c5815d..3bbb41b5589 100644 --- a/src/devices/bus/isa/isa.cpp +++ b/src/devices/bus/isa/isa.cpp @@ -262,7 +262,7 @@ void isa8_device::device_reset() } -void isa8_device::install_space(address_spacenum spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) +void isa8_device::install_space(address_spacenum spacenum, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler) { int buswidth; address_space *space; @@ -285,21 +285,21 @@ void isa8_device::install_space(address_spacenum spacenum, offs_t start, offs_t switch(buswidth) { case 8: - space->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0); + space->install_readwrite_handler(start, end, rhandler, whandler, 0); break; case 16: - space->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffff); + space->install_readwrite_handler(start, end, rhandler, whandler, 0xffff); break; case 32: if ((start % 4) == 0) { if ((end-start)==1) { - space->install_readwrite_handler(start, end+2, mask, mirror, rhandler, whandler, 0x0000ffff); + space->install_readwrite_handler(start, end+2, rhandler, whandler, 0x0000ffff); } else { - space->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff); + space->install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff); } } else { - // we handle just misalligned by 2 - space->install_readwrite_handler(start-2, end, mask, mirror, rhandler, whandler, 0xffff0000); + // we handle just misaligned by 2 + space->install_readwrite_handler(start-2, end, rhandler, whandler, 0xffff0000); } break; default: @@ -308,44 +308,44 @@ void isa8_device::install_space(address_spacenum spacenum, offs_t start, offs_t } -void isa8_device::install_memory(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) +void isa8_device::install_memory(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler) { - install_space(AS_PROGRAM, start, end, mask, mirror, rhandler, whandler); + install_space(AS_PROGRAM, start, end, rhandler, whandler); } -void isa8_device::install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) +void isa8_device::install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler) { - install_space(AS_IO, start, end, mask, mirror, rhandler, whandler); + install_space(AS_IO, start, end, rhandler, whandler); } -void isa8_device::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void isa8_device::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { - m_prgspace->install_readwrite_bank(start, end, mask, mirror, tag ); + m_prgspace->install_readwrite_bank(start, end, 0, tag ); machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(data); } -void isa8_device::unmap_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror) +void isa8_device::unmap_bank(offs_t start, offs_t end) { - m_prgspace->unmap_readwrite(start, end, mask, mirror); + m_prgspace->unmap_readwrite(start, end); } -void isa8_device::install_rom(device_t *dev, offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, const char *region) +void isa8_device::install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region) { if (machine().root_device().memregion("isa")) { UINT8 *src = dev->memregion(region)->base(); UINT8 *dest = machine().root_device().memregion("isa")->base() + start - 0xc0000; memcpy(dest,src, end - start + 1); } else { - m_prgspace->install_read_bank(start, end, mask, mirror, tag); - m_prgspace->unmap_write(start, end, mask, mirror); + m_prgspace->install_read_bank(start, end, 0, tag); + m_prgspace->unmap_write(start, end); machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(machine().root_device().memregion(dev->subtag(region).c_str())->base()); } } -void isa8_device::unmap_rom(offs_t start, offs_t end, offs_t mask, offs_t mirror) +void isa8_device::unmap_rom(offs_t start, offs_t end) { - m_prgspace->unmap_read(start, end, mask, mirror); + m_prgspace->unmap_read(start, end); } bool isa8_device::is_option_rom_space_available(offs_t start, int size) @@ -507,25 +507,25 @@ void isa16_device::device_start() m_out_drq7_cb.resolve_safe(); } -void isa16_device::install16_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read16_delegate rhandler, write16_delegate whandler) +void isa16_device::install16_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler) { int buswidth = m_prgwidth; switch(buswidth) { case 16: - m_iospace->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0); + m_iospace->install_readwrite_handler(start, end, rhandler, whandler, 0); break; case 32: - m_iospace->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff); + m_iospace->install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff); if ((start % 4) == 0) { if ((end-start)==1) { - m_iospace->install_readwrite_handler(start, end+2, mask, mirror, rhandler, whandler, 0x0000ffff); + m_iospace->install_readwrite_handler(start, end+2, rhandler, whandler, 0x0000ffff); } else { - m_iospace->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff); + m_iospace->install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff); } } else { // we handle just misalligned by 2 - m_iospace->install_readwrite_handler(start-2, end, mask, mirror, rhandler, whandler, 0xffff0000); + m_iospace->install_readwrite_handler(start-2, end, rhandler, whandler, 0xffff0000); } break; diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h index a93fddd6acb..3552b72dab0 100644 --- a/src/devices/bus/isa/isa.h +++ b/src/devices/bus/isa/isa.h @@ -215,17 +215,17 @@ public: } } - void install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler); + void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); template<typename T> void install_device(offs_t addrstart, offs_t addrend, T &device, void (T::*map)(class address_map &map, device_t &device), int bits = 8, UINT64 unitmask = U64(0xffffffffffffffff)) { m_iospace->install_device(addrstart, addrend, device, map, bits, unitmask); } - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); - void install_rom(device_t *dev, offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, const char *region); - void install_memory(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); + void install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region); + void install_memory(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); - void unmap_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror); - void unmap_rom(offs_t start, offs_t end, offs_t mask, offs_t mirror); + void unmap_bank(offs_t start, offs_t end); + void unmap_rom(offs_t start, offs_t end); bool is_option_rom_space_available(offs_t start, int size); DECLARE_WRITE_LINE_MEMBER( irq2_w ); @@ -257,7 +257,7 @@ public: const address_space_config m_program_config, m_io_config, m_program16_config, m_io16_config; protected: - void install_space(address_spacenum spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler); + void install_space(address_spacenum spacenum, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); // device-level overrides virtual void device_start() override; @@ -357,7 +357,7 @@ public: template<class _Object> static devcb_base &set_out_drq6_callback(device_t &device, _Object object) { return downcast<isa16_device &>(device).m_out_drq6_cb.set_callback(object); } template<class _Object> static devcb_base &set_out_drq7_callback(device_t &device, _Object object) { return downcast<isa16_device &>(device).m_out_drq7_cb.set_callback(object); } - void install16_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read16_delegate rhandler, write16_delegate whandler); + void install16_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler); // for ISA16, put the 16-bit configs in the primary slots and the 8-bit configs in the secondary virtual const address_space_config *memory_space_config(address_spacenum spacenum) const override diff --git a/src/devices/bus/isa/lpt.cpp b/src/devices/bus/isa/lpt.cpp index 1baa190b034..e6d2cea232e 100644 --- a/src/devices/bus/isa/lpt.cpp +++ b/src/devices/bus/isa/lpt.cpp @@ -51,11 +51,11 @@ void isa8_lpt_device::device_reset() m_is_primary = (ioport("DSW")->read() & 1) ? false : true; if (m_is_primary) { - m_isa->install_device(0x0378, 0x037b, 0, 0, read8_delegate(FUNC(pc_lpt_device::read), subdevice<pc_lpt_device>("lpt")), write8_delegate(FUNC(pc_lpt_device::write), subdevice<pc_lpt_device>("lpt"))); + m_isa->install_device(0x0378, 0x037b, read8_delegate(FUNC(pc_lpt_device::read), subdevice<pc_lpt_device>("lpt")), write8_delegate(FUNC(pc_lpt_device::write), subdevice<pc_lpt_device>("lpt"))); } else { - m_isa->install_device(0x0278, 0x027b, 0, 0, read8_delegate(FUNC(pc_lpt_device::read), subdevice<pc_lpt_device>("lpt")), write8_delegate(FUNC(pc_lpt_device::write), subdevice<pc_lpt_device>("lpt"))); + m_isa->install_device(0x0278, 0x027b, read8_delegate(FUNC(pc_lpt_device::read), subdevice<pc_lpt_device>("lpt")), write8_delegate(FUNC(pc_lpt_device::write), subdevice<pc_lpt_device>("lpt"))); } } diff --git a/src/devices/bus/isa/mc1502_fdc.cpp b/src/devices/bus/isa/mc1502_fdc.cpp index 0a482f3a3f9..3df26b862fe 100644 --- a/src/devices/bus/isa/mc1502_fdc.cpp +++ b/src/devices/bus/isa/mc1502_fdc.cpp @@ -205,16 +205,16 @@ void mc1502_fdc_device::device_start() set_isa_device(); // BIOS 5.0-5.2x - m_isa->install_device(0x010c, 0x010f, 0, 0, + m_isa->install_device(0x010c, 0x010f, READ8_DEVICE_DELEGATE(m_fdc, fd1793_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, fd1793_t, write) ); - m_isa->install_device(0x0100, 0x010b, 0, 0, read8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_r), this ), write8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_w), this ) ); + m_isa->install_device(0x0100, 0x010b, read8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_r), this ), write8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_w), this ) ); // BIOS 5.3x - m_isa->install_device(0x0048, 0x004b, 0, 0, + m_isa->install_device(0x0048, 0x004b, READ8_DEVICE_DELEGATE(m_fdc, fd1793_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, fd1793_t, write) ); - m_isa->install_device(0x004c, 0x004f, 0, 0, read8_delegate( FUNC(mc1502_fdc_device::mc1502_fdcv2_r), this ), write8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_w), this ) ); + m_isa->install_device(0x004c, 0x004f, read8_delegate( FUNC(mc1502_fdc_device::mc1502_fdcv2_r), this ), write8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_w), this ) ); motor_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc1502_fdc_device::motor_callback),this)); motor_on = 0; diff --git a/src/devices/bus/isa/mc1502_rom.cpp b/src/devices/bus/isa/mc1502_rom.cpp index 9a12c5ec712..bdf9dbc3d43 100644 --- a/src/devices/bus/isa/mc1502_rom.cpp +++ b/src/devices/bus/isa/mc1502_rom.cpp @@ -58,7 +58,7 @@ mc1502_rom_device::mc1502_rom_device(const machine_config &mconfig, const char * void mc1502_rom_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xe8000, 0xeffff, 0, 0, "XXX", "mc1502_rom"); + m_isa->install_rom(this, 0xe8000, 0xeffff, "XXX", "mc1502_rom"); } diff --git a/src/devices/bus/isa/mda.cpp b/src/devices/bus/isa/mda.cpp index c8456886f02..739f6b677d7 100644 --- a/src/devices/bus/isa/mda.cpp +++ b/src/devices/bus/isa/mda.cpp @@ -177,8 +177,15 @@ void isa8_mda_device::device_start() set_isa_device(); m_videoram.resize(0x1000); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate( FUNC(isa8_mda_device::io_read), this ), write8_delegate( FUNC(isa8_mda_device::io_write), this ) ); - m_isa->install_bank(0xb0000, 0xb0fff, 0, 0x07000, "bank_mda", &m_videoram[0]); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate( FUNC(isa8_mda_device::io_read), this ), write8_delegate( FUNC(isa8_mda_device::io_write), this ) ); + m_isa->install_bank(0xb0000, 0xb0fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb1000, 0xb1fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb2000, 0xb2fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb3000, 0xb3fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb4000, 0xb4fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb5000, 0xb5fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb6000, 0xb6fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb7000, 0xb7fff, "bank_mda", &m_videoram[0]); /* Initialise the mda palette */ for(int i = 0; i < 4; i++) @@ -596,8 +603,8 @@ void isa8_hercules_device::device_start() m_videoram.resize(0x10000); set_isa_device(); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate( FUNC(isa8_hercules_device::io_read), this ), write8_delegate( FUNC(isa8_hercules_device::io_write), this ) ); - m_isa->install_bank(0xb0000, 0xbffff, 0, 0, "bank_hercules", &m_videoram[0]); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate( FUNC(isa8_hercules_device::io_read), this ), write8_delegate( FUNC(isa8_hercules_device::io_write), this ) ); + m_isa->install_bank(0xb0000, 0xbffff, "bank_hercules", &m_videoram[0]); /* Initialise the mda palette */ for(int i = 0; i < (sizeof(mda_palette) / 3); i++) @@ -800,7 +807,8 @@ void isa8_ec1840_0002_device::device_start() isa8_mda_device::device_start(); m_soft_chr_gen = std::make_unique<UINT8[]>(0x2000); - m_isa->install_bank(0xdc000, 0xddfff, 0, 0x2000, "bank_chargen", m_soft_chr_gen.get()); + m_isa->install_bank(0xdc000, 0xddfff, "bank_chargen", m_soft_chr_gen.get()); + m_isa->install_bank(0xde000, 0xdffff, "bank_chargen", m_soft_chr_gen.get()); } void isa8_ec1840_0002_device::device_reset() diff --git a/src/devices/bus/isa/mpu401.cpp b/src/devices/bus/isa/mpu401.cpp index 420a753b750..df78f73b5c2 100644 --- a/src/devices/bus/isa/mpu401.cpp +++ b/src/devices/bus/isa/mpu401.cpp @@ -81,7 +81,7 @@ void isa8_mpu401_device::device_start() { set_isa_device(); - m_isa->install_device(0x330, 0x0331, 0, 0, READ8_DEVICE_DELEGATE(m_mpu401, mpu401_device, mpu_r), WRITE8_DEVICE_DELEGATE(m_mpu401, mpu401_device, mpu_w)); + m_isa->install_device(0x330, 0x0331, READ8_DEVICE_DELEGATE(m_mpu401, mpu401_device, mpu_r), WRITE8_DEVICE_DELEGATE(m_mpu401, mpu401_device, mpu_w)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/mufdc.cpp b/src/devices/bus/isa/mufdc.cpp index bb1b6fc8af4..24c8c3d142b 100644 --- a/src/devices/bus/isa/mufdc.cpp +++ b/src/devices/bus/isa/mufdc.cpp @@ -162,7 +162,7 @@ void mufdc_device::device_start() void mufdc_device::device_reset() { - m_isa->install_rom(this, 0xc8000, 0xc9fff, 0, 0, m_shortname.c_str(), "option"); + m_isa->install_rom(this, 0xc8000, 0xc9fff, m_shortname.c_str(), "option"); m_isa->install_device(0x3f0, 0x3f7, *m_fdc, &pc_fdc_interface::map); m_isa->set_dma_channel(2, this, true); } diff --git a/src/devices/bus/isa/ne1000.cpp b/src/devices/bus/isa/ne1000.cpp index 65ee0019430..24b37985225 100644 --- a/src/devices/bus/isa/ne1000.cpp +++ b/src/devices/bus/isa/ne1000.cpp @@ -33,7 +33,7 @@ void ne1000_device::device_start() { memcpy(m_prom, mac, 6); m_dp8390->set_mac(mac); set_isa_device(); - m_isa->install_device(0x0300, 0x031f, 0, 0, read8_delegate(FUNC(ne1000_device::ne1000_port_r), this), write8_delegate(FUNC(ne1000_device::ne1000_port_w), this)); + m_isa->install_device(0x0300, 0x031f, read8_delegate(FUNC(ne1000_device::ne1000_port_r), this), write8_delegate(FUNC(ne1000_device::ne1000_port_w), this)); } void ne1000_device::device_reset() { diff --git a/src/devices/bus/isa/ne2000.cpp b/src/devices/bus/isa/ne2000.cpp index 3937e14a920..347ab280d7d 100644 --- a/src/devices/bus/isa/ne2000.cpp +++ b/src/devices/bus/isa/ne2000.cpp @@ -34,7 +34,7 @@ void ne2000_device::device_start() { memcpy(m_prom, mac, 6); m_dp8390->set_mac(mac); set_isa_device(); - m_isa->install16_device(0x0300, 0x031f, 0, 0, read16_delegate(FUNC(ne2000_device::ne2000_port_r), this), write16_delegate(FUNC(ne2000_device::ne2000_port_w), this)); + m_isa->install16_device(0x0300, 0x031f, read16_delegate(FUNC(ne2000_device::ne2000_port_r), this), write16_delegate(FUNC(ne2000_device::ne2000_port_w), this)); } void ne2000_device::device_reset() { diff --git a/src/devices/bus/isa/num9rev.cpp b/src/devices/bus/isa/num9rev.cpp index 3ed1967df06..b37db708490 100644 --- a/src/devices/bus/isa/num9rev.cpp +++ b/src/devices/bus/isa/num9rev.cpp @@ -95,13 +95,13 @@ void isa8_number_9_rev_device::device_start() { set_isa_device(); - m_isa->install_memory(0xc0000, 0xc0001, 0, 0, read8_delegate(FUNC(upd7220_device::read), (upd7220_device *)m_upd7220), write8_delegate(FUNC(upd7220_device::write), (upd7220_device *)m_upd7220)); - m_isa->install_memory(0xc0100, 0xc03ff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::pal8_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal8_w), this)); - m_isa->install_memory(0xc0400, 0xc0401, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::bank_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::bank_w), this)); - m_isa->install_memory(0xc0500, 0xc06ff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::overlay_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::overlay_w), this)); - m_isa->install_memory(0xc0700, 0xc070f, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::ctrl_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::ctrl_w), this)); - m_isa->install_memory(0xc1000, 0xc3fff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::pal12_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal12_w), this)); - m_isa->install_memory(0xa0000, 0xaffff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::read8), this), write8_delegate(FUNC(isa8_number_9_rev_device::write8), this)); + m_isa->install_memory(0xc0000, 0xc0001, read8_delegate(FUNC(upd7220_device::read), (upd7220_device *)m_upd7220), write8_delegate(FUNC(upd7220_device::write), (upd7220_device *)m_upd7220)); + m_isa->install_memory(0xc0100, 0xc03ff, read8_delegate(FUNC(isa8_number_9_rev_device::pal8_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal8_w), this)); + m_isa->install_memory(0xc0400, 0xc0401, read8_delegate(FUNC(isa8_number_9_rev_device::bank_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::bank_w), this)); + m_isa->install_memory(0xc0500, 0xc06ff, read8_delegate(FUNC(isa8_number_9_rev_device::overlay_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::overlay_w), this)); + m_isa->install_memory(0xc0700, 0xc070f, read8_delegate(FUNC(isa8_number_9_rev_device::ctrl_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::ctrl_w), this)); + m_isa->install_memory(0xc1000, 0xc3fff, read8_delegate(FUNC(isa8_number_9_rev_device::pal12_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal12_w), this)); + m_isa->install_memory(0xa0000, 0xaffff, read8_delegate(FUNC(isa8_number_9_rev_device::read8), this), write8_delegate(FUNC(isa8_number_9_rev_device::write8), this)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/omti8621.cpp b/src/devices/bus/isa/omti8621.cpp index cb36cf50a3e..ad529b0b430 100644 --- a/src/devices/bus/isa/omti8621.cpp +++ b/src/devices/bus/isa/omti8621.cpp @@ -321,7 +321,7 @@ void omti8621_device::device_reset() int esdi_base = io_bases[m_iobase->read() & 7]; // install the ESDI ports - m_isa->install16_device(esdi_base, esdi_base + 7, 0, 0, read16_delegate(FUNC(omti8621_device::read), this), write16_delegate(FUNC(omti8621_device::write), this)); + m_isa->install16_device(esdi_base, esdi_base + 7, read16_delegate(FUNC(omti8621_device::read), this), write16_delegate(FUNC(omti8621_device::write), this)); // and the onboard AT FDC ports if (m_iobase->read() & 8) diff --git a/src/devices/bus/isa/p1_fdc.cpp b/src/devices/bus/isa/p1_fdc.cpp index 4ba01ed47da..27fe8657e26 100644 --- a/src/devices/bus/isa/p1_fdc.cpp +++ b/src/devices/bus/isa/p1_fdc.cpp @@ -186,11 +186,11 @@ p1_fdc_device::p1_fdc_device(const machine_config &mconfig, const char *tag, dev void p1_fdc_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xe0000, 0xe07ff, 0, 0, "XXX", "p1_fdc"); - m_isa->install_device(0x00c0, 0x00c3, 0, 0, + m_isa->install_rom(this, 0xe0000, 0xe07ff, "XXX", "p1_fdc"); + m_isa->install_device(0x00c0, 0x00c3, READ8_DEVICE_DELEGATE(m_fdc, fd1793_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, fd1793_t, write) ); - m_isa->install_device(0x00c4, 0x00c7, 0, 0, read8_delegate( FUNC(p1_fdc_device::p1_fdc_r), this ), write8_delegate( FUNC(p1_fdc_device::p1_fdc_w), this ) ); + m_isa->install_device(0x00c4, 0x00c7, read8_delegate( FUNC(p1_fdc_device::p1_fdc_r), this ), write8_delegate( FUNC(p1_fdc_device::p1_fdc_w), this ) ); } diff --git a/src/devices/bus/isa/p1_hdc.cpp b/src/devices/bus/isa/p1_hdc.cpp index eb8d68524eb..bb3192f287a 100644 --- a/src/devices/bus/isa/p1_hdc.cpp +++ b/src/devices/bus/isa/p1_hdc.cpp @@ -130,8 +130,8 @@ p1_hdc_device::p1_hdc_device(const machine_config &mconfig, const char *tag, dev void p1_hdc_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xe2000, 0xe27ff, 0, 0, "XXX", "p1_hdc"); - m_isa->install_memory(0xd0000, 0xd0fff, 0, 0, + m_isa->install_rom(this, 0xe2000, 0xe27ff, "XXX", "p1_hdc"); + m_isa->install_memory(0xd0000, 0xd0fff, READ8_DELEGATE(p1_hdc_device, p1_HDC_r), WRITE8_DELEGATE(p1_hdc_device, p1_HDC_w) ); } diff --git a/src/devices/bus/isa/p1_rom.cpp b/src/devices/bus/isa/p1_rom.cpp index bd078972a04..96b860bc60e 100644 --- a/src/devices/bus/isa/p1_rom.cpp +++ b/src/devices/bus/isa/p1_rom.cpp @@ -63,7 +63,7 @@ p1_rom_device::p1_rom_device(const machine_config &mconfig, const char *tag, dev void p1_rom_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc1fff, 0, 0, "XXX", "p1_rom"); + m_isa->install_rom(this, 0xc0000, 0xc1fff, "XXX", "p1_rom"); } diff --git a/src/devices/bus/isa/pc1640_iga.cpp b/src/devices/bus/isa/pc1640_iga.cpp index 05c989fcbe1..7304e96c26f 100644 --- a/src/devices/bus/isa/pc1640_iga.cpp +++ b/src/devices/bus/isa/pc1640_iga.cpp @@ -108,8 +108,8 @@ void isa8_pc1640_iga_device::device_start() m_crtc_ega = subdevice<crtc_ega_device>(EGA_CRTC_NAME); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "ega", "iga"); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_w), this)); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "ega", "iga"); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_w), this)); } diff --git a/src/devices/bus/isa/pds.cpp b/src/devices/bus/isa/pds.cpp index 235e0acdd02..f832de418de 100644 --- a/src/devices/bus/isa/pds.cpp +++ b/src/devices/bus/isa/pds.cpp @@ -44,7 +44,7 @@ WRITE8_MEMBER(isa8_pds_device::ppi_w) void isa8_pds_device::device_start() { set_isa_device(); - m_isa->install_device(0x0300, 0x0307, 0, 0, read8_delegate(FUNC(isa8_pds_device::ppi_r),this), write8_delegate(FUNC(isa8_pds_device::ppi_w),this) ); + m_isa->install_device(0x0300, 0x0307, read8_delegate(FUNC(isa8_pds_device::ppi_r),this), write8_delegate(FUNC(isa8_pds_device::ppi_w),this) ); } void isa8_pds_device::device_reset() diff --git a/src/devices/bus/isa/pgc.cpp b/src/devices/bus/isa/pgc.cpp index c22631d405b..bc5563cb19c 100644 --- a/src/devices/bus/isa/pgc.cpp +++ b/src/devices/bus/isa/pgc.cpp @@ -264,9 +264,9 @@ void isa8_pgc_device::device_reset() m_commarea = memregion("commarea")->base(); if (BIT(ioport("DSW")->read(), 1)) - m_isa->install_bank(0xc6400, 0xc67ff, 0, 0, "commarea", m_commarea); + m_isa->install_bank(0xc6400, 0xc67ff, "commarea", m_commarea); else - m_isa->install_bank(0xc6000, 0xc63ff, 0, 0, "commarea", m_commarea); + m_isa->install_bank(0xc6000, 0xc63ff, "commarea", m_commarea); } // diff --git a/src/devices/bus/isa/sb16.cpp b/src/devices/bus/isa/sb16.cpp index 87c09592b6d..2bc2d43c517 100644 --- a/src/devices/bus/isa/sb16.cpp +++ b/src/devices/bus/isa/sb16.cpp @@ -703,15 +703,15 @@ void sb16_lle_device::device_start() ymf262_device *ymf262 = subdevice<ymf262_device>("ymf262"); set_isa_device(); - m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy"))); - m_isa->install_device(0x0226, 0x0227, 0, 0, read8_delegate(FUNC(sb16_lle_device::invalid_r), this), write8_delegate(FUNC(sb16_lle_device::dsp_reset_w), this)); - m_isa->install_device(0x022a, 0x022b, 0, 0, read8_delegate(FUNC(sb16_lle_device::host_data_r), this), write8_delegate(FUNC(sb16_lle_device::invalid_w), this) ); - m_isa->install_device(0x022c, 0x022d, 0, 0, read8_delegate(FUNC(sb16_lle_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::host_cmd_w), this) ); - m_isa->install_device(0x022e, 0x022f, 0, 0, read8_delegate(FUNC(sb16_lle_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::invalid_w), this) ); - m_isa->install_device(0x0330, 0x0331, 0, 0, read8_delegate(FUNC(sb16_lle_device::mpu401_r), this), write8_delegate(FUNC(sb16_lle_device::mpu401_w), this)); - m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0220, 0x0223, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0228, 0x0229, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy"))); + m_isa->install_device(0x0226, 0x0227, read8_delegate(FUNC(sb16_lle_device::invalid_r), this), write8_delegate(FUNC(sb16_lle_device::dsp_reset_w), this)); + m_isa->install_device(0x022a, 0x022b, read8_delegate(FUNC(sb16_lle_device::host_data_r), this), write8_delegate(FUNC(sb16_lle_device::invalid_w), this) ); + m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(sb16_lle_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::host_cmd_w), this) ); + m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(sb16_lle_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::invalid_w), this) ); + m_isa->install_device(0x0330, 0x0331, read8_delegate(FUNC(sb16_lle_device::mpu401_r), this), write8_delegate(FUNC(sb16_lle_device::mpu401_w), this)); + m_isa->install_device(0x0388, 0x0389, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); m_isa->set_dma_channel(1, this, FALSE); m_isa->set_dma_channel(5, this, FALSE); m_timer = timer_alloc(); diff --git a/src/devices/bus/isa/sblaster.cpp b/src/devices/bus/isa/sblaster.cpp index 20dd6c6b2ed..6e38b04ce81 100644 --- a/src/devices/bus/isa/sblaster.cpp +++ b/src/devices/bus/isa/sblaster.cpp @@ -1264,23 +1264,23 @@ isa16_sblaster16_device::isa16_sblaster16_device(const machine_config &mconfig, void sb8_device::device_start() { - m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy"))); - m_isa->install_device(0x0226, 0x0227, 0, 0, read8_delegate(FUNC(sb_device::dsp_reset_r), this), write8_delegate(FUNC(sb_device::dsp_reset_w), this)); - m_isa->install_device(0x022a, 0x022b, 0, 0, read8_delegate(FUNC(sb_device::dsp_data_r), this), write8_delegate(FUNC(sb_device::dsp_data_w), this) ); - m_isa->install_device(0x022c, 0x022d, 0, 0, read8_delegate(FUNC(sb_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_cmd_w), this) ); - m_isa->install_device(0x022e, 0x022f, 0, 0, read8_delegate(FUNC(sb_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_rbuf_status_w), this) ); + m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy"))); + m_isa->install_device(0x0226, 0x0227, read8_delegate(FUNC(sb_device::dsp_reset_r), this), write8_delegate(FUNC(sb_device::dsp_reset_w), this)); + m_isa->install_device(0x022a, 0x022b, read8_delegate(FUNC(sb_device::dsp_data_r), this), write8_delegate(FUNC(sb_device::dsp_data_w), this) ); + m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(sb_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_cmd_w), this) ); + m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(sb_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_rbuf_status_w), this) ); if(m_dsp.version >= 0x0301) { ymf262_device *ymf262 = subdevice<ymf262_device>("ymf262"); - m_isa->install_device(0x0388, 0x038b, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0220, 0x0223, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0228, 0x0229, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0388, 0x038b, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); } else { - m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate( FUNC(sb8_device::ym3812_16_r), this ), write8_delegate( FUNC(sb8_device::ym3812_16_w), this ) ); - m_isa->install_device(0x0228, 0x0229, 0, 0, read8_delegate( FUNC(sb8_device::ym3812_16_r), this ), write8_delegate( FUNC(sb8_device::ym3812_16_w), this ) ); + m_isa->install_device(0x0388, 0x0389, read8_delegate( FUNC(sb8_device::ym3812_16_r), this ), write8_delegate( FUNC(sb8_device::ym3812_16_w), this ) ); + m_isa->install_device(0x0228, 0x0229, read8_delegate( FUNC(sb8_device::ym3812_16_r), this ), write8_delegate( FUNC(sb8_device::ym3812_16_w), this ) ); } m_timer = timer_alloc(0, nullptr); @@ -1305,8 +1305,8 @@ void isa8_sblaster1_0_device::device_start() { set_isa_device(); // 1.0 always has the SAA1099s for CMS back-compatibility - m_isa->install_device(0x0220, 0x0221, 0, 0, read8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_1_16_w), this ) ); - m_isa->install_device(0x0222, 0x0223, 0, 0, read8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_2_16_w), this ) ); + m_isa->install_device(0x0220, 0x0221, read8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_1_16_w), this ) ); + m_isa->install_device(0x0222, 0x0223, read8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_2_16_w), this ) ); m_isa->set_dma_channel(1, this, FALSE); m_dsp.version = 0x0105; sb8_device::device_start(); @@ -1325,16 +1325,16 @@ void sb16_device::device_start() { ymf262_device *ymf262 = subdevice<ymf262_device>("ymf262"); - m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy"))); - m_isa->install_device(0x0224, 0x0225, 0, 0, read8_delegate(FUNC(sb16_device::mixer_r), this), write8_delegate(FUNC(sb16_device::mixer_w), this)); - m_isa->install_device(0x0226, 0x0227, 0, 0, read8_delegate(FUNC(sb_device::dsp_reset_r), this), write8_delegate(FUNC(sb_device::dsp_reset_w), this)); - m_isa->install_device(0x022a, 0x022b, 0, 0, read8_delegate(FUNC(sb_device::dsp_data_r), this), write8_delegate(FUNC(sb_device::dsp_data_w), this) ); - m_isa->install_device(0x022c, 0x022d, 0, 0, read8_delegate(FUNC(sb_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_cmd_w), this) ); - m_isa->install_device(0x022e, 0x022f, 0, 0, read8_delegate(FUNC(sb_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_rbuf_status_w), this) ); - m_isa->install_device(0x0330, 0x0331, 0, 0, read8_delegate(FUNC(sb16_device::mpu401_r), this), write8_delegate(FUNC(sb16_device::mpu401_w), this)); - m_isa->install_device(0x0388, 0x038b, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0220, 0x0223, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0228, 0x0229, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy"))); + m_isa->install_device(0x0224, 0x0225, read8_delegate(FUNC(sb16_device::mixer_r), this), write8_delegate(FUNC(sb16_device::mixer_w), this)); + m_isa->install_device(0x0226, 0x0227, read8_delegate(FUNC(sb_device::dsp_reset_r), this), write8_delegate(FUNC(sb_device::dsp_reset_w), this)); + m_isa->install_device(0x022a, 0x022b, read8_delegate(FUNC(sb_device::dsp_data_r), this), write8_delegate(FUNC(sb_device::dsp_data_w), this) ); + m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(sb_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_cmd_w), this) ); + m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(sb_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_rbuf_status_w), this) ); + m_isa->install_device(0x0330, 0x0331, read8_delegate(FUNC(sb16_device::mpu401_r), this), write8_delegate(FUNC(sb16_device::mpu401_w), this)); + m_isa->install_device(0x0388, 0x038b, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); m_timer = timer_alloc(0, nullptr); diff --git a/src/devices/bus/isa/sc499.cpp b/src/devices/bus/isa/sc499.cpp index 565b8a42b35..42316f000b6 100644 --- a/src/devices/bus/isa/sc499.cpp +++ b/src/devices/bus/isa/sc499.cpp @@ -394,7 +394,7 @@ void sc499_device::device_reset() m_irq = m_irqdrq->read() & 7; m_drq = m_irqdrq->read()>>4; - m_isa->install_device(base, base+7, 0, 0, read8_delegate(FUNC(sc499_device::read), this), write8_delegate(FUNC(sc499_device::write), this)); + m_isa->install_device(base, base+7, read8_delegate(FUNC(sc499_device::read), this), write8_delegate(FUNC(sc499_device::write), this)); m_isa->set_dma_channel(m_drq, this, true); m_installed = true; diff --git a/src/devices/bus/isa/side116.cpp b/src/devices/bus/isa/side116.cpp index 460ee5f54fd..6aeda746d5f 100644 --- a/src/devices/bus/isa/side116.cpp +++ b/src/devices/bus/isa/side116.cpp @@ -115,16 +115,16 @@ void side116_device::device_reset() { switch ((m_config->read() >> 1) & 0x03) { - case 0: m_isa->install_rom(this, 0xc8000, 0xc9fff, 0, 0, "side116", "option"); break; - case 1: m_isa->install_rom(this, 0xd8000, 0xd9fff, 0, 0, "side116", "option"); break; - case 2: m_isa->install_rom(this, 0xcc000, 0xcdfff, 0, 0, "side116", "option"); break; - case 3: m_isa->install_rom(this, 0xdc000, 0xddfff, 0, 0, "side116", "option"); break; + case 0: m_isa->install_rom(this, 0xc8000, 0xc9fff, "side116", "option"); break; + case 1: m_isa->install_rom(this, 0xd8000, 0xd9fff, "side116", "option"); break; + case 2: m_isa->install_rom(this, 0xcc000, 0xcdfff, "side116", "option"); break; + case 3: m_isa->install_rom(this, 0xdc000, 0xddfff, "side116", "option"); break; } } // install io access if ((m_config->read() & 0x20) == 0x20) - m_isa->install_device(0x360, 0x36f, 0, 0, read8_delegate(FUNC(side116_device::read), this), write8_delegate(FUNC(side116_device::write), this)); + m_isa->install_device(0x360, 0x36f, read8_delegate(FUNC(side116_device::read), this), write8_delegate(FUNC(side116_device::write), this)); } diff --git a/src/devices/bus/isa/ssi2001.cpp b/src/devices/bus/isa/ssi2001.cpp index 4a77e870190..dec6751f887 100644 --- a/src/devices/bus/isa/ssi2001.cpp +++ b/src/devices/bus/isa/ssi2001.cpp @@ -29,8 +29,8 @@ ssi2001_device::ssi2001_device(const machine_config &mconfig, const char *tag, d void ssi2001_device::device_start() { set_isa_device(); - m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy"))); - m_isa->install_device(0x0280, 0x029F, 0, 0, read8_delegate(FUNC(mos6581_device::read), subdevice<mos6581_device>("sid6581")), write8_delegate(FUNC(mos6581_device::write), subdevice<mos6581_device>("sid6581"))); + m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy"))); + m_isa->install_device(0x0280, 0x029F, read8_delegate(FUNC(mos6581_device::read), subdevice<mos6581_device>("sid6581")), write8_delegate(FUNC(mos6581_device::write), subdevice<mos6581_device>("sid6581"))); } diff --git a/src/devices/bus/isa/stereo_fx.cpp b/src/devices/bus/isa/stereo_fx.cpp index b730ad3a670..fc17f2acfea 100644 --- a/src/devices/bus/isa/stereo_fx.cpp +++ b/src/devices/bus/isa/stereo_fx.cpp @@ -202,13 +202,13 @@ void stereo_fx_device::device_start() ym3812_device *ym3812 = subdevice<ym3812_device>("ym3812"); set_isa_device(); - m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy"))); - m_isa->install_device(0x0226, 0x0227, 0, 0, read8_delegate(FUNC(stereo_fx_device::invalid_r), this), write8_delegate(FUNC(stereo_fx_device::dsp_reset_w), this)); - m_isa->install_device(0x022a, 0x022b, 0, 0, read8_delegate(FUNC(stereo_fx_device::dsp_data_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) ); - m_isa->install_device(0x022c, 0x022d, 0, 0, read8_delegate(FUNC(stereo_fx_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::dsp_cmd_w), this) ); - m_isa->install_device(0x022e, 0x022f, 0, 0, read8_delegate(FUNC(stereo_fx_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) ); - m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812)); - m_isa->install_device(0x0228, 0x0229, 0, 0, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812)); + m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy"))); + m_isa->install_device(0x0226, 0x0227, read8_delegate(FUNC(stereo_fx_device::invalid_r), this), write8_delegate(FUNC(stereo_fx_device::dsp_reset_w), this)); + m_isa->install_device(0x022a, 0x022b, read8_delegate(FUNC(stereo_fx_device::dsp_data_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) ); + m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(stereo_fx_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::dsp_cmd_w), this) ); + m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(stereo_fx_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) ); + m_isa->install_device(0x0388, 0x0389, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812)); + m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812)); m_timer = timer_alloc(); m_timer->adjust(attotime::from_hz(2000000), 0, attotime::from_hz(2000000)); m_isa->set_dma_channel(1, this, FALSE); diff --git a/src/devices/bus/isa/svga_cirrus.cpp b/src/devices/bus/isa/svga_cirrus.cpp index 3e6f6ca1196..ebe18325c26 100644 --- a/src/devices/bus/isa/svga_cirrus.cpp +++ b/src/devices/bus/isa/svga_cirrus.cpp @@ -76,13 +76,13 @@ void isa16_svga_cirrus_device::device_start() m_vga = subdevice<cirrus_gd5430_device>("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "dm_clgd5430"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "dm_clgd5430"); - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(cirrus_gd5430_device::port_03b0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(cirrus_gd5430_device::port_03c0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(cirrus_gd5430_device::port_03d0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03d0_w),m_vga)); + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(cirrus_gd5430_device::port_03b0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(cirrus_gd5430_device::port_03c0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(cirrus_gd5430_device::port_03d0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(cirrus_gd5430_device::mem_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(cirrus_gd5430_device::mem_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::mem_w),m_vga)); } //------------------------------------------------- @@ -162,13 +162,13 @@ void isa16_svga_cirrus_gd542x_device::device_start() m_vga = subdevice<cirrus_gd5428_device>("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "clgd542x"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "clgd542x"); - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(cirrus_gd5428_device::port_03b0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(cirrus_gd5428_device::port_03c0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(cirrus_gd5428_device::port_03d0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03d0_w),m_vga)); + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(cirrus_gd5428_device::port_03b0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(cirrus_gd5428_device::port_03c0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(cirrus_gd5428_device::port_03d0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(cirrus_gd5428_device::mem_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(cirrus_gd5428_device::mem_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::mem_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/svga_s3.cpp b/src/devices/bus/isa/svga_s3.cpp index f4874db3fc9..98668979d61 100644 --- a/src/devices/bus/isa/svga_s3.cpp +++ b/src/devices/bus/isa/svga_s3.cpp @@ -88,29 +88,29 @@ void isa16_svga_s3_device::device_start() m_vga = subdevice<s3_vga_device>("vga"); m_8514 = subdevice<ibm8514a_device>("vga:8514a"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "s3_764"); - - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(s3_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(s3_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(s3_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03d0_w),m_vga)); - m_isa->install16_device(0x82e8, 0x82eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_currenty_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_currenty_w),m_8514)); - m_isa->install16_device(0x86e8, 0x86eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_currentx_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_currentx_w),m_8514)); - m_isa->install16_device(0x8ae8, 0x8aeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_desty_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_desty_w),m_8514)); - m_isa->install16_device(0x8ee8, 0x8eeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_destx_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_destx_w),m_8514)); - m_isa->install16_device(0x92e8, 0x92eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_line_error_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_line_error_w),m_8514)); - m_isa->install16_device(0x96e8, 0x96eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_width_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_width_w),m_8514)); - m_isa->install16_device(0x9ae8, 0x9aeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_gpstatus_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_cmd_w),m_8514)); - m_isa->install16_device(0x9ee8, 0x9eeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_ssv_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_ssv_w),m_8514)); - m_isa->install16_device(0xa2e8, 0xa2eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_bgcolour_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_bgcolour_w),m_8514)); - m_isa->install16_device(0xa6e8, 0xa6eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_fgcolour_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_fgcolour_w),m_8514)); - m_isa->install16_device(0xaae8, 0xaaeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_w),m_8514)); - m_isa->install16_device(0xaee8, 0xaeeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_w),m_8514)); - m_isa->install16_device(0xb6e8, 0xb6eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_backmix_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_backmix_w),m_8514)); - m_isa->install16_device(0xbae8, 0xbaeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_foremix_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_foremix_w),m_8514)); - m_isa->install16_device(0xbee8, 0xbeeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_multifunc_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_multifunc_w),m_8514)); - m_isa->install16_device(0xe2e8, 0xe2eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_pixel_xfer_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_pixel_xfer_w),m_8514)); - - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(s3_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3_vga_device::mem_w),m_vga)); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3_764"); + + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(s3_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(s3_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(s3_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03d0_w),m_vga)); + m_isa->install16_device(0x82e8, 0x82eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_currenty_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_currenty_w),m_8514)); + m_isa->install16_device(0x86e8, 0x86eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_currentx_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_currentx_w),m_8514)); + m_isa->install16_device(0x8ae8, 0x8aeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_desty_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_desty_w),m_8514)); + m_isa->install16_device(0x8ee8, 0x8eeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_destx_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_destx_w),m_8514)); + m_isa->install16_device(0x92e8, 0x92eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_line_error_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_line_error_w),m_8514)); + m_isa->install16_device(0x96e8, 0x96eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_width_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_width_w),m_8514)); + m_isa->install16_device(0x9ae8, 0x9aeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_gpstatus_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_cmd_w),m_8514)); + m_isa->install16_device(0x9ee8, 0x9eeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_ssv_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_ssv_w),m_8514)); + m_isa->install16_device(0xa2e8, 0xa2eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_bgcolour_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_bgcolour_w),m_8514)); + m_isa->install16_device(0xa6e8, 0xa6eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_fgcolour_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_fgcolour_w),m_8514)); + m_isa->install16_device(0xaae8, 0xaaeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_w),m_8514)); + m_isa->install16_device(0xaee8, 0xaeeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_w),m_8514)); + m_isa->install16_device(0xb6e8, 0xb6eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_backmix_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_backmix_w),m_8514)); + m_isa->install16_device(0xbae8, 0xbaeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_foremix_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_foremix_w),m_8514)); + m_isa->install16_device(0xbee8, 0xbeeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_multifunc_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_multifunc_w),m_8514)); + m_isa->install16_device(0xe2e8, 0xe2eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_pixel_xfer_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_pixel_xfer_w),m_8514)); + + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(s3_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3_vga_device::mem_w),m_vga)); } //------------------------------------------------- @@ -199,13 +199,13 @@ void isa16_s3virge_device::device_start() m_vga = subdevice<s3virge_vga_device>("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "s3virge"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3virge"); - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); } //------------------------------------------------- @@ -286,13 +286,13 @@ void isa16_s3virgedx_device::device_start() m_vga = subdevice<s3virgedx_vga_device>("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "s3virgedx"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3virgedx"); - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); } //------------------------------------------------- @@ -374,13 +374,13 @@ void isa16_stealth3d2kpro_device::device_start() m_vga = subdevice<s3virgedx_vga_device>("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "stealth3d"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "stealth3d"); - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/svga_trident.cpp b/src/devices/bus/isa/svga_trident.cpp index ded9d629fe3..6cf4d3d407a 100644 --- a/src/devices/bus/isa/svga_trident.cpp +++ b/src/devices/bus/isa/svga_trident.cpp @@ -78,24 +78,24 @@ void isa16_svga_tgui9680_device::device_start() m_vga = subdevice<trident_vga_device>("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "tgui9680", "tgui9680"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "tgui9680", "tgui9680"); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(trident_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(trident_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(trident_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03d0_w),m_vga)); - m_isa->install_device(0x43c4, 0x43cb, 0, 0, read8_delegate(FUNC(trident_vga_device::port_43c6_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_43c6_w),m_vga)); - m_isa->install_device(0x83c4, 0x83cb, 0, 0, read8_delegate(FUNC(trident_vga_device::port_83c6_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_83c6_w),m_vga)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(trident_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(trident_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(trident_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x43c4, 0x43cb, read8_delegate(FUNC(trident_vga_device::port_43c6_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_43c6_w),m_vga)); + m_isa->install_device(0x83c4, 0x83cb, read8_delegate(FUNC(trident_vga_device::port_83c6_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_83c6_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(trident_vga_device::mem_r),m_vga), write8_delegate(FUNC(trident_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(trident_vga_device::mem_r),m_vga), write8_delegate(FUNC(trident_vga_device::mem_w),m_vga)); // uncomment to test Windows 3.1 TGUI9440AGi driver -// m_isa->install_memory(0x4400000, 0x45fffff, 0, 0, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga)); +// m_isa->install_memory(0x4400000, 0x45fffff, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga)); // win95 drivers -// m_isa->install_memory(0x4000000, 0x41fffff, 0, 0, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga)); +// m_isa->install_memory(0x4000000, 0x41fffff, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga)); // acceleration ports - m_isa->install_device(0x2120, 0x21ff, 0, 0, read8_delegate(FUNC(trident_vga_device::accel_r),m_vga), write8_delegate(FUNC(trident_vga_device::accel_w),m_vga)); + m_isa->install_device(0x2120, 0x21ff, read8_delegate(FUNC(trident_vga_device::accel_r),m_vga), write8_delegate(FUNC(trident_vga_device::accel_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/svga_tseng.cpp b/src/devices/bus/isa/svga_tseng.cpp index 6fff06c78ad..ab0a4e9b5f7 100644 --- a/src/devices/bus/isa/svga_tseng.cpp +++ b/src/devices/bus/isa/svga_tseng.cpp @@ -76,13 +76,13 @@ void isa8_svga_et4k_device::device_start() m_vga = subdevice<tseng_vga_device>("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "et4000", "et4000"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "et4000", "et4000"); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(tseng_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(tseng_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(tseng_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(tseng_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(tseng_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(tseng_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(tseng_vga_device::mem_r),m_vga), write8_delegate(FUNC(tseng_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(tseng_vga_device::mem_r),m_vga), write8_delegate(FUNC(tseng_vga_device::mem_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/vga.cpp b/src/devices/bus/isa/vga.cpp index 390834c8d5b..306f1254eeb 100644 --- a/src/devices/bus/isa/vga.cpp +++ b/src/devices/bus/isa/vga.cpp @@ -66,13 +66,13 @@ void isa8_vga_device::device_start() m_vga = subdevice<vga_device>("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "ibm_vga", "ibm_vga"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "ibm_vga", "ibm_vga"); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(vga_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(vga_device::mem_r),m_vga), write8_delegate(FUNC(vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(vga_device::mem_r),m_vga), write8_delegate(FUNC(vga_device::mem_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/vga_ati.cpp b/src/devices/bus/isa/vga_ati.cpp index 490a26dc90c..a0f1a7f2f72 100644 --- a/src/devices/bus/isa/vga_ati.cpp +++ b/src/devices/bus/isa/vga_ati.cpp @@ -178,50 +178,50 @@ void isa16_vga_gfxultra_device::device_start() m_vga = subdevice<ati_vga_device>("vga"); m_8514 = subdevice<mach8_device>("vga:8514a"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "vga", "gfxultra"); - - m_isa->install_device(0x1ce, 0x1cf, 0, 0, read8_delegate(FUNC(ati_vga_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(ati_vga_device::ati_port_ext_w),m_vga)); - m_isa->install16_device(0x2e8, 0x2eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_status_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_htotal_w),m_8514)); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(ati_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(ati_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(ati_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(vga_device::port_03d0_w),m_vga)); - m_isa->install16_device(0x12e8, 0x12eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_vtotal_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vtotal_w),m_8514)); - m_isa->install16_device(0x12ec, 0x12ef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_config1_r),m_8514), write16_delegate()); - m_isa->install16_device(0x16e8, 0x16eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_vdisp_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vdisp_w),m_8514)); - m_isa->install16_device(0x16ec, 0x16ef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_config2_r),m_8514), write16_delegate()); - m_isa->install16_device(0x1ae8, 0x1aeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_vsync_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vsync_w),m_8514)); - m_isa->install16_device(0x26e8, 0x26eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_htotal_r),m_8514),write16_delegate()); - m_isa->install16_device(0x2ee8, 0x2eeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_subcontrol_r),m_8514),write16_delegate()); - m_isa->install16_device(0x42e8, 0x42eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_substatus_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_subcontrol_w),m_8514)); - m_isa->install16_device(0x52e8, 0x52eb, 0, 0, read16_delegate(FUNC(mach8_device::mach8_ec0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec0_w),m_8514)); - m_isa->install16_device(0x52ec, 0x52ef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_scratch0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_scratch0_w),m_8514)); - m_isa->install16_device(0x56e8, 0x56eb, 0, 0, read16_delegate(FUNC(mach8_device::mach8_ec1_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec1_w),m_8514)); - m_isa->install16_device(0x56ec, 0x56ef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_scratch0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_scratch0_w),m_8514)); - m_isa->install16_device(0x5ae8, 0x5aeb, 0, 0, read16_delegate(FUNC(mach8_device::mach8_ec2_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec2_w),m_8514)); - m_isa->install16_device(0x5ee8, 0x5eeb, 0, 0, read16_delegate(FUNC(mach8_device::mach8_ec3_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec3_w),m_8514)); - m_isa->install16_device(0x82e8, 0x82eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_currenty_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_currenty_w),m_8514)); - m_isa->install16_device(0x86e8, 0x86eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_currentx_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_currentx_w),m_8514)); - m_isa->install16_device(0x8ae8, 0x8aeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_desty_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_desty_w),m_8514)); - m_isa->install16_device(0x8ee8, 0x8eeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_destx_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_destx_w),m_8514)); - m_isa->install16_device(0x92e8, 0x92eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_line_error_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_line_error_w),m_8514)); - m_isa->install16_device(0x96e8, 0x96eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_width_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_width_w),m_8514)); - m_isa->install16_device(0x96ec, 0x96ef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_bresenham_count_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_bresenham_count_w),m_8514)); - m_isa->install16_device(0x9ae8, 0x9aeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_gpstatus_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_cmd_w),m_8514)); - m_isa->install16_device(0x9aec, 0x9aef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_ext_fifo_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_linedraw_index_w),m_8514)); - m_isa->install16_device(0x9ee8, 0x9eeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_ssv_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_ssv_w),m_8514)); - m_isa->install16_device(0xa2e8, 0xa2eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_bgcolour_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_bgcolour_w),m_8514)); - m_isa->install16_device(0xa6e8, 0xa6eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_fgcolour_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_fgcolour_w),m_8514)); - m_isa->install16_device(0xaae8, 0xaaeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_w),m_8514)); - m_isa->install16_device(0xaee8, 0xaeeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_w),m_8514)); - m_isa->install16_device(0xb6e8, 0xb6eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_backmix_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_backmix_w),m_8514)); - m_isa->install16_device(0xbae8, 0xbaeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_foremix_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_foremix_w),m_8514)); - m_isa->install16_device(0xbee8, 0xbeeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_multifunc_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_multifunc_w),m_8514)); - m_isa->install16_device(0xe2e8, 0xe2eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_pixel_xfer_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_pixel_xfer_w),m_8514)); - m_isa->install16_device(0xdaec, 0xdaef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_sourcex_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ext_leftscissor_w),m_8514)); - m_isa->install16_device(0xdeec, 0xdeef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_sourcey_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ext_topscissor_w),m_8514)); - m_isa->install16_device(0xfeec, 0xfeef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_linedraw_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_linedraw_w),m_8514)); - - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(ati_vga_device::mem_r),m_vga), write8_delegate(FUNC(ati_vga_device::mem_w),m_vga)); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "gfxultra"); + + m_isa->install_device(0x1ce, 0x1cf, read8_delegate(FUNC(ati_vga_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(ati_vga_device::ati_port_ext_w),m_vga)); + m_isa->install16_device(0x2e8, 0x2eb, read16_delegate(FUNC(mach8_device::ibm8514_status_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_htotal_w),m_8514)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(ati_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(ati_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(ati_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(vga_device::port_03d0_w),m_vga)); + m_isa->install16_device(0x12e8, 0x12eb, read16_delegate(FUNC(mach8_device::ibm8514_vtotal_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vtotal_w),m_8514)); + m_isa->install16_device(0x12ec, 0x12ef, read16_delegate(FUNC(mach8_device::mach8_config1_r),m_8514), write16_delegate()); + m_isa->install16_device(0x16e8, 0x16eb, read16_delegate(FUNC(mach8_device::ibm8514_vdisp_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vdisp_w),m_8514)); + m_isa->install16_device(0x16ec, 0x16ef, read16_delegate(FUNC(mach8_device::mach8_config2_r),m_8514), write16_delegate()); + m_isa->install16_device(0x1ae8, 0x1aeb, read16_delegate(FUNC(mach8_device::ibm8514_vsync_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vsync_w),m_8514)); + m_isa->install16_device(0x26e8, 0x26eb, read16_delegate(FUNC(mach8_device::ibm8514_htotal_r),m_8514),write16_delegate()); + m_isa->install16_device(0x2ee8, 0x2eeb, read16_delegate(FUNC(mach8_device::ibm8514_subcontrol_r),m_8514),write16_delegate()); + m_isa->install16_device(0x42e8, 0x42eb, read16_delegate(FUNC(mach8_device::ibm8514_substatus_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_subcontrol_w),m_8514)); + m_isa->install16_device(0x52e8, 0x52eb, read16_delegate(FUNC(mach8_device::mach8_ec0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec0_w),m_8514)); + m_isa->install16_device(0x52ec, 0x52ef, read16_delegate(FUNC(mach8_device::mach8_scratch0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_scratch0_w),m_8514)); + m_isa->install16_device(0x56e8, 0x56eb, read16_delegate(FUNC(mach8_device::mach8_ec1_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec1_w),m_8514)); + m_isa->install16_device(0x56ec, 0x56ef, read16_delegate(FUNC(mach8_device::mach8_scratch0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_scratch0_w),m_8514)); + m_isa->install16_device(0x5ae8, 0x5aeb, read16_delegate(FUNC(mach8_device::mach8_ec2_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec2_w),m_8514)); + m_isa->install16_device(0x5ee8, 0x5eeb, read16_delegate(FUNC(mach8_device::mach8_ec3_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec3_w),m_8514)); + m_isa->install16_device(0x82e8, 0x82eb, read16_delegate(FUNC(mach8_device::ibm8514_currenty_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_currenty_w),m_8514)); + m_isa->install16_device(0x86e8, 0x86eb, read16_delegate(FUNC(mach8_device::ibm8514_currentx_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_currentx_w),m_8514)); + m_isa->install16_device(0x8ae8, 0x8aeb, read16_delegate(FUNC(mach8_device::ibm8514_desty_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_desty_w),m_8514)); + m_isa->install16_device(0x8ee8, 0x8eeb, read16_delegate(FUNC(mach8_device::ibm8514_destx_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_destx_w),m_8514)); + m_isa->install16_device(0x92e8, 0x92eb, read16_delegate(FUNC(mach8_device::ibm8514_line_error_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_line_error_w),m_8514)); + m_isa->install16_device(0x96e8, 0x96eb, read16_delegate(FUNC(mach8_device::ibm8514_width_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_width_w),m_8514)); + m_isa->install16_device(0x96ec, 0x96ef, read16_delegate(FUNC(mach8_device::mach8_bresenham_count_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_bresenham_count_w),m_8514)); + m_isa->install16_device(0x9ae8, 0x9aeb, read16_delegate(FUNC(mach8_device::ibm8514_gpstatus_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_cmd_w),m_8514)); + m_isa->install16_device(0x9aec, 0x9aef, read16_delegate(FUNC(mach8_device::mach8_ext_fifo_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_linedraw_index_w),m_8514)); + m_isa->install16_device(0x9ee8, 0x9eeb, read16_delegate(FUNC(mach8_device::ibm8514_ssv_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_ssv_w),m_8514)); + m_isa->install16_device(0xa2e8, 0xa2eb, read16_delegate(FUNC(mach8_device::ibm8514_bgcolour_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_bgcolour_w),m_8514)); + m_isa->install16_device(0xa6e8, 0xa6eb, read16_delegate(FUNC(mach8_device::ibm8514_fgcolour_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_fgcolour_w),m_8514)); + m_isa->install16_device(0xaae8, 0xaaeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_w),m_8514)); + m_isa->install16_device(0xaee8, 0xaeeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_w),m_8514)); + m_isa->install16_device(0xb6e8, 0xb6eb, read16_delegate(FUNC(mach8_device::ibm8514_backmix_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_backmix_w),m_8514)); + m_isa->install16_device(0xbae8, 0xbaeb, read16_delegate(FUNC(mach8_device::ibm8514_foremix_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_foremix_w),m_8514)); + m_isa->install16_device(0xbee8, 0xbeeb, read16_delegate(FUNC(mach8_device::ibm8514_multifunc_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_multifunc_w),m_8514)); + m_isa->install16_device(0xe2e8, 0xe2eb, read16_delegate(FUNC(mach8_device::ibm8514_pixel_xfer_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_pixel_xfer_w),m_8514)); + m_isa->install16_device(0xdaec, 0xdaef, read16_delegate(FUNC(mach8_device::mach8_sourcex_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ext_leftscissor_w),m_8514)); + m_isa->install16_device(0xdeec, 0xdeef, read16_delegate(FUNC(mach8_device::mach8_sourcey_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ext_topscissor_w),m_8514)); + m_isa->install16_device(0xfeec, 0xfeef, read16_delegate(FUNC(mach8_device::mach8_linedraw_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_linedraw_w),m_8514)); + + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(ati_vga_device::mem_r),m_vga), write8_delegate(FUNC(ati_vga_device::mem_w),m_vga)); } void isa16_vga_gfxultrapro_device::device_start() @@ -230,53 +230,53 @@ void isa16_vga_gfxultrapro_device::device_start() m_vga = subdevice<mach32_device>("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "vga", "gfxultrapro"); - - m_isa->install_device(0x1ce, 0x1cf, 0, 0, read8_delegate(FUNC(mach32_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(mach32_device::ati_port_ext_w),m_vga)); - m_isa->install16_device(0x2e8, 0x2eb, 0, 0, read16_delegate(FUNC(mach32_device::mach32_status_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_htotal_w),m_vga)); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(mach32_device::port_03b0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(mach32_device::port_03c0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(mach32_device::port_03d0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03d0_w),m_vga)); - m_isa->install16_device(0x12e8, 0x12eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_vtotal_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vtotal_w),m_vga)); - m_isa->install16_device(0x12ec, 0x12ef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_config1_r),m_vga), write16_delegate()); - m_isa->install16_device(0x16e8, 0x16eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_vdisp_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vdisp_w),m_vga)); - m_isa->install16_device(0x16ec, 0x16ef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_config2_r),m_vga), write16_delegate()); - m_isa->install16_device(0x1ae8, 0x1aeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_vsync_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vsync_w),m_vga)); - m_isa->install16_device(0x26e8, 0x26eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_htotal_r),m_vga),write16_delegate()); - m_isa->install16_device(0x2ee8, 0x2eeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_subcontrol_r),m_vga),write16_delegate()); - m_isa->install16_device(0x42e8, 0x42eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_substatus_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_subcontrol_w),m_vga)); - m_isa->install16_device(0x42ec, 0x42ef, 0, 0, read16_delegate(FUNC(mach32_device::mach32_mem_boundary_r),m_vga), write16_delegate(FUNC(mach32_device::mach32_mem_boundary_w),m_vga)); - m_isa->install16_device(0x4aec, 0x4aef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_clksel_r),m_vga), write16_delegate(FUNC(mach32_device::mach32_clksel_w),m_vga)); - m_isa->install16_device(0x52e8, 0x52eb, 0, 0, read16_delegate(FUNC(mach32_device::mach8_ec0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec0_w),m_vga)); - m_isa->install16_device(0x52ec, 0x52ef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_scratch0_w),m_vga)); - m_isa->install16_device(0x56e8, 0x56eb, 0, 0, read16_delegate(FUNC(mach32_device::mach8_ec1_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec1_w),m_vga)); - m_isa->install16_device(0x56ec, 0x56ef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_scratch0_w),m_vga)); - m_isa->install16_device(0x5ae8, 0x5aeb, 0, 0, read16_delegate(FUNC(mach32_device::mach8_ec2_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec2_w),m_vga)); - m_isa->install16_device(0x5ee8, 0x5eeb, 0, 0, read16_delegate(FUNC(mach32_device::mach8_ec3_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec3_w),m_vga)); - m_isa->install16_device(0x82e8, 0x82eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_currenty_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_currenty_w),m_vga)); - m_isa->install16_device(0x86e8, 0x86eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_currentx_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_currentx_w),m_vga)); - m_isa->install16_device(0x8ae8, 0x8aeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_desty_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_desty_w),m_vga)); - m_isa->install16_device(0x8ee8, 0x8eeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_destx_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_destx_w),m_vga)); - m_isa->install16_device(0x92e8, 0x92eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_line_error_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_line_error_w),m_vga)); - m_isa->install16_device(0x96e8, 0x96eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_width_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_width_w),m_vga)); - m_isa->install16_device(0x96ec, 0x96ef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_bresenham_count_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_bresenham_count_w),m_vga)); - m_isa->install16_device(0x9ae8, 0x9aeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_gpstatus_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_cmd_w),m_vga)); - m_isa->install16_device(0x9aec, 0x9aef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_ext_fifo_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_linedraw_index_w),m_vga)); - m_isa->install16_device(0x9ee8, 0x9eeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_ssv_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_ssv_w),m_vga)); - m_isa->install16_device(0xa2e8, 0xa2eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_bgcolour_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_bgcolour_w),m_vga)); - m_isa->install16_device(0xa6e8, 0xa6eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_fgcolour_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_fgcolour_w),m_vga)); - m_isa->install16_device(0xaae8, 0xaaeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_write_mask_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_write_mask_w),m_vga)); - m_isa->install16_device(0xaee8, 0xaeeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_read_mask_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_read_mask_w),m_vga)); - m_isa->install16_device(0xb6e8, 0xb6eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_backmix_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_backmix_w),m_vga)); - m_isa->install16_device(0xbae8, 0xbaeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_foremix_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_foremix_w),m_vga)); - m_isa->install16_device(0xbee8, 0xbeeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_multifunc_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_multifunc_w),m_vga)); - m_isa->install16_device(0xe2e8, 0xe2eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_pixel_xfer_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_pixel_xfer_w),m_vga)); - m_isa->install16_device(0xdaec, 0xdaef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_sourcex_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ext_leftscissor_w),m_vga)); - m_isa->install16_device(0xdeec, 0xdeef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_sourcey_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ext_topscissor_w),m_vga)); - m_isa->install16_device(0xfaec, 0xfaef, 0, 0, read16_delegate(FUNC(mach32_device::mach32_chipid_r),m_vga), write16_delegate()); - m_isa->install16_device(0xfeec, 0xfeef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_linedraw_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_linedraw_w),m_vga)); - - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(mach32_device::mem_r),m_vga), write8_delegate(FUNC(mach32_device::mem_w),m_vga)); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "gfxultrapro"); + + m_isa->install_device(0x1ce, 0x1cf, read8_delegate(FUNC(mach32_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(mach32_device::ati_port_ext_w),m_vga)); + m_isa->install16_device(0x2e8, 0x2eb, read16_delegate(FUNC(mach32_device::mach32_status_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_htotal_w),m_vga)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(mach32_device::port_03b0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(mach32_device::port_03c0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(mach32_device::port_03d0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03d0_w),m_vga)); + m_isa->install16_device(0x12e8, 0x12eb, read16_delegate(FUNC(mach32_device::ibm8514_vtotal_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vtotal_w),m_vga)); + m_isa->install16_device(0x12ec, 0x12ef, read16_delegate(FUNC(mach32_device::mach8_config1_r),m_vga), write16_delegate()); + m_isa->install16_device(0x16e8, 0x16eb, read16_delegate(FUNC(mach32_device::ibm8514_vdisp_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vdisp_w),m_vga)); + m_isa->install16_device(0x16ec, 0x16ef, read16_delegate(FUNC(mach32_device::mach8_config2_r),m_vga), write16_delegate()); + m_isa->install16_device(0x1ae8, 0x1aeb, read16_delegate(FUNC(mach32_device::ibm8514_vsync_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vsync_w),m_vga)); + m_isa->install16_device(0x26e8, 0x26eb, read16_delegate(FUNC(mach32_device::ibm8514_htotal_r),m_vga),write16_delegate()); + m_isa->install16_device(0x2ee8, 0x2eeb, read16_delegate(FUNC(mach32_device::ibm8514_subcontrol_r),m_vga),write16_delegate()); + m_isa->install16_device(0x42e8, 0x42eb, read16_delegate(FUNC(mach32_device::ibm8514_substatus_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_subcontrol_w),m_vga)); + m_isa->install16_device(0x42ec, 0x42ef, read16_delegate(FUNC(mach32_device::mach32_mem_boundary_r),m_vga), write16_delegate(FUNC(mach32_device::mach32_mem_boundary_w),m_vga)); + m_isa->install16_device(0x4aec, 0x4aef, read16_delegate(FUNC(mach32_device::mach8_clksel_r),m_vga), write16_delegate(FUNC(mach32_device::mach32_clksel_w),m_vga)); + m_isa->install16_device(0x52e8, 0x52eb, read16_delegate(FUNC(mach32_device::mach8_ec0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec0_w),m_vga)); + m_isa->install16_device(0x52ec, 0x52ef, read16_delegate(FUNC(mach32_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_scratch0_w),m_vga)); + m_isa->install16_device(0x56e8, 0x56eb, read16_delegate(FUNC(mach32_device::mach8_ec1_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec1_w),m_vga)); + m_isa->install16_device(0x56ec, 0x56ef, read16_delegate(FUNC(mach32_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_scratch0_w),m_vga)); + m_isa->install16_device(0x5ae8, 0x5aeb, read16_delegate(FUNC(mach32_device::mach8_ec2_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec2_w),m_vga)); + m_isa->install16_device(0x5ee8, 0x5eeb, read16_delegate(FUNC(mach32_device::mach8_ec3_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec3_w),m_vga)); + m_isa->install16_device(0x82e8, 0x82eb, read16_delegate(FUNC(mach32_device::ibm8514_currenty_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_currenty_w),m_vga)); + m_isa->install16_device(0x86e8, 0x86eb, read16_delegate(FUNC(mach32_device::ibm8514_currentx_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_currentx_w),m_vga)); + m_isa->install16_device(0x8ae8, 0x8aeb, read16_delegate(FUNC(mach32_device::ibm8514_desty_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_desty_w),m_vga)); + m_isa->install16_device(0x8ee8, 0x8eeb, read16_delegate(FUNC(mach32_device::ibm8514_destx_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_destx_w),m_vga)); + m_isa->install16_device(0x92e8, 0x92eb, read16_delegate(FUNC(mach32_device::ibm8514_line_error_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_line_error_w),m_vga)); + m_isa->install16_device(0x96e8, 0x96eb, read16_delegate(FUNC(mach32_device::ibm8514_width_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_width_w),m_vga)); + m_isa->install16_device(0x96ec, 0x96ef, read16_delegate(FUNC(mach32_device::mach8_bresenham_count_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_bresenham_count_w),m_vga)); + m_isa->install16_device(0x9ae8, 0x9aeb, read16_delegate(FUNC(mach32_device::ibm8514_gpstatus_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_cmd_w),m_vga)); + m_isa->install16_device(0x9aec, 0x9aef, read16_delegate(FUNC(mach32_device::mach8_ext_fifo_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_linedraw_index_w),m_vga)); + m_isa->install16_device(0x9ee8, 0x9eeb, read16_delegate(FUNC(mach32_device::ibm8514_ssv_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_ssv_w),m_vga)); + m_isa->install16_device(0xa2e8, 0xa2eb, read16_delegate(FUNC(mach32_device::ibm8514_bgcolour_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_bgcolour_w),m_vga)); + m_isa->install16_device(0xa6e8, 0xa6eb, read16_delegate(FUNC(mach32_device::ibm8514_fgcolour_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_fgcolour_w),m_vga)); + m_isa->install16_device(0xaae8, 0xaaeb, read16_delegate(FUNC(mach32_device::ibm8514_write_mask_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_write_mask_w),m_vga)); + m_isa->install16_device(0xaee8, 0xaeeb, read16_delegate(FUNC(mach32_device::ibm8514_read_mask_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_read_mask_w),m_vga)); + m_isa->install16_device(0xb6e8, 0xb6eb, read16_delegate(FUNC(mach32_device::ibm8514_backmix_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_backmix_w),m_vga)); + m_isa->install16_device(0xbae8, 0xbaeb, read16_delegate(FUNC(mach32_device::ibm8514_foremix_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_foremix_w),m_vga)); + m_isa->install16_device(0xbee8, 0xbeeb, read16_delegate(FUNC(mach32_device::ibm8514_multifunc_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_multifunc_w),m_vga)); + m_isa->install16_device(0xe2e8, 0xe2eb, read16_delegate(FUNC(mach32_device::ibm8514_pixel_xfer_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_pixel_xfer_w),m_vga)); + m_isa->install16_device(0xdaec, 0xdaef, read16_delegate(FUNC(mach32_device::mach8_sourcex_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ext_leftscissor_w),m_vga)); + m_isa->install16_device(0xdeec, 0xdeef, read16_delegate(FUNC(mach32_device::mach8_sourcey_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ext_topscissor_w),m_vga)); + m_isa->install16_device(0xfaec, 0xfaef, read16_delegate(FUNC(mach32_device::mach32_chipid_r),m_vga), write16_delegate()); + m_isa->install16_device(0xfeec, 0xfeef, read16_delegate(FUNC(mach32_device::mach8_linedraw_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_linedraw_w),m_vga)); + + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(mach32_device::mem_r),m_vga), write8_delegate(FUNC(mach32_device::mem_w),m_vga)); } void isa16_vga_mach64_device::device_start() @@ -285,53 +285,53 @@ void isa16_vga_mach64_device::device_start() m_vga = subdevice<mach64_device>("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "vga", "mach64"); - - m_isa->install_device(0x1ce, 0x1cf, 0, 0, read8_delegate(FUNC(mach64_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(mach64_device::ati_port_ext_w),m_vga)); - m_isa->install16_device(0x2e8, 0x2eb, 0, 0, read16_delegate(FUNC(mach64_device::mach32_status_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_htotal_w),m_vga)); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(mach64_device::port_03b0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(mach64_device::port_03c0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(mach64_device::port_03d0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03d0_w),m_vga)); - m_isa->install16_device(0x12e8, 0x12eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_vtotal_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vtotal_w),m_vga)); - m_isa->install16_device(0x12ec, 0x12ef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_config1_r),m_vga), write16_delegate(FUNC(mach64_device::mach64_config1_w),m_vga)); - m_isa->install16_device(0x16e8, 0x16eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_vdisp_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vdisp_w),m_vga)); - m_isa->install16_device(0x16ec, 0x16ef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_config2_r),m_vga), write16_delegate(FUNC(mach64_device::mach64_config2_w),m_vga)); - m_isa->install16_device(0x1ae8, 0x1aeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_vsync_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vsync_w),m_vga)); - m_isa->install16_device(0x26e8, 0x26eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_htotal_r),m_vga),write16_delegate()); - m_isa->install16_device(0x2ee8, 0x2eeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_subcontrol_r),m_vga),write16_delegate()); - m_isa->install16_device(0x42e8, 0x42eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_substatus_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_subcontrol_w),m_vga)); - m_isa->install16_device(0x42ec, 0x42ef, 0, 0, read16_delegate(FUNC(mach64_device::mach32_mem_boundary_r),m_vga), write16_delegate(FUNC(mach64_device::mach32_mem_boundary_w),m_vga)); - m_isa->install16_device(0x4aec, 0x4aef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_clksel_r),m_vga), write16_delegate(FUNC(mach64_device::mach32_clksel_w),m_vga)); - m_isa->install16_device(0x52e8, 0x52eb, 0, 0, read16_delegate(FUNC(mach64_device::mach8_ec0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec0_w),m_vga)); - m_isa->install16_device(0x52ec, 0x52ef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_scratch0_w),m_vga)); - m_isa->install16_device(0x56e8, 0x56eb, 0, 0, read16_delegate(FUNC(mach64_device::mach8_ec1_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec1_w),m_vga)); - m_isa->install16_device(0x56ec, 0x56ef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_scratch0_w),m_vga)); - m_isa->install16_device(0x5ae8, 0x5aeb, 0, 0, read16_delegate(FUNC(mach64_device::mach8_ec2_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec2_w),m_vga)); - m_isa->install16_device(0x5ee8, 0x5eeb, 0, 0, read16_delegate(FUNC(mach64_device::mach8_ec3_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec3_w),m_vga)); - m_isa->install16_device(0x82e8, 0x82eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_currenty_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_currenty_w),m_vga)); - m_isa->install16_device(0x86e8, 0x86eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_currentx_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_currentx_w),m_vga)); - m_isa->install16_device(0x8ae8, 0x8aeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_desty_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_desty_w),m_vga)); - m_isa->install16_device(0x8ee8, 0x8eeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_destx_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_destx_w),m_vga)); - m_isa->install16_device(0x92e8, 0x92eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_line_error_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_line_error_w),m_vga)); - m_isa->install16_device(0x96e8, 0x96eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_width_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_width_w),m_vga)); - m_isa->install16_device(0x96ec, 0x96ef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_bresenham_count_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_bresenham_count_w),m_vga)); - m_isa->install16_device(0x9ae8, 0x9aeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_gpstatus_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_cmd_w),m_vga)); - m_isa->install16_device(0x9aec, 0x9aef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_ext_fifo_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_linedraw_index_w),m_vga)); - m_isa->install16_device(0x9ee8, 0x9eeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_ssv_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_ssv_w),m_vga)); - m_isa->install16_device(0xa2e8, 0xa2eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_bgcolour_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_bgcolour_w),m_vga)); - m_isa->install16_device(0xa6e8, 0xa6eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_fgcolour_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_fgcolour_w),m_vga)); - m_isa->install16_device(0xaae8, 0xaaeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_write_mask_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_write_mask_w),m_vga)); - m_isa->install16_device(0xaee8, 0xaeeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_read_mask_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_read_mask_w),m_vga)); - m_isa->install16_device(0xb6e8, 0xb6eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_backmix_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_backmix_w),m_vga)); - m_isa->install16_device(0xbae8, 0xbaeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_foremix_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_foremix_w),m_vga)); - m_isa->install16_device(0xbee8, 0xbeeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_multifunc_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_multifunc_w),m_vga)); - m_isa->install16_device(0xe2e8, 0xe2eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_pixel_xfer_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_pixel_xfer_w),m_vga)); - m_isa->install16_device(0xdaec, 0xdaef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_sourcex_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ext_leftscissor_w),m_vga)); - m_isa->install16_device(0xdeec, 0xdeef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_sourcey_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ext_topscissor_w),m_vga)); - m_isa->install16_device(0xfaec, 0xfaef, 0, 0, read16_delegate(FUNC(mach64_device::mach32_chipid_r),m_vga), write16_delegate()); - m_isa->install16_device(0xfeec, 0xfeef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_linedraw_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_linedraw_w),m_vga)); - - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(mach64_device::mem_r),m_vga), write8_delegate(FUNC(mach64_device::mem_w),m_vga)); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "mach64"); + + m_isa->install_device(0x1ce, 0x1cf, read8_delegate(FUNC(mach64_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(mach64_device::ati_port_ext_w),m_vga)); + m_isa->install16_device(0x2e8, 0x2eb, read16_delegate(FUNC(mach64_device::mach32_status_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_htotal_w),m_vga)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(mach64_device::port_03b0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(mach64_device::port_03c0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(mach64_device::port_03d0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03d0_w),m_vga)); + m_isa->install16_device(0x12e8, 0x12eb, read16_delegate(FUNC(mach64_device::ibm8514_vtotal_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vtotal_w),m_vga)); + m_isa->install16_device(0x12ec, 0x12ef, read16_delegate(FUNC(mach64_device::mach8_config1_r),m_vga), write16_delegate(FUNC(mach64_device::mach64_config1_w),m_vga)); + m_isa->install16_device(0x16e8, 0x16eb, read16_delegate(FUNC(mach64_device::ibm8514_vdisp_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vdisp_w),m_vga)); + m_isa->install16_device(0x16ec, 0x16ef, read16_delegate(FUNC(mach64_device::mach8_config2_r),m_vga), write16_delegate(FUNC(mach64_device::mach64_config2_w),m_vga)); + m_isa->install16_device(0x1ae8, 0x1aeb, read16_delegate(FUNC(mach64_device::ibm8514_vsync_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vsync_w),m_vga)); + m_isa->install16_device(0x26e8, 0x26eb, read16_delegate(FUNC(mach64_device::ibm8514_htotal_r),m_vga),write16_delegate()); + m_isa->install16_device(0x2ee8, 0x2eeb, read16_delegate(FUNC(mach64_device::ibm8514_subcontrol_r),m_vga),write16_delegate()); + m_isa->install16_device(0x42e8, 0x42eb, read16_delegate(FUNC(mach64_device::ibm8514_substatus_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_subcontrol_w),m_vga)); + m_isa->install16_device(0x42ec, 0x42ef, read16_delegate(FUNC(mach64_device::mach32_mem_boundary_r),m_vga), write16_delegate(FUNC(mach64_device::mach32_mem_boundary_w),m_vga)); + m_isa->install16_device(0x4aec, 0x4aef, read16_delegate(FUNC(mach64_device::mach8_clksel_r),m_vga), write16_delegate(FUNC(mach64_device::mach32_clksel_w),m_vga)); + m_isa->install16_device(0x52e8, 0x52eb, read16_delegate(FUNC(mach64_device::mach8_ec0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec0_w),m_vga)); + m_isa->install16_device(0x52ec, 0x52ef, read16_delegate(FUNC(mach64_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_scratch0_w),m_vga)); + m_isa->install16_device(0x56e8, 0x56eb, read16_delegate(FUNC(mach64_device::mach8_ec1_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec1_w),m_vga)); + m_isa->install16_device(0x56ec, 0x56ef, read16_delegate(FUNC(mach64_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_scratch0_w),m_vga)); + m_isa->install16_device(0x5ae8, 0x5aeb, read16_delegate(FUNC(mach64_device::mach8_ec2_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec2_w),m_vga)); + m_isa->install16_device(0x5ee8, 0x5eeb, read16_delegate(FUNC(mach64_device::mach8_ec3_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec3_w),m_vga)); + m_isa->install16_device(0x82e8, 0x82eb, read16_delegate(FUNC(mach64_device::ibm8514_currenty_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_currenty_w),m_vga)); + m_isa->install16_device(0x86e8, 0x86eb, read16_delegate(FUNC(mach64_device::ibm8514_currentx_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_currentx_w),m_vga)); + m_isa->install16_device(0x8ae8, 0x8aeb, read16_delegate(FUNC(mach64_device::ibm8514_desty_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_desty_w),m_vga)); + m_isa->install16_device(0x8ee8, 0x8eeb, read16_delegate(FUNC(mach64_device::ibm8514_destx_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_destx_w),m_vga)); + m_isa->install16_device(0x92e8, 0x92eb, read16_delegate(FUNC(mach64_device::ibm8514_line_error_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_line_error_w),m_vga)); + m_isa->install16_device(0x96e8, 0x96eb, read16_delegate(FUNC(mach64_device::ibm8514_width_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_width_w),m_vga)); + m_isa->install16_device(0x96ec, 0x96ef, read16_delegate(FUNC(mach64_device::mach8_bresenham_count_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_bresenham_count_w),m_vga)); + m_isa->install16_device(0x9ae8, 0x9aeb, read16_delegate(FUNC(mach64_device::ibm8514_gpstatus_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_cmd_w),m_vga)); + m_isa->install16_device(0x9aec, 0x9aef, read16_delegate(FUNC(mach64_device::mach8_ext_fifo_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_linedraw_index_w),m_vga)); + m_isa->install16_device(0x9ee8, 0x9eeb, read16_delegate(FUNC(mach64_device::ibm8514_ssv_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_ssv_w),m_vga)); + m_isa->install16_device(0xa2e8, 0xa2eb, read16_delegate(FUNC(mach64_device::ibm8514_bgcolour_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_bgcolour_w),m_vga)); + m_isa->install16_device(0xa6e8, 0xa6eb, read16_delegate(FUNC(mach64_device::ibm8514_fgcolour_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_fgcolour_w),m_vga)); + m_isa->install16_device(0xaae8, 0xaaeb, read16_delegate(FUNC(mach64_device::ibm8514_write_mask_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_write_mask_w),m_vga)); + m_isa->install16_device(0xaee8, 0xaeeb, read16_delegate(FUNC(mach64_device::ibm8514_read_mask_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_read_mask_w),m_vga)); + m_isa->install16_device(0xb6e8, 0xb6eb, read16_delegate(FUNC(mach64_device::ibm8514_backmix_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_backmix_w),m_vga)); + m_isa->install16_device(0xbae8, 0xbaeb, read16_delegate(FUNC(mach64_device::ibm8514_foremix_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_foremix_w),m_vga)); + m_isa->install16_device(0xbee8, 0xbeeb, read16_delegate(FUNC(mach64_device::ibm8514_multifunc_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_multifunc_w),m_vga)); + m_isa->install16_device(0xe2e8, 0xe2eb, read16_delegate(FUNC(mach64_device::ibm8514_pixel_xfer_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_pixel_xfer_w),m_vga)); + m_isa->install16_device(0xdaec, 0xdaef, read16_delegate(FUNC(mach64_device::mach8_sourcex_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ext_leftscissor_w),m_vga)); + m_isa->install16_device(0xdeec, 0xdeef, read16_delegate(FUNC(mach64_device::mach8_sourcey_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ext_topscissor_w),m_vga)); + m_isa->install16_device(0xfaec, 0xfaef, read16_delegate(FUNC(mach64_device::mach32_chipid_r),m_vga), write16_delegate()); + m_isa->install16_device(0xfeec, 0xfeef, read16_delegate(FUNC(mach64_device::mach8_linedraw_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_linedraw_w),m_vga)); + + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(mach64_device::mem_r),m_vga), write8_delegate(FUNC(mach64_device::mem_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/wdxt_gen.cpp b/src/devices/bus/isa/wdxt_gen.cpp index abd262cd918..dd2e28202ce 100644 --- a/src/devices/bus/isa/wdxt_gen.cpp +++ b/src/devices/bus/isa/wdxt_gen.cpp @@ -206,8 +206,8 @@ wdxt_gen_device::wdxt_gen_device(const machine_config &mconfig, const char *tag, void wdxt_gen_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc8000, 0xc9fff, 0, 0, "hdc", "hdc"); - m_isa->install_device(0x0320, 0x0323, 0, 0, READ8_DEVICE_DELEGATE(m_host, wd11c00_17_device, io_r), WRITE8_DEVICE_DELEGATE(m_host, wd11c00_17_device, io_w)); + m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc", "hdc"); + m_isa->install_device(0x0320, 0x0323, READ8_DEVICE_DELEGATE(m_host, wd11c00_17_device, io_r), WRITE8_DEVICE_DELEGATE(m_host, wd11c00_17_device, io_w)); m_isa->set_dma_channel(3, this, FALSE); } diff --git a/src/devices/bus/isa/xtide.cpp b/src/devices/bus/isa/xtide.cpp index fcd0750e5a3..ef5fd332f47 100644 --- a/src/devices/bus/isa/xtide.cpp +++ b/src/devices/bus/isa/xtide.cpp @@ -326,8 +326,8 @@ void xtide_device::device_reset() int io_address = ((ioport("IO_ADDRESS")->read() & 0x0F) * 0x20) + 0x200; m_irq_number = (ioport("IRQ")->read() & 0x07); - m_isa->install_memory(base_address, base_address + 0x1fff, 0, 0, read8_delegate(FUNC(eeprom_parallel_28xx_device::read), &(*m_eeprom)), write8_delegate(FUNC(eeprom_parallel_28xx_device::write), &(*m_eeprom))); - m_isa->install_device(io_address, io_address + 0xf, 0, 0, read8_delegate(FUNC(xtide_device::read), this), write8_delegate(FUNC(xtide_device::write), this)); + m_isa->install_memory(base_address, base_address + 0x1fff, read8_delegate(FUNC(eeprom_parallel_28xx_device::read), &(*m_eeprom)), write8_delegate(FUNC(eeprom_parallel_28xx_device::write), &(*m_eeprom))); + m_isa->install_device(io_address, io_address + 0xf, read8_delegate(FUNC(xtide_device::read), this), write8_delegate(FUNC(xtide_device::write), this)); //logerror("xtide_device::device_reset(), bios_base=0x%5X to 0x%5X, I/O=0x%3X, IRQ=%d\n",base_address,base_address + (16*1024) -1 ,io_address,irq); } diff --git a/src/devices/bus/macpds/macpds.cpp b/src/devices/bus/macpds/macpds.cpp index bc626ac1831..956a0bb95ed 100644 --- a/src/devices/bus/macpds/macpds.cpp +++ b/src/devices/bus/macpds/macpds.cpp @@ -120,12 +120,12 @@ void macpds_device::install_device(offs_t start, offs_t end, read16_delegate rha m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, mask); } -void macpds_device::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void macpds_device::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { -// printf("install_bank: %s @ %x->%x mask %x mirror %x\n", tag, start, end, mask, mirror); +// printf("install_bank: %s @ %x->%x\n", tag, start, end); m_maincpu = machine().device<cpu_device>(m_cputag); address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_readwrite_bank(start, end, mask, mirror, tag ); + space.install_readwrite_bank(start, end, 0, tag ); machine().root_device().membank(siblingtag(tag).c_str())->set_base(data); } @@ -176,7 +176,7 @@ void device_macpds_card_interface::set_macpds_device() m_macpds->add_macpds_card(this); } -void device_macpds_card_interface::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void device_macpds_card_interface::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { char bank[256]; @@ -185,7 +185,7 @@ void device_macpds_card_interface::install_bank(offs_t start, offs_t end, offs_t strcat(bank, "_"); strcat(bank, m_macpds_slottag); - m_macpds->install_bank(start, end, mask, mirror, bank, data); + m_macpds->install_bank(start, end, bank, data); } void device_macpds_card_interface::install_rom(device_t *dev, const char *romregion, UINT32 addr) @@ -195,5 +195,5 @@ void device_macpds_card_interface::install_rom(device_t *dev, const char *romreg char bankname[128]; sprintf(bankname, "rom_%x", addr); - m_macpds->install_bank(addr, addr+romlen-1, 0, 0, bankname, rom); + m_macpds->install_bank(addr, addr+romlen-1, bankname, rom); } diff --git a/src/devices/bus/macpds/macpds.h b/src/devices/bus/macpds/macpds.h index db572d553f2..511355f6e42 100644 --- a/src/devices/bus/macpds/macpds.h +++ b/src/devices/bus/macpds/macpds.h @@ -83,7 +83,7 @@ public: void add_macpds_card(device_macpds_card_interface *card); void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, UINT32 mask=0xffffffff); void install_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, UINT32 mask=0xffffffff); - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); void set_irq_line(int line, int state); protected: @@ -118,7 +118,7 @@ public: void set_macpds_device(); // helper functions for card devices - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); void install_rom(device_t *dev, const char *romregion, UINT32 addr); // inline configuration diff --git a/src/devices/bus/macpds/pds_tpdfpd.cpp b/src/devices/bus/macpds/pds_tpdfpd.cpp index f89a210888f..a28577bfc99 100644 --- a/src/devices/bus/macpds/pds_tpdfpd.cpp +++ b/src/devices/bus/macpds/pds_tpdfpd.cpp @@ -118,7 +118,7 @@ void macpds_sedisplay_device::device_start() m_vram = std::make_unique<UINT8[]>(VRAM_SIZE); static const char bankname[] = { "radpds_ram" }; - m_macpds->install_bank(0xc40000, 0xc40000+VRAM_SIZE-1, 0, 0, bankname, m_vram.get()); + m_macpds->install_bank(0xc40000, 0xc40000+VRAM_SIZE-1, bankname, m_vram.get()); m_macpds->install_device(0x770000, 0x77000f, read16_delegate(FUNC(macpds_sedisplay_device::ramdac_r), this), write16_delegate(FUNC(macpds_sedisplay_device::ramdac_w), this)); m_macpds->install_device(0xc10000, 0xc2ffff, read16_delegate(FUNC(macpds_sedisplay_device::sedisplay_r), this), write16_delegate(FUNC(macpds_sedisplay_device::sedisplay_w), this)); diff --git a/src/devices/bus/nubus/nubus.cpp b/src/devices/bus/nubus/nubus.cpp index 50206fe1422..cf73062f82b 100644 --- a/src/devices/bus/nubus/nubus.cpp +++ b/src/devices/bus/nubus/nubus.cpp @@ -212,12 +212,12 @@ void nubus_device::install_writeonly_device(offs_t start, offs_t end, write32_de } } -void nubus_device::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void nubus_device::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { -// printf("install_bank: %s @ %x->%x mask %x mirror %x\n", tag, start, end, mask, mirror); +// printf("install_bank: %s @ %x->%x\n", tag, start, end); m_maincpu = machine().device<cpu_device>(m_cputag); address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_readwrite_bank(start, end, mask, mirror, tag ); + space.install_readwrite_bank(start, end, 0, tag ); machine().root_device().membank(siblingtag(tag).c_str())->set_base(data); } @@ -312,7 +312,7 @@ void device_nubus_card_interface::set_nubus_device() m_nubus->add_nubus_card(this); } -void device_nubus_card_interface::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void device_nubus_card_interface::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { char bank[256]; @@ -321,7 +321,7 @@ void device_nubus_card_interface::install_bank(offs_t start, offs_t end, offs_t strcat(bank, "_"); strcat(bank, m_nubus_slottag); - m_nubus->install_bank(start, end, mask, mirror, bank, data); + m_nubus->install_bank(start, end, bank, data); } void device_nubus_card_interface::install_declaration_rom(device_t *dev, const char *romregion, bool mirror_all_mb, bool reverse_rom) @@ -467,10 +467,14 @@ void device_nubus_card_interface::install_declaration_rom(device_t *dev, const c // printf("Installing ROM at %x, length %x\n", addr, romlen); if (mirror_all_mb) // mirror the declaration ROM across all 16 megs of the slot space { - m_nubus->install_bank(addr, addr+romlen-1, 0, 0x00f00000, bankname, &m_declaration_rom[0]); + UINT32 off = 0; + while(off < 0x1000000) { + m_nubus->install_bank(addr + off, addr+off+romlen-1, bankname, &m_declaration_rom[0]); + off += romlen; + } } else { - m_nubus->install_bank(addr, addr+romlen-1, 0, 0, bankname, &m_declaration_rom[0]); + m_nubus->install_bank(addr, addr+romlen-1, bankname, &m_declaration_rom[0]); } } diff --git a/src/devices/bus/nubus/nubus.h b/src/devices/bus/nubus/nubus.h index 4bb736f1eb7..b7f5bed0646 100644 --- a/src/devices/bus/nubus/nubus.h +++ b/src/devices/bus/nubus/nubus.h @@ -106,7 +106,7 @@ public: void install_device(offs_t start, offs_t end, read32_delegate rhandler, write32_delegate whandler, UINT32 mask=0xffffffff); void install_readonly_device(offs_t start, offs_t end, read32_delegate rhandler, UINT32 mask=0xffffffff); void install_writeonly_device(offs_t start, offs_t end, write32_delegate whandler, UINT32 mask=0xffffffff); - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); void set_irq_line(int slot, int state); DECLARE_WRITE_LINE_MEMBER( irq9_w ); @@ -156,7 +156,7 @@ public: // helper functions for card devices void install_declaration_rom(device_t *dev, const char *romregion, bool mirror_all_mb = false, bool reverse_rom = false); - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); UINT32 get_slotspace() { return 0xf0000000 | (m_slot<<24); } UINT32 get_super_slotspace() { return m_slot<<28; } diff --git a/src/devices/bus/nubus/nubus_48gc.cpp b/src/devices/bus/nubus/nubus_48gc.cpp index 2021def0a5d..74110534d93 100644 --- a/src/devices/bus/nubus/nubus_48gc.cpp +++ b/src/devices/bus/nubus/nubus_48gc.cpp @@ -114,7 +114,7 @@ void jmfb_device::device_start() // printf("[JMFB %p] slotspace = %x\n", this, slotspace); m_vram.resize(VRAM_SIZE); - install_bank(slotspace, slotspace+VRAM_SIZE-1, 0, 0, "bank_48gc", &m_vram[0]); + install_bank(slotspace, slotspace+VRAM_SIZE-1, "bank_48gc", &m_vram[0]); m_nubus->install_device(slotspace+0x200000, slotspace+0x2003ff, read32_delegate(FUNC(jmfb_device::mac_48gc_r), this), write32_delegate(FUNC(jmfb_device::mac_48gc_w), this)); diff --git a/src/devices/bus/nubus/nubus_cb264.cpp b/src/devices/bus/nubus/nubus_cb264.cpp index 29889da8a46..bdc7cba85c7 100644 --- a/src/devices/bus/nubus/nubus_cb264.cpp +++ b/src/devices/bus/nubus/nubus_cb264.cpp @@ -98,7 +98,7 @@ void nubus_cb264_device::device_start() // printf("[cb264 %p] slotspace = %x\n", this, slotspace); m_vram.resize(VRAM_SIZE); - install_bank(slotspace, slotspace+VRAM_SIZE-1, 0, 0, "bank_cb264", &m_vram[0]); + install_bank(slotspace, slotspace+VRAM_SIZE-1, "bank_cb264", &m_vram[0]); m_nubus->install_device(slotspace+0xff6000, slotspace+0xff60ff, read32_delegate(FUNC(nubus_cb264_device::cb264_r), this), write32_delegate(FUNC(nubus_cb264_device::cb264_w), this)); m_nubus->install_device(slotspace+0xff7000, slotspace+0xff70ff, read32_delegate(FUNC(nubus_cb264_device::cb264_ramdac_r), this), write32_delegate(FUNC(nubus_cb264_device::cb264_ramdac_w), this)); diff --git a/src/devices/bus/nubus/nubus_vikbw.cpp b/src/devices/bus/nubus/nubus_vikbw.cpp index 532e9b66145..63b81446251 100644 --- a/src/devices/bus/nubus/nubus_vikbw.cpp +++ b/src/devices/bus/nubus/nubus_vikbw.cpp @@ -94,8 +94,8 @@ void nubus_vikbw_device::device_start() // printf("[vikbw %p] slotspace = %x\n", this, slotspace); m_vram.resize(VRAM_SIZE); - install_bank(slotspace+0x40000, slotspace+0x40000+VRAM_SIZE-1, 0, 0, "bank_vikbw", &m_vram[0]); - install_bank(slotspace+0x940000, slotspace+0x940000+VRAM_SIZE-1, 0, 0, "bank_vikbw2", &m_vram[0]); + install_bank(slotspace+0x40000, slotspace+0x40000+VRAM_SIZE-1, "bank_vikbw", &m_vram[0]); + install_bank(slotspace+0x940000, slotspace+0x940000+VRAM_SIZE-1, "bank_vikbw2", &m_vram[0]); m_nubus->install_device(slotspace, slotspace+3, read32_delegate(FUNC(nubus_vikbw_device::viking_enable_r), this), write32_delegate(FUNC(nubus_vikbw_device::viking_disable_w), this)); m_nubus->install_device(slotspace+0x80000, slotspace+0x80000+3, read32_delegate(FUNC(nubus_vikbw_device::viking_ack_r), this), write32_delegate(FUNC(nubus_vikbw_device::viking_ack_w), this)); diff --git a/src/devices/bus/pofo/exp.cpp b/src/devices/bus/pofo/exp.cpp new file mode 100644 index 00000000000..98b411990bf --- /dev/null +++ b/src/devices/bus/pofo/exp.cpp @@ -0,0 +1,103 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio Expansion Port emulation + +**********************************************************************/ + +#include "exp.h" + + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +const device_type PORTFOLIO_EXPANSION_SLOT = &device_creator<portfolio_expansion_slot_t>; + + + +//************************************************************************** +// CARD INTERFACE +//************************************************************************** + +//------------------------------------------------- +// device_portfolio_expansion_slot_interface - constructor +//------------------------------------------------- + +device_portfolio_expansion_slot_interface::device_portfolio_expansion_slot_interface(const machine_config &mconfig, device_t &device) : + device_slot_card_interface(mconfig,device) +{ + m_slot = dynamic_cast<portfolio_expansion_slot_t *>(device.owner()); +} + +WRITE_LINE_MEMBER( device_portfolio_expansion_slot_interface::iint_w ) { m_slot->iint_w(state); } +WRITE_LINE_MEMBER( device_portfolio_expansion_slot_interface::eint_w ) { m_slot->eint_w(state); } +WRITE_LINE_MEMBER( device_portfolio_expansion_slot_interface::nmio_w ) { m_slot->nmio_w(state); } +WRITE_LINE_MEMBER( device_portfolio_expansion_slot_interface::wake_w ) { m_slot->wake_w(state); } + + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// portfolio_expansion_slot_t - constructor +//------------------------------------------------- + +portfolio_expansion_slot_t::portfolio_expansion_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, PORTFOLIO_EXPANSION_SLOT, "Atari Portfolio expansion port", tag, owner, clock, "portfolio_expansion_slot", __FILE__), + device_slot_interface(mconfig, *this), + m_write_iint(*this), + m_write_eint(*this), + m_write_nmio(*this), + m_write_wake(*this), + m_card(nullptr) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void portfolio_expansion_slot_t::device_start() +{ + m_card = dynamic_cast<device_portfolio_expansion_slot_interface *>(get_card_device()); + + // resolve callbacks + m_write_iint.resolve_safe(); + m_write_eint.resolve_safe(); + m_write_nmio.resolve_safe(); + m_write_wake.resolve_safe(); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void portfolio_expansion_slot_t::device_reset() +{ + if (m_card != nullptr) + { + m_card->device().reset(); + } +} + + + +//------------------------------------------------- +// SLOT_INTERFACE( portfolio_expansion_cards ) +//------------------------------------------------- + +// slot devices +#include "hpc101.h" +#include "hpc102.h" + +SLOT_INTERFACE_START( portfolio_expansion_cards ) + SLOT_INTERFACE("lpt", HPC101) + SLOT_INTERFACE("uart", HPC102) +SLOT_INTERFACE_END diff --git a/src/devices/bus/pofo/exp.h b/src/devices/bus/pofo/exp.h new file mode 100644 index 00000000000..3b1e936dca5 --- /dev/null +++ b/src/devices/bus/pofo/exp.h @@ -0,0 +1,170 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio Expansion Port emulation + +********************************************************************** + + ABUF 1 2 5VS + REDY 3 4 VCC + BCOM 5 6 NCC1 + NMD1 7 8 WAKE + DTR 9 10 DEN + PDET 11 12 IINT + CCLK 13 14 MRST + HLDA 15 16 HLDO + IACK 17 18 CDET + IOM 19 20 A19 + A18 21 22 A17 + A16 23 24 A15 + A14 25 26 A13 + A12 27 28 A11 + A10 29 30 A9 + A8 31 32 VRAM + HLDI 33 34 ALE + GND 35 36 NMIO + OA7 37 38 OA6 + OA5 39 40 OA4 + OA3 41 42 OA2 + OA1 43 44 OA0 + AD0 45 46 AD1 + AD2 47 48 AD3 + AD4 49 50 AD5 + AD6 51 52 AD7 + EINT 53 54 NRDI + VEXT 55 56 EACK + BATD 57 58 NWRI + 5VS 59 60 BBUF + +**********************************************************************/ + +#pragma once + +#ifndef __PORTFOLIO_EXPANSION_SLOT__ +#define __PORTFOLIO_EXPANSION_SLOT__ + +#include "emu.h" + + + +//************************************************************************** +// CONSTANTS +//************************************************************************** + +#define PORTFOLIO_EXPANSION_SLOT_TAG "exp" + + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_PORTFOLIO_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \ + MCFG_DEVICE_ADD(_tag, PORTFOLIO_EXPANSION_SLOT, _clock) \ + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) + +#define MCFG_PORTFOLIO_EXPANSION_SLOT_IINT_CALLBACK(_write) \ + devcb = &portfolio_expansion_slot_t::set_iint_wr_callback(*device, DEVCB_##_write); + +#define MCFG_PORTFOLIO_EXPANSION_SLOT_EINT_CALLBACK(_write) \ + devcb = &portfolio_expansion_slot_t::set_eint_wr_callback(*device, DEVCB_##_write); + +#define MCFG_PORTFOLIO_EXPANSION_SLOT_NMIO_CALLBACK(_write) \ + devcb = &portfolio_expansion_slot_t::set_nmio_wr_callback(*device, DEVCB_##_write); + +#define MCFG_PORTFOLIO_EXPANSION_SLOT_WAKE_CALLBACK(_write) \ + devcb = &portfolio_expansion_slot_t::set_wake_wr_callback(*device, DEVCB_##_write); + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> device_portfolio_expansion_slot_interface + +class portfolio_expansion_slot_t; + +class device_portfolio_expansion_slot_interface : public device_slot_card_interface +{ +public: + // construction/destruction + device_portfolio_expansion_slot_interface(const machine_config &mconfig, device_t &device); + virtual ~device_portfolio_expansion_slot_interface() { } + + virtual bool nmd1() { return 1; } + virtual bool pdet() { return 0; } + virtual bool cdet() { return 1; } + + virtual UINT8 iack_r() { return 0xff; } + virtual UINT8 eack_r() { return 0xff; } + + virtual UINT8 nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) { return data; }; + virtual void nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) { }; + + DECLARE_WRITE_LINE_MEMBER( iint_w ); + DECLARE_WRITE_LINE_MEMBER( eint_w ); + DECLARE_WRITE_LINE_MEMBER( nmio_w ); + DECLARE_WRITE_LINE_MEMBER( wake_w ); + +protected: + portfolio_expansion_slot_t *m_slot; +}; + + +// ======================> portfolio_expansion_slot_t + +class portfolio_expansion_slot_t : public device_t, + public device_slot_interface +{ +public: + // construction/destruction + portfolio_expansion_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + virtual ~portfolio_expansion_slot_t() { } + + template<class _Object> static devcb_base &set_iint_wr_callback(device_t &device, _Object object) { return downcast<portfolio_expansion_slot_t &>(device).m_write_iint.set_callback(object); } + template<class _Object> static devcb_base &set_eint_wr_callback(device_t &device, _Object object) { return downcast<portfolio_expansion_slot_t &>(device).m_write_eint.set_callback(object); } + template<class _Object> static devcb_base &set_nmio_wr_callback(device_t &device, _Object object) { return downcast<portfolio_expansion_slot_t &>(device).m_write_nmio.set_callback(object); } + template<class _Object> static devcb_base &set_wake_wr_callback(device_t &device, _Object object) { return downcast<portfolio_expansion_slot_t &>(device).m_write_wake.set_callback(object); } + + // computer interface + bool nmd1_r() { return (m_card != nullptr) ? m_card->nmd1() : 1; } + bool pdet_r() { return (m_card != nullptr) ? m_card->pdet() : 0; } + bool cdet_r() { return (m_card != nullptr) ? m_card->cdet() : 1; } + + UINT8 iack_r() { return (m_card != nullptr) ? m_card->iack_r() : 0xff; }; + UINT8 eack_r() { return (m_card != nullptr) ? m_card->eack_r() : 0xff; }; + + UINT8 nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) { return (m_card != nullptr) ? m_card->nrdi_r(space, offset, data, iom, bcom, ncc1) : data; } + void nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) { if (m_card != nullptr) m_card->nwri_w(space, offset, data, iom, bcom, ncc1); } + + // peripheral interface + WRITE_LINE_MEMBER( iint_w ) { m_write_iint(state); } + WRITE_LINE_MEMBER( eint_w ) { m_write_eint(state); } + WRITE_LINE_MEMBER( nmio_w ) { m_write_nmio(state); } + WRITE_LINE_MEMBER( wake_w ) { m_write_wake(state); } + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + devcb_write_line m_write_iint; + devcb_write_line m_write_eint; + devcb_write_line m_write_nmio; + devcb_write_line m_write_wake; + + device_portfolio_expansion_slot_interface *m_card; +}; + + +// device type definition +extern const device_type PORTFOLIO_EXPANSION_SLOT; + + +SLOT_INTERFACE_EXTERN( portfolio_expansion_cards ); + + + +#endif diff --git a/src/devices/bus/pofo/hpc101.cpp b/src/devices/bus/pofo/hpc101.cpp new file mode 100644 index 00000000000..b3286d2b0ef --- /dev/null +++ b/src/devices/bus/pofo/hpc101.cpp @@ -0,0 +1,141 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio HPC-101 parallel interface emulation + +**********************************************************************/ + +#include "hpc101.h" + + + +//************************************************************************** +// MACROS / CONSTANTS +//************************************************************************** + +#define LOG 0 + +#define M82C55A_TAG "u1" +#define CENTRONICS_TAG "centronics" + + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type HPC101 = &device_creator<hpc101_t>; + + +//------------------------------------------------- +// MACHINE_CONFIG_FRAGMENT( hpc101 ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( hpc101 ) + MCFG_DEVICE_ADD(M82C55A_TAG, I8255A, 0) + MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write)) + MCFG_I8255_OUT_PORTB_CB(DEVWRITE8("cent_ctrl_out", output_latch_device, write)) + MCFG_I8255_IN_PORTC_CB(DEVREAD8("cent_status_in", input_buffer_device, read)) + + MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer") + MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit5)) + MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit4)) + MCFG_CENTRONICS_FAULT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit3)) + MCFG_CENTRONICS_SELECT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit1)) + MCFG_CENTRONICS_PERROR_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit0)) + + MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG) + MCFG_DEVICE_ADD("cent_status_in", INPUT_BUFFER, 0) + + MCFG_DEVICE_ADD("cent_ctrl_out", OUTPUT_LATCH, 0) + MCFG_OUTPUT_LATCH_BIT0_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_strobe)) + MCFG_OUTPUT_LATCH_BIT1_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_autofd)) + MCFG_OUTPUT_LATCH_BIT2_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_init)) + MCFG_OUTPUT_LATCH_BIT3_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_select_in)) +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor hpc101_t::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( hpc101 ); +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// hpc101_t - constructor +//------------------------------------------------- + +hpc101_t::hpc101_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, HPC101, "Atari Portfolio HPC-101", tag, owner, clock, "hpc101", __FILE__), + device_portfolio_expansion_slot_interface(mconfig, *this), + m_ppi(*this, M82C55A_TAG) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void hpc101_t::device_start() +{ +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void hpc101_t::device_reset() +{ + m_ppi->reset(); +} + + +//------------------------------------------------- +// nrdi_r - read +//------------------------------------------------- + +UINT8 hpc101_t::nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) +{ + if (!bcom) + { + if ((offset & 0x0f) == 0x0f) + { + data = 0x02; + } + + if ((offset & 0x0c) == 0x08) + { + data = m_ppi->read(space, offset & 0x03); + } + } + + return data; +} + + +//------------------------------------------------- +// nwri_w - write +//------------------------------------------------- + +void hpc101_t::nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) +{ + if (!bcom) + { + if ((offset & 0x0c) == 0x08) + { + m_ppi->write(space, offset & 0x03, data); + } + } +} diff --git a/src/devices/bus/pofo/hpc101.h b/src/devices/bus/pofo/hpc101.h new file mode 100644 index 00000000000..36b4129049b --- /dev/null +++ b/src/devices/bus/pofo/hpc101.h @@ -0,0 +1,58 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio HPC-101 parallel interface emulation + +**********************************************************************/ + +#pragma once + +#ifndef __HPC101__ +#define __HPC101__ + +#include "emu.h" +#include "exp.h" +#include "bus/centronics/ctronics.h" +#include "machine/i8255.h" + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> hpc101_t + +class hpc101_t : public device_t, + public device_portfolio_expansion_slot_interface +{ +public: + // construction/destruction + hpc101_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // optional information overrides + virtual machine_config_constructor device_mconfig_additions() const override; + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // device_portfolio_expansion_slot_interface overrides + bool pdet() override { return 1; } + + virtual UINT8 nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) override; + virtual void nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) override; + +private: + required_device<i8255_device> m_ppi; +}; + + +// device type definition +extern const device_type HPC101; + + + +#endif diff --git a/src/devices/bus/pofo/hpc102.cpp b/src/devices/bus/pofo/hpc102.cpp new file mode 100644 index 00000000000..4ad13bd2308 --- /dev/null +++ b/src/devices/bus/pofo/hpc102.cpp @@ -0,0 +1,148 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio HPC-102 serial interface emulation + +**********************************************************************/ + +#include "hpc102.h" + + + +//************************************************************************** +// MACROS / CONSTANTS +//************************************************************************** + +#define LOG 0 + +#define M82C50A_TAG "u1" +#define RS232_TAG "rs232" + + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type HPC102 = &device_creator<hpc102_t>; + + +//------------------------------------------------- +// MACHINE_CONFIG_FRAGMENT( hpc102 ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( hpc102 ) + MCFG_DEVICE_ADD(M82C50A_TAG, INS8250, XTAL_1_8432MHz) // should be INS8250A + MCFG_INS8250_OUT_TX_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd)) + MCFG_INS8250_OUT_DTR_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_dtr)) + MCFG_INS8250_OUT_RTS_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_rts)) + MCFG_INS8250_OUT_INT_CB(WRITELINE(device_portfolio_expansion_slot_interface, eint_w)) + + MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, rx_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, dcd_w)) + MCFG_RS232_DSR_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, dsr_w)) + MCFG_RS232_RI_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, ri_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, cts_w)) +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor hpc102_t::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( hpc102 ); +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// hpc102_t - constructor +//------------------------------------------------- + +hpc102_t::hpc102_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, HPC102, "Atari Portfolio HPC-102", tag, owner, clock, "hpc102", __FILE__), + device_portfolio_expansion_slot_interface(mconfig, *this), + m_uart(*this, M82C50A_TAG) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void hpc102_t::device_start() +{ +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void hpc102_t::device_reset() +{ + m_uart->reset(); +} + + +//------------------------------------------------- +// eack_r - external interrupt acknowledge +//------------------------------------------------- + +UINT8 hpc102_t::eack_r() +{ + return m_vector; +} + + +//------------------------------------------------- +// nrdi_r - read +//------------------------------------------------- + +UINT8 hpc102_t::nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) +{ + if (!bcom) + { + if ((offset & 0x0f) == 0x0f) + { + data = 0x01; + } + + if (!(offset & 0x08)) + { + data = m_uart->ins8250_r(space, offset & 0x07); + } + } + + return data; +} + + +//------------------------------------------------- +// nwri_w - write +//------------------------------------------------- + +void hpc102_t::nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) +{ + if (!bcom) + { + if ((offset & 0x0f) == 0x0f) + { + m_vector = data; + } + + if (!(offset & 0x08)) + { + m_uart->ins8250_w(space, offset & 0x07, data); + } + } +} diff --git a/src/devices/bus/pofo/hpc102.h b/src/devices/bus/pofo/hpc102.h new file mode 100644 index 00000000000..c1fb91305af --- /dev/null +++ b/src/devices/bus/pofo/hpc102.h @@ -0,0 +1,66 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio HPC-102 serial interface emulation + +**********************************************************************/ + +#pragma once + +#ifndef __HPC102__ +#define __HPC102__ + +#include "emu.h" +#include "exp.h" +#include "bus/rs232/rs232.h" +#include "machine/ins8250.h" + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> hpc102_t + +class hpc102_t : public device_t, + public device_portfolio_expansion_slot_interface +{ +public: + // construction/destruction + hpc102_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // optional information overrides + virtual machine_config_constructor device_mconfig_additions() const override; + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // device_portfolio_expansion_slot_interface overrides + bool pdet() override { return 1; } + + virtual UINT8 eack_r() override; + + virtual UINT8 nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) override; + virtual void nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) override; + +private: + required_device<ins8250_device> m_uart; + + UINT8 m_vector; +}; + + +// device type definition +extern const device_type HPC102; + + + +#endif +/* + + +*/
\ No newline at end of file diff --git a/src/devices/bus/spc1000/fdd.cpp b/src/devices/bus/spc1000/fdd.cpp index 504a13ec0be..e04308ee0e4 100644 --- a/src/devices/bus/spc1000/fdd.cpp +++ b/src/devices/bus/spc1000/fdd.cpp @@ -166,7 +166,7 @@ void spc1000_fdd_exp_device::device_reset() m_cpu->set_input_line_vector(0, 0); // enable rom (is this really needed? it does not seem necessary for FDD to work) - m_cpu->space(AS_PROGRAM).install_rom(0x0000, 0x0fff, 0, 0x2000, device().machine().root_device().memregion("fdccpu")->base()); + m_cpu->space(AS_PROGRAM).install_rom(0x0000, 0x0fff, 0x2000, device().machine().root_device().memregion("fdccpu")->base()); } void spc1000_fdd_exp_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) diff --git a/src/devices/bus/ti99x/gromport.cpp b/src/devices/bus/ti99x/gromport.cpp index 32456359a40..4e9df13cdea 100644 --- a/src/devices/bus/ti99x/gromport.cpp +++ b/src/devices/bus/ti99x/gromport.cpp @@ -2446,7 +2446,7 @@ rpk::rpk(emu_options& options, const char* sysname) :m_options(options), m_type(0) //,m_system_name(sysname) { - m_sockets.reset(); + m_sockets.clear(); } rpk::~rpk() @@ -2459,9 +2459,9 @@ rpk::~rpk() */ UINT8* rpk::get_contents_of_socket(const char *socket_name) { - rpk_socket *socket = m_sockets.find(socket_name); - if (socket==nullptr) return nullptr; - return socket->get_contents(); + auto socket = m_sockets.find(socket_name); + if (socket == m_sockets.end()) return nullptr; + return socket->second->get_contents(); } /* @@ -2469,14 +2469,14 @@ UINT8* rpk::get_contents_of_socket(const char *socket_name) */ int rpk::get_resource_length(const char *socket_name) { - rpk_socket *socket = m_sockets.find(socket_name); - if (socket==nullptr) return 0; - return socket->get_content_length(); + auto socket = m_sockets.find(socket_name); + if (socket == m_sockets.end()) return 0; + return socket->second->get_content_length(); } -void rpk::add_socket(const char* id, rpk_socket *newsock) +void rpk::add_socket(const char* id, std::unique_ptr<rpk_socket> newsock) { - m_sockets.append(id, *newsock); + m_sockets.emplace(id, std::move(newsock)); } /*------------------------------------------------- @@ -2487,22 +2487,20 @@ void rpk::add_socket(const char* id, rpk_socket *newsock) void rpk::close() { // Save the NVRAM contents - rpk_socket *socket = m_sockets.first(); - while (socket != nullptr) + for(auto &socket : m_sockets) { - if (socket->persistent_ram()) + if (socket.second->persistent_ram()) { // try to open the battery file and write it if possible - assert_always(socket->get_contents() && (socket->get_content_length() > 0), "Buffer is null or length is 0"); + assert_always(socket.second->get_contents() && (socket.second->get_content_length() > 0), "Buffer is null or length is 0"); emu_file file(m_options.nvram_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); - osd_file::error filerr = file.open(socket->get_pathname()); + osd_file::error filerr = file.open(socket.second->get_pathname()); if (filerr == osd_file::error::NONE) - file.write(socket->get_contents(), socket->get_content_length()); + file.write(socket.second->get_contents(), socket.second->get_content_length()); } - socket->cleanup(); - socket = socket->m_next; + socket.second->cleanup(); } } @@ -2512,12 +2510,12 @@ void rpk::close() ***************************************************************/ rpk_socket::rpk_socket(const char* id, int length, UINT8* contents, const char *pathname) -: m_id(id), m_length(length), m_next(nullptr), m_contents(contents), m_pathname(pathname) +: m_id(id), m_length(length), m_contents(contents), m_pathname(pathname) { } rpk_socket::rpk_socket(const char* id, int length, UINT8* contents) -: m_id(id), m_length(length), m_next(nullptr), m_contents(contents), m_pathname(nullptr) +: m_id(id), m_length(length), m_contents(contents), m_pathname(nullptr) { } @@ -2554,7 +2552,7 @@ int rpk_reader::find_file(util::archive_file &zip, const char *filename, UINT32 /* Load a rom resource and put it in a pcb socket instance. */ -rpk_socket* rpk_reader::load_rom_resource(util::archive_file &zip, xml_data_node* rom_resource_node, const char* socketname) +std::unique_ptr<rpk_socket> rpk_reader::load_rom_resource(util::archive_file &zip, xml_data_node* rom_resource_node, const char* socketname) { const char* file; const char* crcstr; @@ -2613,13 +2611,13 @@ rpk_socket* rpk_reader::load_rom_resource(util::archive_file &zip, xml_data_node } // Create a socket instance - return new rpk_socket(socketname, length, contents); + return std::make_unique<rpk_socket>(socketname, length, contents); } /* Load a ram resource and put it in a pcb socket instance. */ -rpk_socket* rpk_reader::load_ram_resource(emu_options &options, xml_data_node* ram_resource_node, const char* socketname, const char* system_name) +std::unique_ptr<rpk_socket> rpk_reader::load_ram_resource(emu_options &options, xml_data_node* ram_resource_node, const char* socketname, const char* system_name) { const char* length_string; const char* ram_type; @@ -2697,7 +2695,7 @@ rpk_socket* rpk_reader::load_ram_resource(emu_options &options, xml_data_node* r } // Create a socket instance - return new rpk_socket(socketname, length, contents, ram_pname); + return std::make_unique<rpk_socket>(socketname, length, contents, ram_pname); } /*------------------------------------------------- @@ -2726,8 +2724,6 @@ rpk* rpk_reader::open(emu_options &options, const char *filename, const char *sy xml_data_node *socket_node; xml_data_node *pcb_node; - rpk_socket *newsock; - int i; auto newrpk = new rpk(options, system_name); @@ -2815,15 +2811,13 @@ rpk* rpk_reader::open(emu_options &options, const char *filename, const char *sy // found it if (strcmp(resource_node->name, "rom")==0) { - newsock = load_rom_resource(*zipfile, resource_node, id); - newrpk->add_socket(id, newsock); + newrpk->add_socket(id, load_rom_resource(*zipfile, resource_node, id)); } else { if (strcmp(resource_node->name, "ram")==0) { - newsock = load_ram_resource(options, resource_node, id, system_name); - newrpk->add_socket(id, newsock); + newrpk->add_socket(id, load_ram_resource(options, resource_node, id, system_name)); } else throw rpk_exception(RPK_INVALID_LAYOUT, "resource node must be <rom> or <ram>"); } diff --git a/src/devices/bus/ti99x/gromport.h b/src/devices/bus/ti99x/gromport.h index bebc7d9b05f..76983631e70 100644 --- a/src/devices/bus/ti99x/gromport.h +++ b/src/devices/bus/ti99x/gromport.h @@ -475,12 +475,12 @@ class rpk; class rpk_socket { - friend class simple_list<rpk_socket>; friend class rpk; public: rpk_socket(const char *id, int length, UINT8 *contents); rpk_socket(const char *id, int length, UINT8 *contents, const char *pathname); + ~rpk_socket() {} const char* id() { return m_id; } int get_content_length() { return m_length; } @@ -492,7 +492,6 @@ public: private: const char* m_id; UINT32 m_length; - rpk_socket* m_next; UINT8* m_contents; const char* m_pathname; }; @@ -507,8 +506,8 @@ public: private: int find_file(util::archive_file &zip, const char *filename, UINT32 crc); - rpk_socket* load_rom_resource(util::archive_file &zip, xml_data_node* rom_resource_node, const char* socketname); - rpk_socket* load_ram_resource(emu_options &options, xml_data_node* ram_resource_node, const char* socketname, const char* system_name); + std::unique_ptr<rpk_socket> load_rom_resource(util::archive_file &zip, xml_data_node* rom_resource_node, const char* socketname); + std::unique_ptr<rpk_socket> load_ram_resource(emu_options &options, xml_data_node* ram_resource_node, const char* socketname, const char* system_name); const pcb_type* m_types; }; @@ -528,9 +527,9 @@ private: emu_options& m_options; // need this to find the path to the nvram files int m_type; //const char* m_system_name; // need this to find the path to the nvram files - tagged_list<rpk_socket> m_sockets; + std::unordered_map<std::string,std::unique_ptr<rpk_socket>> m_sockets; - void add_socket(const char* id, rpk_socket *newsock); + void add_socket(const char* id, std::unique_ptr<rpk_socket> newsock); }; enum rpk_open_error diff --git a/src/devices/bus/vtech/memexp/rs232.cpp b/src/devices/bus/vtech/memexp/rs232.cpp index ead9ac0a904..188f473514b 100644 --- a/src/devices/bus/vtech/memexp/rs232.cpp +++ b/src/devices/bus/vtech/memexp/rs232.cpp @@ -76,7 +76,7 @@ void rs232_interface_device::device_start() void rs232_interface_device::device_reset() { // program - m_slot->m_program->install_rom(0x4000, 0x47ff, 0, 0x800, memregion("software")->base()); + m_slot->m_program->install_rom(0x4000, 0x47ff, 0x800, memregion("software")->base()); // data m_slot->m_program->install_read_handler(0x5000, 0x57ff, read8_delegate(FUNC(rs232_interface_device::receive_data_r), this)); diff --git a/src/devices/bus/vtech/memexp/rtty.cpp b/src/devices/bus/vtech/memexp/rtty.cpp index bf9930c3dcf..fa1438461f3 100644 --- a/src/devices/bus/vtech/memexp/rtty.cpp +++ b/src/devices/bus/vtech/memexp/rtty.cpp @@ -59,7 +59,7 @@ void rtty_interface_device::device_start() void rtty_interface_device::device_reset() { // program - m_slot->m_program->install_rom(0x4000, 0x4fff, 0, 0x1000, memregion("software")->base()); + m_slot->m_program->install_rom(0x4000, 0x4fff, 0x1000, memregion("software")->base()); // data m_slot->m_program->install_read_handler(0x5000, 0x57ff, read8_delegate(FUNC(rtty_interface_device::receive_data_r), this)); diff --git a/src/devices/bus/x68k/x68k_scsiext.cpp b/src/devices/bus/x68k/x68k_scsiext.cpp index fce3c4a89ca..960721458f0 100644 --- a/src/devices/bus/x68k/x68k_scsiext.cpp +++ b/src/devices/bus/x68k/x68k_scsiext.cpp @@ -69,11 +69,11 @@ void x68k_scsiext_device::device_start() UINT8* ROM; address_space& space = cpu->memory().space(AS_PROGRAM); m_slot = dynamic_cast<x68k_expansion_slot_device *>(owner()); - space.install_read_bank(0xea0020,0xea1fff,0,0,"scsi_ext"); - space.unmap_write(0xea0020,0xea1fff,0,0); + space.install_read_bank(0xea0020,0xea1fff,"scsi_ext"); + space.unmap_write(0xea0020,0xea1fff); ROM = machine().root_device().memregion(subtag("scsiexrom").c_str())->base(); machine().root_device().membank("scsi_ext")->set_base(ROM); - space.install_readwrite_handler(0xea0000,0xea001f,0,0,read8_delegate(FUNC(x68k_scsiext_device::register_r),this),write8_delegate(FUNC(x68k_scsiext_device::register_w),this),0x00ff00ff); + space.install_readwrite_handler(0xea0000,0xea001f,read8_delegate(FUNC(x68k_scsiext_device::register_r),this),write8_delegate(FUNC(x68k_scsiext_device::register_w),this),0x00ff00ff); } void x68k_scsiext_device::device_reset() diff --git a/src/devices/bus/z88/flash.cpp b/src/devices/bus/z88/flash.cpp index 0793f126c18..03b18d98f35 100644 --- a/src/devices/bus/z88/flash.cpp +++ b/src/devices/bus/z88/flash.cpp @@ -72,7 +72,7 @@ machine_config_constructor z88_1024k_flash_device::device_mconfig_additions() co UINT8* z88_1024k_flash_device::get_cart_base() { - return (UINT8*)m_flash->space().get_read_ptr(0); + return m_flash->base(); } /*------------------------------------------------- diff --git a/src/devices/cpu/8x300/8x300.cpp b/src/devices/cpu/8x300/8x300.cpp index 8b96485f47f..7096448f90f 100644 --- a/src/devices/cpu/8x300/8x300.cpp +++ b/src/devices/cpu/8x300/8x300.cpp @@ -9,9 +9,8 @@ * Written by Barry Rodewald */ -#include "emu.h" -#include "debugger.h" #include "8x300.h" +#include "debugger.h" #define FETCHOP(a) (m_direct->read_word(a)) #define CYCLES(x) do { m_icount -= (x); } while (0) diff --git a/src/devices/cpu/8x300/8x300.h b/src/devices/cpu/8x300/8x300.h index dd236372e5d..c2eff97499b 100644 --- a/src/devices/cpu/8x300/8x300.h +++ b/src/devices/cpu/8x300/8x300.h @@ -10,6 +10,8 @@ #ifndef _8X300_H_ #define _8X300_H_ +#include "emu.h" + // Register enumeration enum { diff --git a/src/devices/cpu/asap/asapdasm.cpp b/src/devices/cpu/asap/asapdasm.cpp index 676ba850228..fd204c68a94 100644 --- a/src/devices/cpu/asap/asapdasm.cpp +++ b/src/devices/cpu/asap/asapdasm.cpp @@ -90,7 +90,8 @@ CPU_DISASSEMBLE( asap ) else if (rsrc2_iszero) sprintf(buffer, "mov%s %s,%s", setcond[cond], reg[rsrc1], reg[rdst]); else - sprintf(buffer, "add%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; + sprintf(buffer, "add%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); + break; case 0x09: sprintf(buffer, "sub%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; case 0x0a: sprintf(buffer, "addc%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; case 0x0b: sprintf(buffer, "subc%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; @@ -103,7 +104,8 @@ CPU_DISASSEMBLE( asap ) else if (rsrc2_iszero) sprintf(buffer, "mov%s %s,%s", setcond[cond], reg[rsrc1], reg[rdst]); else - sprintf(buffer, "or%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; + sprintf(buffer, "or%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); + break; case 0x0f: sprintf(buffer, "orn%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; case 0x10: sprintf(buffer, "ld%s %s[%s],%s", setcond[cond], reg[rsrc1], src2(op,2), reg[rdst]); break; case 0x11: sprintf(buffer, "ldh%s %s[%s],%s", setcond[cond], reg[rsrc1], src2(op,1), reg[rdst]); break; @@ -137,7 +139,7 @@ CPU_DISASSEMBLE( asap ) } else sprintf(buffer, "jmp%s %s[%s]", setcond[cond], reg[rsrc1], src2(op,2)); - break; + break; case 0x1f: sprintf(buffer, "trap $1f"); flags = DASMFLAG_STEP_OVER; break; } return 4 | flags | DASMFLAG_SUPPORTED; diff --git a/src/devices/cpu/g65816/g65816.cpp b/src/devices/cpu/g65816/g65816.cpp index 0d538e93616..a98a822849d 100644 --- a/src/devices/cpu/g65816/g65816.cpp +++ b/src/devices/cpu/g65816/g65816.cpp @@ -1116,18 +1116,18 @@ READ8_MEMBER( _5a22_device::rdmpyh_r ) void _5a22_device::set_5a22_map() { - space(AS_PROGRAM).install_write_handler(0x4202, 0x4202, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::wrmpya_w),this)); - space(AS_PROGRAM).install_write_handler(0x4203, 0x4203, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::wrmpyb_w),this)); - space(AS_PROGRAM).install_write_handler(0x4204, 0x4204, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::wrdivl_w),this)); - space(AS_PROGRAM).install_write_handler(0x4205, 0x4205, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::wrdivh_w),this)); - space(AS_PROGRAM).install_write_handler(0x4206, 0x4206, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::wrdvdd_w),this)); - - space(AS_PROGRAM).install_write_handler(0x420d, 0x420d, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::memsel_w),this)); - - space(AS_PROGRAM).install_read_handler(0x4214, 0x4214, 0, 0xbf0000, read8_delegate(FUNC(_5a22_device::rddivl_r),this)); - space(AS_PROGRAM).install_read_handler(0x4215, 0x4215, 0, 0xbf0000, read8_delegate(FUNC(_5a22_device::rddivh_r),this)); - space(AS_PROGRAM).install_read_handler(0x4216, 0x4216, 0, 0xbf0000, read8_delegate(FUNC(_5a22_device::rdmpyl_r),this)); - space(AS_PROGRAM).install_read_handler(0x4217, 0x4217, 0, 0xbf0000, read8_delegate(FUNC(_5a22_device::rdmpyh_r),this)); + space(AS_PROGRAM).install_write_handler(0x4202, 0x4202, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::wrmpya_w),this)); + space(AS_PROGRAM).install_write_handler(0x4203, 0x4203, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::wrmpyb_w),this)); + space(AS_PROGRAM).install_write_handler(0x4204, 0x4204, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::wrdivl_w),this)); + space(AS_PROGRAM).install_write_handler(0x4205, 0x4205, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::wrdivh_w),this)); + space(AS_PROGRAM).install_write_handler(0x4206, 0x4206, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::wrdvdd_w),this)); + + space(AS_PROGRAM).install_write_handler(0x420d, 0x420d, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::memsel_w),this)); + + space(AS_PROGRAM).install_read_handler(0x4214, 0x4214, 0, 0xbf0000, 0, read8_delegate(FUNC(_5a22_device::rddivl_r),this)); + space(AS_PROGRAM).install_read_handler(0x4215, 0x4215, 0, 0xbf0000, 0, read8_delegate(FUNC(_5a22_device::rddivh_r),this)); + space(AS_PROGRAM).install_read_handler(0x4216, 0x4216, 0, 0xbf0000, 0, read8_delegate(FUNC(_5a22_device::rdmpyl_r),this)); + space(AS_PROGRAM).install_read_handler(0x4217, 0x4217, 0, 0xbf0000, 0, read8_delegate(FUNC(_5a22_device::rdmpyh_r),this)); } diff --git a/src/devices/cpu/h8/h8make.py b/src/devices/cpu/h8/h8make.py index 2115bc01cbe..e5aee1dbb96 100644 --- a/src/devices/cpu/h8/h8make.py +++ b/src/devices/cpu/h8/h8make.py @@ -57,7 +57,7 @@ def save_full_one(f, t, name, source): print(line, file=f) substate += 1 elif has_eat(line): - print("\tif(icount) icount = bcount; inst_substate = %d; return;" % substate, file=f) + print("\tif(icount) { icount = bcount; } inst_substate = %d; return;" % substate, file=f) substate += 1 else: print(line, file=f) @@ -77,7 +77,7 @@ def save_partial_one(f, t, name, source): print(line, file=f) substate += 1 elif has_eat(line): - print("\tif(icount) icount = bcount; inst_substate = %d; return;" % substate, file=f) + print("\tif(icount) { icount = bcount; } inst_substate = %d; return;" % substate, file=f) print("case %d:;" % substate, file=f) substate += 1 else: diff --git a/src/devices/cpu/mb86235/mb86235.cpp b/src/devices/cpu/mb86235/mb86235.cpp index ef42221548e..2cd268f83ad 100644 --- a/src/devices/cpu/mb86235/mb86235.cpp +++ b/src/devices/cpu/mb86235/mb86235.cpp @@ -103,7 +103,7 @@ void mb86235_cpu_device::execute_set_input(int irqline, int state) mb86235_cpu_device::mb86235_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : cpu_device(mconfig, MB86235, "MB86235", tag, owner, clock, "mb86235", __FILE__) - , m_program_config("program", ENDIANNESS_LITTLE, 32, 32, -2) + , m_program_config("program", ENDIANNESS_LITTLE, 64, 32, -3) { } diff --git a/src/devices/cpu/mb86235/mb86235d.cpp b/src/devices/cpu/mb86235/mb86235d.cpp index e77da1a0cad..34771cd346e 100644 --- a/src/devices/cpu/mb86235/mb86235d.cpp +++ b/src/devices/cpu/mb86235/mb86235d.cpp @@ -1,144 +1,839 @@ // license:BSD-3-Clause -// copyright-holders:Angelo Salese, ElSemi +// copyright-holders:Angelo Salese, ElSemi, Ville Linde #include "emu.h" #include "debugger.h" #include "mb86235.h" -static const char *const alu_opcode_string[] = -{ - "FADD", - "FADDZ", - "FSUB", - "FSUBZ", - - "FCMP", - "FABS", - "FABC", - "ALUNOP", - - "FEA", - "FES", - "FRCP", - "FRSQ", - - "FLOG", - "CIF", - "CFI", - "CFIB", - - "ADD", - "ADDZ", - "SUB", - "SUBZ", - - "CMP", - "ABS", - "ATR", - "ATRZ", - - "AND", - "OR", - "XOR", - "NOT", - - "LSR", - "LSL", - "ASR", - "ASL" +static const char *regname[128] = +{ + "MA0", "MA1", "MA2", "MA3", "MA4", "MA5", "MA6", "MA7", + "AA0", "AA1", "AA2", "AA3", "AA4", "AA5", "AA6", "AA7", + "EB", "EBU", "EBL", "EO", "SP", "ST", "MOD", "LRPC", + "AR0", "AR1", "AR2", "AR3", "AR4", "AR5", "AR6", "AR7", + "MB0", "MB1", "MB2", "MB3", "MB4", "MB5", "MB6", "MB7", + "AB0", "AB1", "AB2", "AB3", "AB4", "AB5", "AB6", "AB7", + "PR", "FI", "FO0", "FO1", "PDR", "DDR", "PRP", "PWP", + "???", "???", "???", "???", "???", "???", "???", "???" }; -static const char *const ctrl_opcode_string[] = -{ - "NOP", - "REP", - "SETL", - "CLRF", - "PUSH", - "POP", - "???", - "???", - "SETM", - "SETMCBSA", - "SETMCBSB", - "SETMRF", - "SETMRDY", - "SETMWAIT", - "???", - "???", - "DBcc", /* TODO */ - "DBNcc", /* TODO */ - "DJMP", - "DBLP", - "DBBC", - "DBBS", - "???", - "???", - "DCcc", /* TODO */ - "DCNcc", /* TODO */ - "DCALL", - "DRET", - "???", - "???", - "???", - "???" +static const char *db_mnemonic[64] = +{ + "DBMN", "DBMZ", "DBMV", "DBMU", "DBZD", "DBNR", "DBIL", "DBZC", + "DBAN", "DBAZ", "DBAV", "DBAU", "DBMD", "DBAD", "???", "???", + "DBF0", "DBF1", "DBF2", "???", "DBIFF", "DBIFE", "DBOFF", "DBOFE", + "DBIF", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???" }; -static unsigned dasm_mb86235(char *buffer, UINT32 opcode, UINT32 opcode2) +static const char *dbn_mnemonic[64] = +{ + "DBNMN", "DBNMZ", "DBNMV", "DBNMU", "DBNZD", "DBNNR", "DBNIL", "DBNZC", + "DBNAN", "DBNAZ", "DBNAV", "DBNAU", "DBNMD", "DBNAD", "???", "???", + "DBNF0", "DBNF1", "DBNF2", "???", "DBNIFF", "DBNIFE", "DBNOFF", "DBNOFE", + "DBNIF", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???" +}; + +static const char *dc_mnemonic[64] = +{ + "DCMN", "DCMZ", "DCMV", "DCMU", "DCZD", "DCNR", "DCIL", "DCZC", + "DCAN", "DCAZ", "DCAV", "DCAU", "DCMD", "DCAD", "???", "???", + "DCF0", "DCF1", "DCF2", "???", "DCIFF", "DCIFE", "DCOFF", "DCOFE", + "DCIF", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???" +}; + +static const char *dcn_mnemonic[64] = +{ + "DCNMN", "DCNMZ", "DCNMV", "DCNMU", "DCNZD", "DCNNR", "DCNIL", "DCNZC", + "DCNAN", "DCNAZ", "DCNAV", "DCNAU", "DCNMD", "DCNAD", "???", "???", + "DCNF0", "DCNF1", "DCNF2", "???", "DCNIFF", "DCNIFE", "DCNOFF", "DCNOFE", + "DCNIF", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???" +}; + +static const char *mi1_field[16] = +{ "MA0", "MA1", "MA2", "MA3", "MA4", "MA5", "MA6", "MA7", "MB0", "MB1", "MB2", "MB3", "MB4", "MB5", "MB6", "MB7" }; + +static const char *mi2_field[32] = +{ "MA0", "MA1", "MA2", "MA3", "MA4", "MA5", "MA6", "MA7", "MB0", "MB1", "MB2", "MB3", "MB4", "MB5", "MB6", "MB7", + "PR", "PR++", "PR--", "PR#0", "???", "???", "???", "???", "-1.0E+0", "0.0E+0", "0.5E+0", "1.0E+0", "1.5E+0", "2.0E+0", "3.0E+0", "5.0E+0" }; + +static const char *mo_field[32] = +{ "MA0", "MA1", "MA2", "MA3", "MA4", "MA5", "MA6", "MA7", "MB0", "MB1", "MB2", "MB3", "MB4", "MB5", "MB6", "MB7", + "AA0", "AA1", "AA2", "AA3", "AA4", "AA5", "AA6", "AA7", "AB0", "AB1", "AB2", "AB3", "AB4", "AB5", "AB6", "AB7" }; + +static const char *ai1_field[16] = +{ "AA0", "AA1", "AA2", "AA3", "AA4", "AA5", "AA6", "AA7", "AB0", "AB1", "AB2", "AB3", "AB4", "AB5", "AB6", "AB7" }; + +static const char *ai2_field[32] = +{ "AA0", "AA1", "AA2", "AA3", "AA4", "AA5", "AA6", "AA7", "AB0", "AB1", "AB2", "AB3", "AB4", "AB5", "AB6", "AB7", + "PR", "PR++", "PR--", "PR#0", "???", "???", "???", "???", "0", "1", "-1", "???", "???", "???", "???", "???" }; + +static const char *ai2f_field[32] = +{ "AA0", "AA1", "AA2", "AA3", "AA4", "AA5", "AA6", "AA7", "AB0", "AB1", "AB2", "AB3", "AB4", "AB5", "AB6", "AB7", + "PR", "PR++", "PR--", "PR#0", "???", "???", "???", "???", "-1.0E+0", "0.0E+0", "0.5E+0", "1.0E+0", "1.5E+0", "2.0E+0", "3.0E+0", "5.0E+0" }; + +static char* get_ea(int md, int arx, int ary, int disp) { + static char buffer[40]; char *p = buffer; - UINT32 grp = ( opcode2 >> 29 ) & 0x7; - UINT32 aluop = (opcode2 >> (24)) & 0x1f; - switch(grp) + switch (md) + { + case 0x0: p += sprintf(p, "@AR%d", arx); break; + case 0x1: p += sprintf(p, "@AR%d++", arx); break; + case 0x2: p += sprintf(p, "@AR%d--", arx); break; + case 0x3: p += sprintf(p, "@AR%d++%04X", arx, disp); break; + case 0x4: p += sprintf(p, "@AR%d+AR%d", arx, ary); break; + case 0x5: p += sprintf(p, "@AR%d+AR%d++", arx, ary); break; + case 0x6: p += sprintf(p, "@AR%d+AR%d--", arx, ary); break; + case 0x7: p += sprintf(p, "@AR%d+AR%d++%04X", arx, ary, disp); break; + case 0x8: p += sprintf(p, "@AR%d+AR%dU", arx, ary); break; + case 0x9: p += sprintf(p, "@AR%d+AR%dL", arx, ary); break; + case 0xa: p += sprintf(p, "@AR%d+%04X", arx, disp); break; + case 0xb: p += sprintf(p, "@AR%d+AR%d+%04X", arx, ary, disp); break; + case 0xc: p += sprintf(p, "%04X", disp); break; + case 0xd: p += sprintf(p, "@AR%d+[AR%d++]", arx, ary); break; + case 0xe: p += sprintf(p, "@AR%d+[AR%d--]", arx, ary); break; + case 0xf: p += sprintf(p, "@AR%d+[AR%d++%04X]", arx, ary, disp); break; + } + + return buffer; +} + +static char* dasm_alu_mul(UINT64 opcode, bool twoop) +{ + static char buffer[80]; + char *p = buffer; + + int ma = (opcode & ((UINT64)(1) << 41)) ? 1 : 0; + int o = (opcode >> 42) & 0x1f; + int i2 = (opcode >> 47) & 0x1f; + int i1 = (opcode >> 52) & 0xf; + + if (twoop || ma) { - case 0: // ALU2 + // ALU op + int aluop = (opcode >> 56) & 0x1f; + switch (aluop) + { + case 0x00: p += sprintf(p, "FADD %s, %s, %s", ai1_field[i1], ai2f_field[i2], mo_field[o]); + break; + case 0x01: p += sprintf(p, "FADDZ %s, %s, %s", ai1_field[i1], ai2f_field[i2], mo_field[o]); + break; + case 0x02: p += sprintf(p, "FSUB %s, %s, %s", ai1_field[i1], ai2f_field[i2], mo_field[o]); + break; + case 0x03: p += sprintf(p, "FSUBZ %s, %s, %s", ai1_field[i1], ai2f_field[i2], mo_field[o]); + break; + case 0x04: p += sprintf(p, "FCMP %s, %s", ai1_field[i1], ai2f_field[i2]); + break; + case 0x05: p += sprintf(p, "FABS %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x06: p += sprintf(p, "FABC %s, %s, %s", ai1_field[i1], ai2f_field[i2], mo_field[o]); + break; + case 0x07: p += sprintf(p, "NOP"); + break; + case 0x08: p += sprintf(p, "FEA %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; + case 0x09: p += sprintf(p, "FES %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; + case 0x0a: p += sprintf(p, "FRCP %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x0b: p += sprintf(p, "FRSQ %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x0c: p += sprintf(p, "FLOG %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x0d: p += sprintf(p, "CIF %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x0e: p += sprintf(p, "CFI %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x0f: p += sprintf(p, "CFIB %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x10: p += sprintf(p, "ADD %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x11: p += sprintf(p, "ADDZ %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x12: p += sprintf(p, "SUB %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x13: p += sprintf(p, "SUBZ %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x14: p += sprintf(p, "CMP %s, %s", ai1_field[i1], ai2_field[i2]); + break; + case 0x15: p += sprintf(p, "ABS %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x16: p += sprintf(p, "ATR %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x17: p += sprintf(p, "ATRZ %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x18: p += sprintf(p, "AND %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x19: p += sprintf(p, "OR %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x1a: p += sprintf(p, "XOR %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x1b: p += sprintf(p, "NOT %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x1c: p += sprintf(p, "LSR %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; + case 0x1d: p += sprintf(p, "LSL %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; + case 0x1e: p += sprintf(p, "ASR %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; + case 0x1f: p += sprintf(p, "ASL %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; + } + } + + // multiplication + if (twoop) + { + int mi2 = (opcode >> 32) & 0x1f; + int mi1 = (opcode >> 37) & 0xf; + int mo = (opcode >> 27) & 0x1f; + if (opcode & ((UINT64)(1) << 41)) + p += sprintf(p, " : FMUL %s, %s, %s", mi1_field[mi1], mi2_field[mi2], mo_field[mo]); + else + p += sprintf(p, " : MUL %s, %s, %s", mi1_field[mi1], mi2_field[mi2], mo_field[mo]); + } + else + { + if (ma == 0) + { + if (opcode & ((UINT64)(1) << 56)) + p += sprintf(p, "FMUL %s, %s, %s", mi1_field[i1], mi2_field[i2], mo_field[o]); + else + p += sprintf(p, "MUL %s, %s, %s", mi1_field[i1], mi2_field[i2], mo_field[o]); + } + } + + return buffer; +} + +static char* dasm_control(UINT32 pc, UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; - p += sprintf(p,"%s TRANS2_1",alu_opcode_string[aluop]); + int ef1 = (opcode >> 16) & 0x3f; + int ef2 = opcode & 0xffff; + + int cop = (opcode >> 22) & 0x1f; + + int rel12 = (opcode & 0x800) ? (0xfffff000 | (opcode & 0xfff)) : (opcode & 0xfff); + + + switch (cop) + { + case 0x00: p += sprintf(p, "NOP"); + break; + case 0x01: + if (ef1 == 0) + p += sprintf(p, "REP #%04X", ef2); + else + p += sprintf(p, "REP AR%d", (ef2 >> 12) & 7); + break; + case 0x02: + if (ef1 == 0) + p += sprintf(p, "SETL #%04X", ef2); + else + p += sprintf(p, "SETL AR%d", (ef2 >> 12) & 7); + break; + case 0x03: + if (ef1 == 1) + p += sprintf(p, "CLRFI"); + else if (ef1 == 2) + p += sprintf(p, "CLRFO"); + else if (ef1 == 3) + p += sprintf(p, "CLRF"); + break; + case 0x04: + p += sprintf(p, "PUSH %s", regname[(ef2 >> 6) & 0x3f]); + break; + case 0x05: + p += sprintf(p, "POP %s", regname[(ef2 >> 6) & 0x3f]); + break; + case 0x08: + p += sprintf(p, "SETM #%04X", ef2); + break; + case 0x09: + p += sprintf(p, "SETM #%01X, CBSA", (ef2 >> 12) & 7); + break; + case 0x0a: + p += sprintf(p, "SETM #%01X, CBSB", (ef2 >> 8) & 7); break; - case 1: // ALU2 - p += sprintf(p,"%s TRANS1_1",alu_opcode_string[aluop]); + case 0x0b: + p += sprintf(p, "SETM #%d, RF", (ef2 >> 7) & 1); break; - case 2: // ALU2 + CTRL + case 0x0c: + p += sprintf(p, "SETM #%d, RDY", (ef2 >> 4) & 1); + break; + case 0x0d: + p += sprintf(p, "SETM #%01X, WAIT", ef2 & 7); + break; + case 0x13: + p += sprintf(p, "DBLP %04X", pc + rel12); + break; + case 0x14: + p += sprintf(p, "DBBC AR%d:%d, %04X", (UINT32)((opcode >> 13) & 7), (UINT32)((opcode >> 16) & 0xf), pc + rel12); + break; + case 0x15: + p += sprintf(p, "DBBS AR%d:%d, %04X", (UINT32)((opcode >> 13) & 7), (UINT32)((opcode >> 16) & 0xf), pc + rel12); + break; + case 0x1b: + p += sprintf(p, "DRET"); + break; + + case 0x10: // DBcc + case 0x11: // DBNcc + case 0x18: // DCcc + case 0x19: // DCNcc + case 0x1a: // DCALL + case 0x12: // DJMP + { + if (cop == 0x10) + p += sprintf(p, "%s ", db_mnemonic[ef1]); + else if (cop == 0x11) + p += sprintf(p, "%s ", dbn_mnemonic[ef1]); + else if (cop == 0x18) + p += sprintf(p, "%s ", dc_mnemonic[ef1]); + else if (cop == 0x19) + p += sprintf(p, "%s ", dcn_mnemonic[ef1]); + else if (cop == 0x12) + p += sprintf(p, "DJMP "); + else if (cop == 0x1a) + p += sprintf(p, "DCALL "); + + switch ((opcode >> 12) & 0xf) + { + case 0x0: p += sprintf(p, "%03X", ef2 & 0xfff); break; + case 0x1: p += sprintf(p, "%04X", pc + rel12); break; + case 0x2: p += sprintf(p, "%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x3: p += sprintf(p, "+%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x4: p += sprintf(p, "%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x5: p += sprintf(p, "+%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x6: p += sprintf(p, "%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x7: p += sprintf(p, "+%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x8: p += sprintf(p, "A(%03X)", ef2 & 0x3ff); break; + case 0x9: p += sprintf(p, "+A(%03X)", ef2 & 0x3ff); break; + case 0xa: p += sprintf(p, "B(%03X)", ef2 & 0x3ff); break; + case 0xb: p += sprintf(p, "+B(%03X)", ef2 & 0x3ff); break; + case 0xc: p += sprintf(p, "A(%s)", regname[(ef2 >> 6) & 0x3f]); break; + case 0xd: p += sprintf(p, "+A(%s)", regname[(ef2 >> 6) & 0x3f]); break; + case 0xe: p += sprintf(p, "B(%s)", regname[(ef2 >> 6) & 0x3f]); break; + case 0xf: p += sprintf(p, "+B(%s)", regname[(ef2 >> 6) & 0x3f]); break; + } + + break; + } + } + + return buffer; +} + +static char* dasm_double_xfer1(UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; + + int sd = (opcode >> 25) & 3; + + switch (sd) + { + case 0: + { + int as = (opcode >> 20) & 0x1f; + int ad = (opcode >> 15) & 0x1f; + int bs = (opcode >> 10) & 0x1f; + int bd = (opcode >> 5) & 0x1f; + p += sprintf(p, "MVD1 %s, %s, %s, %s", regname[as], regname[ad], regname[bs], regname[bd]); + break; + } + + case 1: + { + int areg = (opcode >> 20) & 0x1f; + int aarx = (opcode >> 17) & 7; + int aary = (opcode >> 14) & 7; + int breg = (opcode >> 10) & 0xf; + int barx = (opcode >> 7) & 7; + int bary = (opcode >> 4) & 7; + int md = opcode & 0xf; + + p += sprintf(p, "MVD1 "); + + switch (md) + { + case 0x0: p += sprintf(p, "%s, A(@AR%d), %s, B(@AR%d)", regname[areg], aarx, regname[breg], barx); break; + case 0x1: p += sprintf(p, "%s, A(@AR%d++), %s, B(@AR%d++)", regname[areg], aarx, regname[breg], barx); break; + case 0x2: p += sprintf(p, "%s, A(@AR%d--), %s, B(@AR%d--)", regname[areg], aarx, regname[breg], barx); break; + case 0x4: p += sprintf(p, "%s, A(@AR%d+AR%d), %s, B(@AR%d+AR%d)", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0x5: p += sprintf(p, "%s, A(@AR%d+AR%d++), %s, B(@AR%d+AR%d++)", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0x6: p += sprintf(p, "%s, A(@AR%d+AR%d--), %s, B(@AR%d+AR%d--)", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0x8: p += sprintf(p, "%s, A(@AR%d+AR%dU), %s, B(@AR%d+AR%dL)", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0x9: p += sprintf(p, "%s, A(@AR%d+AR%dL), %s, B(@AR%d+AR%dU)", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0xd: p += sprintf(p, "%s, A(@AR%d+[AR%d++]), %s, B(@AR%d+[AR%d++])", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0xe: p += sprintf(p, "%s, A(@AR%d+[AR%d--]), %s, B(@AR%d+[AR%d--])", regname[areg], aarx, aary, regname[breg], barx, bary); break; + default: p += sprintf(p, "???"); break; + } + break; + } + + case 2: + { + int areg = (opcode >> 20) & 0x1f; + int aarx = (opcode >> 17) & 7; + int aary = (opcode >> 14) & 7; + int breg = (opcode >> 10) & 0xf; + int barx = (opcode >> 7) & 7; + int bary = (opcode >> 4) & 7; + int md = opcode & 0xf; + + p += sprintf(p, "MVD1 "); + + switch (md) + { + case 0x0: p += sprintf(p, "A(@AR%d), %s, B(@AR%d), %s", aarx, regname[areg], barx, regname[breg]); break; + case 0x1: p += sprintf(p, "A(@AR%d++), %s, B(@AR%d++), %s", aarx, regname[areg], barx, regname[breg]); break; + case 0x2: p += sprintf(p, "A(@AR%d--), %s, B(@AR%d--), %s", aarx, regname[areg], barx, regname[breg]); break; + case 0x4: p += sprintf(p, "A(@AR%d+AR%d), %s, B(@AR%d+AR%d), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0x5: p += sprintf(p, "A(@AR%d+AR%d++), %s, B(@AR%d+AR%d++), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0x6: p += sprintf(p, "A(@AR%d+AR%d--), %s, B(@AR%d+AR%d--), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0x8: p += sprintf(p, "A(@AR%d+AR%dU), %s, B(@AR%d+AR%dL), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0x9: p += sprintf(p, "A(@AR%d+AR%dL), %s, B(@AR%d+AR%dU), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0xd: p += sprintf(p, "A(@AR%d+[AR%d++]), %s, B(@AR%d+[AR%d++]), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0xe: p += sprintf(p, "A(@AR%d+[AR%d--]), %s, B(@AR%d+[AR%d--]), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + default: p += sprintf(p, "???"); break; + } + break; + } + + case 3: + p += sprintf(p, "???"); + break; + } + + return buffer; +} + +static char* dasm_xfer1(UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; + + int dr = (opcode >> 12) & 0x7f; + int sr = (opcode >> 19) & 0x7f; + int md = opcode & 0xf; + int ary = (opcode >> 4) & 7; + int disp5 = (opcode >> 7) & 0x1f; + int trm = (opcode >> 26) & 1; + int dir = (opcode >> 25) & 1; + + if (trm == 0) + { + if (sr == 0x58) + { + p += sprintf(p, "MOV1 #%03X, %s", (UINT32)(opcode & 0xfff), regname[dr]); + } + else + { + p += sprintf(p, "MOV1 "); + + if ((sr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[sr]); + } + else + { + if (sr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, sr & 7, ary, disp5)); + } + + p += sprintf(p, ", "); + + if ((dr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[dr]); + } + else + { + if (dr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, dr & 7, ary, disp5)); + } + } + } + else + { + if (dir == 0) { - UINT32 ctrlop = (opcode >> (22)) & 0x1f; - //UINT32 ef1 = (opcode >> 16) & 0x3f; - //UINT32 ef2 = (opcode >> 0) & 0xffff; + p += sprintf(p, "MOV1 "); + + if ((dr & 0x40) == 0) + { + p += sprintf(p, "%s, ", regname[dr]); + } + else + { + if (dr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, dr & 7, ary, disp5)); + } + + p += sprintf(p, "E(@EB+EO++%02X)", sr); + } + else + { + p += sprintf(p, "MOV1 E(@EB+EO++%02X), ", sr); + + if ((dr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[dr]); + } + else + { + if (dr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); - p += sprintf(p,"%s %s",alu_opcode_string[aluop],ctrl_opcode_string[ctrlop]); + p += sprintf(p, "(%s)", get_ea(md, dr & 7, ary, disp5)); + } } - break; - case 4: // ALU1 - p += sprintf(p,"%s TRANS2_2",alu_opcode_string[aluop]); + } + + return buffer; +} + +static char* double_xfer2_field(int sd, UINT32 field) +{ + static char buffer[40]; + char *p = buffer; + + switch (sd) + { + case 0: + { + int s = (field >> 13) & 0x1f; + int d = (field >> 8) & 0x1f; + p += sprintf(p, "%s, %s", regname[s], regname[d]); break; - case 5: // ALU1 - p += sprintf(p,"%s TRANS1_2",alu_opcode_string[aluop]); + } + + case 1: + { + int reg = (field >> 13) & 0x1f; + int arx = (field >> 10) & 7; + int ary = (field >> 7) & 7; + //int disp3 = (field >> 4) & 7; + int md = field & 0xf; + + switch (md) + { + case 0x0: p += sprintf(p, "%s, A(@AR%d)", regname[reg], arx); break; + case 0x1: p += sprintf(p, "%s, A(@AR%d++)", regname[reg], arx); break; + case 0x2: p += sprintf(p, "%s, A(@AR%d--)", regname[reg], arx); break; + case 0x4: p += sprintf(p, "%s, A(@AR%d+AR%d))", regname[reg], arx, ary); break; + case 0x5: p += sprintf(p, "%s, A(@AR%d+AR%d++)", regname[reg], arx, ary); break; + case 0x6: p += sprintf(p, "%s, A(@AR%d+AR%d--)", regname[reg], arx, ary); break; + case 0x8: p += sprintf(p, "%s, A(@AR%d+AR%dU)", regname[reg], arx, ary); break; + case 0x9: p += sprintf(p, "%s, A(@AR%d+AR%dL)", regname[reg], arx, ary); break; + case 0xd: p += sprintf(p, "%s, A(@AR%d+[AR%d++])", regname[reg], arx, ary); break; + case 0xe: p += sprintf(p, "%s, A(@AR%d+[AR%d--]", regname[reg], arx, ary); break; + default: p += sprintf(p, "???"); break; + } break; - case 6: // ALU1 + } + + case 2: { - UINT32 ctrlop = (opcode >> (22)) & 0x1f; - //UINT32 ef1 = (opcode >> 16) & 0x3f; - //UINT32 ef2 = (opcode >> 0) & 0xffff; + int reg = (field >> 13) & 0x1f; + int arx = (field >> 10) & 7; + int ary = (field >> 7) & 7; + //int disp3 = (field >> 4) & 7; + int md = field & 0xf; - p += sprintf(p,"%s %s",alu_opcode_string[aluop],ctrl_opcode_string[ctrlop]); + switch (md) + { + case 0x0: p += sprintf(p, "A(@AR%d), %s", arx, regname[reg]); break; + case 0x1: p += sprintf(p, "A(@AR%d++), %s", arx, regname[reg]); break; + case 0x2: p += sprintf(p, "A(@AR%d--), %s", arx, regname[reg]); break; + case 0x4: p += sprintf(p, "A(@AR%d+AR%d), %s", arx, ary, regname[reg]); break; + case 0x5: p += sprintf(p, "A(@AR%d+AR%d++), %s", arx, ary, regname[reg]); break; + case 0x6: p += sprintf(p, "A(@AR%d+AR%d--), %s", arx, ary, regname[reg]); break; + case 0x8: p += sprintf(p, "A(@AR%d+AR%dU), %s", arx, ary, regname[reg]); break; + case 0x9: p += sprintf(p, "A(@AR%d+AR%dL), %s", arx, ary, regname[reg]); break; + case 0xd: p += sprintf(p, "A(@AR%d+[AR%d++]), %s", arx, ary, regname[reg]); break; + case 0xe: p += sprintf(p, "A(@AR%d+[AR%d--]), %s", arx, ary, regname[reg]); break; + default: p += sprintf(p, "???"); break; + } break; } - case 7: - p += sprintf(p,"TRANS1_3"); + + case 3: + p += sprintf(p, "???"); break; + } + + return buffer; +} + +static char* dasm_double_xfer2(UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; + + int asd = (opcode >> 38) & 3; + int bsd = (opcode >> 18) & 3; + + if (asd == 3) + { + int barx = (opcode >> 10) & 7; + int bary = (opcode >> 7) & 7; + int disp3 = (opcode >> 4) & 7; + int bmd = opcode & 0xf; + int arx = (opcode >> 30) & 7; + + p += sprintf(p, "MOVI "); + + switch (bmd) + { + case 0x0: p += sprintf(p, "B(@BAR%d)", barx); break; + case 0x1: p += sprintf(p, "B(@BAR%d++)", barx); break; + case 0x2: p += sprintf(p, "B(@BAR%d--)", barx); break; + case 0x3: p += sprintf(p, "B(@BAR%d++%02X)", barx, disp3); break; + case 0x4: p += sprintf(p, "B(@BAR%d+BAR%d)", barx, bary); break; + case 0x5: p += sprintf(p, "B(@BAR%d+BAR%d++)", barx, bary); break; + case 0x6: p += sprintf(p, "B(@BAR%d+BAR%d--)", barx, bary); break; + case 0x7: p += sprintf(p, "B(@BAR%d+BAR%d++%02X)", barx, bary, disp3); break; + case 0x8: p += sprintf(p, "B(@BAR%d+BAR%dU)", barx, bary); break; + case 0x9: p += sprintf(p, "B(@BAR%d+BAR%dL)", barx, bary); break; + case 0xa: p += sprintf(p, "B(@BAR%d+%02X)", barx, disp3); break; + case 0xb: p += sprintf(p, "B(@BAR%d+BAR%d+%02X)", barx, bary, disp3); break; + case 0xc: p += sprintf(p, "???"); break; + case 0xd: p += sprintf(p, "B(@BAR%d+[BAR%d++])", barx, bary); break; + case 0xe: p += sprintf(p, "B(@BAR%d+[BAR%d--])", barx, bary); break; + case 0xf: p += sprintf(p, "B(@BAR%d+[BAR%d++%02X])", barx, bary, disp3); break; + } + + p += sprintf(p, ", I(@AR%d++)", arx); + } + else + { + p += sprintf(p, "MVD2 %s, %s", double_xfer2_field(asd, (opcode >> 20) & 0x3ffff), double_xfer2_field(bsd, opcode & 0x3ffff)); + } + + return buffer; +} + +static char* dasm_xfer2(UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; + + int op = (opcode >> 39) & 3; + int trm = (opcode >> 38) & 1; + int dir = (opcode >> 37) & 1; + int sr = (opcode >> 31) & 0x7f; + int dr = (opcode >> 24) & 0x7f; + int ary = (opcode >> 4) & 7; + int md = opcode & 0xf; + int disp14 = (opcode >> 7) & 0x3fff; + + if (op == 0) + { + if (trm == 0) + { + if (sr == 0x58) + { + p += sprintf(p, "MOV2 #%06X, %s", (UINT32)(opcode & 0xffffff), regname[dr]); + } + else + { + p += sprintf(p, "MOV2 "); + + if ((sr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[sr]); + } + else + { + if (sr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, sr & 7, ary, disp14)); + } + + p += sprintf(p, ", "); + + if ((dr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[dr]); + } + else + { + if (dr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, dr & 7, ary, disp14)); + } + } + } + else + { + if (dir == 0) + { + p += sprintf(p, "MOV2 %s, E(@EB+EO++%02X)", regname[dr], sr); + } + else + { + p += sprintf(p, "MOV2 E(@EB+EO++%02X), %s", sr, regname[dr]); + } + } + } + else if (op == 2) + { + if (trm == 0) + { + if ((sr & 0x40) == 0) + { + p += sprintf(p, "MOV4 %s, ICDTR%d", regname[sr], dr & 7); + } + else + { + if (sr == 0x58) + { + p += sprintf(p, "MOV4 #%06X, ICDTR%d", (UINT32)(opcode & 0xffffff), dr & 7); + } + else + { + p += sprintf(p, "MOV4 "); + + if (sr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s), ICDTR%d", get_ea(md, sr & 7, ary, disp14), dr & 7); + } + } + } + else + { + if (dir == 0) + { + p += sprintf(p, "MOV4 ICDTR%d, E(@EB+EO++%02X)", dr & 7, sr); + } + else + { + p += sprintf(p, "MOV4 E(@EB+EO++%02X), ICDTR%d", sr, dr & 7); + } + } + } + + return buffer; +} + +static char* dasm_xfer3(UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; + + UINT32 imm = (UINT32)(opcode >> 27); + int dr = (opcode >> 19) & 0x7f; + int disp = (opcode >> 7) & 0xfff; + int ary = (opcode >> 4) & 7; + int md = opcode & 0xf; + + p += sprintf(p, "MOV3 #%08X, ", imm); + + if ((dr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[dr]); + } + else + { + if (dr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, dr & 7, ary, disp)); + } + + return buffer; +} + +static unsigned dasm_mb86235(char *buffer, UINT32 pc, UINT64 opcode) +{ + char *p = buffer; + + p[0] = 0; + + switch ((opcode >> 61) & 7) + { + case 0: // ALU / MUL / double transfer (type 1) + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, true), dasm_double_xfer1(opcode)); + break; + case 1: // ALU / MYL / transfer (type 1) + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, true), dasm_xfer1(opcode)); + break; + case 2: // ALU / MUL / control + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, true), dasm_control(pc, opcode)); + break; + case 4: // ALU or MUL / double transfer (type 2) + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, false), dasm_double_xfer2(opcode)); + break; + case 5: // ALU or MUL / transfer (type 2) + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, false), dasm_xfer2(opcode)); + break; + case 6: // ALU or MUL / control + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, false), dasm_control(pc, opcode)); + break; + case 7: // transfer (type 3) + p += sprintf(p, "%s", dasm_xfer3(opcode)); + break; + default: - p += sprintf(p,"UNK ???"); + p += sprintf(p, "???"); break; } - return (2 | DASMFLAG_SUPPORTED); + return (1 | DASMFLAG_SUPPORTED); } + + CPU_DISASSEMBLE( mb86235 ) { - UINT32 op = *(UINT32 *)oprom; - UINT32 op2 = *(UINT32 *)(oprom + 4); - op = LITTLE_ENDIANIZE_INT32(op); - op2 = LITTLE_ENDIANIZE_INT32(op2); + UINT64 op = *(UINT64*)oprom; + op = LITTLE_ENDIANIZE_INT64(op); - return dasm_mb86235(buffer, op, op2); + return dasm_mb86235(buffer, pc, op); } diff --git a/src/devices/cpu/mcs48/mcs48dsm.cpp b/src/devices/cpu/mcs48/mcs48dsm.cpp index 9e2a080430c..dd63846ab57 100644 --- a/src/devices/cpu/mcs48/mcs48dsm.cpp +++ b/src/devices/cpu/mcs48/mcs48dsm.cpp @@ -24,7 +24,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x02: if (!upi41) sprintf(buffer, "out bus,a"); else - sprintf(buffer, "out dbb,a"); break; + sprintf(buffer, "out dbb,a"); + break; case 0x03: sprintf(buffer, "add a,#$%02X", *opram++); break; case 0x04: sprintf(buffer, "jmp $0%02X", *opram++); break; case 0x05: sprintf(buffer, "en i"); break; @@ -32,7 +33,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x08: if (!upi41) sprintf(buffer, "in a,bus"); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x09: sprintf(buffer, "in a,p1"); break; case 0x0a: sprintf(buffer, "in a,p2"); break; case 0x0c: sprintf(buffer, "movd a,p4"); break; @@ -60,7 +62,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x22: if (!upi41) sprintf(buffer, "illegal"); else - sprintf(buffer, "in a,dbb"); break; + sprintf(buffer, "in a,dbb"); + break; case 0x23: sprintf(buffer, "mov a,#$%02X", *opram++); break; case 0x24: sprintf(buffer, "jmp $1%02X", *opram++); break; case 0x25: sprintf(buffer, "en tcnti"); break; @@ -140,7 +143,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x75: if (!upi41) sprintf(buffer, "ent0 clk"); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x76: sprintf(buffer, "jf1 $%03X", (pc & 0xf00) | *opram++); break; case 0x77: sprintf(buffer, "rr a"); break; case 0x78: sprintf(buffer, "addc a,r0"); break; @@ -154,22 +158,26 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x80: if (!upi41) sprintf(buffer, "movx a,@r0"); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x81: if (!upi41) sprintf(buffer, "movx a,@r1"); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x83: sprintf(buffer, "ret"); flags = DASMFLAG_STEP_OUT; break; case 0x84: sprintf(buffer, "jmp $4%02X", *opram++); break; case 0x85: sprintf(buffer, "clr f0"); break; case 0x86: if (!upi41) sprintf(buffer, "jni $%03X", (pc & 0xf00) | *opram++); else - sprintf(buffer, "jobf $%03X", (pc & 0xf00) | *opram++); break; + sprintf(buffer, "jobf $%03X", (pc & 0xf00) | *opram++); + break; case 0x88: if (!upi41) sprintf(buffer, "orl bus,#$%02X", *opram++); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x89: sprintf(buffer, "orl p1,#$%02X", *opram++); break; case 0x8a: sprintf(buffer, "orl p2,#$%02X", *opram++); break; case 0x8c: sprintf(buffer, "orld p4,a"); break; @@ -179,11 +187,13 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x90: if (!upi41) sprintf(buffer, "movx @r0,a"); else - sprintf(buffer, "mov sts,a"); break; + sprintf(buffer, "mov sts,a"); + break; case 0x91: if (!upi41) sprintf(buffer, "movx @r1,a"); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x92: sprintf(buffer, "jb4 $%03X", (pc & 0xf00) | *opram++); break; case 0x93: sprintf(buffer, "retr"); flags = DASMFLAG_STEP_OUT; break; case 0x94: sprintf(buffer, "call $4%02X", *opram++); flags = DASMFLAG_STEP_OVER; break; @@ -193,7 +203,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x98: if (!upi41) sprintf(buffer, "anl bus,#$%02X", *opram++); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x99: sprintf(buffer, "anl p1,#$%02X", *opram++); break; case 0x9a: sprintf(buffer, "anl p2,#$%02X", *opram++); break; case 0x9c: sprintf(buffer, "anld p4,a"); break; @@ -250,7 +261,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0xd6: if (!upi41) sprintf(buffer, "illegal"); else - sprintf(buffer, "jnibf $%03X", (pc & 0xf00) | *opram++); break; + sprintf(buffer, "jnibf $%03X", (pc & 0xf00) | *opram++); + break; case 0xd7: sprintf(buffer, "mov psw,a"); break; case 0xd8: sprintf(buffer, "xrl a,r0"); break; case 0xd9: sprintf(buffer, "xrl a,r1"); break; @@ -265,7 +277,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0xe5: if (!upi41) sprintf(buffer, "sel mb0"); else - sprintf(buffer, "en dma"); break; + sprintf(buffer, "en dma"); + break; case 0xe6: sprintf(buffer, "jnc $%03X", (pc & 0xf00) | *opram++); break; case 0xe7: sprintf(buffer, "rl a"); break; case 0xe8: sprintf(buffer, "djnz r0,$%03X", (pc & 0xf00) | *opram++); flags = DASMFLAG_STEP_OVER; break; @@ -283,7 +296,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0xf5: if (!upi41) sprintf(buffer, "sel mb1"); else - sprintf(buffer, "en flags"); break; + sprintf(buffer, "en flags"); + break; case 0xf6: sprintf(buffer, "jc $%03X", (pc & 0xf00) | *opram++); break; case 0xf7: sprintf(buffer, "rlc a"); break; case 0xf8: sprintf(buffer, "mov a,r0"); break; diff --git a/src/devices/cpu/mips/mips3dsm.cpp b/src/devices/cpu/mips/mips3dsm.cpp index 1b0d6e52286..71e81ca7b5c 100644 --- a/src/devices/cpu/mips/mips3dsm.cpp +++ b/src/devices/cpu/mips/mips3dsm.cpp @@ -373,7 +373,8 @@ unsigned dasmmips3(char *buffer, unsigned pc, UINT32 op) case 0x00: if (op == 0) sprintf(buffer, "nop"); else - sprintf(buffer, "sll %s,%s,%d", reg[rd], reg[rt], shift); break; + sprintf(buffer, "sll %s,%s,%d", reg[rd], reg[rt], shift); + break; case 0x01: sprintf(buffer, "mov%c %s,%s,%d", ((op >> 16) & 1) ? 't' : 'f', reg[rd], reg[rs], (op >> 18) & 7); break; case 0x02: sprintf(buffer, "srl %s,%s,%d", reg[rd], reg[rt], shift); break; case 0x03: sprintf(buffer, "sra %s,%s,%d", reg[rd], reg[rt], shift); break; @@ -384,7 +385,9 @@ unsigned dasmmips3(char *buffer, unsigned pc, UINT32 op) case 0x09: if (rd == 31) sprintf(buffer, "jalr %s", reg[rs]); else - sprintf(buffer, "jalr %s,%s", reg[rs], reg[rd]); flags = DASMFLAG_STEP_OVER | DASMFLAG_STEP_OVER_EXTRA(1); break; + sprintf(buffer, "jalr %s,%s", reg[rs], reg[rd]); + flags = DASMFLAG_STEP_OVER | DASMFLAG_STEP_OVER_EXTRA(1); + break; case 0x0a: sprintf(buffer, "movz %s,%s,%s", reg[rd], reg[rs], reg[rt]); break; case 0x0b: sprintf(buffer, "movn %s,%s,%s", reg[rd], reg[rs], reg[rt]); break; case 0x0c: sprintf(buffer, "syscall"); flags = DASMFLAG_STEP_OVER; break; @@ -461,7 +464,8 @@ unsigned dasmmips3(char *buffer, unsigned pc, UINT32 op) case 0x04: if (rs == 0 && rt == 0) sprintf(buffer, "b $%08x", pc + 4 + ((INT16)op << 2)); else - sprintf(buffer, "beq %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2));break; + sprintf(buffer, "beq %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2)); + break; case 0x05: sprintf(buffer, "bne %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2));break; case 0x06: sprintf(buffer, "blez %s,$%08x", reg[rs], pc + 4 + ((INT16)op << 2)); break; case 0x07: sprintf(buffer, "bgtz %s,$%08x", reg[rs], pc + 4 + ((INT16)op << 2)); break; diff --git a/src/devices/cpu/mips/r3kdasm.cpp b/src/devices/cpu/mips/r3kdasm.cpp index ed0da525a98..3e65c0f0e9c 100644 --- a/src/devices/cpu/mips/r3kdasm.cpp +++ b/src/devices/cpu/mips/r3kdasm.cpp @@ -144,7 +144,8 @@ static UINT32 dasm_cop(UINT32 pc, int cop, UINT32 op, char *buffer) } } else - sprintf(buffer, "cop%d $%07x", cop, op & 0x01ffffff); break; + sprintf(buffer, "cop%d $%07x", cop, op & 0x01ffffff); + break; default: sprintf(buffer, "dc.l $%08x [invalid]", op); break; } @@ -250,7 +251,8 @@ static unsigned dasmr3k(char *buffer, unsigned pc, UINT32 op) case 0x00: if (op == 0) sprintf(buffer, "nop"); else - sprintf(buffer, "sll %s,%s,%d", reg[rd], reg[rt], shift); break; + sprintf(buffer, "sll %s,%s,%d", reg[rd], reg[rt], shift); + break; case 0x02: sprintf(buffer, "srl %s,%s,%d", reg[rd], reg[rt], shift); break; case 0x03: sprintf(buffer, "sra %s,%s,%d", reg[rd], reg[rt], shift); break; case 0x04: sprintf(buffer, "sllv %s,%s,%s", reg[rd], reg[rt], reg[rs]); break; @@ -260,7 +262,9 @@ static unsigned dasmr3k(char *buffer, unsigned pc, UINT32 op) case 0x09: if (rd == 31) sprintf(buffer, "jalr %s", reg[rs]); else - sprintf(buffer, "jalr %s,%s", reg[rs], reg[rd]); flags = DASMFLAG_STEP_OVER | DASMFLAG_STEP_OVER_EXTRA(1); break; + sprintf(buffer, "jalr %s,%s", reg[rs], reg[rd]); + flags = DASMFLAG_STEP_OVER | DASMFLAG_STEP_OVER_EXTRA(1); + break; case 0x0c: sprintf(buffer, "syscall"); flags = DASMFLAG_STEP_OVER; break; case 0x0d: sprintf(buffer, "break"); flags = DASMFLAG_STEP_OVER; break; case 0x0f: sprintf(buffer, "sync [invalid]"); break; @@ -318,7 +322,8 @@ static unsigned dasmr3k(char *buffer, unsigned pc, UINT32 op) case 0x04: if (rs == 0 && rt == 0) sprintf(buffer, "b $%08x", pc + 4 + ((INT16)op << 2)); else - sprintf(buffer, "beq %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2));break; + sprintf(buffer, "beq %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2)); + break; case 0x05: sprintf(buffer, "bne %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2));break; case 0x06: sprintf(buffer, "blez %s,$%08x", reg[rs], pc + 4 + ((INT16)op << 2)); break; case 0x07: sprintf(buffer, "bgtz %s,$%08x", reg[rs], pc + 4 + ((INT16)op << 2)); break; diff --git a/src/devices/cpu/nec/v25.cpp b/src/devices/cpu/nec/v25.cpp index 2333a525d9b..da7f194318d 100644 --- a/src/devices/cpu/nec/v25.cpp +++ b/src/devices/cpu/nec/v25.cpp @@ -52,7 +52,7 @@ const device_type V35 = &device_creator<v35_device>; v25_common_device::v25_common_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, bool is_16bit, offs_t fetch_xor, UINT8 prefetch_size, UINT8 prefetch_cycles, UINT32 chip_type) : cpu_device(mconfig, type, name, tag, owner, clock, shortname, __FILE__) , m_program_config("program", ENDIANNESS_LITTLE, is_16bit ? 16 : 8, 20, 0) - , m_io_config("io", ENDIANNESS_LITTLE, is_16bit ? 16 : 8, 17, 0) + , m_io_config("io", ENDIANNESS_LITTLE, is_16bit ? 16 : 8, 16+1, 0) , m_fetch_xor(fetch_xor) , m_PCK(8) , m_prefetch_size(prefetch_size) diff --git a/src/devices/cpu/pps4/pps4.cpp b/src/devices/cpu/pps4/pps4.cpp index 5ae8e822846..b2a6cc8129f 100644 --- a/src/devices/cpu/pps4/pps4.cpp +++ b/src/devices/cpu/pps4/pps4.cpp @@ -74,7 +74,7 @@ pps4_device::pps4_device(const machine_config &mconfig, const char *tag, device_ : cpu_device(mconfig, PPS4, "PPS4", tag, owner, clock, "pps4", __FILE__ ) , m_program_config("program", ENDIANNESS_LITTLE, 8, 12) , m_data_config("data", ENDIANNESS_LITTLE, 8, 12) // 4bit RAM - , m_io_config("io", ENDIANNESS_LITTLE, 8, 8) // 4bit IO + , m_io_config("io", ENDIANNESS_LITTLE, 8, 8+1) // 4bit IO { } diff --git a/src/devices/cpu/tms32010/tms32010.cpp b/src/devices/cpu/tms32010/tms32010.cpp index 332f09c9dc0..ab49c52b603 100644 --- a/src/devices/cpu/tms32010/tms32010.cpp +++ b/src/devices/cpu/tms32010/tms32010.cpp @@ -102,7 +102,7 @@ tms32010_device::tms32010_device(const machine_config &mconfig, const char *tag, : cpu_device(mconfig, TMS32010, "TMS32010", tag, owner, clock, "tms32010", __FILE__) , m_program_config("program", ENDIANNESS_BIG, 16, 12, -1) , m_data_config("data", ENDIANNESS_BIG, 16, 8, -1, ADDRESS_MAP_NAME(tms32010_ram)) - , m_io_config("io", ENDIANNESS_BIG, 16, 5, -1) + , m_io_config("io", ENDIANNESS_BIG, 16, 4+1, -1) , m_addr_mask(0x0fff) { } @@ -112,7 +112,7 @@ tms32010_device::tms32010_device(const machine_config &mconfig, device_type type : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source) , m_program_config("program", ENDIANNESS_BIG, 16, 12, -1) , m_data_config("data", ENDIANNESS_BIG, 16, 8, -1, ADDRESS_MAP_NAME(tms32015_ram)) - , m_io_config("io", ENDIANNESS_BIG, 16, 5, -1) + , m_io_config("io", ENDIANNESS_BIG, 16, 4+1, -1) , m_addr_mask(addr_mask) { } diff --git a/src/devices/cpu/tms32025/tms32025.cpp b/src/devices/cpu/tms32025/tms32025.cpp index cd95f1a96c8..c202c243ea2 100644 --- a/src/devices/cpu/tms32025/tms32025.cpp +++ b/src/devices/cpu/tms32025/tms32025.cpp @@ -212,7 +212,7 @@ tms32025_device::tms32025_device(const machine_config &mconfig, const char *tag, : cpu_device(mconfig, TMS32025, "TMS32025", tag, owner, clock, "tms32025", __FILE__) , m_program_config("program", ENDIANNESS_BIG, 16, 16, -1) , m_data_config("data", ENDIANNESS_BIG, 16, 16, -1) - , m_io_config("io", ENDIANNESS_BIG, 16, 17, -1) + , m_io_config("io", ENDIANNESS_BIG, 16, 16+1, -1) { } @@ -221,7 +221,7 @@ tms32025_device::tms32025_device(const machine_config &mconfig, device_type type : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source) , m_program_config("program", ENDIANNESS_BIG, 16, 16, -1) , m_data_config("data", ENDIANNESS_BIG, 16, 16, -1) - , m_io_config("io", ENDIANNESS_BIG, 16, 16, -1) + , m_io_config("io", ENDIANNESS_BIG, 16, 16+1, -1) { } diff --git a/src/devices/cpu/tms9900/9900dasm.cpp b/src/devices/cpu/tms9900/9900dasm.cpp index 1e79c407538..b3c8bfb56dc 100644 --- a/src/devices/cpu/tms9900/9900dasm.cpp +++ b/src/devices/cpu/tms9900/9900dasm.cpp @@ -444,7 +444,7 @@ unsigned Dasm9900 (char *buffer, unsigned pc, int model_id, const UINT8 *oprom, case 1: /* opcode is dcs */ opc = _dcs; - break; + break; case 2: case 3: /* should be 2, but instruction decoding is incomplete */ @@ -458,11 +458,11 @@ unsigned Dasm9900 (char *buffer, unsigned pc, int model_id, const UINT8 *oprom, instead of the immediate. Since I do not know, I handle this as an illegal instruction. */ opc = _ill; - break; + break; default: /* this is still a software xop */ - break; + break; } } diff --git a/src/devices/imagedev/cassette.cpp b/src/devices/imagedev/cassette.cpp index c045533a1b3..96937bac6ea 100644 --- a/src/devices/imagedev/cassette.cpp +++ b/src/devices/imagedev/cassette.cpp @@ -358,17 +358,47 @@ void cassette_image_device::call_unload() +#define ANIMATION_FPS 1 +#define ANIMATION_FRAMES 4 + /* display a small tape icon, with the current position in the tape image */ -void cassette_image_device::call_display() +int cassette_image_device::call_display(std::string& s) { /* abort if we should not be showing the image */ if (!exists()) - return; + return -1; if (!is_motor_on()) - return; - machine().ui().image_display(CASSETTE, this); + return -1; + + char buf[65]; + int n; + double position, length; + cassette_state uistate; + static const UINT8 shapes[8] = { 0x2d, 0x5c, 0x7c, 0x2f, 0x2d, 0x20, 0x20, 0x20 }; + + /* figure out where we are in the cassette */ + position = get_position(); + length = get_length(); + uistate = (cassette_state)(get_state() & CASSETTE_MASK_UISTATE); + + /* choose which frame of the animation we are at */ + n = ((int)position / ANIMATION_FPS) % ANIMATION_FRAMES; + /* Since you can have anything in a BDF file, we will use crude ascii characters instead */ + snprintf(buf, ARRAY_LENGTH(buf), "%c%c %c %02d:%02d (%04d) [%02d:%02d (%04d)]", + shapes[n], /* cassette icon left */ + shapes[n | 4], /* cassette icon right */ + (uistate == CASSETTE_PLAY) ? 0x50 : 0x52, /* play (P) or record (R) */ + ((int)position / 60), + ((int)position % 60), + (int)position, + ((int)length / 60), + ((int)length % 60), + (int)length); + + s = buf; + // make sure tape stops at end when playing if ((m_state & CASSETTE_MASK_UISTATE) == CASSETTE_PLAY) { @@ -380,4 +410,6 @@ void cassette_image_device::call_display() } } } + + return cassette_device_iterator(machine().root_device()).indexof(*this); } diff --git a/src/devices/imagedev/cassette.h b/src/devices/imagedev/cassette.h index e7edd0acef2..cb3cfc717d3 100644 --- a/src/devices/imagedev/cassette.h +++ b/src/devices/imagedev/cassette.h @@ -58,7 +58,7 @@ public: virtual bool call_load() override; virtual bool call_create(int format_type, option_resolution *format_options) override; virtual void call_unload() override; - virtual void call_display() override; + virtual int call_display(std::string& s) override; virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) override { return load_software(swlist, swname, start_entry); } virtual iodevice_t image_type() const override { return IO_CASSETTE; } diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp index 67ccf6e198c..7131aa1c2ec 100644 --- a/src/devices/imagedev/floppy.cpp +++ b/src/devices/imagedev/floppy.cpp @@ -438,10 +438,10 @@ bool floppy_image_device::call_load() if (!cur_load_cb.isnull()) return cur_load_cb(this); - if (motor_always_on) { - // When disk is inserted, start motor - mon_w(0); - } else if(!mon) + if (motor_always_on) { + // When disk is inserted, start motor + mon_w(0); + } else if(!mon) ready_counter = 2; return IMAGE_INIT_PASS; @@ -469,10 +469,10 @@ void floppy_image_device::call_unload() if (!cur_unload_cb.isnull()) cur_unload_cb(this); - if (motor_always_on) { - // When disk is removed, stop motor - mon_w(1); - } else if(!ready) { + if (motor_always_on) { + // When disk is removed, stop motor + mon_w(1); + } else if(!ready) { ready = true; if(!cur_ready_cb.isnull()) cur_ready_cb(this, ready); diff --git a/src/devices/machine/68230pit.cpp b/src/devices/machine/68230pit.cpp index 927ece2cb75..fe84888ffbf 100644 --- a/src/devices/machine/68230pit.cpp +++ b/src/devices/machine/68230pit.cpp @@ -9,13 +9,31 @@ * * Todo * - Add clock and timers +* - Add double buffering for each submode * - Add all missing registers * - Add configuration **********************************************************************/ #include "68230pit.h" -#define LOG(x) /* x */ +#define VERBOSE 0 + +#define LOG(x) do { if (VERBOSE) logerror x; } while (0) +#define LOGR(x) LOG(x) +#if VERBOSE == 2 +#define logerror printf +#endif + +#ifdef _MSC_VER +#define FUNCNAME __func__ +#define LLFORMAT "%I64%" +#else +#define FUNCNAME __PRETTY_FUNCTION__ +#define LLFORMAT "%lld" +#endif + +//#define LOG(x) x +//#define logerror printf //************************************************************************** // DEVICE TYPE DEFINITIONS @@ -27,22 +45,70 @@ const device_type PIT68230 = &device_creator<pit68230_device>; // pit68230_device - constructors //------------------------------------------------- pit68230_device::pit68230_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source) - : device_t (mconfig, type, name, tag, owner, clock, shortname, source), - device_execute_interface (mconfig, *this) - , m_icount (0) - , m_write_pa (*this) - , m_write_h2 (*this), m_pgcr(0), m_psrr(0), m_paddr(0), m_pbddr(0), m_pcddr(0), m_pacr(0), m_pbcr(0), m_padr(0), m_pbdr(0), m_psr(0) - { + : device_t (mconfig, type, name, tag, owner, clock, shortname, source), + device_execute_interface (mconfig, *this) + , m_icount (0) + , m_pa_out_cb(*this) + , m_pa_in_cb(*this) + , m_pb_out_cb(*this) + , m_pb_in_cb(*this) + , m_pc_out_cb(*this) + , m_pc_in_cb(*this) + , m_h1_out_cb (*this) + , m_h2_out_cb (*this) + , m_h3_out_cb (*this) + , m_h4_out_cb (*this) + , m_pgcr(0) + , m_psrr(0) + , m_paddr(0) + , m_pbddr(0) + , m_pcddr(0) + , m_pacr(0) + , m_pbcr(0) + , m_padr(0) + , m_pbdr(0) + , m_psr(0) + , m_tcr(0) + , m_cpr(0) + // , m_cprh(0) + // , m_cprm(0) + // , m_cprl(0) + , m_cntr(0) +{ } pit68230_device::pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t (mconfig, PIT68230, "PIT68230", tag, owner, clock, "pit68230", __FILE__), - device_execute_interface (mconfig, *this) - , m_icount (0) - , m_write_pa (*this) - , m_write_h2 (*this), m_pgcr(0), m_psrr(0), m_paddr(0), m_pbddr(0), m_pcddr(0), m_pacr(0), m_pbcr(0), m_padr(0), m_pbdr(0), m_psr(0) - { + : device_t (mconfig, PIT68230, "PIT68230", tag, owner, clock, "pit68230", __FILE__), + device_execute_interface (mconfig, *this) + , m_icount (0) + , m_pa_out_cb (*this) + , m_pa_in_cb(*this) + , m_pb_out_cb(*this) + , m_pb_in_cb(*this) + , m_pc_out_cb(*this) + , m_pc_in_cb(*this) + , m_h1_out_cb(*this) + , m_h2_out_cb(*this) + , m_h3_out_cb(*this) + , m_h4_out_cb(*this) + , m_pgcr(0) + , m_psrr(0) + , m_paddr(0) + , m_pbddr(0) + , m_pcddr(0) + , m_pacr(0) + , m_pbcr(0) + , m_padr(0) + , m_pbdr(0) + , m_psr(0) + , m_tcr(0) + , m_cpr(0) + // , m_cprh(0) + // , m_cprm(0) + // , m_cprl(0) + , m_cntr(0) +{ } //------------------------------------------------- @@ -50,12 +116,18 @@ pit68230_device::pit68230_device(const machine_config &mconfig, const char *tag, //------------------------------------------------- void pit68230_device::device_start () { - LOG (logerror ("PIT68230 device started\n")); - m_icountptr = &m_icount; - - // resolve callbacks - m_write_pa.resolve_safe (); - m_write_h2.resolve_safe (); + LOG(("%s\n", FUNCNAME)); + m_icountptr = &m_icount; + + // resolve callbacks + m_pa_out_cb.resolve_safe(); + m_pa_in_cb.resolve_safe(0); + m_pb_out_cb.resolve_safe(); + m_pb_in_cb.resolve_safe(0); + m_h1_out_cb.resolve_safe(); + m_h2_out_cb.resolve_safe(); + m_h3_out_cb.resolve_safe(); + m_h4_out_cb.resolve_safe(); } //------------------------------------------------- @@ -63,17 +135,18 @@ void pit68230_device::device_start () //------------------------------------------------- void pit68230_device::device_reset () { - LOG (logerror ("PIT68230 device reseted\n")); - m_pgcr = 0; - m_psrr = 0; - m_paddr = 0; - m_pbddr = 0; - m_pcddr = 0; - m_pacr = 0; m_write_h2 (m_pacr); - m_pbcr = 0; - m_padr = 0; m_write_pa ((offs_t)0, m_padr); // TODO: check PADDR - m_pbdr = 0; - m_psr = 0; + LOG(("%s %s \n",tag(), FUNCNAME)); + + m_pgcr = 0; + m_psrr = 0; + m_paddr = 0; + m_pbddr = 0; + m_pcddr = 0; + m_pacr = 0; m_h2_out_cb(m_pacr); + m_pbcr = 0; + m_padr = 0; m_pa_out_cb((offs_t)0, m_padr); // TODO: check PADDR + m_pbdr = 0; + m_psr = 0; } //------------------------------------------------- @@ -85,16 +158,16 @@ void pit68230_device::device_timer (emu_timer &timer, device_timer_id id, INT32 void pit68230_device::h1_set (UINT8 state) { - LOG (logerror ("h1_set %d @ m_psr %2x => ", state, m_psr)); - if (state) m_psr |= 1; else m_psr &= ~1; - LOG (logerror ("%02x %lld\n", m_psr, machine ().firstcpu->total_cycles ())); + LOG(("%s %s %d @ m_psr %2x => ",tag(), FUNCNAME, state, m_psr)); + if (state) m_psr |= 1; else m_psr &= ~1; + LOG(("%02x %lld\n", m_psr, machine ().firstcpu->total_cycles ())); } void pit68230_device::portb_setbit (UINT8 bit, UINT8 state) { - LOG (logerror ("portb_setbit %d/%d @ m_pbdr %2x => ", bit, state, m_pbdr)); - if (state) m_pbdr |= (1 << bit); else m_pbdr &= ~(1 << bit); - LOG (logerror ("%02x %lld\n", m_pbdr, machine ().firstcpu->total_cycles ())); + LOG(("%s %s %d/%d @ m_pbdr %2x => ", tag(), FUNCNAME, bit, state, m_pbdr)); + if (state) m_pbdr |= (1 << bit); else m_pbdr &= ~(1 << bit); + LOG(("%02x %lld\n", m_pbdr, machine ().firstcpu->total_cycles ())); } //------------------------------------------------- @@ -109,157 +182,373 @@ void pit68230_device::execute_run () } while (m_icount > 0); } -LOG (static INT32 ow_cnt = 0) -LOG (static INT32 ow_data = 0) -LOG (static INT32 ow_ofs = 0) - -WRITE8_MEMBER (pit68230_device::write){ - switch (offset) { - case PIT_68230_PGCR: - m_pgcr = data; - break; - - case PIT_68230_PSRR: - m_psrr = data; - break; - - case PIT_68230_PADDR: - m_paddr = data; - break; - - case PIT_68230_PBDDR: - m_pbddr = data; - break; - - case PIT_68230_PCDDR: - m_pcddr = data; - break; - - case PIT_68230_PACR: - m_pacr = data; - // callbacks - /*PACR in Mode 0 - * 5 43 H2 Control in Submode 00 && 01 - * ------------------------------------ - * 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge. - * 1 00 Output pin - negated, H2S is always clear. - * 1 01 Output pin - asserted, H2S is always clear. - * 1 10 Output pin - interlocked input handshake protocol, H2S is always clear. - * 1 11 Output pin - pulsed input handshake protocol, H2S is always clear. - * - * 5 43 H2 Control in Submode 1x - * ------------------------------------ - * 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge. - * 1 X0 Output pin - negated, H2S is always cleared. - * 1 X1 Output pin - asserted, H2S is always cleared. - */ - m_write_h2 (m_pacr & 0x08 ? 1 : 0); // TODO: Check mode and submodes - break; - - case PIT_68230_PBCR: - m_pbcr = data; - break; - - case PIT_68230_PADR: - m_padr = data; - // callbacks - m_write_pa ((offs_t)0, m_padr); // TODO: check PADDR - break; - - case PIT_68230_PSR: - m_psr = data; - break; - - default: - LOG (logerror ("unhandled register %02x", offset)); - } - - LOG (if (offset != ow_ofs || data != ow_data || ow_cnt >= 1000) { - logerror ("\npit68230_device::write: previous identical operation performed %02x times\n", ow_cnt); - ow_cnt = 0; - ow_data = data; - ow_ofs = offset; - logerror ("pit68230_device::write: offset=%02x data=%02x %lld\n", ow_ofs, ow_data, machine ().firstcpu->total_cycles ()); - } - else - ow_cnt++; ) -} - -LOG (static INT32 or_cnt = 0) -LOG (static INT32 or_data = 0) -LOG (static INT32 or_ofs = 0) +#if VERBOSE > 2 +static INT32 ow_cnt = 0; +static INT32 ow_data = 0; +static INT32 ow_ofs = 0; +#endif + +void pit68230_device::wr_pitreg_pgcr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_pgcr = data; +} + +void pit68230_device::wr_pitreg_psrr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_psrr = data; +} + +void pit68230_device::wr_pitreg_paddr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_paddr = data; +} + +void pit68230_device::wr_pitreg_pbddr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_pbddr = data; +} + +void pit68230_device::wr_pitreg_pcddr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_pcddr = data; +} + +void pit68230_device::wr_pitreg_pacr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_pacr = data; + // callbacks + /*PACR in Mode 0 + * 5 43 H2 Control in Submode 00 && 01 + * ------------------------------------ + * 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge. + * 1 00 Output pin - negated, H2S is always clear. + * 1 01 Output pin - asserted, H2S is always clear. + * 1 10 Output pin - interlocked input handshake protocol, H2S is always clear. + * 1 11 Output pin - pulsed input handshake protocol, H2S is always clear. + * + * 5 43 H2 Control in Submode 1x + * ------------------------------------ + * 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge. + * 1 X0 Output pin - negated, H2S is always cleared. + * 1 X1 Output pin - asserted, H2S is always cleared. + */ + m_h2_out_cb (m_pacr & 0x08 ? 1 : 0); // TODO: Check mode and submodes +} + +void pit68230_device::wr_pitreg_pbcr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_pbcr = data; +} + +void pit68230_device::wr_pitreg_padr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_padr = data; + // callbacks + m_pa_out_cb ((offs_t)0, m_padr); // TODO: check PADDR +} + +void pit68230_device::wr_pitreg_psr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_psr = data; +} + +/* The timer control register (TCR) determines all operations of the timer. Bits 7-5 configure the PC3/TOUT +and PC7/TIACKpins for port C, square wave, vectored interrupt, or autovectored interrupt operation bit +4 specifies whether the counter receives data from the counter preload register or continues counting when +zero detect is reached ; bit 3 is unused and is read as zero bits 2 and 1 configure the path from the CLK +and TINpins to the counter controller ; and bit 0 ena-bles the timer. This register is readable and writable +at all times. All bits are cleared to zero when the RESET pin is asserted. + +TCR bits + 7 6 5 TOUT/TIACK Control +---------------------------- + 0 0 X The dual-function pins PC3/TOUT and PC7/TIACK carry the port C function. + 0 1 X The dual-function pinPC3/TOUT carries the TOUT function. In the run state it is used as a squarewave + output and is toggled on zero detect. The TOUT pin is high while in the halt state. The dualfunction + pin PC7/TIACK carries the PC7 function. + 1 0 0 The dual-function pin PC3/TOUT carries the TOUT function. In the run or halt state it is used as + a timer interrupt request output. The timer interrupt is disabled, thus, the pin is always three stated. + The dual-function pin PC7/TIACK carries the TIACK function ; however, since interrupt request is + negated, the PI/T produces no response (i.e., no data or DTACK) to an asserted TIACK. Refer to + 5.1.3. Timer Interrupt Acknowledge Cycles for details. + 1 0 1 The dual-function pin PC3/TOUT carries the TOUTfunction and is used as a timer interrupt request + output. The timer interrupt is enabled ; thus, the pin is low when the timer ZDS status bit is one. + The dual-function pin PC7/TIACK carries the TIACK function and is used as a timer interrupt acknowledge + input. Refer to the5.1.3. Timer InterruptAcknowledge Cycles fordetails. Thiscombination + supports vectored timer interrupts. + 1 1 0 The dual-function pin PC3/TOUT function. In the run or halt state it is used as a timer interrupt + request output. The timer interrupt is disabled ; thus, the pin is always three-stated. The dual-function + pin PC7/TIACK carries the PC7 function. + 1 1 1 The dual-function pin PC3/TOUT carries the TOUTfunction and is used as a timer interrupt request + output. The timer interrupt is enabled ; thus, the pin is low when the timer ZDS status bit is one. + The dual-function pin PC7/TIACK carries the PC7 function and autovectored interrupts are supported. + +TCR bit 4 - Zero Detect Control + 0 The counter is loaded fromthe counter preload register on the first clock to the 24-bit counter after + zero detect, then resumes counting. + 1 The counter rolls over on zero detect, then continues counting. + +TCR bit 3 - Unused and is always read as zero. + +TCR bits + 2 1 Clock Control + 0 0 The PC2/TIN input pin carries the port C function, and the CLK pin and prescaler are used. The + prescaler is decremented on the falling transition of the CLKpin ; the 24-bit counter is decremented, + rolls over, or is loaded from the counter preload registers when the prescaler rolls over from $OO + to $1F. The timer enable bit determines whether the timer is in the run or halt state. + 0 1 The PC2/TIN pin serves as a timer input, and the CLK pin and prescaler are used. The prescaler + is decremented on the falling transition of the CLK pin ; the 24-bit counter is decremented, rolls + over, or is loaded from the counter preload registers when the prescaler rolls over from $00 to $1F. + The timer is in the run state when the timer enable bit is one and the TIN pin is high ; otherwise, + the timer is in the halt state. + 1 0 The PC2/TIN pin serves as a timer input and the prescaler is used. The prescaler is decremented + following the rising transition of the TIN pin after being synchronized with the internal clock. The + 24-bit counter is decremented, rolls over, or is loaded from the counter preload registers when the + prescaler rolls over from $00 to $1F. The timer enable bit determines whether the timer is in the + run or halt state. + 1 1 The PC2/TIN pin serves as a timer input and the prescaler is not used. The 24-bit counter is decremented, + rolls over, or is loaded from the counter preload registers following the rising edge of + the TIN pin after being synchronized with the internal clock. The timer enable bit determines whether + the timer is in the run or halt state. +TCR bit 0 - Timer Enable + 0 Disabled + 1 Enabled +*/ +void pit68230_device::wr_pitreg_tcr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x Timer %s\n", + FUNCNAME, data, m_owner->tag(), FUNCNAME, data, data & REG_TCR_ENABLE ? "enabled" : "disabled")); + m_tcr = data; +} + +void pit68230_device::wr_pitreg_cprh(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_cpr &= ~0xff0000; + m_cpr |= ((data << 16) & 0xff0000); + // m_cprh = data; +} + +void pit68230_device::wr_pitreg_cprm(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_cpr &= ~0x00ff00; + m_cpr |= ((data << 8) & 0x00ff00); + // m_cprm = data; +} + +void pit68230_device::wr_pitreg_cprl(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_cpr &= ~0x0000ff; + m_cpr |= ((data << 0) & 0x0000ff); + // m_cprl = data; +} + +WRITE8_MEMBER (pit68230_device::write) +{ + LOG(("%s %s \n",tag(), FUNCNAME)); + switch (offset) { + case PIT_68230_PGCR: wr_pitreg_pgcr(data); break; + case PIT_68230_PSRR: wr_pitreg_psrr(data); break; + case PIT_68230_PADDR: wr_pitreg_paddr(data); break; + case PIT_68230_PBDDR: wr_pitreg_pbddr(data); break; + case PIT_68230_PCDDR: wr_pitreg_pcddr(data); break; + case PIT_68230_PACR: wr_pitreg_pacr(data); break; + case PIT_68230_PBCR: wr_pitreg_pbcr(data); break; + case PIT_68230_PADR: wr_pitreg_padr(data); break; + case PIT_68230_PAAR: break; // RO register so ignored + case PIT_68230_PBAR: break; // RO register so ignored + case PIT_68230_PSR: wr_pitreg_psr(data); break; + case PIT_68230_TCR: wr_pitreg_tcr(data); break; + case PIT_68230_CPRH: wr_pitreg_cprh(data); break; + case PIT_68230_CPRM: wr_pitreg_cprm(data); break; + case PIT_68230_CPRL: wr_pitreg_cprl(data); break; + default: + LOG (("Unhandled Write of %02x to register %02x", data, offset)); + } + +#if VERBOSE > 2 + if (offset != ow_ofs || data != ow_data || ow_cnt >= 1000) { + logerror ("\npit68230_device::write: previous identical operation performed %02x times\n", ow_cnt); + ow_cnt = 0; + ow_data = data; + ow_ofs = offset; + logerror ("pit68230_device::write: offset=%02x data=%02x %lld\n", ow_ofs, ow_data, machine ().firstcpu->total_cycles ()); + } + else + ow_cnt++; +#endif + +} + +#if VERBOSE > 2 +static INT32 or_cnt = 0; +static INT32 or_data = 0; +static INT32 or_ofs = 0; +#endif + +UINT8 pit68230_device::rr_pitreg_pgcr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pgcr)); + return m_pgcr; +} + +UINT8 pit68230_device::rr_pitreg_psrr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_psrr)); + return m_psrr; +} + +UINT8 pit68230_device::rr_pitreg_paddr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_paddr)); + return m_paddr; +} + +UINT8 pit68230_device::rr_pitreg_pbddr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pbddr)); + return m_pbddr; +} + +UINT8 pit68230_device::rr_pitreg_pcddr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pcddr)); + return m_pcddr; +} + +UINT8 pit68230_device::rr_pitreg_pacr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pacr)); + return m_pacr; +} + +UINT8 pit68230_device::rr_pitreg_pbcr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pbcr)); + return m_pbcr; +} + +UINT8 pit68230_device::rr_pitreg_padr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_padr)); + return m_padr; +} + +/* 4.6.2. PORT B DATA REGISTER (PBDR). The port B data register is a holding + * register for moving data to and from port B pins. The port B data direction + * register determines whether each pin is an input (zero) or an output (one). + * This register is readable and writable at all times. Depending on the chosen + * mode/submode, reading or writing may affect the double-buffered handshake + * mechanism. The port B data register is not affected by the assertion of the + * RESET pin. PB0-PB7 sits on pins 17-24 on a 48 pin DIP package */ +UINT8 pit68230_device::rr_pitreg_pbdr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pbdr)); + return m_pbdr; +} + +/* The port A alternate register is an alternate register for reading the port A pins. +It is a read-only address and no other PI/T condition is affected. In all modes, +the instantaneous pin level is read and no input latching is performed except at the +data bus interface. Writes to this address are answered with DTACK, but the data is ignored.*/ +UINT8 pit68230_device::rr_pitreg_paar() +{ + // NOTE: no side effect emulated so using ..padr + UINT8 ret; + ret = m_pa_in_cb(); + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, ret)); + return ret; +} + +/* The port B alternate register is an alternate register for reading the port B pins. +It is a read-only address and no other PI/T condition is affected. In all modes, +the instantaneous pin level is read and no input latching is performed except at the +data bus interface.Writes to this address are answered with DTACK, but the data is ignored.*/ +UINT8 pit68230_device::rr_pitreg_pbar() +{ + // NOTE: no side effect emulated so using ..pbdr + UINT8 ret; + ret = m_pb_in_cb(); + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, ret)); + return ret; +} + +/* 4.8. PORT STATUS REGISTER (PSR) The port status register contains information about + * handshake pin activity. Bits 7-4 show the instantaneous level of the respective handshake + * pin, and are independent of the handshake pin sense bits in the port general control + * register. Bits 3-0 are the respective status bits referred to throughout this document. + * Their interpretation depends on the programmed mode/submode of the PI/T. For bits + * 3-0 a one is the active or asserted state. */ +UINT8 pit68230_device::rr_pitreg_psr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_psr)); + return m_psr; +} + +UINT8 pit68230_device::rr_pitreg_cntrh() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, (m_cntr >> 16) & 0xff)); + return (m_cntr >> 16) & 0xff; +} + +UINT8 pit68230_device::rr_pitreg_cntrm() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, (m_cntr >> 8) & 0xff)); + return (m_cntr >> 8) & 0xff; +} + +UINT8 pit68230_device::rr_pitreg_cntrl() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, (m_cntr >> 0) & 0xff)); + return (m_cntr >> 0) & 0xff; +} READ8_MEMBER (pit68230_device::read){ - UINT8 data; - - switch (offset) { - case PIT_68230_PGCR: - data = m_pgcr; - break; - - case PIT_68230_PSRR: - data = m_psrr; - break; - - case PIT_68230_PADDR: - data = m_paddr; - break; - - case PIT_68230_PBDDR: - data = m_pbddr; - break; - - case PIT_68230_PCDDR: - data = m_pcddr; - break; - - case PIT_68230_PACR: - data = m_pacr; - break; - - case PIT_68230_PBCR: - data = m_pbcr; - break; - - case PIT_68230_PADR: - data = m_padr; - break; - - case PIT_68230_PBDR: - /* 4.6.2. PORT B DATA REGISTER (PBDR). The port B data register is a holding - * register for moving data to and from port B pins. The port B data direction - * register determines whether each pin is an input (zero) or an output (one). - * This register is readable and writable at all times. Depending on the chosen - * mode/submode, reading or writing may affect the double-buffered handshake - * mechanism. The port B data register is not affected by the assertion of the - * RESET pin. PB0-PB7 sits on pins 17-24 on a 48 pin DIP package */ - data = m_pbdr; - break; - - case PIT_68230_PSR: - /* 4.8. PORT STATUS REGISTER (PSR) The port status register contains information about - * handshake pin activity. Bits 7-4 show the instantaneous level of the respective handshake - * pin, and are independent of the handshake pin sense bits in the port general control - * register. Bits 3-0 are the respective status bits referred to throughout this document. - * Their interpretation depends on the programmed mode/submode of the PI/T. For bits - * 3-0 a one is the active or asserted state. */ - data = m_psr; - break; - - default: - LOG (logerror ("unhandled register %02x", offset)); - data = 0; - } - - LOG (if (offset != or_ofs || data != or_data || or_cnt >= 1000) { - logerror ("\npit68230_device::read: previous identical operation performed %02x times\n", or_cnt); - or_cnt = 0; - or_data = data; - or_ofs = offset; - logerror ("pit68230_device::read: offset=%02x data=%02x %lld\n", or_ofs, or_data, machine ().firstcpu->total_cycles ()); - } - else - or_cnt++; ) - - return data; + UINT8 data; + + switch (offset) { + case PIT_68230_PGCR: data = rr_pitreg_pgcr(); break; + case PIT_68230_PSRR: data = rr_pitreg_psrr(); break; + case PIT_68230_PADDR: data = rr_pitreg_paddr(); break; + case PIT_68230_PBDDR: data = rr_pitreg_pbddr(); break; + case PIT_68230_PCDDR: data = rr_pitreg_pcddr(); break; + case PIT_68230_PACR: data = rr_pitreg_pacr(); break; + case PIT_68230_PBCR: data = rr_pitreg_pbcr(); break; + case PIT_68230_PADR: data = rr_pitreg_padr(); break; + case PIT_68230_PBDR: data = rr_pitreg_pbdr(); break; + case PIT_68230_PAAR: data = rr_pitreg_paar(); break; + case PIT_68230_PBAR: data = rr_pitreg_pbar(); break; + case PIT_68230_PSR: data = rr_pitreg_psr(); break; + case PIT_68230_CNTRH: data = rr_pitreg_cntrh(); break; + case PIT_68230_CNTRM: data = rr_pitreg_cntrm(); break; + case PIT_68230_CNTRL: data = rr_pitreg_cntrl(); break; + default: + LOG (("Unhandled read register %02x\n", offset)); + data = 0; + } + +#if VERBOSE > 2 + if (offset != or_ofs || data != or_data || or_cnt >= 1000) { + logerror ("\npit68230_device::read: previous identical operation performed %02x times\n", or_cnt); + or_cnt = 0; + or_data = data; + or_ofs = offset; + logerror ("pit68230_device::read: offset=%02x data=%02x %lld\n", or_ofs, or_data, machine ().firstcpu->total_cycles ()); + } + else + or_cnt++; +#endif + + return data; } diff --git a/src/devices/machine/68230pit.h b/src/devices/machine/68230pit.h index 2a2f2c6824c..7712419f7fc 100644 --- a/src/devices/machine/68230pit.h +++ b/src/devices/machine/68230pit.h @@ -43,14 +43,35 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_PIT68230_PA_OUTPUT_CALLBACK(_write) \ - devcb = &pit68230_device::set_pa_wr_callback (*device, DEVCB_ ## _write); +#define MCFG_PIT68230_PA_INPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pa_in_callback (*device, DEVCB_##_devcb); -#define MCFG_PIT68230_PB_OUTPUT_CALLBACK(_write) \ - devcb = &pit68230_device::set_pb_wr_callback (*device, DEVCB_ ## _write); +#define MCFG_PIT68230_PA_OUTPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pa_out_callback (*device, DEVCB_##_devcb); -#define MCFG_PIT68230_H2_CALLBACK(_write) \ - devcb = &pit68230_device::set_h2_wr_callback (*device, DEVCB_ ## _write); +#define MCFG_PIT68230_PB_INPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pb_in_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_PB_OUTPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pb_out_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_PC_INPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pc_in_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_PC_OUTPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pc_out_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_H1_CB(_devcb) \ + devcb = &pit68230_device::set_h1_out_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_H2_CB(_devcb) \ + devcb = &pit68230_device::set_h2_out_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_H3_CB(_devcb) \ + devcb = &pit68230_device::set_h3_out_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_H4_CB(_devcb) \ + devcb = &pit68230_device::set_h4_out_callback (*device, DEVCB_##_devcb); /*----------------------------------------------------------------------- * Registers RS1-RS5 R/W Description @@ -84,46 +105,100 @@ //************************************************************************** class pit68230_device : public device_t, public device_execute_interface { -public: -// construction/destruction -pit68230_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source); -pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); -template<class _Object> static devcb_base &set_pa_wr_callback (device_t &device, _Object object) -{ - return downcast<pit68230_device &>(device).m_write_pa.set_callback (object); -} -template<class _Object> static devcb_base &set_h2_wr_callback (device_t &device, _Object object) -{ - return downcast<pit68230_device &>(device).m_write_h2.set_callback (object); -} + public: + // construction/destruction + pit68230_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source); + pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + template<class _Object> static devcb_base &set_pa_in_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_pa_in_cb.set_callback (object); } + template<class _Object> static devcb_base &set_pa_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_pa_out_cb.set_callback (object); } + template<class _Object> static devcb_base &set_pb_in_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_pb_in_cb.set_callback (object); } + template<class _Object> static devcb_base &set_pb_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_pb_out_cb.set_callback (object); } + template<class _Object> static devcb_base &set_pc_in_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_pc_in_cb.set_callback (object); } + template<class _Object> static devcb_base &set_pc_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_pc_out_cb.set_callback (object); } + template<class _Object> static devcb_base &set_h1_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_h1_out_cb.set_callback (object); } + template<class _Object> static devcb_base &set_h2_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_h2_out_cb.set_callback (object); } + template<class _Object> static devcb_base &set_h3_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_h3_out_cb.set_callback (object); } + template<class _Object> static devcb_base &set_h4_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_h4_out_cb.set_callback (object); } + + DECLARE_WRITE8_MEMBER (write); + DECLARE_READ8_MEMBER (read); -DECLARE_WRITE8_MEMBER (write); -DECLARE_READ8_MEMBER (read); + void h1_set (UINT8 state); + void portb_setbit (UINT8 bit, UINT8 state); -void h1_set (UINT8 state); -void portb_setbit (UINT8 bit, UINT8 state); + void wr_pitreg_pgcr(UINT8 data); + void wr_pitreg_psrr(UINT8 data); + void wr_pitreg_paddr(UINT8 data); + void wr_pitreg_pbddr(UINT8 data); + void wr_pitreg_pcddr(UINT8 data); + void wr_pitreg_pacr(UINT8 data); + void wr_pitreg_pbcr(UINT8 data); + void wr_pitreg_padr(UINT8 data); + void wr_pitreg_paar(UINT8 data); + void wr_pitreg_pbar(UINT8 data); + void wr_pitreg_psr(UINT8 data); + void wr_pitreg_tcr(UINT8 data); + void wr_pitreg_cprh(UINT8 data); + void wr_pitreg_cprm(UINT8 data); + void wr_pitreg_cprl(UINT8 data); + + UINT8 rr_pitreg_pgcr(); + UINT8 rr_pitreg_psrr(); + UINT8 rr_pitreg_paddr(); + UINT8 rr_pitreg_pbddr(); + UINT8 rr_pitreg_pcddr(); + UINT8 rr_pitreg_pacr(); + UINT8 rr_pitreg_pbcr(); + UINT8 rr_pitreg_padr(); + UINT8 rr_pitreg_pbdr(); + UINT8 rr_pitreg_paar(); + UINT8 rr_pitreg_pbar(); + UINT8 rr_pitreg_psr(); + UINT8 rr_pitreg_cntrh(); + UINT8 rr_pitreg_cntrm(); + UINT8 rr_pitreg_cntrl(); protected: -// device-level overrides -virtual void device_start () override; -virtual void device_reset () override; -virtual void device_timer (emu_timer &timer, device_timer_id id, int param, void *ptr) override; -virtual void execute_run () override; -int m_icount; -devcb_write8 m_write_pa; -devcb_write_line m_write_h2; - -// peripheral ports -UINT8 m_pgcr; // Port General Control register -UINT8 m_psrr; // Port Service Request register -UINT8 m_paddr; // Port A Data Direction register -UINT8 m_pbddr; // Port B Data Direction register -UINT8 m_pcddr; // Port C Data Direction register -UINT8 m_pacr; // Port A Control register -UINT8 m_pbcr; // Port B Control register -UINT8 m_padr; // Port A Data register -UINT8 m_pbdr; // Port B Data register -UINT8 m_psr; // Port Status Register + + enum { + REG_TCR_ENABLE = 0x01 + }; + + // device-level overrides + virtual void device_start () override; + virtual void device_reset () override; + virtual void device_timer (emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void execute_run () override; + int m_icount; + + devcb_write8 m_pa_out_cb; + devcb_read8 m_pa_in_cb; + devcb_write8 m_pb_out_cb; + devcb_read8 m_pb_in_cb; + devcb_write8 m_pc_out_cb; + devcb_read8 m_pc_in_cb; + devcb_write_line m_h1_out_cb; + devcb_write_line m_h2_out_cb; + devcb_write_line m_h3_out_cb; + devcb_write_line m_h4_out_cb; + + // peripheral ports + UINT8 m_pgcr; // Port General Control register + UINT8 m_psrr; // Port Service Request register + UINT8 m_paddr; // Port A Data Direction register + UINT8 m_pbddr; // Port B Data Direction register + UINT8 m_pcddr; // Port C Data Direction register + UINT8 m_pacr; // Port A Control register + UINT8 m_pbcr; // Port B Control register + UINT8 m_padr; // Port A Data register + UINT8 m_pbdr; // Port B Data register + UINT8 m_psr; // Port Status Register + UINT8 m_tcr; // Timer Control Register + int m_cpr; // Counter Preload Registers (3 x 8 = 24 bits) + // UINT8 m_cprh; // Counter Preload Register High + // UINT8 m_cprm; // Counter Preload Register Mid + // UINT8 m_cprl; // Counter Preload Register Low + int m_cntr; // - The 24 bit Counter }; // device type definition diff --git a/src/devices/machine/cs8221.cpp b/src/devices/machine/cs8221.cpp index 95a890d7bba..d7f38de1bd7 100644 --- a/src/devices/machine/cs8221.cpp +++ b/src/devices/machine/cs8221.cpp @@ -105,6 +105,10 @@ void cs8221_device::device_reset() //************************************************************************** // READ/WRITE HANDLERS //************************************************************************** +DEVICE_ADDRESS_MAP_START( map, 16, cs8221_device ) + AM_RANGE(0x0022, 0x0023) AM_DEVWRITE8("cs8221", cs8221_device, address_w, 0x00ff) + AM_RANGE(0x0022, 0x0023) AM_DEVREADWRITE8("cs8221", cs8221_device, data_r, data_w, 0xff00) +ADDRESS_MAP_END WRITE8_MEMBER( cs8221_device::address_w ) { diff --git a/src/devices/machine/cs8221.h b/src/devices/machine/cs8221.h index ea7cc4a99b4..b6a403bafba 100644 --- a/src/devices/machine/cs8221.h +++ b/src/devices/machine/cs8221.h @@ -49,6 +49,7 @@ public: DECLARE_WRITE8_MEMBER( address_w ); DECLARE_READ8_MEMBER( data_r ); DECLARE_WRITE8_MEMBER( data_w ); + DECLARE_ADDRESS_MAP(map, 16); // inline configuration static void static_set_cputag(device_t &device, const char *tag); diff --git a/src/devices/machine/eeprom.cpp b/src/devices/machine/eeprom.cpp index 43523c18fb1..c7374775042 100644 --- a/src/devices/machine/eeprom.cpp +++ b/src/devices/machine/eeprom.cpp @@ -21,21 +21,6 @@ #define LOG(x) do { if (VERBOSE) logerror x; } while (0) - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -static ADDRESS_MAP_START( eeprom_map8, AS_PROGRAM, 8, eeprom_base_device ) - AM_RANGE(0x00000, 0xfffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( eeprom_map16, AS_PROGRAM, 16, eeprom_base_device ) - AM_RANGE(0x00000, 0x7ffff) AM_RAM -ADDRESS_MAP_END - - - //************************************************************************** // LIVE DEVICE //************************************************************************** @@ -46,7 +31,6 @@ ADDRESS_MAP_END eeprom_base_device::eeprom_base_device(const machine_config &mconfig, device_type devtype, const char *name, const char *tag, device_t *owner, const char *shortname, const char *file) : device_t(mconfig, devtype, name, tag, owner, 0, shortname, file), - device_memory_interface(mconfig, *this), device_nvram_interface(mconfig, *this), m_region(*this, DEVICE_SELF), m_cells(0), @@ -85,12 +69,6 @@ void eeprom_base_device::static_set_size(device_t &device, int cells, int cellbi cells >>= 1; eeprom.m_address_bits++; } - - // describe our address space - if (eeprom.m_data_bits == 8) - eeprom.m_space_config = address_space_config("eeprom", ENDIANNESS_BIG, 8, eeprom.m_address_bits, 0, *ADDRESS_MAP_NAME(eeprom_map8)); - else - eeprom.m_space_config = address_space_config("eeprom", ENDIANNESS_BIG, 16, eeprom.m_address_bits * 2, 0, *ADDRESS_MAP_NAME(eeprom_map16)); } @@ -231,8 +209,12 @@ void eeprom_base_device::device_validity_check(validity_checker &valid) const void eeprom_base_device::device_start() { + UINT32 size = (m_data_bits == 8 ? 1 : 2) << m_address_bits; + m_data = std::make_unique<UINT8 []>(size); + // save states save_item(NAME(m_completion_time)); + save_pointer(m_data.get(), "m_data", size); } @@ -248,17 +230,6 @@ void eeprom_base_device::device_reset() //------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *eeprom_base_device::memory_space_config(address_spacenum spacenum) const -{ - return (spacenum == 0) ? &m_space_config : nullptr; -} - - -//------------------------------------------------- // nvram_default - called to initialize NVRAM to // its default state //------------------------------------------------- @@ -271,10 +242,7 @@ void eeprom_base_device::nvram_default() // initialize to the default value UINT32 default_value = m_default_value_set ? m_default_value : ~0; for (offs_t offs = 0; offs < eeprom_length; offs++) - if (m_data_bits == 8) - space(AS_PROGRAM).write_byte(offs, default_value); - else - space(AS_PROGRAM).write_word(offs * 2, default_value); + internal_write(offs, default_value); // handle hard-coded data from the driver if (m_default_data.u8 != nullptr) @@ -283,9 +251,9 @@ void eeprom_base_device::nvram_default() for (offs_t offs = 0; offs < m_default_data_size; offs++) { if (m_data_bits == 8) - space(AS_PROGRAM).write_byte(offs, m_default_data.u8[offs]); + internal_write(offs, m_default_data.u8[offs]); else - space(AS_PROGRAM).write_word(offs * 2, m_default_data.u16[offs]); + internal_write(offs, m_default_data.u16[offs]); } } @@ -300,18 +268,7 @@ void eeprom_base_device::nvram_default() fatalerror("eeprom region '%s' needs to be a 16-bit big-endian region\n", tag()); osd_printf_verbose("Loading data from EEPROM region '%s'\n", tag()); - if (m_data_bits == 8) - { - UINT8 *default_data = m_region->base(); - for (offs_t offs = 0; offs < eeprom_length; offs++) - space(AS_PROGRAM).write_byte(offs, default_data[offs]); - } - else - { - UINT16 *default_data = (UINT16 *)(m_region->base()); - for (offs_t offs = 0; offs < eeprom_length; offs++) - space(AS_PROGRAM).write_word(offs * 2, default_data[offs]); - } + memcpy(&m_data[0], m_region->base(), eeprom_bytes); } } @@ -326,10 +283,7 @@ void eeprom_base_device::nvram_read(emu_file &file) UINT32 eeprom_length = 1 << m_address_bits; UINT32 eeprom_bytes = eeprom_length * m_data_bits / 8; - dynamic_buffer buffer(eeprom_bytes); - file.read(&buffer[0], eeprom_bytes); - for (offs_t offs = 0; offs < eeprom_bytes; offs++) - space(AS_PROGRAM).write_byte(offs, buffer[offs]); + file.read(&m_data[0], eeprom_bytes); } @@ -343,10 +297,7 @@ void eeprom_base_device::nvram_write(emu_file &file) UINT32 eeprom_length = 1 << m_address_bits; UINT32 eeprom_bytes = eeprom_length * m_data_bits / 8; - dynamic_buffer buffer(eeprom_bytes); - for (offs_t offs = 0; offs < eeprom_bytes; offs++) - buffer[offs] = space(AS_PROGRAM).read_byte(offs); - file.write(&buffer[0], eeprom_bytes); + file.write(&m_data[0], eeprom_bytes); } @@ -357,9 +308,9 @@ void eeprom_base_device::nvram_write(emu_file &file) UINT32 eeprom_base_device::internal_read(offs_t address) { if (m_data_bits == 16) - return space(AS_PROGRAM).read_word(address * 2); + return m_data[address * 2] | (m_data[address * 2 + 1] << 8); else - return space(AS_PROGRAM).read_byte(address); + return m_data[address]; } @@ -371,7 +322,9 @@ UINT32 eeprom_base_device::internal_read(offs_t address) void eeprom_base_device::internal_write(offs_t address, UINT32 data) { if (m_data_bits == 16) - space(AS_PROGRAM).write_word(address * 2, data); - else - space(AS_PROGRAM).write_byte(address, data); + { + m_data[address*2] = data; + m_data[address*2+1] = data >> 8; + } else + m_data[address] = data; } diff --git a/src/devices/machine/eeprom.h b/src/devices/machine/eeprom.h index 6eb802641e3..02dd2eaf6de 100644 --- a/src/devices/machine/eeprom.h +++ b/src/devices/machine/eeprom.h @@ -44,8 +44,7 @@ // ======================> eeprom_base_device class eeprom_base_device : public device_t, - public device_memory_interface, - public device_nvram_interface + public device_nvram_interface { protected: // construction/destruction @@ -79,31 +78,29 @@ public: // status bool ready() const { return machine().time() >= m_completion_time; } + // internal read/write without side-effects + UINT32 internal_read(offs_t address); + void internal_write(offs_t address, UINT32 data); + protected: // device-level overrides virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; virtual void device_reset() override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - // device_nvram_interface overrides virtual void nvram_default() override; virtual void nvram_read(emu_file &file) override; virtual void nvram_write(emu_file &file) override; - // internal read/write without side-effects - UINT32 internal_read(offs_t address); - void internal_write(offs_t address, UINT32 data); - optional_memory_region m_region; + std::unique_ptr<UINT8 []> m_data; + // configuration state UINT32 m_cells; UINT8 m_address_bits; UINT8 m_data_bits; - address_space_config m_space_config; generic_ptr m_default_data; UINT32 m_default_data_size; UINT32 m_default_value; diff --git a/src/devices/machine/gt64xxx.cpp b/src/devices/machine/gt64xxx.cpp index 51bf9dbc2f7..d1b0f15e61a 100644 --- a/src/devices/machine/gt64xxx.cpp +++ b/src/devices/machine/gt64xxx.cpp @@ -206,24 +206,24 @@ void gt64xxx_device::map_cpu_space() // PCI IO Window winStart = m_reg[GREG_PCI_IO_LO]<<21; winEnd = (m_reg[GREG_PCI_IO_LO]<<21) | (m_reg[GREG_PCI_IO_HI]<<21) | 0x1fffff; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::master_io_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::master_io_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::master_io_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::master_io_w), this)); if (LOG_GALILEO) logerror("%s: map_cpu_space pci_io start: %08X end: %08X\n", tag(), winStart, winEnd); // PCI MEM0 Window winStart = m_reg[GREG_PCI_MEM0_LO]<<21; winEnd = (m_reg[GREG_PCI_MEM0_LO]<<21) | (m_reg[GREG_PCI_MEM0_HI]<<21) | 0x1fffff; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::master_mem0_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::master_mem0_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::master_mem0_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::master_mem0_w), this)); if (LOG_GALILEO) logerror("%s: map_cpu_space pci_mem0 start: %08X end: %08X\n", tag(), winStart, winEnd); // PCI MEM1 Window winStart = m_reg[GREG_PCI_MEM1_LO]<<21; winEnd = (m_reg[GREG_PCI_MEM1_LO]<<21) | (m_reg[GREG_PCI_MEM1_HI]<<21) | 0x1fffff; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::master_mem1_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::master_mem1_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::master_mem1_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::master_mem1_w), this)); if (LOG_GALILEO) logerror("%s: map_cpu_space pci_mem1 start: %08X end: %08X\n", tag(), winStart, winEnd); @@ -266,8 +266,8 @@ void gt64xxx_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_LO + 0x8 / 4 * ramIndex] << 20); winEnd = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_HI + 0x8 / 4 * ramIndex] << 20) | 0xfffff; winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::ras_0_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::ras_0_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::ras_0_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::ras_0_w), this)); if (LOG_GALILEO) logerror("%s: map_extra RAS0 start=%08X end=%08X size=%08X\n", tag(), winStart, winEnd, winSize); @@ -276,8 +276,8 @@ void gt64xxx_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_LO + 0x8 / 4 * ramIndex] << 20); winEnd = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_HI + 0x8 / 4 * ramIndex] << 20) | 0xfffff; winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::ras_1_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::ras_1_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::ras_1_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::ras_1_w), this)); if (LOG_GALILEO) logerror("%s: map_extra RAS1 start=%08X end=%08X size=%08X\n", tag(), winStart, winEnd, winSize); @@ -286,8 +286,8 @@ void gt64xxx_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_LO + 0x8 / 4 * ramIndex] << 20); winEnd = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_HI + 0x8 / 4 * ramIndex] << 20) | 0xfffff; winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::ras_2_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::ras_2_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::ras_2_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::ras_2_w), this)); if (LOG_GALILEO) logerror("%s: map_extra RAS2 start=%08X end=%08X size=%08X\n", tag(), winStart, winEnd, winSize); @@ -296,8 +296,8 @@ void gt64xxx_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_LO + 0x8 / 4 * ramIndex] << 20); winEnd = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_HI + 0x8 / 4 * ramIndex] << 20) | 0xfffff; winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::ras_3_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::ras_3_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::ras_3_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::ras_3_w), this)); if (LOG_GALILEO) logerror("%s: map_extra RAS3 start=%08X end=%08X size=%08X\n", tag(), winStart, winEnd, winSize); } diff --git a/src/devices/machine/hp_taco.cpp b/src/devices/machine/hp_taco.cpp index 9bd1c426a30..654c32f1182 100644 --- a/src/devices/machine/hp_taco.cpp +++ b/src/devices/machine/hp_taco.cpp @@ -1686,42 +1686,38 @@ void hp_taco_device::call_unload() set_tape_present(false); } -void hp_taco_device::call_display() +int hp_taco_device::call_display(std::string& s) { -/* - // Mostly lifted from cassette_image_device::call_display ;) + // Mostly lifted from cassette_image_device::call_display ;) - // Do not show anything if image not loaded or tape not moving - if (!exists() || m_start_time.is_never()) { - return; - } + // Do not show anything if image not loaded or tape not moving + if (!exists() || m_start_time.is_never()) { + return -1; + } - char buffer[ 64 ]; + char buffer[ 64 ]; - char track = BIT(m_status_reg , STATUS_TRACKB_BIT) ? 'B' : 'A'; - char r_w = m_tape_wr ? 'W' : 'R'; - char m1; - char m2; + char track = BIT(m_status_reg , STATUS_TRACKB_BIT) ? 'B' : 'A'; + char r_w = m_tape_wr ? 'W' : 'R'; + char m1; + char m2; - if (m_tape_fwd) { - m1 = '>'; - m2 = m_tape_fast ? '>' : ' '; - } else { - m1 = '<'; - m2 = m_tape_fast ? '<' : ' '; - } + if (m_tape_fwd) { + m1 = '>'; + m2 = m_tape_fast ? '>' : ' '; + } else { + m1 = '<'; + m2 = m_tape_fast ? '<' : ' '; + } - int pos_in = current_tape_pos() / ONE_INCH_POS; + int pos_in = current_tape_pos() / ONE_INCH_POS; - snprintf(buffer , sizeof(buffer) , "%c %c %c%c [%04d/1824]" , track , r_w , m1 , m2 , pos_in); + snprintf(buffer , sizeof(buffer) , "%c %c %c%c [%04d/1824]" , track , r_w , m1 , m2 , pos_in); - float x, y; - x = 0.2f; - y = 0.5f; - y *= device().machine().ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER; + s = buffer; - device().machine().ui().draw_text_box(&device().machine().render().ui_container(), buffer, JUSTIFY_LEFT, x, y, UI_BACKGROUND_COLOR); - */ + // Not correct when there are 2 or more instances of TACO + return 0; } const char *hp_taco_device::file_extensions() const diff --git a/src/devices/machine/hp_taco.h b/src/devices/machine/hp_taco.h index d8807616204..4ae2ab9464f 100644 --- a/src/devices/machine/hp_taco.h +++ b/src/devices/machine/hp_taco.h @@ -47,7 +47,7 @@ public: virtual bool call_load() override; virtual bool call_create(int format_type, option_resolution *format_options) override; virtual void call_unload() override; - virtual void call_display() override; + virtual int call_display(std::string& s) override; virtual iodevice_t image_type() const override { return IO_MAGTAPE; } virtual bool is_readable() const override { return true; } virtual bool is_writeable() const override { return true; } diff --git a/src/devices/machine/i2cmem.cpp b/src/devices/machine/i2cmem.cpp index ba320d1f5cd..bac06e66420 100644 --- a/src/devices/machine/i2cmem.cpp +++ b/src/devices/machine/i2cmem.cpp @@ -60,11 +60,6 @@ static inline void ATTR_PRINTF( 3, 4 ) verboselog( device_t *device, int n_level // device type definition const device_type I2CMEM = &device_creator<i2cmem_device>; -static ADDRESS_MAP_START( i2cmem_map8, AS_PROGRAM, 8, i2cmem_device ) - AM_RANGE(0x0000, 0x0fff) AM_RAM -ADDRESS_MAP_END - - //************************************************************************** // LIVE DEVICE @@ -76,7 +71,6 @@ ADDRESS_MAP_END i2cmem_device::i2cmem_device( const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock ) : device_t(mconfig, I2CMEM, "I2C Memory", tag, owner, clock, "i2cmem", __FILE__), - device_memory_interface(mconfig, *this), device_nvram_interface(mconfig, *this), m_region(*this, DEVICE_SELF), m_slave_address( I2CMEM_SLAVE_ADDRESS ), @@ -96,25 +90,6 @@ i2cmem_device::i2cmem_device( const machine_config &mconfig, const char *tag, de } -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void i2cmem_device::device_config_complete() -{ - int address_bits = 0; - - int i = m_data_size - 1; - while( i > 0 ) - { - address_bits++; - i >>= 1; - } - - m_space_config = address_space_config( "i2cmem", ENDIANNESS_BIG, 8, address_bits, 0, *ADDRESS_MAP_NAME( i2cmem_map8 ) ); -} //------------------------------------------------- @@ -123,6 +98,7 @@ void i2cmem_device::device_config_complete() void i2cmem_device::device_start() { + m_data = std::make_unique<UINT8 []>(m_data_size); m_page.resize( m_page_size ); save_item( NAME(m_scl) ); @@ -137,6 +113,7 @@ void i2cmem_device::device_start() save_item( NAME(m_shift) ); save_item( NAME(m_devsel) ); save_item( NAME(m_byteaddr) ); + save_pointer( &m_data[0], "m_data", m_data_size ); if ( m_page_size > 0 ) { save_item( NAME(m_page) ); @@ -154,37 +131,20 @@ void i2cmem_device::device_reset() //------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *i2cmem_device::memory_space_config( address_spacenum spacenum ) const -{ - return ( spacenum == 0 ) ? &m_space_config : nullptr; -} - - -//------------------------------------------------- // nvram_default - called to initialize NVRAM to // its default state //------------------------------------------------- void i2cmem_device::nvram_default() { - int i2cmem_bytes = m_data_size; - - UINT16 default_value = 0xff; - for( offs_t offs = 0; offs < i2cmem_bytes; offs++ ) - { - space(AS_PROGRAM).write_byte( offs, default_value ); - } + memset(&m_data[0], 0xff, m_data_size); /* populate from a memory region if present */ if (m_region.found()) { - if( m_region->bytes() != i2cmem_bytes ) + if( m_region->bytes() != m_data_size ) { - fatalerror( "i2cmem region '%s' wrong size (expected size = 0x%X)\n", tag(), i2cmem_bytes ); + fatalerror( "i2cmem region '%s' wrong size (expected size = 0x%X)\n", tag(), m_data_size ); } if( m_region->bytewidth() != 1 ) @@ -192,9 +152,7 @@ void i2cmem_device::nvram_default() fatalerror( "i2cmem region '%s' needs to be an 8-bit region\n", tag() ); } - UINT8 *default_data = m_region->base(); - for( offs_t offs = 0; offs < i2cmem_bytes; offs++ ) - space(AS_PROGRAM).write_byte( offs, default_data[offs] ); + memcpy(&m_data[0], m_region->base(), m_data_size); } } @@ -206,15 +164,7 @@ void i2cmem_device::nvram_default() void i2cmem_device::nvram_read( emu_file &file ) { - int i2cmem_bytes = m_data_size; - dynamic_buffer buffer ( i2cmem_bytes ); - - file.read( &buffer[0], i2cmem_bytes ); - - for( offs_t offs = 0; offs < i2cmem_bytes; offs++ ) - { - space(AS_PROGRAM).write_byte( offs, buffer[ offs ] ); - } + file.read( &m_data[0], m_data_size ); } //------------------------------------------------- @@ -224,15 +174,7 @@ void i2cmem_device::nvram_read( emu_file &file ) void i2cmem_device::nvram_write( emu_file &file ) { - int i2cmem_bytes = m_data_size; - dynamic_buffer buffer ( i2cmem_bytes ); - - for( offs_t offs = 0; offs < i2cmem_bytes; offs++ ) - { - buffer[ offs ] = space(AS_PROGRAM).read_byte( offs ); - } - - file.write( &buffer[0], i2cmem_bytes ); + file.write( &m_data[0], m_data_size ); } @@ -376,7 +318,7 @@ WRITE_LINE_MEMBER( i2cmem_device::write_scl ) for( int i = 0; i < m_page_size; i++ ) { - space(AS_PROGRAM).write_byte( offset + i, m_page[ i ] ); + m_data[offset + i] = m_page[ i ]; } m_page_offset = 0; @@ -387,7 +329,7 @@ WRITE_LINE_MEMBER( i2cmem_device::write_scl ) int offset = data_offset(); verboselog( this, 1, "data[ %04x ] <- %02x\n", offset, m_shift ); - space(AS_PROGRAM).write_byte( offset, m_shift ); + m_data[ offset ] = m_shift; m_byteaddr++; } @@ -420,7 +362,7 @@ WRITE_LINE_MEMBER( i2cmem_device::write_scl ) { int offset = data_offset(); - m_shift = space(AS_PROGRAM).read_byte( offset ); + m_shift = m_data[offset]; verboselog( this, 1, "data[ %04x ] -> %02x\n", offset, m_shift ); m_byteaddr++; } diff --git a/src/devices/machine/i2cmem.h b/src/devices/machine/i2cmem.h index a45a51098e3..801aa6de3bd 100644 --- a/src/devices/machine/i2cmem.h +++ b/src/devices/machine/i2cmem.h @@ -85,7 +85,6 @@ class i2cmem_device : public device_t, - public device_memory_interface, public device_nvram_interface { public: @@ -111,13 +110,9 @@ public: protected: // device-level overrides - virtual void device_config_complete() override; virtual void device_start() override; virtual void device_reset() override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config( address_spacenum spacenum = AS_0 ) const override; - // device_nvram_interface overrides virtual void nvram_default() override; virtual void nvram_read( emu_file &file ) override; @@ -130,10 +125,8 @@ protected: optional_memory_region m_region; - // device-specific configuration - address_space_config m_space_config; - // internal state + std::unique_ptr<UINT8[]> m_data; int m_slave_address; int m_page_size; int m_data_size; diff --git a/src/devices/machine/i8251.cpp b/src/devices/machine/i8251.cpp index 8baf4bc57ec..7b0d272970d 100644 --- a/src/devices/machine/i8251.cpp +++ b/src/devices/machine/i8251.cpp @@ -205,21 +205,20 @@ void i8251_device::transmit_clock() else return; - if (is_transmit_register_empty()) { - if ((m_status & I8251_STATUS_TX_READY) == 0 && (is_tx_enabled() || (m_flags & I8251_DELAYED_TX_EN) != 0)) { - start_tx(); - } else { - m_status |= I8251_STATUS_TX_EMPTY; - } - update_tx_ready(); - update_tx_empty(); + if (is_transmit_register_empty()) { + if ((m_status & I8251_STATUS_TX_READY) == 0 && (is_tx_enabled() || (m_flags & I8251_DELAYED_TX_EN) != 0)) { + start_tx(); + } else { + m_status |= I8251_STATUS_TX_EMPTY; } - /* if diserial has bits to send, make them so */ - if (!is_transmit_register_empty()) - { - UINT8 data = transmit_register_get_data_bit(); - m_txd_handler(data); - } + update_tx_ready(); + update_tx_empty(); + } + /* if diserial has bits to send, make them so */ + if (!is_transmit_register_empty()) { + UINT8 data = transmit_register_get_data_bit(); + m_txd_handler(data); + } #if 0 /* hunt mode? */ diff --git a/src/devices/machine/intelfsh.cpp b/src/devices/machine/intelfsh.cpp index 5f2c0a154ac..393127360c7 100644 --- a/src/devices/machine/intelfsh.cpp +++ b/src/devices/machine/intelfsh.cpp @@ -110,48 +110,6 @@ const device_type INTEL_28F320J5 = &device_creator<intel_28f320j5_device>; const device_type SST_39VF400A = &device_creator<sst_39vf400a_device>; -static ADDRESS_MAP_START( memory_map8_512Kb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x00ffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map8_1Mb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x01ffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map8_2Mb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x03ffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map8_4Mb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x07ffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map8_8Mb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x0fffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map8_16Mb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x1fffff) AM_RAM -ADDRESS_MAP_END - - -static ADDRESS_MAP_START( memory_map16_4Mb, AS_PROGRAM, 16, intelfsh_device ) - AM_RANGE(0x00000, 0x03ffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map16_16Mb, AS_PROGRAM, 16, intelfsh_device ) - AM_RANGE(0x00000, 0x0fffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map16_32Mb, AS_PROGRAM, 16, intelfsh_device ) - AM_RANGE(0x00000, 0x1fffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map16_64Mb, AS_PROGRAM, 16, intelfsh_device ) - AM_RANGE(0x00000, 0x3fffff) AM_RAM -ADDRESS_MAP_END - - //************************************************************************** // LIVE DEVICE @@ -163,7 +121,6 @@ ADDRESS_MAP_END intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source) : device_t(mconfig, type, name, tag, owner, clock, shortname, source), - device_memory_interface(mconfig, *this), device_nvram_interface(mconfig, *this), m_region(*this, DEVICE_SELF), m_type(variant), @@ -182,8 +139,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_timer(nullptr), m_bank(0) { - address_map_constructor map = nullptr; - switch( variant ) { case FLASH_INTEL_28F016S5: @@ -192,7 +147,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_size = 0x200000; m_maker_id = MFG_INTEL; m_device_id = 0xaa; - map = ADDRESS_MAP_NAME( memory_map8_16Mb ); break; case FLASH_ATMEL_29C010: m_bits = 8; @@ -200,21 +154,18 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_page_size = 0x80; m_maker_id = MFG_ATMEL; m_device_id = 0xd5; - map = ADDRESS_MAP_NAME( memory_map8_1Mb ); break; case FLASH_AMD_29F010: m_bits = 8; m_size = 0x20000; m_maker_id = MFG_AMD; m_device_id = 0x20; - map = ADDRESS_MAP_NAME( memory_map8_1Mb ); break; case FLASH_AMD_29F040: m_bits = 8; m_size = 0x80000; m_maker_id = MFG_AMD; m_device_id = 0xa4; - map = ADDRESS_MAP_NAME( memory_map8_4Mb ); break; case FLASH_AMD_29F080: m_bits = 8; @@ -222,7 +173,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_addrmask = 0x7ff; m_maker_id = MFG_AMD; m_device_id = 0xd5; - map = ADDRESS_MAP_NAME( memory_map8_8Mb ); break; case FLASH_AMD_29F400T: m_bits = 8; @@ -230,7 +180,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_AMD; m_device_id = 0x23; m_top_boot_sector = true; - map = ADDRESS_MAP_NAME( memory_map8_4Mb ); break; case FLASH_AMD_29F800T: m_bits = 8; @@ -238,14 +187,12 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_AMD; m_device_id = 0xda; m_top_boot_sector = true; - map = ADDRESS_MAP_NAME( memory_map8_8Mb ); break; case FLASH_AMD_29LV200T: m_bits = 8; m_size = 0x40000; m_maker_id = MFG_AMD; m_device_id = 0x3b; - map = ADDRESS_MAP_NAME( memory_map8_2Mb ); break; case FLASH_INTEL_28F320J3D: m_bits = 16; @@ -253,7 +200,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_INTEL; m_device_id = 0x16; m_sector_is_4k = true; - map = ADDRESS_MAP_NAME( memory_map16_32Mb ); break; case FLASH_INTEL_28F320J5: // funkball m_bits = 16; @@ -261,7 +207,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_INTEL; m_device_id = 0x14; // m_sector_is_4k = true; 128kb? - map = ADDRESS_MAP_NAME( memory_map16_32Mb ); break; case FLASH_SST_39VF020: m_bits = 8; @@ -269,7 +214,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_SST; m_device_id = 0xd6; m_sector_is_4k = true; - map = ADDRESS_MAP_NAME( memory_map8_2Mb ); break; case FLASH_SST_39VF400A: m_bits = 16; @@ -277,21 +221,18 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_SST; m_device_id = 0xd6; m_sector_is_4k = true; - map = ADDRESS_MAP_NAME( memory_map16_4Mb ); break; case FLASH_SHARP_LH28F400: m_bits = 16; m_size = 0x80000; m_maker_id = MFG_SHARP; m_device_id = 0xed; - map = ADDRESS_MAP_NAME( memory_map16_4Mb ); break; case FLASH_INTEL_E28F400B: m_bits = 16; m_size = 0x80000; m_maker_id = MFG_INTEL; m_device_id = 0x4471; - map = ADDRESS_MAP_NAME( memory_map16_4Mb ); break; case FLASH_FUJITSU_29F160T: m_bits = 8; @@ -299,56 +240,48 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_FUJITSU; m_device_id = 0xad; m_top_boot_sector = true; - map = ADDRESS_MAP_NAME( memory_map8_16Mb ); break; case FLASH_FUJITSU_29F016A: m_bits = 8; m_size = 0x200000; m_maker_id = MFG_FUJITSU; m_device_id = 0xad; - map = ADDRESS_MAP_NAME( memory_map8_16Mb ); break; case FLASH_FUJITSU_29DL16X: m_bits = 8; m_size = 0x200000; m_maker_id = MFG_FUJITSU; m_device_id = 0x35; - map = ADDRESS_MAP_NAME( memory_map8_16Mb ); break; case FLASH_INTEL_E28F008SA: m_bits = 8; m_size = 0x100000; m_maker_id = MFG_INTEL; m_device_id = 0xa2; - map = ADDRESS_MAP_NAME( memory_map8_8Mb ); break; case FLASH_INTEL_TE28F160: m_bits = 16; m_size = 0x200000; m_maker_id = MFG_SHARP; m_device_id = 0xd0; - map = ADDRESS_MAP_NAME( memory_map16_16Mb ); break; case FLASH_INTEL_TE28F320: m_bits = 16; m_size = 0x400000; m_maker_id = MFG_INTEL; m_device_id = 0x8896; - map = ADDRESS_MAP_NAME( memory_map16_32Mb ); break; case FLASH_SHARP_UNK128MBIT: m_bits = 16; m_size = 0x800000; m_maker_id = MFG_SHARP; m_device_id = 0xb0; - map = ADDRESS_MAP_NAME( memory_map16_64Mb ); break; case FLASH_MACRONIX_29L001MC: m_bits = 8; m_size = 0x20000; m_maker_id = MFG_MACRONIX; m_device_id = 0x51; - map = ADDRESS_MAP_NAME( memory_map8_1Mb ); break; case FLASH_MACRONIX_29LV160TMC: m_bits = 8; @@ -356,7 +289,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_MACRONIX; m_device_id = 0x49; m_sector_is_16k = true; - map = ADDRESS_MAP_NAME( memory_map8_1Mb ); break; case FLASH_PANASONIC_MN63F805MNP: m_bits = 8; @@ -364,7 +296,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_PANASONIC; m_device_id = 0x1b; m_sector_is_4k = true; - map = ADDRESS_MAP_NAME( memory_map8_512Kb ); break; case FLASH_SANYO_LE26FV10N1TS: m_bits = 8; @@ -372,14 +303,12 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_SANYO; m_device_id = 0x13; m_sector_is_4k = true; - map = ADDRESS_MAP_NAME( memory_map8_1Mb ); break; case FLASH_SST_28SF040: m_bits = 8; m_size = 0x80000; m_maker_id = MFG_SST; m_device_id = 0x04; - map = ADDRESS_MAP_NAME( memory_map8_4Mb ); break; case FLASH_TMS_29F040: m_bits = 8; @@ -387,7 +316,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_size = 0x80000; m_maker_id = MFG_AMD; m_device_id = 0xa4; - map = ADDRESS_MAP_NAME( memory_map8_4Mb ); break; } @@ -395,8 +323,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type for (addrbits = 24; addrbits > 0; addrbits--) if ((m_size & (1 << addrbits)) != 0) break; - - m_space_config = address_space_config("flash", ENDIANNESS_BIG, m_bits, addrbits, (m_bits == 8) ? 0 : -1, map); } intelfsh8_device::intelfsh8_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source) @@ -498,11 +424,13 @@ tms_29f040_device::tms_29f040_device(const machine_config &mconfig, const char * void intelfsh_device::device_start() { + m_data = std::make_unique<UINT8 []>(m_size); m_timer = timer_alloc(); save_item( NAME(m_status) ); save_item( NAME(m_flash_mode) ); save_item( NAME(m_flash_master_lock) ); + save_pointer( &m_data[0], "m_data", m_size); } @@ -526,17 +454,6 @@ void intelfsh_device::device_timer(emu_timer &timer, device_timer_id id, int par //------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *intelfsh_device::memory_space_config(address_spacenum spacenum) const -{ - return (spacenum == 0) ? &m_space_config : nullptr; -} - - -//------------------------------------------------- // nvram_default - called to initialize NVRAM to // its default state //------------------------------------------------- @@ -553,19 +470,21 @@ void intelfsh_device::nvram_default() if (m_bits == 8) { for (offs_t offs = 0; offs < bytes; offs++) - space(AS_PROGRAM).write_byte(offs, m_region->u8(offs)); + m_data[offs] = m_region->u8(offs); } else { - for (offs_t offs = 0; offs < bytes; offs += 2) - space(AS_PROGRAM).write_word(offs, m_region->u16(offs / 2)); + for (offs_t offs = 0; offs < bytes; offs += 2) { + UINT16 v = m_region->u16(offs / 2); + m_data[offs] = v >> 8; + m_data[offs+1] = v; + } } return; } // otherwise, default to 0xff - for (offs_t offs = 0; offs < m_size; offs++) - space(AS_PROGRAM).write_byte(offs, 0xff); + memset(&m_data[0], 0xff, m_size); } @@ -576,10 +495,7 @@ void intelfsh_device::nvram_default() void intelfsh_device::nvram_read(emu_file &file) { - dynamic_buffer buffer(m_size); - file.read(&buffer[0], m_size); - for (int byte = 0; byte < m_size; byte++) - space(AS_PROGRAM).write_byte(byte, buffer[byte]); + file.read(&m_data[0], m_size); } @@ -590,10 +506,7 @@ void intelfsh_device::nvram_read(emu_file &file) void intelfsh_device::nvram_write(emu_file &file) { - dynamic_buffer buffer(m_size); - for (int byte = 0; byte < m_size; byte++) - buffer[byte] = space(AS_PROGRAM).read_byte(byte); - file.write(&buffer[0], m_size); + file.write(&m_data[0], m_size); } @@ -614,12 +527,12 @@ UINT32 intelfsh_device::read_full(UINT32 address) { case 8: { - data = space(AS_PROGRAM).read_byte(address); + data = m_data[address]; } break; case 16: { - data = space(AS_PROGRAM).read_word(address * 2); + data = m_data[address*2+1] | (m_data[address*2] << 8); } break; } @@ -693,12 +606,12 @@ UINT32 intelfsh_device::read_full(UINT32 address) { case 8: { - data = space(AS_PROGRAM).read_byte(address); + data = m_data[address]; } break; case 16: { - data = space(AS_PROGRAM).read_word(address * 2); + data = m_data[address*2+1] | (m_data[address*2] << 8); } break; } @@ -921,8 +834,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) (( address & 0xfff ) == 0xaaa && ( data & 0xff ) == 0x10 ) ) { // chip erase - for (offs_t offs = 0; offs < m_size; offs++) - space(AS_PROGRAM).write_byte(offs, 0xff); + memset(&m_data[0], 0, m_size); m_status = 1 << 3; m_flash_mode = FM_ERASEAMD4; @@ -947,15 +859,13 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) UINT32 base = address * ((m_bits == 16) ? 2 : 1); if (m_sector_is_4k) { - for (offs_t offs = 0; offs < 4 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0xfff) + offs, 0xff); + memset(&m_data[base & ~0xfff], 0xff, 4 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0x7ff : ~0xfff); m_timer->adjust( attotime::from_msec( 125 ) ); } else if(m_sector_is_16k) { - for (offs_t offs = 0; offs < 16 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0x3fff) + offs, 0xff); + memset(&m_data[base & ~0x3fff], 0xff, 16 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0x1fff : ~0x3fff); m_timer->adjust( attotime::from_msec( 500 ) ); } @@ -963,30 +873,26 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) { if (address >= (m_size - (16*1024))) { - for (offs_t offs = 0; offs < 16 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0x3fff) + offs, 0xff); + memset(&m_data[base & ~0x3fff], 0xff, 16 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0x1fff : ~0x3fff); m_timer->adjust( attotime::from_msec( 500 ) ); } else if (address >= (m_size - (32*1024))) { - for (offs_t offs = 0; offs < 8 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0x1fff) + offs, 0xff); + memset(&m_data[base & ~0x1fff], 0xff, 8 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0xfff : ~0x1fff); m_timer->adjust( attotime::from_msec( 250 ) ); } else { - for (offs_t offs = 0; offs < 32 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0x7fff) + offs, 0xff); + memset(&m_data[base & ~0x7fff], 0xff, 32 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0x3fff : ~0x7fff); m_timer->adjust( attotime::from_msec( 500 ) ); } } else { - for (offs_t offs = 0; offs < 64 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0xffff) + offs, 0xff); + memset(&m_data[base & ~0xffff], 0xff, 64 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0x7fff : ~0xffff); m_timer->adjust( attotime::from_seconds( 1 ) ); } @@ -1004,7 +910,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) { case 8: { - space(AS_PROGRAM).write_byte(address, data); + m_data[address] = data; } break; default: @@ -1017,10 +923,11 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) switch( m_bits ) { case 8: - space(AS_PROGRAM).write_byte(address, data); + m_data[address] = data; break; case 16: - space(AS_PROGRAM).write_word(address * 2, data); + m_data[address*2] = data >> 8; + m_data[address] = data; break; default: logerror( "FM_WRITEPART1 not supported when m_bits == %d\n", m_bits ); @@ -1036,10 +943,11 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) switch( m_bits ) { case 8: - space(AS_PROGRAM).write_byte(address, data); + m_data[address] = data; break; case 16: - space(AS_PROGRAM).write_word(address * 2, data); + m_data[address*2] = data >> 8; + m_data[address] = data; break; default: logerror( "FM_WRITEPAGEATMEL not supported when m_bits == %d\n", m_bits ); @@ -1060,8 +968,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) { // clear the 256 bytes block containing the current address to all 0xffs UINT32 base = address * ((m_bits == 16) ? 2 : 1); - for (offs_t offs = 0; offs < 256; offs++) - space(AS_PROGRAM).write_byte((base & ~0xff) + offs, 0xff); + memset(&m_data[base & ~0xff], 0xff, 256); m_timer->adjust( attotime::from_msec( 4 ) ); } @@ -1103,8 +1010,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) } // clear the block containing the current address to all 0xffffs - for (offs_t offs = 0; offs < size / 2; offs += 2) - space(AS_PROGRAM).write_word(base | offs, 0xffff); + memset(&m_data[2*base], 0xff, size); m_timer->adjust( attotime::from_msec( duration ) ); } @@ -1112,8 +1018,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) { // clear the 64k block containing the current address to all 0xffs UINT32 base = address * ((m_bits == 16) ? 2 : 1); - for (offs_t offs = 0; offs < 64 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0xffff) + offs, 0xff); + memset(&m_data[base & ~0xffff], 0xff, 64 * 1024); m_timer->adjust( attotime::from_seconds( 1 ) ); } diff --git a/src/devices/machine/intelfsh.h b/src/devices/machine/intelfsh.h index 611c2a01d49..68604a453ab 100644 --- a/src/devices/machine/intelfsh.h +++ b/src/devices/machine/intelfsh.h @@ -106,7 +106,6 @@ class intelfsh_device; // ======================> intelfsh_device class intelfsh_device : public device_t, - public device_memory_interface, public device_nvram_interface { public: @@ -145,6 +144,8 @@ public: FLASH_SST_39VF400A }; + UINT8 *base() { return &m_data[0]; } + protected: // construction/destruction intelfsh_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source); @@ -154,9 +155,6 @@ protected: virtual void device_start() override; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - // device_nvram_interface overrides virtual void nvram_default() override; virtual void nvram_read(emu_file &file) override; @@ -166,29 +164,29 @@ protected: UINT32 read_full(UINT32 offset); void write_full(UINT32 offset, UINT32 data); - optional_memory_region m_region; + optional_memory_region m_region; // configuration state - address_space_config m_space_config; - UINT32 m_type; - INT32 m_size; - UINT8 m_bits; - UINT32 m_addrmask; - UINT16 m_device_id; - UINT8 m_maker_id; - bool m_sector_is_4k; - bool m_sector_is_16k; - bool m_top_boot_sector; - UINT8 m_page_size; + UINT32 m_type; + INT32 m_size; + UINT8 m_bits; + UINT32 m_addrmask; + UINT16 m_device_id; + UINT8 m_maker_id; + bool m_sector_is_4k; + bool m_sector_is_16k; + bool m_top_boot_sector; + UINT8 m_page_size; // internal state - UINT8 m_status; - INT32 m_erase_sector; - INT32 m_flash_mode; - bool m_flash_master_lock; - emu_timer * m_timer; - INT32 m_bank; - UINT8 m_byte_count; + std::unique_ptr<UINT8[]> m_data; + UINT8 m_status; + INT32 m_erase_sector; + INT32 m_flash_mode; + bool m_flash_master_lock; + emu_timer * m_timer; + INT32 m_bank; + UINT8 m_byte_count; }; @@ -207,8 +205,8 @@ public: DECLARE_READ8_MEMBER(read) { return read_full(offset); } DECLARE_WRITE8_MEMBER(write) { write_full(offset, data); } - UINT8 read_raw(offs_t offset) { return space(AS_PROGRAM).read_byte(offset); } - void write_raw(offs_t offset, UINT8 data) { space(AS_PROGRAM).write_byte(offset, data); } + UINT8 read_raw(offs_t offset) { return m_data[offset]; } + void write_raw(offs_t offset, UINT8 data) { m_data[offset] = data; } }; @@ -227,8 +225,8 @@ public: DECLARE_READ16_MEMBER(read) { return read_full(offset); } DECLARE_WRITE16_MEMBER(write) { write_full(offset, data); } - UINT16 read_raw(offs_t offset) { return space(AS_PROGRAM).read_word(offset * 2); } - void write_raw(offs_t offset, UINT16 data) { space(AS_PROGRAM).write_word(offset * 2, data); } + UINT16 read_raw(offs_t offset) { return m_data[offset*2] | (m_data[offset*2+1] << 8); } + void write_raw(offs_t offset, UINT16 data) { m_data[offset*2] = data; m_data[offset*2+1] = data >> 8; } }; diff --git a/src/devices/machine/laserdsc.h b/src/devices/machine/laserdsc.h index 7da9dbc94f3..fa67a167ddc 100644 --- a/src/devices/machine/laserdsc.h +++ b/src/devices/machine/laserdsc.h @@ -79,6 +79,8 @@ enum laserdisc_field_code laserdisc_device::static_set_overlay_palette(*device, "^" _palette_tag); // use these to add laserdisc screens with proper video update parameters +// TODO: actually move these SCREEN_RAW_PARAMS to a common screen info header +// TODO: someday we'll kill the pixel clock hack ... #define MCFG_LASERDISC_SCREEN_ADD_NTSC(_tag, _ldtag) \ MCFG_DEVICE_MODIFY(_ldtag) \ laserdisc_device::static_set_screen(*device, _tag); \ @@ -86,13 +88,13 @@ enum laserdisc_field_code MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_SELF_RENDER) \ MCFG_SCREEN_RAW_PARAMS(XTAL_14_31818MHz*2, 910, 0, 704, 525, 44, 524) \ MCFG_SCREEN_UPDATE_DEVICE(_ldtag, laserdisc_device, screen_update) -// not correct yet; fix me... + #define MCFG_LASERDISC_SCREEN_ADD_PAL(_tag, _ldtag) \ MCFG_DEVICE_MODIFY(_ldtag) \ laserdisc_device::static_set_screen(*device, _tag); \ MCFG_SCREEN_ADD(_tag, RASTER) \ MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_SELF_RENDER) \ - MCFG_SCREEN_RAW_PARAMS(XTAL_14_31818MHz, 910, 0, 704, 525.0/2, 0, 480/2) \ + MCFG_SCREEN_RAW_PARAMS(XTAL_17_73447MHz*2, 1135, 0, 768, 625, 48, 624) \ MCFG_SCREEN_UPDATE_DEVICE(_ldtag, laserdisc_device, screen_update) diff --git a/src/devices/machine/ldp1000.cpp b/src/devices/machine/ldp1000.cpp new file mode 100644 index 00000000000..abfa23913b0 --- /dev/null +++ b/src/devices/machine/ldp1000.cpp @@ -0,0 +1,218 @@ +// license:BSD-3-Clause +// copyright-holders:Angelo Salese +/*************************************************************************** + + Sony LDP-1000 laserdisc emulation. + + TODO: + - Dump BIOSes (seven of them according to docs); + - Serial interface, needs BIOS dump; + - Hookup with Sony SMC-70 / SMC-777; + +***************************************************************************/ + +#include "emu.h" +#include "machine/ldp1000.h" + +#define DUMP_BCD 1 +#define FIFO_MAX 0x10 + +ROM_START( ldp1000 ) + ROM_REGION( 0x2000, "ldp1000", 0 ) + ROM_LOAD( "ldp1000_bios.bin", 0x0000, 0x2000, NO_DUMP ) +ROM_END + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +// device type definition +const device_type SONY_LDP1000 = &device_creator<sony_ldp1000_device>; + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// ldp1000_device - constructor +//------------------------------------------------- + +sony_ldp1000_device::sony_ldp1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : laserdisc_device(mconfig, SONY_LDP1000, "Sony LDP-1000", tag, owner, clock, "ldp1000", __FILE__) +{ +} + + +//------------------------------------------------- +// device_validity_check - perform validity checks +// on this device +//------------------------------------------------- + +void sony_ldp1000_device::device_validity_check(validity_checker &valid) const +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void sony_ldp1000_device::device_start() +{ + laserdisc_device::device_start(); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void sony_ldp1000_device::device_reset() +{ + laserdisc_device::device_reset(); + + for(int i=0;i<0x10;i++) + m_internal_bcd[i] = 0; + +} + +//------------------------------------------------- +// device_rom_region - return a pointer to our +// ROM region definitions +//------------------------------------------------- + +const rom_entry *sony_ldp1000_device::device_rom_region() const +{ + return ROM_NAME(ldp1000); +} + + +//------------------------------------------------- +// player_vsync - VSYNC callback, called at the +// start of the blanking period +//------------------------------------------------- + +void sony_ldp1000_device::player_vsync(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) +{ + //printf("%d vsync\n",fieldnum); +} + + +//------------------------------------------------- +// player_update - update callback, called on +// the first visible line of the frame +//------------------------------------------------- + +INT32 sony_ldp1000_device::player_update(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) +{ + //printf("%d update\n",fieldnum); + + return fieldnum; +} + + +//************************************************************************** +// READ/WRITE HANDLERS +//************************************************************************** + +READ8_MEMBER( sony_ldp1000_device::status_r ) +{ + UINT8 res = m_status; + m_status = stat_undef; + return res; +} + +void sony_ldp1000_device::set_new_player_state(ldp1000_player_state which) +{ + m_player_state = which; + m_index_state = 0; + printf("set new player state\n"); +} + +// TODO: probably don't even need a size ... +void sony_ldp1000_device::set_new_player_bcd(UINT8 data) +{ + m_internal_bcd[m_index_state] = data; + m_index_state ++; + if(m_index_state >= FIFO_MAX) + throw emu_fatalerror("FIFO MAX reached"); + + m_status = stat_ack; +} + +UINT32 sony_ldp1000_device::bcd_to_raw() +{ + UINT32 res = 0; + for(int i=0;i<6;i++) + res |= (m_internal_bcd[i] & 0xf) << i*4; + return res; +} + +void sony_ldp1000_device::exec_enter_cmd() +{ + //const UINT32 saved_frame = bcd_to_raw(); + + switch(m_player_state) + { + case player_standby: + throw emu_fatalerror("Unimplemented standby state detected"); + + case player_search: + // TODO: move to timer + //advance_slider(1); + //set_slider_speed(saved_frame); + break; + } + m_player_state = player_standby; +} + + +// TODO: de-instantize this +WRITE8_MEMBER( sony_ldp1000_device::command_w ) +{ + printf("CMD %02x\n",data); + // 0x30 to 0x69 range causes an ACK, anything else is invalid + m_command = data; + + if((m_command & 0xf0) == 0x30 && (m_command & 0xf) < 0x0a) + { + set_new_player_bcd(data); + return; + } + + switch(m_command) + { + case 0x40: // enter, process BCD command + exec_enter_cmd(); + m_status = stat_ack; + break; + + case 0x43: // search + set_new_player_state(player_search); + m_status = stat_ack; + break; + + /* + audio channels absolute enable / disable + ---- --x- select channel + ---- ---x enable channel (active low) + */ + case 0x46: + case 0x47: + case 0x48: + case 0x49: + m_audio_enable[(m_command & 2) >> 1] = (m_command & 1) == 0; + m_status = stat_ack; + break; + + case 0x56: // Clear All + m_status = stat_ack; + // reset any pending operation here + break; + + default: + m_status = stat_undef; + break; + } +} diff --git a/src/devices/machine/ldp1000.h b/src/devices/machine/ldp1000.h new file mode 100644 index 00000000000..142886da936 --- /dev/null +++ b/src/devices/machine/ldp1000.h @@ -0,0 +1,96 @@ +// license:BSD-3-Clause +// copyright-holders:Angelo Salese +/*************************************************************************** + + Sony LDP-1000 laserdisc emulation. + +***************************************************************************/ + +#pragma once + +#ifndef __LDP1000DEV_H__ +#define __LDP1000DEV_H__ + +#include "laserdsc.h" + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_LASERDISC_LDP1000_ADD(_tag) \ + MCFG_DEVICE_ADD(_tag, SONY_LDP1000, 0) + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// device type definition +extern const device_type SONY_LDP1000; + +// ======================> sony_ldp1000_device + +class sony_ldp1000_device : public laserdisc_device +{ +public: + // construction/destruction + sony_ldp1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // I/O operations TODO: both actually protected + DECLARE_WRITE8_MEMBER( command_w ); + DECLARE_READ8_MEMBER( status_r ); + +protected: + // device-level overrides + virtual void device_validity_check(validity_checker &valid) const override; + virtual void device_start() override; + virtual void device_reset() override; + virtual const rom_entry *device_rom_region() const override; + + virtual void player_vsync(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) override; + virtual INT32 player_update(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) override; + virtual void player_overlay(bitmap_yuy16 &bitmap) override { } + + enum ldp1000_status { + stat_undef = 0x00, + stat_completion = 0x01, + stat_error = 0x02, + stat_pgm_end = 0x04, + stat_not_target = 0x05, + stat_no_frame = 0x06, + stat_ack = 0x0a, + stat_nak = 0x0b + }; + + enum ldp1000_player_state { + player_standby = 0, + player_search + }; + +private: + UINT8 m_command; + ldp1000_status m_status; + ldp1000_player_state m_player_state; + bool m_audio_enable[2]; + // TODO: sub-class into a specific internal player state + void set_new_player_state(ldp1000_player_state which); + void set_new_player_bcd(UINT8 data); + UINT32 bcd_to_raw(); + void exec_enter_cmd(); + UINT8 m_internal_bcd[0x10]; + UINT8 m_index_state; + +}; + + + + + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + + + +#endif diff --git a/src/devices/machine/ldv1000.cpp b/src/devices/machine/ldv1000.cpp index 36dae481853..27c874eadf7 100644 --- a/src/devices/machine/ldv1000.cpp +++ b/src/devices/machine/ldv1000.cpp @@ -63,8 +63,8 @@ const device_type PIONEER_LDV1000 = &device_creator<pioneer_ldv1000_device>; static ADDRESS_MAP_START( ldv1000_map, AS_PROGRAM, 8, pioneer_ldv1000_device ) AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x6000) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x3800) AM_RAM - AM_RANGE(0xc000, 0xc003) AM_MIRROR(0x9ff0) AM_DEVREADWRITE("ldvppi0", i8255_device, read, write) - AM_RANGE(0xc004, 0xc007) AM_MIRROR(0x9ff0) AM_DEVREADWRITE("ldvppi1", i8255_device, read, write) + AM_RANGE(0xc000, 0xc003) AM_MIRROR(0x1ff0) AM_DEVREADWRITE("ldvppi0", i8255_device, read, write) + AM_RANGE(0xc004, 0xc007) AM_MIRROR(0x1ff0) AM_DEVREADWRITE("ldvppi1", i8255_device, read, write) ADDRESS_MAP_END @@ -126,6 +126,7 @@ pioneer_ldv1000_device::pioneer_ldv1000_device(const machine_config &mconfig, co m_z80_cpu(*this, "ldv1000"), m_z80_ctc(*this, "ldvctc"), m_multitimer(nullptr), + m_command_strobe_cb(*this), m_command(0), m_status(0), m_vsync(false), @@ -175,6 +176,8 @@ void pioneer_ldv1000_device::device_start() // allocate timers m_multitimer = timer_alloc(TID_MULTIJUMP); + + m_command_strobe_cb.resolve_safe(); } @@ -648,6 +651,9 @@ WRITE8_MEMBER( pioneer_ldv1000_device::ppi1_portc_w ) printf("\n"); } + // bit 4 sends a command strobe signal to Host CPU + m_command_strobe_cb(bool(data & 0x10)); + // video squelch is controlled by bit 3 set_video_squelch((data & 0x08) == 0); diff --git a/src/devices/machine/ldv1000.h b/src/devices/machine/ldv1000.h index c2f9ead67a6..c7d798d89df 100644 --- a/src/devices/machine/ldv1000.h +++ b/src/devices/machine/ldv1000.h @@ -26,6 +26,10 @@ #define MCFG_LASERDISC_LDV1000_ADD(_tag) \ MCFG_DEVICE_ADD(_tag, PIONEER_LDV1000, 0) +#define MCFG_LASERDISC_LDV1000_COMMAND_STROBE_CB(_cb) \ + downcast<pioneer_ldv1000_device *>(device)->set_command_strobe_callback(DEVCB_##_cb); + + //************************************************************************** // GLOBAL VARIABLES @@ -49,6 +53,8 @@ public: // construction/destruction pioneer_ldv1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + template<class _cmd_strobe_cb> void set_command_strobe_callback(_cmd_strobe_cb latch) { m_command_strobe_cb.set_callback(latch); } + // input and output void data_w(UINT8 data); void enter_w(UINT8 data); @@ -102,6 +108,7 @@ protected: required_device<z80_device> m_z80_cpu; /* CPU index of the Z80 */ required_device<z80ctc_device> m_z80_ctc; /* CTC device */ emu_timer * m_multitimer; /* multi-jump timer device */ + devcb_write_line m_command_strobe_cb; /* communication status */ UINT8 m_command; /* command byte to the player */ @@ -122,6 +129,7 @@ protected: UINT8 m_vbi[7*3]; /* VBI data */ bool m_vbiready; /* VBI ready flag */ UINT8 m_vbiindex; /* index within the VBI data */ + }; diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp index bd65d0b2eef..7160b696b52 100644 --- a/src/devices/machine/netlist.cpp +++ b/src/devices/machine/netlist.cpp @@ -27,6 +27,7 @@ const device_type NETLIST_SOUND = &device_creator<netlist_mame_sound_device_t>; /* subdevices */ const device_type NETLIST_ANALOG_INPUT = &device_creator<netlist_mame_analog_input_t>; +const device_type NETLIST_INT_INPUT = &device_creator<netlist_mame_int_input_t>; const device_type NETLIST_LOGIC_INPUT = &device_creator<netlist_mame_logic_input_t>; const device_type NETLIST_STREAM_INPUT = &device_creator<netlist_mame_stream_input_t>; @@ -113,33 +114,65 @@ void netlist_mame_analog_output_t::device_start() // ---------------------------------------------------------------------------------------- +// netlist_mame_int_input_t +// ---------------------------------------------------------------------------------------- + +netlist_mame_int_input_t::netlist_mame_int_input_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, NETLIST_INT_INPUT, "Netlist Logic Input", tag, owner, clock, "netlist_logic_input", __FILE__), + netlist_mame_sub_interface(*owner), + m_param(nullptr), + m_mask(0xffffffff), + m_shift(0), + m_param_name("") +{ +} + +void netlist_mame_int_input_t::static_set_params(device_t &device, const char *param_name, const UINT32 mask, const UINT32 shift) +{ + netlist_mame_int_input_t &netlist = downcast<netlist_mame_int_input_t &>(device); + LOG_DEV_CALLS(("static_set_params %s\n", device.tag())); + netlist.m_param_name = param_name; + netlist.m_shift = shift; + netlist.m_mask = mask; +} + +void netlist_mame_int_input_t::device_start() +{ + LOG_DEV_CALLS(("start %s\n", tag())); + netlist::param_t *p = downcast<netlist_mame_device_t *>(this->owner())->setup().find_param(m_param_name); + m_param = dynamic_cast<netlist::param_int_t *>(p); + if (m_param == nullptr) + { + fatalerror("device %s wrong parameter type for %s\n", basetag(), m_param_name.cstr()); + } +} + +// ---------------------------------------------------------------------------------------- // netlist_mame_logic_input_t // ---------------------------------------------------------------------------------------- netlist_mame_logic_input_t::netlist_mame_logic_input_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, NETLIST_ANALOG_INPUT, "Netlist Logic Input", tag, owner, clock, "netlist_logic_input", __FILE__), + : device_t(mconfig, NETLIST_LOGIC_INPUT, "Netlist Logic Input", tag, owner, clock, "netlist_logic_input", __FILE__), netlist_mame_sub_interface(*owner), m_param(nullptr), - m_mask(0xffffffff), m_shift(0), m_param_name("") { } -void netlist_mame_logic_input_t::static_set_params(device_t &device, const char *param_name, const UINT32 mask, const UINT32 shift) +void netlist_mame_logic_input_t::static_set_params(device_t &device, const char *param_name, const UINT32 shift) { netlist_mame_logic_input_t &netlist = downcast<netlist_mame_logic_input_t &>(device); LOG_DEV_CALLS(("static_set_params %s\n", device.tag())); netlist.m_param_name = param_name; netlist.m_shift = shift; - netlist.m_mask = mask; } void netlist_mame_logic_input_t::device_start() { LOG_DEV_CALLS(("start %s\n", tag())); netlist::param_t *p = downcast<netlist_mame_device_t *>(this->owner())->setup().find_param(m_param_name); - m_param = dynamic_cast<netlist::param_int_t *>(p); + m_param = dynamic_cast<netlist::param_logic_t *>(p); if (m_param == nullptr) { fatalerror("device %s wrong parameter type for %s\n", basetag(), m_param_name.cstr()); @@ -322,9 +355,9 @@ void netlist_mame_device_t::device_start() m_setup->start_devices(); m_setup->resolve_inputs(); - netlist().save_item(this, m_rem, "m_rem"); - netlist().save_item(this, m_div, "m_div"); - netlist().save_item(this, m_old, "m_old"); + netlist().save(*this, m_rem, "m_rem"); + netlist().save(*this, m_div, "m_div"); + netlist().save(*this, m_old, "m_old"); save_state(); @@ -366,7 +399,7 @@ ATTR_COLD void netlist_mame_device_t::device_post_load() { LOG_DEV_CALLS(("device_post_load\n")); - netlist().post_load(); + netlist().state().post_load(); netlist().rebuild_lists(); } @@ -374,14 +407,14 @@ ATTR_COLD void netlist_mame_device_t::device_pre_save() { LOG_DEV_CALLS(("device_pre_save\n")); - netlist().pre_save(); + netlist().state().pre_save(); } void netlist_mame_device_t::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { } -ATTR_HOT ATTR_ALIGN void netlist_mame_device_t::update_time_x() +void netlist_mame_device_t::update_time_x() { const netlist::netlist_time newt(netlist().time()); const netlist::netlist_time delta(newt - m_old + m_rem); @@ -391,7 +424,7 @@ ATTR_HOT ATTR_ALIGN void netlist_mame_device_t::update_time_x() m_icount -= d; } -ATTR_HOT ATTR_ALIGN void netlist_mame_device_t::check_mame_abort_slice() +void netlist_mame_device_t::check_mame_abort_slice() { if (m_icount <= 0) netlist().abort_current_queue_slice(); @@ -399,53 +432,48 @@ ATTR_HOT ATTR_ALIGN void netlist_mame_device_t::check_mame_abort_slice() ATTR_COLD void netlist_mame_device_t::save_state() { - for (auto const & s : netlist().save_list()) + for (auto const & s : netlist().state().save_list()) { netlist().log().debug("saving state for {1}\n", s->m_name.cstr()); - switch (s->m_dt) + if (s->m_dt.is_float) { - case pstate_data_type_e::DT_DOUBLE: - { - double *td = s->resolved<double>(); - if (td != nullptr) save_pointer(td, s->m_name.cstr(), s->m_count); - } - break; - case pstate_data_type_e::DT_FLOAT: - { - float *td = s->resolved<float>(); - if (td != nullptr) save_pointer(td, s->m_name.cstr(), s->m_count); - } - break; -#if (PHAS_INT128) - case pstate_data_type_e::DT_INT128: - // FIXME: we are cheating here - save_pointer((char *) s->m_ptr, s->m_name.cstr(), s->m_count * sizeof(INT128)); - break; -#endif - case pstate_data_type_e::DT_INT64: + if (s->m_dt.size == sizeof(double)) + { + double *td = s->resolved<double>(); + if (td != nullptr) save_pointer(td, s->m_name.cstr(), s->m_count); + } + else if (s->m_dt.size == sizeof(float)) + { + float *td = s->resolved<float>(); + if (td != nullptr) save_pointer(td, s->m_name.cstr(), s->m_count); + } + else + netlist().log().fatal("Unknown floating type for {1}\n", s->m_name.cstr()); + } + else if (s->m_dt.is_integral) + { + if (s->m_dt.size == sizeof(INT64)) save_pointer((INT64 *) s->m_ptr, s->m_name.cstr(), s->m_count); - break; - case pstate_data_type_e::DT_INT16: + else if (s->m_dt.size == sizeof(INT32)) + save_pointer((INT32 *) s->m_ptr, s->m_name.cstr(), s->m_count); + else if (s->m_dt.size == sizeof(INT16)) save_pointer((INT16 *) s->m_ptr, s->m_name.cstr(), s->m_count); - break; - case pstate_data_type_e::DT_INT8: + else if (s->m_dt.size == sizeof(INT8)) save_pointer((INT8 *) s->m_ptr, s->m_name.cstr(), s->m_count); - break; - case pstate_data_type_e::DT_INT: - save_pointer((int *) s->m_ptr, s->m_name.cstr(), s->m_count); - break; - case pstate_data_type_e::DT_BOOLEAN: - save_pointer((bool *) s->m_ptr, s->m_name.cstr(), s->m_count); - break; - case pstate_data_type_e::DT_CUSTOM: - break; - case pstate_data_type_e::NOT_SUPPORTED: - default: - netlist().log().fatal("found unsupported save element %s\n", s->m_name); - break; +#if (PHAS_INT128) + else if (s->m_dt.size == sizeof(INT128)) + save_pointer((INT64 *) s->m_ptr, s->m_name.cstr(), s->m_count * 2); +#endif + else + netlist().log().fatal("Unknown integral type size {1} for {2}\n", s->m_dt.size, s->m_name.cstr()); + } + else if (s->m_dt.is_custom) + { + /* do nothing */ } + else + netlist().log().fatal("found unsupported save element {1}\n", s->m_name); } - } // ---------------------------------------------------------------------------------------- @@ -566,7 +594,7 @@ void netlist_mame_sound_device_t::device_start() // Configure outputs - plib::pvector_t<nld_sound_out *> outdevs = netlist().get_device_list<nld_sound_out>(); + std::vector<nld_sound_out *> outdevs = netlist().get_device_list<nld_sound_out>(); if (outdevs.size() == 0) fatalerror("No output devices"); @@ -592,7 +620,7 @@ void netlist_mame_sound_device_t::device_start() m_num_inputs = 0; m_in = nullptr; - plib::pvector_t<nld_sound_in *> indevs = netlist().get_device_list<nld_sound_in>(); + std::vector<nld_sound_in *> indevs = netlist().get_device_list<nld_sound_in>(); if (indevs.size() > 1) fatalerror("A maximum of one input device is allowed!"); if (indevs.size() == 1) diff --git a/src/devices/machine/netlist.h b/src/devices/machine/netlist.h index 8eba71f8ba1..606cd4af283 100644 --- a/src/devices/machine/netlist.h +++ b/src/devices/machine/netlist.h @@ -12,7 +12,6 @@ #define NETLIST_H #include "emu.h" -#include "tagmap.h" #include "netlist/nl_base.h" #include "netlist/nl_setup.h" @@ -36,9 +35,13 @@ netlist_analog_output_delegate(& _class :: _member, \ # _class "::" # _member, _class_tag, (_class *)nullptr) ); -#define MCFG_NETLIST_LOGIC_INPUT(_basetag, _tag, _name, _shift, _mask) \ +#define MCFG_NETLIST_LOGIC_INPUT(_basetag, _tag, _name, _shift) \ MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_LOGIC_INPUT, 0) \ - netlist_mame_logic_input_t::static_set_params(*device, _name, _mask, _shift); + netlist_mame_logic_input_t::static_set_params(*device, _name, _shift); + +#define MCFG_NETLIST_INT_INPUT(_basetag, _tag, _name, _shift, _mask) \ + MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_INT_INPUT, 0) \ + netlist_mame_int_input_t::static_set_params(*device, _name, _mask, _shift); #define MCFG_NETLIST_STREAM_INPUT(_basetag, _chan, _name) \ MCFG_DEVICE_ADD(_basetag ":cin" # _chan, NETLIST_STREAM_INPUT, 0) \ @@ -52,6 +55,9 @@ #define NETLIST_LOGIC_PORT_CHANGED(_base, _tag) \ PORT_CHANGED_MEMBER(_base ":" _tag, netlist_mame_logic_input_t, input_changed, 0) +#define NETLIST_INT_PORT_CHANGED(_base, _tag) \ + PORT_CHANGED_MEMBER(_base ":" _tag, netlist_mame_logic_input_t, input_changed, 0) + #define NETLIST_ANALOG_PORT_CHANGED(_base, _tag) \ PORT_CHANGED_MEMBER(_base ":" _tag, netlist_mame_analog_input_t, input_changed, 0) @@ -404,17 +410,17 @@ private: // ---------------------------------------------------------------------------------------- -// netlist_mame_logic_input_t +// netlist_mame_int_input_t // ---------------------------------------------------------------------------------------- -class netlist_mame_logic_input_t : public device_t, +class netlist_mame_int_input_t : public device_t, public netlist_mame_sub_interface { public: // construction/destruction - netlist_mame_logic_input_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - virtual ~netlist_mame_logic_input_t() { } + netlist_mame_int_input_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + virtual ~netlist_mame_int_input_t() { } static void static_set_params(device_t &device, const char *param_name, const UINT32 mask, const UINT32 shift); @@ -450,6 +456,51 @@ private: }; // ---------------------------------------------------------------------------------------- +// netlist_mame_logic_input_t +// ---------------------------------------------------------------------------------------- + +class netlist_mame_logic_input_t : public device_t, + public netlist_mame_sub_interface +{ +public: + + // construction/destruction + netlist_mame_logic_input_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + virtual ~netlist_mame_logic_input_t() { } + + static void static_set_params(device_t &device, const char *param_name, const UINT32 shift); + + inline void write(const UINT32 val) + { + const UINT32 v = (val >> m_shift) & 1; + if (v != m_param->Value()) + synchronize(0, v); + } + + inline DECLARE_INPUT_CHANGED_MEMBER(input_changed) { write(newval); } + DECLARE_WRITE_LINE_MEMBER(write_line) { write(state); } + DECLARE_WRITE8_MEMBER(write8) { write(data); } + DECLARE_WRITE16_MEMBER(write16) { write(data); } + DECLARE_WRITE32_MEMBER(write32) { write(data); } + DECLARE_WRITE64_MEMBER(write64) { write(data); } + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override + { + if (is_sound_device()) + update_to_current_time(); + m_param->setTo(param); + } + +private: + netlist::param_logic_t *m_param; + UINT32 m_shift; + pstring m_param_name; +}; + +// ---------------------------------------------------------------------------------------- // netlist_mame_stream_input_t // ---------------------------------------------------------------------------------------- @@ -507,10 +558,9 @@ public: : device_t(anetlist, name) , m_in(*this, "IN") , m_cpu_device(nullptr) - , m_last(0) + , m_last(*this, "m_last", 0) { m_cpu_device = downcast<netlist_mame_cpu_device_t *>(&downcast<netlist_mame_t &>(netlist()).parent()); - save(NLNAME(m_last)); } ATTR_COLD void reset() override @@ -542,7 +592,7 @@ private: netlist::analog_input_t m_in; netlist_analog_output_delegate m_callback; netlist_mame_cpu_device_t *m_cpu_device; - nl_double m_last; + netlist::state_var<nl_double> m_last; }; // ---------------------------------------------------------------------------------------- @@ -557,10 +607,10 @@ public: , m_channel(*this, "CHAN", 0) , m_mult(*this, "MULT", 1000.0) , m_offset(*this, "OFFSET", 0.0) + , m_sample(netlist::netlist_time::from_hz(1)) //sufficiently big enough , m_in(*this, "IN") + , m_last_buffer(*this, "m_last_buffer", netlist::netlist_time::zero()) { - m_sample = netlist::netlist_time::from_hz(1); //sufficiently big enough - save(NAME(m_last_buffer)); } static const int BUFSIZE = 2048; @@ -615,7 +665,7 @@ private: netlist::analog_input_t m_in; double m_cur; int m_last_pos; - netlist::netlist_time m_last_buffer; + netlist::state_var<netlist::netlist_time> m_last_buffer; }; // ---------------------------------------------------------------------------------------- @@ -710,6 +760,7 @@ extern const device_type NETLIST_CPU; extern const device_type NETLIST_SOUND; extern const device_type NETLIST_ANALOG_INPUT; extern const device_type NETLIST_LOGIC_INPUT; +extern const device_type NETLIST_INT_INPUT; extern const device_type NETLIST_ANALOG_OUTPUT; extern const device_type NETLIST_STREAM_INPUT; diff --git a/src/devices/machine/pci.cpp b/src/devices/machine/pci.cpp index 859b44dc939..54e9ddf7112 100644 --- a/src/devices/machine/pci.cpp +++ b/src/devices/machine/pci.cpp @@ -276,12 +276,12 @@ void pci_device::map_device(UINT64 memory_window_start, UINT64 memory_window_end } UINT64 end = start + bi.size-1; switch(i) { - case 0: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped0_r), this), write32_delegate(FUNC(pci_device::unmapped0_w), this)); break; - case 1: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped1_r), this), write32_delegate(FUNC(pci_device::unmapped1_w), this)); break; - case 2: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped2_r), this), write32_delegate(FUNC(pci_device::unmapped2_w), this)); break; - case 3: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped3_r), this), write32_delegate(FUNC(pci_device::unmapped3_w), this)); break; - case 4: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped4_r), this), write32_delegate(FUNC(pci_device::unmapped4_w), this)); break; - case 5: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped5_r), this), write32_delegate(FUNC(pci_device::unmapped5_w), this)); break; + case 0: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped0_r), this), write32_delegate(FUNC(pci_device::unmapped0_w), this)); break; + case 1: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped1_r), this), write32_delegate(FUNC(pci_device::unmapped1_w), this)); break; + case 2: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped2_r), this), write32_delegate(FUNC(pci_device::unmapped2_w), this)); break; + case 3: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped3_r), this), write32_delegate(FUNC(pci_device::unmapped3_w), this)); break; + case 4: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped4_r), this), write32_delegate(FUNC(pci_device::unmapped4_w), this)); break; + case 5: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped5_r), this), write32_delegate(FUNC(pci_device::unmapped5_w), this)); break; } space->install_device_delegate(start, end, *this, bi.map); diff --git a/src/devices/machine/scnxx562.cpp b/src/devices/machine/scnxx562.cpp new file mode 100644 index 00000000000..099a8c6cdea --- /dev/null +++ b/src/devices/machine/scnxx562.cpp @@ -0,0 +1,1793 @@ +// license:BSD-3-Clause copyright-holders: Joakim Larsson Edstrom +/*************************************************************************** + + DUSCC Dual Serial Communications Controller emulation + + The DUSCC was introduced in the mid 80:ies by Signetics, a part of Philips + Semiconductor that later became NXP, and apparantly trying to dig into + the huge success of the Zilog SCC with a very similar feature set but not + software compatible at all. + + The variants in the DUSCC family are as follows: + + Bus type + Intel Motorola +---------------------------------- + NMOS 26562 68562 + CMOS 26C562 68C562 +---------------------------------- + For more info see: + page 511: http://bitsavers.informatik.uni-stuttgart.de/pdf/signetics/_dataBooks/1986_Signetics_Microprocessor.pdf + page 514: http://bitsavers.informatik.uni-stuttgart.de/pdf/signetics/_dataBooks/1994_Signetics_Data_Communications.pdf + +Designs known of including one or more DUSCCs +------------------------------------------------ + Force Computers + CPU VME boards: CPU-22, CPU-26, CPU-30, CPU-33, CPU-386, CPU-40, CPU-41 + Graphics VME boards: AGC-1 + Serial VME boards: ISIO-1, ISIO-2 + Digital Equipment + DEC MicroServer DEMSA, DECrouter-150, DECrouter-250 +------------------------------------------------ + +TODO/ "NDUSCC" "CDUSCC" +DONE (x) (p=partly) NMOS CMOS +------------------------------------------------ + Channels 2 FD 2 FD + Synch data rates 4Mbps 10Mbps + ----- asynchrounous features ------------------ + p 5-8 bit per char Y Y + y 1,1.5,2 stop bits Y Y in 1/16 bit increments + p odd/even parity Y Y + x1,x16 Y Y + break det/gen Y Y + parity, framing & Y Y + overrun error det + -- byte oriented synchrounous features -- + Int/ext char sync Y Y + 1/2 synch chars ? ? + Aut CRC gen/det Y Y + -- SDLC/HDLC capabilities --------------- + Abort seq gen/chk Y Y + Aut zero ins/det Y Y + Aut flag insert Y Y + Addr field rec Y Y + I-fld resid hand Y Y + CRC gen/det Y Y + SDLC loop w EOP Y Y + -- + Receiver FIFO 4 16 + Transmitter FIFO 4 16 + NRZ, NRZI, FM1 or Y Y + FM2 enc/dec + Manchester dec Y Y + Baud gen per chan Y Y + DPLL clock recov Y Y + -- Additional features CMOS versions ----- + Status FIFO N Y + Watchdog timer N Y + Fifo Fill status N Y + DMA frame status N Y + Rx/TxRDY on FIFO lvl N Y + TxFifo Empty status N Y + Interrupt enable bits N Y + X.21 pattern recogn N Y + Improved BiSync support N Y + ------------------------------------------------------------------------- + x/p = Features that has been implemented n/a = features that will not +***************************************************************************/ + +#include "scnxx562.h" + +//************************************************************************** +// MACROS / CONSTANTS +//************************************************************************** +/* Useful temporary debug printout format */ +// printf("TAG %lld %s%s Data:%d\n", machine().firstcpu->total_cycles(), __PRETTY_FUNCTION__, m_owner->tag(), data); + +#define VERBOSE 2 + +#define LOG(x) do { if (VERBOSE) logerror x; } while (0) +#define LOGR(x) +#if VERBOSE == 0 +#define logerror printf +#endif + +#ifdef _MSC_VER +#define FUNCNAME __func__ +#define LLFORMAT "%I64%" +#else +#define FUNCNAME __PRETTY_FUNCTION__ +#define LLFORMAT "%lld" +#endif + +#define CHANA_TAG "cha" +#define CHANB_TAG "chb" + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** +// device type definition +const device_type DUSCC = &device_creator<duscc_device>; +const device_type DUSCC_CHANNEL = &device_creator<duscc_channel>; +const device_type DUSCC26562 = &device_creator<duscc26562_device>; +const device_type DUSCC26C562 = &device_creator<duscc26C562_device>; +const device_type DUSCC68562 = &device_creator<duscc68562_device>; +const device_type DUSCC68C562 = &device_creator<duscc68C562_device>; + +//------------------------------------------------- +// device_mconfig_additions - +//------------------------------------------------- +MACHINE_CONFIG_FRAGMENT( duscc ) + MCFG_DEVICE_ADD(CHANA_TAG, DUSCC_CHANNEL, 0) + MCFG_DEVICE_ADD(CHANB_TAG, DUSCC_CHANNEL, 0) +MACHINE_CONFIG_END + +machine_config_constructor duscc_device::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( duscc ); +} + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// duscc_device - constructor +//------------------------------------------------- +duscc_device::duscc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source) + : device_t(mconfig, type, name, tag, owner, clock, shortname, source), + // device_z80daisy_interface(mconfig, *this), + m_chanA(*this, CHANA_TAG), + m_chanB(*this, CHANB_TAG), +#if 0 + m_rxca(0), + m_txca(0), + m_rxcb(0), + m_txcb(0), +#endif + m_out_txda_cb(*this), + m_out_dtra_cb(*this), + m_out_rtsa_cb(*this), + m_out_synca_cb(*this), + m_out_txdb_cb(*this), + m_out_dtrb_cb(*this), + m_out_rtsb_cb(*this), + m_out_syncb_cb(*this), + m_variant(variant) +{ + for (auto & elem : m_int_state) + elem = 0; +} + +duscc_device::duscc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, DUSCC, "DUSCC", tag, owner, clock, "duscc", __FILE__), + m_chanA(*this, CHANA_TAG), + m_chanB(*this, CHANB_TAG), + m_out_txda_cb(*this), + m_out_dtra_cb(*this), + m_out_rtsa_cb(*this), + m_out_synca_cb(*this), + m_out_txdb_cb(*this), + m_out_dtrb_cb(*this), + m_out_rtsb_cb(*this), + m_out_syncb_cb(*this), + m_variant(TYPE_DUSCC) +{ + for (auto & elem : m_int_state) + elem = 0; +} + +duscc26562_device::duscc26562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : duscc_device(mconfig, DUSCC26562, "DUSCC 26562", tag, owner, clock, TYPE_DUSCC26562, "duscc26562", __FILE__){ } + +duscc26C562_device::duscc26C562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : duscc_device(mconfig, DUSCC26C562, "DUSCC 26C562", tag, owner, clock, TYPE_DUSCC26C562, "duscc26C562", __FILE__){ } + +duscc68562_device::duscc68562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : duscc_device(mconfig, DUSCC68562, "DUSCC 68562", tag, owner, clock, TYPE_DUSCC68562, "duscc68562", __FILE__){ } + +duscc68C562_device::duscc68C562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : duscc_device(mconfig, DUSCC68C562, "DUSCC 68C562", tag, owner, clock, TYPE_DUSCC68C562, "duscc68C562", __FILE__){ } + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void duscc_device::device_start() +{ + LOG(("%s\n", FUNCNAME)); + // resolve callbacks + m_out_txda_cb.resolve_safe(); + m_out_dtra_cb.resolve_safe(); + m_out_rtsa_cb.resolve_safe(); + m_out_synca_cb.resolve_safe(); + m_out_txdb_cb.resolve_safe(); + m_out_dtrb_cb.resolve_safe(); + m_out_rtsb_cb.resolve_safe(); + m_out_syncb_cb.resolve_safe(); + + // state saving + //save_item(NAME(m_int_state)); + + LOG((" - DUSCC variant %02x\n", m_variant)); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void duscc_device::device_reset() +{ + LOG(("%s %s \n",tag(), FUNCNAME)); + + m_chanA->reset(); + m_chanB->reset(); +} + +//------------------------------------------------- +// check_interrupts - +//------------------------------------------------- + +void duscc_device::check_interrupts() +{ + LOG(("%s %s - not implemented\n",tag(), FUNCNAME)); + // m_out_int_cb(state); +} + + +//------------------------------------------------- +// reset_interrupts - +//------------------------------------------------- + +void duscc_device::reset_interrupts() +{ + LOG(("%s %s - not implemented \n",tag(), FUNCNAME)); +#if 0 + // reset internal interrupt sources + for (auto & elem : m_int_state) + { + elem = 0; + } + + // check external interrupt sources + check_interrupts(); +#endif +} + +UINT8 duscc_device::modify_vector(UINT8 vec, int i, UINT8 src) +{ + LOG(("%s %s - not implemented\n",tag(), FUNCNAME)); + return vec; +} + + +//------------------------------------------------- +// trigger_interrupt - +//------------------------------------------------- +void duscc_device::trigger_interrupt(int index, int state) +{ + LOG(("%s %s - not implemented\n",tag(), FUNCNAME)); +} + +READ8_MEMBER( duscc_device::read ) +{ + if ( offset & 0x20 ) + return m_chanB->read(offset); + else + return m_chanA->read(offset); +} + +WRITE8_MEMBER( duscc_device::write ) +{ + if ( offset & 0x20 ) + m_chanB->write(data, offset); + else + m_chanA->write(data, offset); + return; +} + +//************************************************************************** +// DUSCC CHANNEL +//************************************************************************** +duscc_channel::duscc_channel(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, DUSCC_CHANNEL, "DUSCC channel", tag, owner, clock, "duscc_channel", __FILE__), + device_serial_interface(mconfig, *this), + m_brg_rx_rate(0), + m_brg_tx_rate(0), + m_brg_const(1), + m_rx_error(0), + m_rx_clock(0), + m_rx_first(0), + m_rx_break(0), + m_rxd(0), + m_cts(0), + m_dcd(0), + m_tx_data(0), + m_tx_clock(0), + m_dtr(0), + m_rts(0), + m_sync(0) +{ + LOG(("%s\n",FUNCNAME)); + + // Reset all registers + m_cmr1 = m_cmr2 = m_s1r = m_s2r = m_tpr = m_ttr = m_rpr = m_rtr + = m_ctprh = m_ctprl = m_ctcr = m_omr = m_cth = m_ctl = m_pcr + = m_ccr = m_rsr = m_trsr = m_ictsr = m_gsr = m_ier /* = m_rea */ + = m_cid = m_ivr = m_icr = /*m_sea =*/ m_ivrm = m_mrr = m_ier1 + = m_ier2 = m_ier3 = m_trcr = m_rflr = m_ftlr = m_trmsr = m_telr = 0; + + for (int i = 0; i < sizeof(m_rx_data_fifo); i++) + { + m_rx_data_fifo[i] = 0; + m_rx_error_fifo[i] = 0; + } + for (int i = 0; i < sizeof(m_tx_data_fifo); i++) + { + m_tx_data_fifo[i] = 0; + m_tx_error_fifo[i] = 0; + } +} + +//------------------------------------------------- +// start - channel startup +//------------------------------------------------- + +void duscc_channel::device_start() +{ + LOG(("%s\n", FUNCNAME)); + m_uart = downcast<duscc_device *>(owner()); + m_index = m_uart->get_channel_index(this); + + m_rx_fifo_sz = (m_uart->m_variant & SET_CMOS) ? 16 : 4; + m_rx_fifo_wp = m_rx_fifo_rp = 0; + + m_tx_fifo_sz = (m_uart->m_variant & SET_CMOS) ? 16 : 4; + m_tx_fifo_wp = m_tx_fifo_rp = 0; + + m_cid = (m_uart->m_variant & SET_CMOS) ? 0x7f : 0xff; // TODO: support CMOS rev A = 0xbf + + // state saving + save_item(NAME(m_cmr1)); + save_item(NAME(m_cmr2)); + save_item(NAME(m_s1r)); + save_item(NAME(m_s2r)); + save_item(NAME(m_tpr)); + save_item(NAME(m_ttr)); + save_item(NAME(m_rpr)); + save_item(NAME(m_rtr)); + save_item(NAME(m_ctprh)); + save_item(NAME(m_ctprl)); + save_item(NAME(m_ctcr)); + save_item(NAME(m_omr)); + save_item(NAME(m_cth)); + save_item(NAME(m_ctl)); + save_item(NAME(m_pcr)); + save_item(NAME(m_ccr)); + save_item(NAME(m_txfifo)); + save_item(NAME(m_rxfifo)); + save_item(NAME(m_rsr)); + save_item(NAME(m_trsr)); + save_item(NAME(m_ictsr)); + save_item(NAME(m_gsr)); // TODO: Move this to the device instead, it is a global register + save_item(NAME(m_ier)); + // save_item(NAME(m_rea)); + save_item(NAME(m_cid)); + save_item(NAME(m_ivr)); + save_item(NAME(m_icr)); + // save_item(NAME(m_sea)); + save_item(NAME(m_ivrm)); + save_item(NAME(m_mrr)); + save_item(NAME(m_ier1)); + save_item(NAME(m_ier2)); + save_item(NAME(m_ier3)); + save_item(NAME(m_trcr)); + save_item(NAME(m_rflr)); + save_item(NAME(m_ftlr)); + save_item(NAME(m_trmsr)); + save_item(NAME(m_telr)); + save_item(NAME(m_rx_data_fifo)); + save_item(NAME(m_rx_error_fifo)); + save_item(NAME(m_rx_fifo_rp)); + save_item(NAME(m_rx_fifo_wp)); + save_item(NAME(m_rx_fifo_sz)); + save_item(NAME(m_rx_clock)); + save_item(NAME(m_rx_first)); + save_item(NAME(m_rx_break)); + save_item(NAME(m_ri)); + save_item(NAME(m_cts)); + save_item(NAME(m_dcd)); + save_item(NAME(m_tx_data)); + save_item(NAME(m_tx_clock)); + save_item(NAME(m_dtr)); + save_item(NAME(m_rts)); + save_item(NAME(m_sync)); + + device_serial_interface::register_save_state(machine().save(), this); +} + + +//------------------------------------------------- +// reset - reset channel status +//------------------------------------------------- + +void duscc_channel::device_reset() +{ + LOG(("%s\n", FUNCNAME)); + + // Reset RS232 emulation + receive_register_reset(); + transmit_register_reset(); + + // Soft/Channel Reset values according to DUSCC users guide + m_cmr1 =0x00; + m_cmr2 =0x00; + m_s1r =0x00; + m_s2r =0x00; + m_tpr =0x00; + m_ttr =0x00; + m_rpr =0x00; + m_rtr =0x00; + m_ctcr =0x00; + m_omr =0x00; + m_pcr =0x00; + m_ccr =0x00; + m_rsr =0x00; + m_trsr =0x00; + m_ictsr =0x00; + m_gsr =0x00; + m_ier =0x00; + // m_rea =0x00; + m_ivr =0x0f; + m_icr =0x00; + // m_sea =0x00; + m_ivrm =0x00; + m_mrr =0x00; // TODO: Need a read after reset to enable CMOS features + m_ier1 =0x00; + m_ier2 =0x00; + m_ier3 =0x00; + m_trcr =0x00; + m_rflr =0x00; + m_ftlr =0x33; + m_trmsr =0x00; + m_telr =0x10; + + // reset external lines TODO: check relation to control bits and reset + set_rts(1); + set_dtr(1); + + // reset interrupts + if (m_index == duscc_device::CHANNEL_A) + { + m_uart->reset_interrupts(); + } + + m_a7 = 0; +} + +void duscc_channel::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + // LOG(("%s %d\n", FUNCNAME, id)); + device_serial_interface::device_timer(timer, id, param, ptr); +} + + +//------------------------------------------------- +// tra_callback - +//------------------------------------------------- + +void duscc_channel::tra_callback() +{ + if (!is_transmit_register_empty()) + { + int db = transmit_register_get_data_bit(); + + LOGR((LLFORMAT " %s() \"%s \"Channel %c transmit data bit %d\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, db)); + + // transmit data + if (m_index == duscc_device::CHANNEL_A) + m_uart->m_out_txda_cb(db); + else + m_uart->m_out_txdb_cb(db); + } + else + { + LOG((LLFORMAT " %s() \"%s \"Channel %c Failed to transmit \n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index)); + logerror("%s \"%s \"Channel %c Failed to transmit\n", FUNCNAME, m_owner->tag(), 'A' + m_index); + } +} + + +//------------------------------------------ +// tra_complete - +// TODO: +// - Fix mark and space tx support +//------------------------------------------ + +void duscc_channel::tra_complete() +{ + if (m_tra == 1) // transmitter enabled? + { + if (m_tx_fifo_rp != m_tx_fifo_wp) // there are more characters to send? + { + transmit_register_setup(m_tx_data_fifo[m_tx_fifo_rp]); // Reload the shift register + m_tx_fifo_rp_step(); + } + if (m_omr & REG_OMR_TXRDY_ACTIVATED)// Wait until FIFO empty before ready for more data? + { + if (m_tx_fifo_wp == m_tx_fifo_rp) // So is Tx FIFO empty? + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + } + else // Always ready for more! + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + } +} + + +//------------------------------------------------- +// rcv_callback - +//------------------------------------------------- + +void duscc_channel::rcv_callback() +{ + if (m_rcv == 1) + { + LOG((LLFORMAT " %s() \"%s \"Channel %c received data bit %d\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_rxd)); + receive_register_update_bit(m_rxd); + } +} + + +//------------------------------------------------- +// rcv_complete - +//------------------------------------------------- + +void duscc_channel::rcv_complete() +{ + UINT8 data; + + receive_register_extract(); + data = get_received_char(); + LOG((LLFORMAT " %s() \"%s \"Channel %c Received Data %c\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, data)); + receive_data(data); +} + + +//------------------------------------------------- +// get_xx_clock_mode - get clock divisor +// TODO +// - support all the other clock divisors +// - actually use the divisors when calculating baud +//------------------------------------------------- + +int duscc_channel::get_rx_clock_mode() +{ + int clocks = 1; + + if ( (m_rtr & REG_RTR_RXCLK_MASK) == REG_RTR_RXCLK_BRG ) + clocks = 32; + + return clocks; +} + +int duscc_channel::get_tx_clock_mode() +{ + int clocks = 1; + + if ( (m_ttr & REG_TTR_TXCLK_MASK) == REG_TTR_TXCLK_BRG ) + clocks = 32; + + return clocks; +} + +void duscc_channel::set_rts(int state) +{ + LOG(("%s(%d) \"%s\": %c \n", FUNCNAME, state, m_owner->tag(), 'A' + m_index)); + if (m_index == duscc_device::CHANNEL_A) + m_uart->m_out_rtsa_cb(state); + else + m_uart->m_out_rtsb_cb(state); +} + +/* -------------------------------------------------------------------------- + * get_stop_bits - get number of stop bits + * The DUSCC supports from 1/2 stop bit to 2 stop bits in 1/16th bit increments + * This is not yet supported by diserial so we need to translate into 1, 1.5 + * or 2 stop bits. It is also dependent on the data bit length + * TODO: Support finer granularity of stop bits in diserial if/when nessesarry + * --------------------------------------------------------------------------- + * TPR[4:7] TPR[0:1] + * 5 bits 6-8 bits + * 00 01,10,11 + * --------------------------- + * 0 0 0 0 1.063 0.563 + * 0 0 0 1 1.125 0.625 + * 0 0 1 0 1.188 0.688 + * 0 0 1 1 1.250 0.750 + * 0 1 0 0 1.313 0.813 + * 0 1 0 1 1.375 0.875 + * 0 1 1 0 1.438 0.938 + * 0 1 1 1 1.500 1.000 + * 1 0 0 0 1.563 1.563 + * 1 0 0 1 1.625 1.625 + * 1 0 1 0 1.688 1.688 + * 1 0 1 1 1.750 1.750 + * 1 1 0 0 1.813 1.813 + * 1 1 0 1 1.875 1.875 + * 1 1 1 0 1.938 1.938 + * 1 1 1 1 2.000 2.000 + * -------------------------------------------------------------------------- + */ +device_serial_interface::stop_bits_t duscc_channel::get_stop_bits() +{ + const stop_bits_t bits5[] = + { STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1_5, STOP_BITS_1_5, STOP_BITS_1_5, STOP_BITS_1_5, + STOP_BITS_1_5, STOP_BITS_1_5, STOP_BITS_1_5, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2 }; + const stop_bits_t bits6to8[] = + { STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, + STOP_BITS_1, STOP_BITS_1_5, STOP_BITS_1_5, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2 }; + + /* 5 data bits */ + if (get_tx_word_length() == 5) + { + return bits5[((m_tpr & REG_TPR_STOP_BITS_MASK) >> 4) & 0x0f]; + } + else /* 6-8 data bits */ + { + return bits6to8[((m_tpr & REG_TPR_STOP_BITS_MASK) >> 4) & 0x0f]; + } + + return STOP_BITS_0; +} + +//------------------------------------------------- +// get_rx_word_length - get receive word length +//------------------------------------------------- + +int duscc_channel::get_rx_word_length() +{ + int bits = 5; + + switch (m_rpr & REG_RPR_DATA_BITS_MASK) + { + case REG_RPR_DATA_BITS_5BIT: bits = 5; break; + case REG_RPR_DATA_BITS_6BIT: bits = 6; break; + case REG_RPR_DATA_BITS_7BIT: bits = 7; break; + case REG_RPR_DATA_BITS_8BIT: bits = 8; break; + } + + return bits; +} + + +//------------------------------------------------- +// get_tx_word_length - get transmit word length +//------------------------------------------------- + +int duscc_channel::get_tx_word_length() +{ + int bits = 5; + + switch (m_tpr & REG_TPR_DATA_BITS_MASK) + { + case REG_TPR_DATA_BITS_5BIT: bits = 5; break; + case REG_TPR_DATA_BITS_6BIT: bits = 6; break; + case REG_TPR_DATA_BITS_7BIT: bits = 7; break; + case REG_TPR_DATA_BITS_8BIT: bits = 8; break; + } + + return bits; +} + +UINT8 duscc_channel::do_dusccreg_cmr1_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_cmr2_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_s1r_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_s2r_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_tpr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ttr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_rpr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_rtr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ctprh_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ctprl_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ctcr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_omr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_cth_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ctl_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_pcr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } + +/* Commands to the DUSCC are entered through the channel command register.A read of this + register returns the last invoked command (with bits 4 and 5 set to 1). */ +UINT8 duscc_channel::do_dusccreg_ccr_r() +{ + LOG(("%s\n", FUNCNAME)); + return (UINT8) m_ccr | 1 << 4 | 1 << 5; +} + +UINT8 duscc_channel::do_dusccreg_rxfifo_r() +{ + UINT8 data = 0; + + LOG(("%s\n", FUNCNAME)); + LOG((" - RX rp:%d wp:%d sz:%d\n", m_rx_fifo_rp, m_rx_fifo_wp, m_rx_fifo_sz)); + + /* So is there a character in the FIFO? */ + if (m_rx_fifo_rp != m_rx_fifo_wp) + { + data = m_rx_data_fifo[m_rx_fifo_rp]; + m_rx_fifo_rp_step(); + LOG((" - RX reading out data:%02x '%c'\n", data, isalnum(data) ? data : ' ')); + } + else + { + logerror("- RX FIFO empty despite RxREADY\n"); + LOG(("- RX FIFO empty despite RxREADY\n")); + } + + return (UINT8) data; +} + +UINT8 duscc_channel::do_dusccreg_rsr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_trsr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ictsr_r() +{ + logerror("register access method %s is not implemented yet\n", FUNCNAME); + return (UINT8) m_ictsr; +} + +/* General Status Register (GSR) + This register provides a 'quick look' at the overall status of both channels of the DUSCC. A write to this register with ls at the + corresponding bit pOSitions causes TxRDY (bits 5 and 1) and/or RxRDY (bits 4 and 0) to be reset. The other status bits can be reset + only by resetting the individual status bits that they point to. + [7] Channel B External or Counter/timer Status - This bit indicates that one of the following status bits is asserted: ICTSRB[6:4] + [6] Channel B Receiver or Transmitter Status - This bit indicates that one of the following status bits is asserted: TRSRB[7:1], TRSRB[7:3]. + [5] Channel B Transmitter Ready - The assertion of this bit indicates that one or more characters may be loaded into the Channel B transmitter + FIFO to be serialized by the transmit shift register. See description of OMR[4j. This bit can be asserted only when the transmitter is enabled. + Resetting the transmitter negates TxRDY. + [4] Channel B Receiver Ready - The assertion of this bit indicates that one or more characters are available in the Channel B receiver + FIFO to be read by the CPU. See deSCription of OMR[3]. RxRDY is initially reset (negated) by a chip reset or when a 'reset Channel B + receiver' command is invoked. + [3] Channel A External or Countermmer Status - This bit indicates that one of the following status bits is asserted: ICTSRA[6:4]. + [2] Channel A Receiver or Transmitter Status - This bit indicates that one of the following status bits is asserted: TRSRA[7:0], TRSRA[7:3]. + [1] Channel A Transmitter Ready - The assertion of this bit indicates that one or more characters may be loaded into the Channel A + transmitter FIFO to be serialized by the transmit shift register. See description of OMR[4]. This bit can be asserted only + when the transmitter is enabled. Resetting the transmitter negates TxRDY. + [0] Channel A Receiver Ready - The assertion of this bit indicates that one or more characters are available in the Channel A receiver + FIFO to be read by the CPU. See description of OMR[3]. RxRDY is initially reset (negated) by a chip reset or when a 'reset Channel A + receiver' command is invoked. +*/ +UINT8 duscc_channel::do_dusccreg_gsr_r() +{ + LOGR(("%s <- %02x\n", FUNCNAME, m_gsr)); + return (UINT8) m_gsr; +} + +UINT8 duscc_channel::do_dusccreg_ier_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } + +UINT8 duscc_channel::do_dusccreg_cid_r() +{ + LOG(("%s\n", FUNCNAME)); + if ( m_uart->m_variant != SET_CMOS ) + { + logerror("Attempt read out CDUSCC register CID on an NDUSCC\n"); + return 0; + } + if ( m_index != duscc_device::CHANNEL_B ) + { + logerror("Attempt read out CID on channel B not allowed\n"); + return 0; + } + else + return m_cid; +} + +UINT8 duscc_channel::do_dusccreg_ivr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_icr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ivrm_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_mrr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ier1_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ier2_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ier3_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_trcr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_rflr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ftlr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_trmsr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_telr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } + + // write register handlers +/* CMR1 register + [7:6] Data Encoding - These bits select the data encoding for the received and transmitted data: + 00 If the DPLL is set to NRZI mode (see DPLL commands), it selects positive logic (1 = high, 0 = low). + If the DPLL is set to FM mode (see DPLL commands), Manchester (bi-phase level) encoding is selected. + 01 NRZI. Non-return-to-zero inverted. + 10 FMO. Bi-phase space. + 11 FM 1. Bi-phase mark. + [5] Extended Control (BOP) - + 0 No. A one-octet control field follows the address field. + 1 Yes. A two-octet control field follows the address field. + [5] Parity (COP/ ASYNC), Code Select (BISYNC) + 0 Even parity if with parity is selected by [4:3] or a 0 in the parity bit position if force parity is + selected by [4:3]. In BISYNC protocol mode, internal character comparisons are made using EBCDIC coding. + 1 Odd parity if with parity is selected by [4:3] or a 1 in the parity bit position if force parity is selected by [4:3]. + In BISYNC protocol mode, internal character comparisons are made using Bbit ASCII coding. + [4:3] Address Mode (BOP) - + This field controls whether a single octet or multiple octets follow the opening FLAG(s) for both the receiver and the transmitter. + This field is activated by selection of BOP secondary mode through the channel protocol mode bits CMR1_[2:0] (see Detailed Operation). + 00 Single octet address. + 01 Extended address. + 10 Dual octet address. + 11 Dual octet address with group. + [4:3] Parity Mode (COP/ASYNC) - + This field selects the parity mode for both the receiver and the transmitter. A parity bit is added to the programmed character length if + with parity or force parity is selected: + 00 No parity. Required when BISYNC protocol mode is programmed. + 01 Reserved. + 10 With parity. Odd or even parity is selected by [5]. + 11 Force parity. The parity bit is forced to the state selected by [5]. + [2:0] Channel Protocol Mode - + This field selects the operational protocol and submode for both the receiver and transmitter: + 000 - BOP Primary. No address comparison is performed. For receive, all characters received after the opening FLAG(s) are transferred to the FIFO. + 001 - BOP Secondary. This mode activates the address modes selected by [4:3]. Except in the case of extended address ([4:3]=01), an address comparison + is performed to determine if a frame should be received. Refer to Detailed Operation for details of the various addressing modes. If a valid comparison + occurs, the receiver is activated and the address octets and all subsequent received characters of the frame are transferred to the receive FIFO. + 010 - BOP Loop. The DUSCC acts as a secondary station in a loop. The GO-ON-LOOP and GO-OFF-LOOP commands are used to cause the DUSCC to go on and off the + loop. Normally, the TXD output echoes the RXD input with a three bit time delay. If the transmitter is enabled and the 'go active on poll' command has been + asserted, the transmitter will begin sending when an EOP sequence consisting of a zero followed by seven ones is detected. The DUSCC changes the last one of + the EOP to zero, making it another FLAG, and then operates as described in the detailed operation section. The loop sending status bit (TRSR[6]) is asserted + concurrent with the beginning of transmission. The frame should normally be terminated with an EOM followed by an echo of the marking RXD line so that secondary + stations further down the loop can append their messages to the messages from up-loop stations by the same process. If the 'go active on poll'command is not + asserted, the transmitter remains inactive (other than echOing the received data) even when the EOP sequence is received. + 011 - BOP Loop without address comparison. Same as normal loop mode except that address field comparisons are disabled. All received frames aretransmitted to the CPU. + 100 - COP Dual SYN. Character sync is achieved upon receipt of a bit sequence matching the contents of the appropriate bits of SIR and S2R (SYNI-SYN2), including + parity bits if any. + 101 - COP Dual SYN (BISYNC). Character sync is achieved upon receipt of a bit sequence matching the contents of the appropriate bits of SI Rand S2R + (SYN1·SYN2). In this mode, special transmitter and receive logic is activated. Transmitter and receiver character length must be programmed to 8 bits and no parity + 110 - COP Single SYN. Character sync is achieved upon receipt of a bit sequence matching the contents of the appropriate bits of Sl R (SYN1), including parity bit if any. + This mode is required when the external sync mode is selected. + 111 Asynchronous. Start/stop format. +*/ +void duscc_channel::do_dusccreg_cmr1_w(UINT8 data) +{ + LOG(("%s(%02x)\n", FUNCNAME, data)); + m_cmr1 = data; + LOG(("- Setting up %s mode\n", (m_cmr1 & REG_CMR1_CPMODE_MASK) == REG_CMR1_CPMODE_ASYNC ? "ASYNC" : "SYNC")); + LOG(("- Parity: %s\n", ((m_cmr1 & REG_CMR1_PMMODE_MASK) == REG_CMR1_PMMODE_PARITY ? (m_cmr1 & REG_CMR1_PARITY ? "odd" : "even") : "none"))); + return; +} + +/* CMR2 register + [7:6] Channel Connection - This field selects the mode of operation of the channel. The user must exercise care when switching into and out of the various modes. The + selected mode will be activated immediately upon mode selection, even if this occurs in the middle of a received or transmitted character. + + 00 - Normal mode. The 1ransmitter and receiver operate independently in either half or full-duplex, controlled by the respective enable commands. + + 01 - Automatic echo mode. Automatically retransmits the received data with a half-bit time delay (ASYNC, 16X clock mode) or a one-bit time delay (allother modes). + The following conditions are true while in automatic echo mode: + 1. Received data is reclocked and retransmitted on the TXD output. + 2. The receiver clock is used for the transmitter. + 3. The receiver must be enabled, but the transmitter need not be enabled. + 4. The TXRDY and underrun status bits are inactive. + 5. The received parity and/or FCS are checked if required, but are not regenerated for transmission, + i.e., transmitted parity and/ or FCS are as received. + 6. In ASYNC mode, character framing is checked, but the stop bits are retransmitted as received. + A received break is echoed as received. + 7. CPU to receiver communication continues normally, but the CPU to transmitter link is disabled. + + 10 - Local loopback mode. In this mode: + 1. The transmitter output is internally connected to the receiver input. + 2. The transmit clock is used for the receiver if NRZI or NRZ encoding is used. For FM or Manchester encoding because the receiver clock is derived from the DPLL, + the DPLL source clock must be maintained. + 3. The TXD output is held high. + 4. The RXD input is ignored. + 5. The receiver and transmitter must be enabled. + 6. CPU to transmitter and receiver communications continue normally. + + 11 - Reserved. + + [5:3] Data Transfer Interface - This field specifies the type of data transfer between the DUSCC's RX and TX FIFOs and the CPU. + All interrupt and status functions operate normally regardless of the data transfer interface programmed. + 000 - Half duplex single address DMA. + 001 - Half duplex dual address DMA. + 010 - Full duplex single address DMA. + 011 - Full duplex dual address DMA. + 100 - Wait on receive only. In this mode a read of a non-empty receive FIFO results in a normal bus cycle. However, if the receive FIFO of the channel + is empty when a read RX FIFO cycle is initiated, the DTACKN output remains negated until a character is received and loaded into the FIFO. + DT ACKN is then asserted and the cycle is completed normally. + 101 - Wait on transmit only. In this mode a write to a non-full transmit FI Fa results in a normal bus cycle. However, if the transmit FIFO of the channel is + full when a write TX FIFO cycle is initiated, the DTACKN output remains negated until a FI Fa position becomes available for the new character. DT ACKN + is then asserted and the cycle is completed normally. + 110 - Wait on transmit and receive. As above for both wait on receive and transmit operations. + 111 - Polled or interrupt. DMA and wait functions of the channel are not activated. Data transfers to the RX and TX FIFOs are via normal bus read and + write cycles in response to polling of the status registers and/or interrupts. + + [2:0] Frame Check Sequence Select - This field selects the optional frame check sequence (FCS) to be appended at the end of a transmitted frame. + When CRC is selected in COP, then no parity and 8-bit character length must be used. The selected FCS is transmitted as follows: + 1. Following the transmission of a FIFO'ed character tagged with the 'send EOM' command. + 2. If underrun control (TPR[7:6]) is programmed for TEOM, upon occurrence of an underrun. + 3. If TEOM on zero count or done (TPR[4]) is asserted and the counter/timer is counting transmitted characters, after transmission of the character which + causes the counter to reach zero count. + 4. In DMA mode with TEOM on zero count or done (TPR[4]) set, after transmission of a character if DONEN is asserted when that character was loaded into the + TX FIFO by the DMA controller. + + 000 - No frame check sequence. + 001 - Reserved + 010 - LRC8: Divisor ~ x8+ 1, dividend preset to zeros. The TX sends the calculated LRC non-inverted. The RX indicates an error if the computed LRC is + not equal to O. Valid for COP modes only. + 011 - LRC8: Divisor ~ x8+ 1, dividend preset to ones. The TX sends the calculated LRC non-inverted. The RX indicates + an error if the computed LRC is not equal to O. Valid for COP modes only. + 100 - CRCI6: Divisor ~ x16+x15+x2+1, dividend preset to zeros. The TX sends the calculated CRC non-inverted. The RX indicates an error if the + computed CRC is not equal to O. Not valid for ASYNC mode. + 101 - CRCI6: Divisor ~ x16+x15+x2+1, dividend preset to ones. The TX sends the calculated CRC non-inverted. The RX indicates an error if the + computed CRC is not equal to O. Not valid for ASYNC mode. + 110 - CRC-CCITT: Divisor ~ x16+x12+x5+1, dividend preset to zeros. The TX sends the calculated CRC non-inverted. The RX indicates an error if the + computed CRC is not equal to O. Not valid for ASYNC mode. + 111 CRC-CCITT: Divisor ~ x16+x12+x5+1, dividend preset to ones. The TX sends the calculated CRC inverted. The RX indicates an error if the computed + CRC is not equal to H' FOB8'. Not valid for ASYNC mode. +*/ +void duscc_channel::do_dusccreg_cmr2_w(UINT8 data) +{ + LOG(("%s(%02x)\n", FUNCNAME, data)); + m_cmr2 = data; + LOG(("- Preparing for %s driven transfers\n", (m_cmr2 & REG_CMR2_DTI_MASK) == REG_CMR2_DTI_NODMA ? "polled or interrupt" : "dma")); + return; +} + +void duscc_channel::do_dusccreg_s1r_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_s2r_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } + +/* Transmitter Parameter Register (TPRA, TPRB) + SYNC mode + [7:6] Underrun Control - In BOP and COP modes, this field selects the transmitter response in the event of an underrun (i.e., the TX FIFO is empty). + 00 - Normal end of message termination. In BOP, the transmitter sends the FCS (if selected by CMR2[2:011 followed by a FLAG and then either MARKs or + FLAGs, as specified by [5]. In COP, the transmitter sends the FCS (if selected by CMR2[2:0]) and then either MARKs or SYNs, as specified by [5]. + 01 - Reserved. + l0 - in BOP, the transmitter sends an ABORT (11111111) and then places the TXD output in a marking condition until receipt of further instructions. + In COP, the transmitter places the TXD output in a marking condition until receipt of further instructions. + 11 - In BOP, the transmitter sends an ABORT (11111111) and then sends FLAGs until receipt of further instructions. In COP, the transmitter sends + SYNs until receipt of further instructions. + [5] Idle - In BOP and COP modes, this bit selects the transmitter output during idle. Idle is defined as the state following a normal end of message until + receipt of the next transmitter command. + 0 - Idle in marking condition. + 1 - Idle sending SYNs (COP) or FLAGs (BOP). + [4] Transmit EOM on Zero Count or Done - In BOP and COP modes, the assertion of this bit causes the end of message (FCS in COP, FCS-FLAG in BOP) to be transmitted + upon the following events: + 1. If the counterltimer is counting transmitted characters, after transmission of the character which causes the counter to reach zero count. (DONEN is also asserted + as an output if the channel is in a DMA operation.) + 2. If the channel is operating in DMA mode, after transmission of a character if DONEN was asserted when that character was loaded into the TX FIFO by the DMA controller. + + ASYNC mode + [7:4] Stop Bits per Character - In ASYNC mode, this field programs the length of the stop bit appended to the transmitted character + Stop bit lengths of 9/16 to 1 and 1-9/16 to 2 bits, in increments of 1/16 bit, can be programmed for character lengths of 6, 7, and 8 bits. + For a character length of 5 bits, 1-1/16 to 2 stop bits can be programmed in increments of 1/16 bit. The receiver only checks for a 'mark' + condition at the center of the first stop bit position (one bit time after the last data bit, or after the parity bit if parity is enabled) in all cases. + If an external 1 X clock is used for the transmitter, [7) = 0 selects one stop bit and [7) = 1 selects two stop bits to be transmitted. + If Manchester, NRZI, or FM data encoding is selected, only integral stop bit lengths should be used. + [3] Transmitter Request-to-Send Control - This bit controls the deactivation of the RTS_N output by the transmitter + 0 - RTS_N is not affected by status of transmitter. + 1 - RTS_N changes state as a function of transmitter status. + [2] Clear-ta-Send Enable Transmitter - The state of this bit determines if the CTS N input controls the operation of the channels transmitter + The duration of CTS level change is described in the discussion of ICTSR[4). + 0 - CTS_N has no affect on the transmitter. + 1 - CTS_N affects the state of the transmitter. + [1:0] Transmitted Bits per Character - This field selects the number of data bits per character to be transmitted. The character length does not + include the start, parity, and stop bits in ASYNC or the parity bit in COP. In BOP modes the character length for the address and control + fields is always 8 bits, and the value of this field only applies to the information (I) field, except for the last character of the I field, + whose length is specified by OMR[7:5). +*/ +void duscc_channel::do_dusccreg_tpr_w(UINT8 data) +{ + LOG(("%s(%02x) Setting up Transmit Parameters\n", FUNCNAME, data)); + m_tpr = data; + LOG(("- RTS %u\n", (m_tpr & REG_TPR_RTS) ? 1 : 0)); + LOG(("- CTS %u\n", (m_tpr & REG_TPR_CTS) ? 1 : 0)); + LOG(("- Stop Bits %s\n", stop_bits_tostring(get_stop_bits()))); + LOG(("- Data Tx bits %u\n", get_tx_word_length())); + + update_serial(); + return; +} + +/* Transmitter Timing Register (TTRA, TTRB) + [7] External Source - This bit selects the RTxC pin or the TRxC pin of the channel as the transmitter clock input when [6:4] specifies + external. When used for input, the selected pin must be programmed as an input in the PCR [4:3] or [2:0]. + 0 External input form RTxC pin. + 1 External input from TRxC pin. + [6:4] Transmitter Clock Select - This field selects the clock for the transmitter. + 000 External clock from TRxC or RTXC at 1 X the shift (baud) rate. + 001 External clock from TRXC or RTxC at 16X the shift rate. + 010 Internal clock from the phase-locked loop at IX the bit rate. It should be used only in half-duplex operation since the + DPLL will periodically resync itself to the received data if in full-duplex operation. + 0ll Internal clock from the bit rate generator at 32X the shift rate. The clock signal is divided by two before use in the + transmitter which operates at 16X the baud rate. Rate selected by [3:0]. + 100 Internal clock from counter/timer of other channel. The C/T should be programmed to produce a clock at 2X the shift rate. + 101 Internal clock from counter/timer of other channel. The C/T should be programmed to produce a clock at 32X the shift rate. + 110 Internal clock from the counter/timer of own channel. The C/T should be programmed to produce a clock at 2X the shift rate. + 111 Internal clock from the counter/timer of own channel. The C/T should be programmed to produce a clock at 32X the shift rate. + [3:0] Bit Rate Select - This field selects an output from the bit rate generator to be used by the transmitter circuits. The actual + frequency output from the BRG is 32X the bit rate shown in Table 5. With a crystal or external clock of 14.7456MHz the bit rates are as + given in Table 5 (this input is divided by two before being applied to the oscillator circuit). + + Table 5. Receiver/Transmitter Baud Rates + [3:0] BIT RATE [3:0] BIT RATE + 0000 50 1000 1050 + 0001 75 1001 1200 + 0010 110 1010 2000 + 0011 134.5 1011 2400 + 0100 150 1100 4800 + 0101 200 1101 9600 + 0110 300 1110 19.2K + 0111 600 1111 38.4K +*/ +void duscc_channel::do_dusccreg_ttr_w(UINT8 data) +{ + LOG(("%s(%02x) Setting up Transmit Timing\n", FUNCNAME, data)); + m_ttr = data; + LOG(("- External source: %s\n", (m_ttr & REG_TTR_EXT) ? "TRxC" : "RTxC")); + LOG(("- Transmit Clock: ")); +#if VERBOSE > 0 + switch(m_ttr & REG_TTR_TXCLK_MASK) + { + case REG_TTR_TXCLK_1XEXT: LOG(("1x External - not implemented\n")); break; + case REG_TTR_TXCLK_16XEXT: LOG(("16x External - not implemented\n")); break; + case REG_TTR_TXCLK_DPLL: LOG(("DPLL - not implemented\n")); break; + case REG_TTR_TXCLK_BRG: + LOG(("BRG\n")); + m_brg_tx_rate = get_baudrate(m_ttr & REG_TTR_BRG_RATE_MASK); + break; + case REG_TTR_TXCLK_2X_OTHER: LOG(("2x other channel C/T - not implemented\n")); break; + case REG_TTR_TXCLK_32X_OTHER: LOG(("32x other channel C/T - not implemented\n")); break; + case REG_TTR_TXCLK_2X_OWN: LOG(("2x own channel C/T - not implemented\n")); break; + case REG_TTR_TXCLK_32X_OWN: LOG(("32x own channel C/T - not implemented\n")); break; + default: LOG(("Wrong programming\n")); break; // Should never happen + } +#endif + + LOG(("- BRG Tx rate %u assuming a 14.7456MHz CLK crystal\n", get_baudrate(m_ttr & REG_TTR_BRG_RATE_MASK))); + update_serial(); + + return; +} + +/* Receiver Parameter Resgister (RPRA, RPRB) + [7] SYN Stripping - This bit controls the DUSCC processing in COP modes of SYN 'character patterns' that occur after the initial + character synchronization. Refer to Detailed Operation of the receiver for details and definition of SYN 'patterns', and their + accumulation of FCS. + 0 Strip only leading SYN 'patterns' (i.e. before a message). + 1 Strip all SYN 'patterns' (including all odd DLE's in BISYNC transparent mode). + + [6] Transfer Received FCS to FIFO - In BISYNC and BOP modes, the assertion of this bit causes the received FCS to be loaded into the + RxFIFO. When this bit is set, BOP mode operates correctly only if a minimum of two extra FLAGs (without shared zeros) are appended + to the frame. If the FCS is specified to be transferred to the FI FO, the EOM status bit will be tagged onto the last byte of the + FCS instead of to the last character of the message. + 0 Do not transfer FCS to RxFIFO. + 1 Transfer FCS to RxFIFO. + + [5] Auto-Hunt and Pad Check (BISYNC) -In BISYNC rnode, the assertion of this bit causes the receiver to go into hunt for character + sync mode after detecting certain End-Ol-Message (EOM) characters. These are defined in the Detailed Operations section for + COP receiver operation. After the EOT and NAK sequences, the receiver also does a check for a closing PAD of four 1 s. + 0 Disable auto-hunt and PAD check. + 1 Enable auto-hunt and PAD check. + [5] Overrun Mode (BOP) - The state of this control bit deterrnines the operation of the receiver in the event of a data overrun, i.e., + when a character is received while the RxFIFO and the Rx shift register are both full. + 0 The receiver terrninates receiving the current frame and goes into hunt phase, looking for a FLAG to be received. + 1 The receiver continues receiving the current frame. The overrunning character is lost. (The five characters already + assembled in the RxFIFO and Rx shift register are protected). + + [4] Receiver Request-to-Send Control (ASYNC) + 0 Receiver does not control RTSN output. + 1 Receiver can negate RTSN output. + [4] External Sync (COP) - In COP single SYN mode, the assertion of this bit enables external character synchronization and + receipt of SYN patterns is not required. In order to use this feature, the DUSCC must be programmed to COP single SYN mode, + CMR1[2:0] = 110, which is used to set up the internal data paths. In all other respects, however, the external sync mode operation is + protocol transparent. A negative signal on the DCDN/SYNIN pin will cause the receiver to establish synchronization on the next rising + edge of the receiver clock. Character assembly will start at this edge with the RxD input pin considered to have the second bit of + data. The sync signal can then be negated. Receipt of the Active-High external sync input causes the SYN detect status bit + (RSR[2]) to be set and the SYNBOUTN pin to be asserted for one bit time. When this mode is enable, the internal SYN (COP mode) + detection and special character recognition (e.g., IDLE, STX, ETX, etc.) circuits are disabled. Character assembly begins as ~ in the + I-field with character length as programmed in RPR[I :)]. Incoming COP frames with parity specified optionally can have it stripped by + programming RPR[3J. The user must wait at least eight bit times after Rx is enabled before applying the SYNIN signal. This time is + required to flush the internal data paths. The receiver remains in this mode and further external sync pulses are ignored until the + receiver is disabled and then reenabled to resynchronize or to return to normal mode. + 0 External sync not enabled. + 1 External sync enabled. + Note that EXT SYNC and DCD ENABLE Rx cannot be asserted simultaneously since they use the same pin. + + [3] Strip Parity - In COP and ASYNC modes with parity enabled, this bit controls whether the received parity bit is stripped from the + data placed in the receiver FIFO. It is valid ony for programmed character lengths of 5, 6, and 7 bits. If the bit is stripped, the + corresponding bit in the received data is set to zero. + 0 Transfer parity bit as received. + 1 Stop parity bit from data. + [3] All Parties Address - In BOP secondary modes, the assertion of this bit causes the receiver to 'wake-up' upon receipt of the + address H'FF' or H'FF, FF', for single- and dual-octet address modes, respectively, in addition to its normal station address. This + feature allows all stations to receive a message. + 0 Don't recognize all parties address. + 1 Recognize all parties address. + + [2] DCD Enable Receiver - If this bit is asserted, the DCDN/SYNIN input must be Low in order for the receiver to operate. + If the input is negated (goes High) while a character is being received, the receiver terminates receipt of the current message + (this action in effect disables the receiver). If DCD is subsequently asserted, the receiver will search for the start bit, SYN pattern, or + FLAG, depending on the channel protocol. (Note that the change of input can be programmed to generate an interrupt; the duration of + the DCD level change is described in the discussion of the input and counter/timer status register (CTSR[5]). + 0 DCD not used to enabled receiver. + 1 DCD used to enabled receiver. + NOTE that EXT SYNC and DCD ENABLE Rx cannot be asserted simultaneously since they use the same pin. + + [1:0] Received Bits per Character - This field selects the number of data bits per character to be assembled by the receiver. The + character length does not include the start, parity, and stop bits in the ASYNC or the parity bit in COP. In BOP modes, the character + length for the address and control field is always 8 bits, and the value of this field only applies to the information field. lithe number + of bits assembled for the last character of the l-field is less than the value programmed in this field, RCL not zero (RSR[O]) is asserted + and the actual number of bits received is given in TRSR[2:0]. +*/ +void duscc_channel::do_dusccreg_rpr_w(UINT8 data) +{ + LOG(("%s(%02x) Setting up Receiver Parameters\n", FUNCNAME, data)); + m_rpr = data; + LOG(("- RTS output %u\n", (m_rpr & REG_RPR_RTS) ? 1 : 0)); + LOG(("- Strip Parity %u\n", (m_rpr & REG_RPR_STRIP_PARITY && get_rx_word_length() < 8) ? 1 : 0)); + LOG(("- DCD/SYNIN input %u\n", (m_rpr & REG_RPR_DCD) ? 1 : 0)); + LOG(("- Data Rx bits %u\n", get_rx_word_length())); + + update_serial(); + return; +} + +/* Receiver Timing Register (RTRA, RTRB) + [7] External Source - This M selects the RTxC pin or the TRxC pin of the channel as the receiver or DPLL clock input, when [6:4J + specifies external. When used for input, the selected pin must be programmed as an input in the PCR [4:3] or [2:0]. + 0 External input form RTxC pin. + 1 External input form TRxC pin. + [6:4] Receiver Clock Select- This field selects the clock for the receiver. + 000 External clock from TRxC or RTxC at 1 X the shift (baud) rate. + 001 External clock fromTRxC or RTxC at 16X the shift rate. Used for ASYNC mode only. + 010 Internal clock from the bit rate generator at 32X the shift rate. Clock is divided by two before used by the receiver + logic, which operates at 16X the baud rate. Rate selected + by [3:0J. Used for ASYNC mode only. + 011 Internal clock from counter/timer of own channel. The CIT should be programmed to produce a clock at 32X the shift + rate. Clock is divided by two before use in the receiver logic. Used for ASYNC mode only. + 100 Internal clock from the digital phase- locked loop. The clock for the DPLL is a 64X clock from the crystal oscillator or + system clock input. (The input to the oscillator is divided by two). + 101 Internal clock from the digital phase- locked loop. The clock for the DPLL is an external 32X clock from the RTxC or + TRxC pin, as selected by [7J. + 110 Internal clock from the digital phase- locked loop. The clock for the DPLL is a 32X clock from the BRG. The frequency + is programmed by [3:0]. + 111 Internal clock from the digital phase- locked loop. The clock for the DPLL is a 32X clock from the counter/timer of the + channel. + [3:0] Bit Rate Select- This field selects an output from the bit rate generator to be used by the receiver circuits. The actual frequency + output from the BRG is 32X the bit rate shown in Table 5.*/ + +void duscc_channel::do_dusccreg_rtr_w(UINT8 data) +{ + LOG(("%s(%02x) Setting up Receiver Timing\n", FUNCNAME, data)); + m_rtr = data; + LOG(("- External source: %s\n", (m_rtr & REG_RTR_EXT) ? "TRxC" : "RTxC")); + LOG(("- Receiver Clock: ")); + +#if VERBOSE > 0 + switch(m_rtr & REG_RTR_RXCLK_MASK) + { + case REG_RTR_RXCLK_1XEXT: LOG(("1x External - not implemented\n")); break; + case REG_RTR_RXCLK_16XEXT: LOG(("16x External - not implemented\n")); break; + case REG_RTR_RXCLK_BRG: + LOG(("BRG\n")); + m_brg_rx_rate = get_baudrate(m_rtr & REG_RTR_BRG_RATE_MASK); + break; + case REG_RTR_RXCLK_CT: LOG(("C/T of channel - not implemented\n")); break; + case REG_RTR_RXCLK_DPLL_64X_X1: LOG(("DPLL, source = 64X X1/CLK - not implemented\n")); break; + case REG_RTR_RXCLK_DPLL_32X_EXT:LOG(("DPLL, source = 32X External - not implemented\n")); break; + case REG_RTR_RXCLK_DPLL_32X_BRG:LOG(("DPLL, source = 32X BRG - not implemented\n")); break; + case REG_RTR_RXCLK_DPLL_32X_CT: LOG(("DPLL, source = 32X C/T - not implemented\n")); break; + default: LOG(("Wrong programming\n")); break; // Should never happen + } +#endif + + LOG(("- BRG Rx rate %u assuming a 14.7456MHz CLK crystal\n", get_baudrate(m_rtr & REG_RTR_BRG_RATE_MASK))); + update_serial(); + + return; +} + +void duscc_channel::do_dusccreg_ctprh_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ctprl_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ctcr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } + +/* Output and Miscellaneous Register (OMRA, OMRB) + [7:5] Transmitted Residual Character Length - In BOP modes, this field determines the number of bits transmitted for the last + character in the information field. This length applies to: + - The character in the transmit FIFO accompanied by the FIFOed TEOM command. + - The character loaded into the FIFO by the DMA controller if DONEN is simultaneously asserted and TPR(4) is asserted. + - The character loaded into the FIFO which causes the counter to reach zero count when TPR[4J is asserted. + The length of all other characters in the frame's information field is selected by TPR[I :OJ. If this field is 111, + the number of bits in the last character is the same as programmed in TPR[1:0]. + [4] TxRDY Activate Mode - + 0 FIFO not full. The channel's TxRDY status bit is asserted each time a character is transferred from the transmit FIFO + to the transmit shift register. If not reset by the CPU, TxRDY remains asserted until the FIFO is full, at which time + it is automatically negated. + 1 FIFO empty. The channel's TxRDY status bit is asserted when a character transfer from the transmit FIFO to the + transmit shift register causes the FI FO to become empty. If not reset by the CPU, TxRDY remains asserted until the + FIFO is full, at which time it is negated. + If the TxRDY status bit is reset by the CPU, it will remain negated regardless of the current state of the transmit + FIFO, until it is asserted again due to the occurrence of one of the above conditions. + [3] RxRDY Activate Mode - + 0 FIFO not empty. The channel's RxRDY status bit is asserted each time a character is transferred from the + receive shift register to the receive FIFO. If not reset by the CPU, RxRDY remains asserted until the receive FIFO is + empty, at which time it is automatically negated. + 1 FIFO full. The channel's RxRDY status bit is asserted when a character transfer from the receive shift register to the + receive FIFO causes the FIFO to become full. If not reset by the CPU, RxRDY reamins asserted until the FIFO is empty, + at which time it is negated. + The RxRDY status bit will also be asserted, regardless of the receiver FIFO full condition, when an end-of-message + character is loaded in the RxFIFO (BOP/BISYNC), when a BREAK condition (ASYNC mode) is detected in RSR[2), or + when the counterltimer is programmed to count received characters and the character which causes it to reach zero + is loaded in the FIFO (all modes). If reset by the CPU, the RxRDY status bit will remain negated, regardless of the + current state of the receiver FIFO, until it is asserted again due to one of the above conditions. + [2] General Purpose Output 2 - + This general purpose bit is used to control the TxDRQN/GP02lRTSN pin, when it is used as an output. The output is + High when the bit is a 0 and is Low when the bit is a 1. + [1] General Purpose Output 1 - This bit is used to control the RTxDRQN/GPOl N output, which is a general purpose output + when the channel is not in DMA mode. The output is High when the bit is a 0 and is Low when the bit is a 1. + [0] Request-to-Send Output - This bit controls the TxDRQN/GP02N/RTSN and SYNOUTN/RTSN pin, when either is + used as a RTS output. The output is High when the bit is a 0 and is Low when the bit is a 1. +*/ +void duscc_channel::do_dusccreg_omr_w(UINT8 data) +{ + LOG(("%s(%02x) Output and Miscellaneous Register\n", FUNCNAME, data)); + m_omr = data; + LOG(("- Tx Residual Character Length is ")); + if ((m_omr & REG_OMR_TXRCL_MASK) == REG_OMR_TXRCL_8BIT) + LOG(("determined by TPR[1:0], the Transmitter Parameter Register\n")); + else + LOG(("%u bits\n", (((m_omr & REG_OMR_TXRCL_MASK) >> 5) & 0x07) + 1)); + LOG(("- TxRDY activated by %s\n", m_omr & REG_OMR_TXRDY_ACTIVATED ? "FIFO empty" : "FIFO not full")); + LOG(("- RxRDY activated by %s\n", m_omr & REG_OMR_RXRDY_ACTIVATED ? "FIFO full" : "FIFO not empty")); + LOG(("- GP02, if configured as output, is: %u\n", m_omr & REG_OMR_GP02 ? 0 : 1)); + LOG(("- GP01, if configured as output, is: %u\n", m_omr & REG_OMR_GP01 ? 0 : 1)); + LOG(("- RTS, either pin if configured as output, is: %u\n", m_omr & REG_OMR_RTS ? 0 : 1)); + return; +} + +/* Pin Configuration Register (PCRA, PCRB) + This register selects the functions for multipurpose 1/0 pins. + [7] X2IIDC - This bit is defined only for PCRA. It is not used in PCRB. + 0 The X2/IDCN pin is used as a crystal connection. + 1 The X2/IDCN pin is the interrupt daisy chain output. + [6] GP02/RTS - The function of this pin is programmable only when not operating in full-duplex DMA mode. + 0 The TxDRQN/GP02N/RTSN pin is a general purpose output. It is Low when OMR[2] is a 1 and High when OMR[2] is a O. + 1 The pin is a request-to-send output The logical stale of the pin is controlled by OMR[O]. When OMR[O] is set, the output is Low. + [5] SYNOUT/RTS - + 0 The SYNOUTN/RTSN pin is an active-Low output which is asserted one bit time after a SYN pattern (COP modes) in HSRH/HSRL or FLAG + (BOP modes) is detected in CCSR.The output remains asserted for one receiver clock period. + 1 The pin is a request-to-send output The,logical state of the pin Is controlled by OMR[O] when OMR[O] is set, the output is Low. + [4:3] RTxC- + 00 The pin is an input. It must be programmed for input when used as the input for the receiver or transmitter clock, the DPLL, or the CIT. + 01 The pin is an output for the counterltimer. + 10 The pin is an output for the transmitter shift register clock. + 11 The pin is an output for the receiver shift register clock. + [2:0]TRxC- + 000 The pin is an input. It must be programmed for input when used as the input for the receiver or transmitter clock, the DPLL, or the CIT. + 001 The pin is an output from the crystal oscillator divided by two. + 010 The pin is an outputfor the DPLL output clock. + 011 The pin is an output for the counterltimer. Refer to CTCRAIB description. + 100 The pin is an output for the transmitter BRG at 16X the rate selected by TTR [3:0]. + 101 The pin is an output for the receiver BRG at 16X the rate selected by RTR [3:0]. + 110 The pin is an output for the transmitter shift register clock. + 111 The pin is an output for the receiver shift register clock. +*/ +void duscc_channel::do_dusccreg_pcr_w(UINT8 data) +{ + LOG(("%s(%02x) Pin Configuration Register\n", FUNCNAME, data)); + m_pcr = data; + LOG(("- The X2/IDCN pin is %s\n", m_index == duscc_device::CHANNEL_B ? "ignored for channel B" : + ((m_pcr & REG_PCR_X2_IDC) ? "crystal input" : "daisy chain interrupt output"))); + LOG(("- The GP02/RTS pin is %s\n", m_pcr & REG_PCR_GP02_RTS ? "RTS" : "GP02")); + LOG(("- The SYNOUT/RTS pin is %s\n", m_pcr & REG_PCR_SYNOUT_RTS ? "RTS" : "SYNOUT")); + +#if VERBOSE > 0 + LOG(("- The RTxC pin is ")); + switch ( m_pcr & REG_PCR_RTXC_MASK ) + { + case REG_PCR_RTXC_INPUT: LOG(("- an input\n")); break; + case REG_PCR_RTXC_CNTR_OUT: LOG(("- a counter/timer output\n")); break; + case REG_PCR_RTXC_TXCLK_OUT:LOG(("- a Tx clock output\n")); break; + case REG_PCR_RTXC_RXCLK_OUT:LOG(("- a Rx clock output\n")); break; + default: LOG(("Wrong programming\n")); break; // Should never happen + } + LOG(("- The TRxC pin is ")); + switch( m_pcr & REG_PCR_TRXC_MASK ) + { + case REG_PCR_TRXC_INPUT: LOG(("- an input\n")); break; + case REG_PCR_TRXC_CRYST_OUT:LOG(("- a crystal/2 output\n")); break; + case REG_PCR_TRXC_DPLL_OUT: LOG(("- a DPLL output\n")); break; + case REG_PCR_TRXC_CNTR_OUT: LOG(("- a counter/timer output\n")); break; + case REG_PCR_TRXC_TXBRG_OUT:LOG(("- a Tx BRG output\n")); break; + case REG_PCR_TRXC_RXBRG_OUT:LOG(("- a Rx BRG output\n")); break; + case REG_PCR_TRXC_TXCLK_OUT:LOG(("- a Tx CLK output\n")); break; + case REG_PCR_TRXC_RXCLK_OUT:LOG(("- a Rx CLK output\n")); break; + default: LOG(("Wrong programming\n")); break; // Should never happen + } + +#endif + + return; +} + +/* + * Commands to the DUSCC are entered through the CCR channel command register. + * + * TODO: + * - support enable/disable of Tx/Rx using m_tra/m_rcv respectivelly + */ +void duscc_channel::do_dusccreg_ccr_w(UINT8 data) +{ + m_ccr = data; + LOG(("%s\n", FUNCNAME)); + switch(m_ccr) + { + + // TRANSMITTER COMMANDS + + /* Reset transmitter. Causes the transmitter to cease operation immediately. + The transmit FIFO is cleared and the TxD output goes into the marking state. + Also clears the transmitter status bits (TRSR[7:4]) and resets the TxRDY + status bit (GSR[I] or GSR[5] for Channels A and B, respectively). + The counter/timer and other registers are not affected*/ + case REG_CCR_RESET_TX: LOG(("- Reset Tx\n")); + set_tra_rate(0); + m_tx_fifo_wp = m_tx_fifo_rp = 0; + m_trsr &= 0x0f; + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + break; + + /* Enable transmitter. Enables transmitter operation, conditioned by the state of + the CTS ENABLE Tx bit, TPR[2]. Has no effect if invoked when the transmitter has + previously been enabled.*/ + case REG_CCR_ENABLE_TX: LOG(("- Enable Tx\n")); + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + m_tra = 1; + set_tra_rate(m_brg_tx_rate); + break; + + /* Disable transmitter. Terminates transmitter operation and places the TXD output in the + marking state at the next occurrence of a transmit FIFO empty condition. All characters + currently in the FIFO, or any loaded subsequently prior to attaining an empty condition, + will be transmitted. + TODO: let all the chararcters be transmitted before shutting down shifter */ + case REG_CCR_DISABLE_TX: LOG(("- Disable Tx\n")); + set_tra_rate(0); + m_tra = 0; + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + break; + + // RECEIVER COMMANDS + + /* Reset Receiver. Causes the receiver to cease operation, clears the receiver FIFO, + clears the data path, and clears the receiver status (RSR[7:0], TRSR[3:0], and either + GSR[O] or GSR[4] for Channels A and B, respectively). The counter/timer and other + registers are not affected.*/ + case REG_CCR_RESET_RX: LOG(("- Reset Rx\n")); + set_rcv_rate(0); + m_rx_fifo_wp = m_rx_fifo_rp = 0; + m_trsr &= 0xf0; + m_rsr = 0; + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + break; + + /* Enable receiver. Causes receiver operation to begin, conditioned by the state of the DCD + ENABLED Rx bit, RPR[2]. Receiver goes into START, SYN, or FLAG search mode depending on + channel protocol mode. Has no effect if invoked when the receiver has previously been enabled.*/ + case REG_CCR_ENABLE_RX: LOG(("- Enable Rx\n")); + m_rcv = 1; + set_rcv_rate(m_brg_rx_rate); + //m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + break; + + /* Disable receiver. Terminates operation of the receiver. Any character currently being assembled + will be lost. Does not affect FIFO or any status.*/ + case REG_CCR_DISABLE_RX: LOG(("- Disable Rx\n")); + m_rcv = 0; + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + break; + default: LOG((" - command %02x not implemented yet\n", data)); + } + return; +} + +void duscc_channel::do_dusccreg_txfifo_w(UINT8 data) +{ + LOG(("%s(%02x)'%c'\n", FUNCNAME,data, isalnum(data) ? data : ' ')); + LOG((" - TX wp:%d rp:%d sz:%d\n", m_tx_fifo_wp, m_tx_fifo_rp, m_tx_fifo_sz)); + + /* Tx FIFO is full or...? */ + if (m_tx_fifo_wp + 1 == m_tx_fifo_rp || ( (m_tx_fifo_wp + 1 == m_tx_fifo_sz) && (m_tx_fifo_rp == 0) )) + { + logerror("- TX FIFO is full, discarding data\n"); + LOG(("- TX FIFO is full, discarding data\n")); + } + else // ..there is still room + { + m_tx_data_fifo[m_tx_fifo_wp++] = data; + //m_rsr &= ~REG_RSR_OVERRUN_ERROR; + //m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + if (m_tx_fifo_wp >= m_tx_fifo_sz) + { + m_tx_fifo_wp = 0; + } + } + + /* Transmitter enabled? */ + if ( m_tra == 1 ) + { + if ( is_transmit_register_empty()) // Is the shift register loaded? + { + LOG(("- Setting up transmitter\n")); + transmit_register_setup(m_tx_data_fifo[m_tx_fifo_rp]); // Load the shift register, reload is done in tra_complete() + m_tx_fifo_rp_step(); + } + } + // check if Tx FIFO is FULL and set TxREADY accordingly + if (m_tx_fifo_wp + 1 == m_tx_fifo_rp || ( (m_tx_fifo_wp + 1 == m_tx_fifo_sz) && (m_tx_fifo_rp == 0) )) + { + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + } + else + { + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + } + + return; +} + +void duscc_channel::do_dusccreg_rsr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_trsr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ictsr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_gsr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ier_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ivr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_icr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } + +/* Short cutted non complex features */ +//void duscc_channel::do_dusccreg_rea_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +//void duscc_channel::do_dusccreg_sea_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } + +void duscc_channel::do_dusccreg_mrr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ier1_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ier2_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ier3_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_trcr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ftlr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_trmsr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } + +//------------------------------------------------- +// control_read - read register +//------------------------------------------------- +UINT8 duscc_channel::read(offs_t &offset) +{ + UINT8 data = 0; + int reg = offset | m_a7; + + switch (reg) + { + case REG_CID: data = do_dusccreg_cid_r(); break; + case REG_CCR: data = do_dusccreg_ccr_r(); break; + case REG_RXFIFO_0: data = do_dusccreg_rxfifo_r(); break; + case REG_RXFIFO_1: data = do_dusccreg_rxfifo_r(); break; + case REG_RXFIFO_2: data = do_dusccreg_rxfifo_r(); break; + case REG_RXFIFO_3: data = do_dusccreg_rxfifo_r(); break; + case REG_GSR: data = do_dusccreg_gsr_r(); break; + default: + logerror(" \"%s\" %s: %c : Unsupported RRx register:%02x\n", m_owner->tag(), FUNCNAME, 'A' + m_index, reg); + } + + //LOG(("%s \"%s\": %c : Register R%d read '%02x'\n", FUNCNAME, m_owner->tag(), 'A' + m_index, reg, data)); + return data; +} + +//------------------------------------------------- +// write - write register +//------------------------------------------------- + +void duscc_channel::write(UINT8 data, offs_t &offset) +//WRITE8_MEMBER( duscc_channel::write) +{ + int reg = offset | m_a7; + + LOG(("\"%s\" %s: %c : Register write '%02x' -> [%02x]", m_owner->tag(), FUNCNAME, 'A' + m_index, data, reg )); + switch (reg) + { + case REG_SEA: /*Also REG_REA depending on which channel is written to */ + if ( m_uart->m_variant != SET_CMOS ) + { + logerror("Attempt set/clear the CDUSCC A7 bit on an NDUSCC\n"); + m_a7 = 0; + } + else + m_a7 = (m_index == duscc_device::CHANNEL_A ? 0x40 : 0); + break; + case REG_CMR1: do_dusccreg_cmr1_w(data); break; + case REG_CMR2: do_dusccreg_cmr2_w(data); break; + case REG_S1R: LOG(("REG_S1R \n")); break; + case REG_S2R: LOG(("REG_S2R \n")); break; + case REG_TPR: do_dusccreg_tpr_w(data); break; + case REG_TTR: do_dusccreg_ttr_w(data); break; + case REG_RPR: do_dusccreg_rpr_w(data); break; + case REG_RTR: do_dusccreg_rtr_w(data); break; + case REG_CTPRH: LOG(("REG_CTPRH\n")); break; + case REG_CTPRL: LOG(("REG_CTPRL\n")); break; + case REG_CTCR: LOG(("REG_CTCR\n")); break; + case REG_OMR: do_dusccreg_omr_w(data); break; + case REG_CTH: LOG(("REG_CTH \n")); break; + case REG_CTL: LOG(("REG_CTL \n")); break; + case REG_PCR: do_dusccreg_pcr_w(data); break; + case REG_CCR: do_dusccreg_ccr_w(data); break; + case REG_TXFIFO_0: do_dusccreg_txfifo_w(data); break; + case REG_TXFIFO_1: do_dusccreg_txfifo_w(data); break; + case REG_TXFIFO_2: do_dusccreg_txfifo_w(data); break; + case REG_TXFIFO_3: do_dusccreg_txfifo_w(data); break; + case REG_RSR: LOG(("REG_RSR \n")); break; + case REG_TRSR: LOG(("REG_TRSR\n")); break; + case REG_ICTSR: LOG(("REG_ICTSR\n")); break; + case REG_GSR: LOG(("REG_GSR \n")); break; + case REG_IER: LOG(("REG_IER \n")); break; +// case REG_CID: LOG(("REG_CID \n")); break; + case REG_IVR: LOG(("REG_IVR \n")); break; + case REG_ICR: LOG(("REG_ICR \n")); break; +// case REG_SEA: LOG(("REG_SEA \n")); break; +// case REG_IVRM: LOG(("REG_IVRM\n")); break; +// case REG_MRR: LOG(("REG_MRR \n")); break; + case REG_IER1: LOG(("REG_IER1\n")); break; + case REG_IER2: LOG(("REG_IER2\n")); break; + case REG_IER3: LOG(("REG_IER3\n")); break; + case REG_TRCR: LOG(("REG_TRCR\n")); break; + case REG_RFLR: LOG(("REG_RFLR\n")); break; + case REG_FTLR: LOG(("REG_FTLR\n")); break; + case REG_TRMSR: LOG(("REG_TRMSR\n")); break; + case REG_TELR: LOG(("REG_TELR\n")); break; + + default: + logerror(" \"%s\" %s: %c : Unsupported WRx register:%02x(%02x)\n", m_owner->tag(), FUNCNAME, 'A' + m_index, reg, data); + } +} + +/* Get data from top of fifo data but restore read pointer in case of exit latch lock */ +UINT8 duscc_channel::m_rx_fifo_rp_data() +{ + UINT8 data; + UINT8 old_rp = m_rx_fifo_rp; + m_rx_fifo_rp_step(); + data = m_rx_data_fifo[m_rx_fifo_rp]; + m_rx_fifo_rp = old_rp; + + return data; +} + +/* Step read pointer */ +void duscc_channel::m_rx_fifo_rp_step() +{ + m_rx_fifo_rp++; + if (m_rx_fifo_rp >= m_rx_fifo_sz) + { + m_rx_fifo_rp = 0; + } + + // check if FIFO is empty + if (m_rx_fifo_rp == m_rx_fifo_wp) + { + // no more characters available in the FIFO + // m_rr0 &= ~ RR0_RX_CHAR_AVAILABLE; + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + } +} + +/* Step TX read pointer */ +void duscc_channel::m_tx_fifo_rp_step() +{ + m_tx_fifo_rp++; + if (m_tx_fifo_rp >= m_tx_fifo_sz) + { + m_tx_fifo_rp = 0; + } +} + +//------------------------------------------------- +// receive_data - receive data word into fifo +//------------------------------------------------- + +void duscc_channel::receive_data(UINT8 data) +{ + LOG(("\"%s\": %c : Receive Data Byte '%02x'\n", m_owner->tag(), 'A' + m_index, data)); +# + if (m_rx_fifo_wp + 1 == m_rx_fifo_rp || ( (m_rx_fifo_wp + 1 == m_rx_fifo_sz) && (m_rx_fifo_rp == 0) )) + { + // receive overrun error detected + m_rsr |= REG_RSR_OVERRUN_ERROR; + logerror("Receive_data() Error %02x\n", m_rsr); + } + else + { + m_rx_data_fifo[m_rx_fifo_wp] = data; + m_rx_error_fifo[m_rx_fifo_wp] &= ~REG_RSR_OVERRUN_ERROR; + m_rsr &= ~REG_RSR_OVERRUN_ERROR; + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + + m_rx_fifo_wp++; + if (m_rx_fifo_wp >= m_rx_fifo_sz) + { + m_rx_fifo_wp = 0; + } + } +} + + +//------------------------------------------------- +// cts_w - clear to send handler +//------------------------------------------------- + +WRITE_LINE_MEMBER( duscc_channel::cts_w ) +{ + LOG(("\"%s\" %s: %c : CTS %u\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); + + if (m_cts != state) + { + // enable transmitter if in auto enables mode + if (!state) + { + m_ictsr |= REG_ICTSR_DELTA_CTS; + } + else + { + m_ictsr &= ~REG_ICTSR_DELTA_CTS; + } + + if (m_tpr & REG_TPR_CTS && m_tra) + { + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + } + + // set clear to send + m_cts = state; + } +} + + +//------------------------------------------------- +// dcd_w - data carrier detected handler +//------------------------------------------------- +WRITE_LINE_MEMBER( duscc_channel::dcd_w ) +{ + LOG(("\"%s\" %s: %c : DCD %u - not implemented\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); +#if 0 + + if (m_dcd != state) + { + // enable receiver if in auto enables mode + if (!state) + if (reg & REG_AUTO_ENABLES) + { + reg |= REG_RX_ENABLE; + } + + // set data carrier detect + m_dcd = state; + } +#endif +} + +//------------------------------------------------- +// ri_w - ring indicator handler +//------------------------------------------------- + +WRITE_LINE_MEMBER( duscc_channel::ri_w ) +{ + LOG(("\"%s\" %s: %c : RI %u - not implemented\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); +#if 0 + if (m_ri != state) + { + // set ring indicator state + m_ri = state; + } +#endif +} + +//------------------------------------------------- +// sync_w - sync handler +//------------------------------------------------- +WRITE_LINE_MEMBER( duscc_channel::sync_w ) +{ + LOG(("\"%s\" %s: %c : SYNC %u - not implemented\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); +} + +//------------------------------------------------- +// rxc_w - receive clock +//------------------------------------------------- +WRITE_LINE_MEMBER( duscc_channel::rxc_w ) +{ + LOG(("\"%s\" %s: %c : RXC %u - not implemented\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); +} + +//------------------------------------------------- +// txc_w - transmit clock +//------------------------------------------------- +WRITE_LINE_MEMBER( duscc_channel::txc_w ) +{ + LOG(("\"%s\" %s: %c : TXC %u - not implemented\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); +} + +//------------------------------------------------- +// update_serial - +//------------------------------------------------- +void duscc_channel::update_serial() +{ + int data_bit_count = get_rx_word_length(); + stop_bits_t stop_bits = get_stop_bits(); + parity_t parity; + + if ((m_cmr1 & REG_CMR1_PMMODE_MASK) == REG_CMR1_PMMODE_PARITY) + { + if ( (m_cmr1 & REG_CMR1_PARITY) == 0) + parity = PARITY_EVEN; + else + parity = PARITY_ODD; + } + else + parity = PARITY_NONE; + + LOG((LLFORMAT " %s() \"%s \"Channel %c setting data frame %d+%d%c%d\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, 1, + data_bit_count, parity == PARITY_NONE ? 'N' : parity == PARITY_EVEN ? 'E' : 'O', (stop_bits + 1) / 2)); + + set_data_frame(1, data_bit_count, parity, stop_bits); + + int clocks = get_rx_clock_mode(); + + if (m_rxc > 0) + { + set_rcv_rate(m_rxc / clocks); + LOG((" - Receiver clock: %d mode: %d rate: %d/%xh\n", m_rxc, clocks, m_rxc / clocks, m_rxc / clocks)); + } + + clocks = get_tx_clock_mode(); + if (m_txc > 0) + { + set_tra_rate(m_txc / clocks); + LOG((" - Transmit clock: %d mode: %d rate: %d/%xh\n", m_rxc, clocks, m_rxc / clocks, m_rxc / clocks)); + } + + if (m_brg_rx_rate != 0) + { + if (m_brg_rx_rate == 1) m_brg_rx_rate = 0; // BRG beeing disabled + set_rcv_rate(m_brg_rx_rate); + LOG((" - Baud Rate Generator: %d mode: RX:%dx\n", m_brg_rx_rate, get_rx_clock_mode())); + } + if (m_brg_tx_rate != 0) + { + if (m_brg_tx_rate == 1) m_brg_tx_rate = 0; // BRG beeing disabled + set_tra_rate(m_brg_tx_rate); + LOG((" - Baud Rate Generator: %d mode: TX:%dx\n", m_brg_tx_rate, get_tx_clock_mode())); + } +} + +//------------------------------------------------- +// set_dtr - +//------------------------------------------------- +void duscc_channel::set_dtr(int state) +{ + LOG(("%s(%d)\n", FUNCNAME, state)); + m_dtr = state; + + if (m_index == duscc_device::CHANNEL_A) + m_uart->m_out_dtra_cb(m_dtr); + else + m_uart->m_out_dtrb_cb(m_dtr); +} + + + +//------------------------------------------------- +// write_rx - called by terminal through rs232/diserial +// when character is sent to board +//------------------------------------------------- +WRITE_LINE_MEMBER(duscc_channel::write_rx) +{ + m_rxd = state; + //only use rx_w when self-clocked + if(m_rxc != 0 || m_brg_rx_rate != 0) + device_serial_interface::rx_w(state); +} diff --git a/src/devices/machine/scnxx562.h b/src/devices/machine/scnxx562.h new file mode 100644 index 00000000000..917f816228a --- /dev/null +++ b/src/devices/machine/scnxx562.h @@ -0,0 +1,698 @@ +// license:BSD-3-Clause +// copyright-holders:Joakim Larsson Edstrom +/*************************************************************************** + + Philips DUSCC - Dual Serial Communications Controller emulation + +**************************************************************************** + + Chan B Chan A Chan B Chan A + ======= _____ _____ ======== ======= _____ _____ ======== + IACKN 1|* \_/ |48 VCC IACKN 1|* \_/ |48 VDD + A3 2| |47 A4 A3 2| |47 A4 + A2 3| |46 A5 A2 3| |46 A5 + A1 4| |45 A6 A1 4| |45 A6 + RTxDAK/GPI1 5| |44 RTxDAK/GPI1 5| |44 RTxDAK/GP1 + IRQN 6| |43 X1/CLK IRQN 6| |43 X1/CLK + RDYN 7| |42 X2 RESETN 7| |42 X2 + RTS/SYNOUT 8| |41 RTS/SYNOUT 8| |41 RTS/SYNOUT + TRxC 9| |40 TRxC TRxC 9| |40 TRxC + RTxC 10| |39 RTxC RTxC 10| |39 RTxC + DCD/SYNI 11| |38 DCD/SYNI 11| |38 DCD/SYNI + RxD 12| |37 RxD RxD 12| |37 RxD + TxD 13| SCN26562 |36 TxD TxD 13| SCN68562 |36 TxD + TxDAK/GPI2 14| SCN26C562 |35 TxDAK/GPI2 14| SCN68C562 |35 TxDAK/GPI2 + RTxDRQ/GPO1 15| |34 RTxDRQ/GPO1 15| |34 RTxDRQ/GPO1 + TxDRQ/RTS/GPO2 16| |33 TxDRQ/RTS/GPO2 16| |33 TxDRQ/RTS/GPO2 + CTS/LC 17| |32 CTS/LC CTS/LC 17| |32 CTS/LC + D7 18| |31 D0 D7 18| |31 D0 + D6 19| |30 D1 D6 19| |30 D1 + D5 20| |29 D2 D5 20| |29 D2 + D4 21| |28 D3 D4 21| |28 D3 + RDN 22| |27 EOPN DTACKN 22| |27 DONEN + RESETN 23| |26 WRN DTCN 23| |26 R/WN + GND 24|_____________|25 CEN CND 24|_____________|25 CSN + Intel Bus Motorola Bus + +***************************************************************************/ + +#ifndef __SCNXX562_H__ +#define __SCNXX562_H__ + +#include "emu.h" + +//************************************************************************** +// DEVICE CONFIGURATION MACROS +//************************************************************************** + +#define LOCAL_BRG 0 + +/* Variant ADD macros - use the right one to enable the right feature set! */ +#define MCFG_DUSCC26562_ADD(_tag, _clock, _rxa, _txa, _rxb, _txb) \ + MCFG_DEVICE_ADD(_tag, DUSCC26562, _clock) \ + MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) + +#define MCFG_DUSCC26C562_ADD(_tag, _clock, _rxa, _txa, _rxb, _txb) \ + MCFG_DEVICE_ADD(_tag, DUSCC26C562, _clock) \ + MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) + +#define MCFG_DUSCC68562_ADD(_tag, _clock, _rxa, _txa, _rxb, _txb) \ + MCFG_DEVICE_ADD(_tag, DUSCC68562, _clock) \ + MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) + +#define MCFG_DUSCC68C562_ADD(_tag, _clock, _rxa, _txa, _rxb, _txb) \ + MCFG_DEVICE_ADD(_tag, DUSCC68C562, _clock) \ + MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) + +/* generic ADD macro - Avoid using it directly, see above for correct variant instead */ +#define MCFG_DUSCC_ADD(_tag, _clock, _rxa, _txa, _rxb, _txb) \ + MCFG_DEVICE_ADD(_tag, DUSCC, _clock) \ + MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) + +/* Generic macros */ +#define MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) \ + duscc_device::configure_channels(*device, _rxa, _txa, _rxb, _txb); + +// Port A callbacks +#define MCFG_DUSCC_OUT_TXDA_CB(_devcb) \ + devcb = &duscc_device::set_out_txda_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_DTRA_CB(_devcb) \ + devcb = &duscc_device::set_out_dtra_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_RTSA_CB(_devcb) \ + devcb = &duscc_device::set_out_rtsa_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_SYNCA_CB(_devcb) \ + devcb = &duscc_device::set_out_synca_callback(*device, DEVCB_##_devcb); + +// Port B callbacks +#define MCFG_DUSCC_OUT_TXDB_CB(_devcb) \ + devcb = &duscc_device::set_out_txdb_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_DTRB_CB(_devcb) \ + devcb = &duscc_device::set_out_dtrb_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_RTSB_CB(_devcb) \ + devcb = &duscc_device::set_out_rtsb_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_SYNCB_CB(_devcb) \ + devcb = &duscc_device::set_out_syncb_callback(*device, DEVCB_##_devcb); + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> duscc_channel + +class duscc_device; + +class duscc_channel : public device_t, + public device_serial_interface +{ + friend class duscc_device; + +public: + duscc_channel(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + // device_serial_interface overrides + virtual void tra_callback() override; + virtual void tra_complete() override; + virtual void rcv_callback() override; + virtual void rcv_complete() override; + + // read register handlers + UINT8 do_dusccreg_cmr1_r(); + UINT8 do_dusccreg_cmr2_r(); + UINT8 do_dusccreg_s1r_r(); + UINT8 do_dusccreg_s2r_r(); + UINT8 do_dusccreg_tpr_r(); + UINT8 do_dusccreg_ttr_r(); + UINT8 do_dusccreg_rpr_r(); + UINT8 do_dusccreg_rtr_r(); + UINT8 do_dusccreg_ctprh_r(); + UINT8 do_dusccreg_ctprl_r(); + UINT8 do_dusccreg_ctcr_r(); + UINT8 do_dusccreg_omr_r(); + UINT8 do_dusccreg_cth_r(); + UINT8 do_dusccreg_ctl_r(); + UINT8 do_dusccreg_pcr_r(); + UINT8 do_dusccreg_ccr_r(); + UINT8 do_dusccreg_rxfifo_r(); + UINT8 do_dusccreg_rsr_r(); + UINT8 do_dusccreg_trsr_r(); + UINT8 do_dusccreg_ictsr_r(); + UINT8 do_dusccreg_gsr_r(); + UINT8 do_dusccreg_ier_r(); + UINT8 do_dusccreg_cid_r(); + UINT8 do_dusccreg_ivr_r(); + UINT8 do_dusccreg_icr_r(); + UINT8 do_dusccreg_ivrm_r(); + UINT8 do_dusccreg_mrr_r(); + UINT8 do_dusccreg_ier1_r(); + UINT8 do_dusccreg_ier2_r(); + UINT8 do_dusccreg_ier3_r(); + UINT8 do_dusccreg_trcr_r(); + UINT8 do_dusccreg_rflr_r(); + UINT8 do_dusccreg_ftlr_r(); + UINT8 do_dusccreg_trmsr_r(); + UINT8 do_dusccreg_telr_r(); + + // write register handlers + void do_dusccreg_cmr1_w(UINT8 data); + void do_dusccreg_cmr2_w(UINT8 data); + void do_dusccreg_s1r_w(UINT8 data); + void do_dusccreg_s2r_w(UINT8 data); + void do_dusccreg_tpr_w(UINT8 data); + void do_dusccreg_ttr_w(UINT8 data); + void do_dusccreg_rpr_w(UINT8 data); + void do_dusccreg_rtr_w(UINT8 data); + void do_dusccreg_ctprh_w(UINT8 data); + void do_dusccreg_ctprl_w(UINT8 data); + void do_dusccreg_ctcr_w(UINT8 data); + void do_dusccreg_omr_w(UINT8 data); + void do_dusccreg_pcr_w(UINT8 data); + void do_dusccreg_ccr_w(UINT8 data); + void do_dusccreg_txfifo_w(UINT8 data); + void do_dusccreg_rsr_w(UINT8 data); + void do_dusccreg_trsr_w(UINT8 data); + void do_dusccreg_ictsr_w(UINT8 data); + void do_dusccreg_gsr_w(UINT8 data); + void do_dusccreg_ier_w(UINT8 data); + // void do_dusccreg_rea_w(UINT8 data); // Short cutted non complex feature + void do_dusccreg_ivr_w(UINT8 data); + void do_dusccreg_icr_w(UINT8 data); + // void do_dusccreg_sea_w(UINT8 data); // Short cutted non complex feature + void do_dusccreg_mrr_w(UINT8 data); + void do_dusccreg_ier1_w(UINT8 data); + void do_dusccreg_ier2_w(UINT8 data); + void do_dusccreg_ier3_w(UINT8 data); + void do_dusccreg_trcr_w(UINT8 data); + void do_dusccreg_ftlr_w(UINT8 data); + void do_dusccreg_trmsr_w(UINT8 data); + + UINT8 read(offs_t &offset); + void write(UINT8 data, offs_t &offset); + + // UINT8 data_read(); + // void data_write(UINT8 data); + + void receive_data(UINT8 data); + void m_tx_fifo_rp_step(); + void m_rx_fifo_rp_step(); + UINT8 m_rx_fifo_rp_data(); + + DECLARE_WRITE_LINE_MEMBER( write_rx ); + DECLARE_WRITE_LINE_MEMBER( cts_w ); + DECLARE_WRITE_LINE_MEMBER( dcd_w ); + DECLARE_WRITE_LINE_MEMBER( ri_w ); + DECLARE_WRITE_LINE_MEMBER( rxc_w ); + DECLARE_WRITE_LINE_MEMBER( txc_w ); + DECLARE_WRITE_LINE_MEMBER( sync_w ); + + int m_rxc; + int m_txc; + int m_tra; + int m_rcv; + + // Register state + UINT8 m_cmr1; + UINT8 m_cmr2; + UINT8 m_s1r; + UINT8 m_s2r; + UINT8 m_tpr; + UINT8 m_ttr; + UINT8 m_rpr; + UINT8 m_rtr; + UINT8 m_ctprh; + UINT8 m_ctprl; + UINT8 m_ctcr; + UINT8 m_omr; + UINT8 m_cth; + UINT8 m_ctl; + UINT8 m_pcr; + UINT8 m_ccr; + UINT8 m_txfifo[4]; + UINT8 m_rxfifo[4]; + UINT8 m_rsr; + UINT8 m_trsr; + UINT8 m_ictsr; + UINT8 m_gsr; + UINT8 m_ier; + // UINT8 m_rea; + UINT8 m_cid; + UINT8 m_ivr; + UINT8 m_icr; + // UINT8 m_sea; + UINT8 m_ivrm; + UINT8 m_mrr; + UINT8 m_ier1; + UINT8 m_ier2; + UINT8 m_ier3; + UINT8 m_trcr; + UINT8 m_rflr; + UINT8 m_ftlr; + UINT8 m_trmsr; + UINT8 m_telr; + +protected: + enum + { + INT_TRANSMIT = 0, + INT_EXTERNAL = 1, + INT_RECEIVE = 2, + INT_SPECIAL = 3 + }; + + enum + { + REG_CCR_RESET_TX = 0x00, + REG_CCR_ENABLE_TX = 0x02, + REG_CCR_DISABLE_TX = 0x03, + REG_CCR_RESET_RX = 0x40, + REG_CCR_ENABLE_RX = 0x42, + REG_CCR_DISABLE_RX = 0x43 + }; + + enum + { + REG_CMR1_PARITY = 0x20, + REG_CMR1_PMMODE_MASK = 0x18, + REG_CMR1_PMMODE_NONE = 0x00, + REG_CMR1_PMMODE_RES = 0x01, + REG_CMR1_PMMODE_PARITY = 0x10, + REG_CMR1_PMMODE_FORCED = 0x11, + REG_CMR1_CPMODE_MASK = 0x07, + REG_CMR1_CPMODE_ASYNC = 0x07 + }; + + enum + { + REG_CMR2_DTI_MASK = 0x38, + REG_CMR2_DTI_NODMA = 0x38 + }; + + enum + { + REG_RPR_DATA_BITS_MASK = 0x03, + REG_RPR_DATA_BITS_5BIT = 0x00, + REG_RPR_DATA_BITS_6BIT = 0x01, + REG_RPR_DATA_BITS_7BIT = 0x02, + REG_RPR_DATA_BITS_8BIT = 0x03, + REG_RPR_DCD = 0x04, + REG_RPR_STRIP_PARITY = 0x08, + REG_RPR_RTS = 0x10 + }; + + enum + { + REG_TPR_DATA_BITS_MASK = 0x03, + REG_TPR_DATA_BITS_5BIT = 0x00, + REG_TPR_DATA_BITS_6BIT = 0x01, + REG_TPR_DATA_BITS_7BIT = 0x02, + REG_TPR_DATA_BITS_8BIT = 0x03, + REG_TPR_CTS = 0x04, + REG_TPR_RTS = 0x08, + REG_TPR_STOP_BITS_MASK = 0xf0 + }; + + enum + { + REG_TTR_EXT = 0x80, + REG_TTR_TXCLK_MASK = 0x70, + REG_TTR_TXCLK_1XEXT = 0x00, + REG_TTR_TXCLK_16XEXT = 0x10, + REG_TTR_TXCLK_DPLL = 0x20, + REG_TTR_TXCLK_BRG = 0x30, + REG_TTR_TXCLK_2X_OTHER = 0x40, + REG_TTR_TXCLK_32X_OTHER = 0x50, + REG_TTR_TXCLK_2X_OWN = 0x60, + REG_TTR_TXCLK_32X_OWN = 0x70, + REG_TTR_BRG_RATE_MASK = 0x0f, + }; + + enum + { + REG_RTR_EXT = 0x80, + REG_RTR_RXCLK_MASK = 0x70, + REG_RTR_RXCLK_1XEXT = 0x00, + REG_RTR_RXCLK_16XEXT = 0x10, + REG_RTR_RXCLK_BRG = 0x20, + REG_RTR_RXCLK_CT = 0x30, + REG_RTR_RXCLK_DPLL_64X_X1 = 0x40, + REG_RTR_RXCLK_DPLL_32X_EXT = 0x50, + REG_RTR_RXCLK_DPLL_32X_BRG = 0x60, + REG_RTR_RXCLK_DPLL_32X_CT = 0x70, + REG_RTR_BRG_RATE_MASK = 0x0f, + }; + + enum + { + REG_PCR_X2_IDC = 0x80, + REG_PCR_GP02_RTS = 0x40, + REG_PCR_SYNOUT_RTS = 0x20, + REG_PCR_RTXC_MASK = 0x18, + REG_PCR_RTXC_INPUT = 0x00, + REG_PCR_RTXC_CNTR_OUT = 0x08, + REG_PCR_RTXC_TXCLK_OUT = 0x10, + REG_PCR_RTXC_RXCLK_OUT = 0x18, + REG_PCR_TRXC_MASK = 0x07, + REG_PCR_TRXC_INPUT = 0x00, + REG_PCR_TRXC_CRYST_OUT = 0x01, + REG_PCR_TRXC_DPLL_OUT = 0x02, + REG_PCR_TRXC_CNTR_OUT = 0x03, + REG_PCR_TRXC_TXBRG_OUT = 0x04, + REG_PCR_TRXC_RXBRG_OUT = 0x05, + REG_PCR_TRXC_TXCLK_OUT = 0x06, + REG_PCR_TRXC_RXCLK_OUT = 0x07, + }; + + enum + { + REG_OMR_TXRCL_MASK = 0xe0, + REG_OMR_TXRCL_8BIT = 0xe0, + REG_OMR_TXRDY_ACTIVATED = 0x10, + REG_OMR_RXRDY_ACTIVATED = 0x08, + REG_OMR_GP02 = 0x04, + REG_OMR_GP01 = 0x02, + REG_OMR_RTS = 0x01, + }; + + enum + { + REG_RSR_OVERRUN_ERROR = 0x20, + }; + + enum + { + REG_ICTSR_DELTA_CTS = 0x10, + REG_ICTSR_DCD = 0x08, + REG_ICTSR_CTS = 0x04, + }; + + enum + { + REG_GSR_CHAN_A_RXREADY = 0x01, + REG_GSR_CHAN_B_RXREADY = 0x10, + REG_GSR_CHAN_A_TXREADY = 0x02, + REG_GSR_CHAN_B_TXREADY = 0x20, + }; + + // Register offsets, stripped from channel bit 0x20 but including A7 bit + enum + { + REG_CMR1 = 0x00, + REG_CMR2 = 0x01, + REG_S1R = 0x02, + REG_S2R = 0x03, + REG_TPR = 0x04, + REG_TTR = 0x05, + REG_RPR = 0x06, + REG_RTR = 0x07, + REG_CTPRH = 0x08, + REG_CTPRL = 0x09, + REG_CTCR = 0x0a, + REG_OMR = 0x0b, + REG_CTH = 0x0c, + REG_CTL = 0x0d, + REG_PCR = 0x0e, + REG_CCR = 0x0f, + REG_TXFIFO_0= 0x10, + REG_TXFIFO_1= 0x11, + REG_TXFIFO_2= 0x12, + REG_TXFIFO_3= 0x13, + REG_RXFIFO_0= 0x14, + REG_RXFIFO_1= 0x15, + REG_RXFIFO_2= 0x16, + REG_RXFIFO_3= 0x17, + REG_RSR = 0x18, + REG_TRSR = 0x19, + REG_ICTSR = 0x1a, + REG_GSR = 0x1b, + REG_IER = 0x1c, + REG_REA = 0x1d, + REG_CID = 0x1d, + REG_IVR = 0x1e, + REG_ICR = 0x1f, + REG_SEA = 0x1d, + REG_IVRM = 0x1e, + REG_MRR = 0x1f, + REG_IER1 = 0x42, + REG_IER2 = 0x43, + REG_IER3 = 0x45, + REG_TRCR = 0x47, + REG_RFLR = 0x4e, + REG_FTLR = 0x5c, + REG_TRMSR = 0x5e, + REG_TELR = 0x5f, + }; + + enum + { + TIMER_ID_BAUD, + TIMER_ID_XTAL, + TIMER_ID_RTXC, + TIMER_ID_TRXC + }; + + UINT16 m_brg_rx_rate; + UINT16 m_brg_tx_rate; + UINT16 m_brg_const; + + // TODO: Implement the 14.4K, 56K and 64K bauds available on the CDUSCC + static unsigned int get_baudrate(unsigned int br) + { + switch (br) + { + case 0x00: return 50; break; + case 0x01: return 75; break; + case 0x02: return 110; break; + case 0x03: return 134; break; + case 0x04: return 150; break; + case 0x05: return 200; break; + case 0x06: return 300; break; + case 0x07: return 600; break; + case 0x08: return 1050; break; + case 0x09: return 1200; break; + case 0x0a: return 2000; break; + case 0x0b: return 2400; break; + case 0x0c: return 4800; break; + case 0x0d: return 9600; break; + case 0x0e: return 19200; break; + case 0x0f: return 38400; break; + }; + return 0; + } + + void update_serial(); + void set_dtr(int state); + void set_rts(int state); + + int get_tx_clock_mode(); + int get_rx_clock_mode(); + stop_bits_t get_stop_bits(); + int get_rx_word_length(); + int get_tx_word_length(); + + /* FIFOs and rx/tx status */ + /* Receiver */ + UINT8 m_rx_data_fifo[16]; // data FIFO + UINT8 m_rx_error_fifo[16]; // error FIFO + int m_rx_fifo_rp; // FIFO read pointer + int m_rx_fifo_wp; // FIFO write pointer + int m_rx_fifo_sz; // FIFO size + UINT8 m_rx_error; // current error + + /* Transmitter */ + UINT8 m_tx_data_fifo[16]; // data FIFO + UINT8 m_tx_error_fifo[16]; // error FIFO + int m_tx_fifo_rp; // FIFO read pointer + int m_tx_fifo_wp; // FIFO write pointer + int m_tx_fifo_sz; // FIFO size + UINT8 m_tx_error; // current error + + int m_rx_clock; // receive clock pulse count + int m_rx_first; // first character received + int m_rx_break; // receive break condition + // UINT8 m_rx_rr0_latch; // read register 0 latched + + int m_rxd; + int m_ri; // ring indicator latch + int m_cts; // clear to send latch + int m_dcd; // data carrier detect latch + + // transmitter state + UINT8 m_tx_data; // transmit data register + int m_tx_clock; // transmit clock pulse count + + int m_dtr; // data terminal ready + int m_rts; // request to send + + // synchronous state + UINT16 m_sync; // sync character + + int m_rcv_mode; + int m_index; + duscc_device *m_uart; + + // CDUSCC specifics + int m_a7; // Access additional registers +}; + + +// ======================> duscc_device + + +class duscc_device : public device_t +// ,public device_z80daisy_interface +{ + friend class duscc_channel; + +public: + // construction/destruction + duscc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source); + duscc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + template<class _Object> static devcb_base &set_out_txda_callback(device_t &device, _Object object) { return downcast<duscc_device &>(device).m_out_txda_cb.set_callback(object); } + template<class _Object> static devcb_base &set_out_dtra_callback(device_t &device, _Object object) { return downcast<duscc_device &>(device).m_out_dtra_cb.set_callback(object); } + template<class _Object> static devcb_base &set_out_rtsa_callback(device_t &device, _Object object) { return downcast<duscc_device &>(device).m_out_rtsa_cb.set_callback(object); } + template<class _Object> static devcb_base &set_out_synca_callback(device_t &device, _Object object) { return downcast<duscc_device &>(device).m_out_synca_cb.set_callback(object); } + + template<class _Object> static devcb_base &set_out_txdb_callback(device_t &device, _Object object) { return downcast<duscc_device &>(device).m_out_txdb_cb.set_callback(object); } + template<class _Object> static devcb_base &set_out_dtrb_callback(device_t &device, _Object object) { return downcast<duscc_device &>(device).m_out_dtrb_cb.set_callback(object); } + template<class _Object> static devcb_base &set_out_rtsb_callback(device_t &device, _Object object) { return downcast<duscc_device &>(device).m_out_rtsb_cb.set_callback(object); } + template<class _Object> static devcb_base &set_out_syncb_callback(device_t &device, _Object object) { return downcast<duscc_device &>(device).m_out_syncb_cb.set_callback(object); } + + static void configure_channels(device_t &device, int rxa, int txa, int rxb, int txb) + { +#if 0 // TODO: Fix this, need a way to set external rx/tx clocks for the channels + duscc_device &dev = downcast<duscc_device &>(device); + dev.m_chanA->m_rxc = rxa; + dev.m_chanA->m_txc = txa; + dev.m_chanB->m_rxc = rxb; + dev.m_chanB->m_txc = txb; +#endif + } + + DECLARE_READ8_MEMBER( read ); + DECLARE_WRITE8_MEMBER( write ); + + // interrupt acknowledge + // int m1_r(); + + DECLARE_WRITE_LINE_MEMBER( rxa_w ) { m_chanA->write_rx(state); } + DECLARE_WRITE_LINE_MEMBER( rxb_w ) { m_chanB->write_rx(state); } + DECLARE_WRITE_LINE_MEMBER( ctsa_w ) { m_chanA->cts_w(state); } + DECLARE_WRITE_LINE_MEMBER( ctsb_w ) { m_chanB->cts_w(state); } + DECLARE_WRITE_LINE_MEMBER( dcda_w ) { m_chanA->dcd_w(state); } + DECLARE_WRITE_LINE_MEMBER( dcdb_w ) { m_chanB->dcd_w(state); } + DECLARE_WRITE_LINE_MEMBER( ria_w ) { m_chanA->ri_w(state); } + DECLARE_WRITE_LINE_MEMBER( rib_w ) { m_chanB->ri_w(state); } +#if 0 + DECLARE_WRITE_LINE_MEMBER( rxca_w ) { m_chanA->rxc_w(state); } + DECLARE_WRITE_LINE_MEMBER( rxcb_w ) { m_chanB->rxc_w(state); } + DECLARE_WRITE_LINE_MEMBER( txca_w ) { m_chanA->txc_w(state); } + DECLARE_WRITE_LINE_MEMBER( txcb_w ) { m_chanB->txc_w(state); } + DECLARE_WRITE_LINE_MEMBER( rxtxcb_w ) { m_chanB->rxc_w(state); m_chanB->txc_w(state); } +#endif + DECLARE_WRITE_LINE_MEMBER( synca_w ) { m_chanA->sync_w(state); } + DECLARE_WRITE_LINE_MEMBER( syncb_w ) { m_chanB->sync_w(state); } + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual machine_config_constructor device_mconfig_additions() const override; + + // internal interrupt management + void check_interrupts(); + void reset_interrupts(); + UINT8 modify_vector(UINT8 vect, int i, UINT8 src); + void trigger_interrupt(int index, int state); + int get_channel_index(duscc_channel *ch) { return (ch == m_chanA) ? 0 : 1; } + + // Variants in the DUSCC family + enum + { + TYPE_DUSCC = 0x001, + TYPE_DUSCC26562 = 0x002, + TYPE_DUSCC26C562 = 0x004, + TYPE_DUSCC68562 = 0x008, + TYPE_DUSCC68C562 = 0x010, + }; + +#define SET_NMOS ( duscc_device::TYPE_DUSCC26562 | duscc_device::TYPE_DUSCC68562 ) +#define SET_CMOS ( duscc_device::TYPE_DUSCC26C562 | duscc_device::TYPE_DUSCC68C562 ) + + enum + { + CHANNEL_A = 0, + CHANNEL_B + }; + + required_device<duscc_channel> m_chanA; + required_device<duscc_channel> m_chanB; + + // internal state +#if 0 + int m_rxca; + int m_txca; + int m_rxcb; + int m_txcb; +#endif + + devcb_write_line m_out_txda_cb; + devcb_write_line m_out_dtra_cb; + devcb_write_line m_out_rtsa_cb; + devcb_write_line m_out_synca_cb; + + devcb_write_line m_out_txdb_cb; + devcb_write_line m_out_dtrb_cb; + devcb_write_line m_out_rtsb_cb; + devcb_write_line m_out_syncb_cb; + + int m_int_state[6]; // interrupt state + + int m_variant; +}; + +// device type definition +extern const device_type DUSCC; +extern const device_type DUSCC_CHANNEL; +extern const device_type DUSCC26562; +extern const device_type DUSCC26C562; +extern const device_type DUSCC68562; +extern const device_type DUSCC68C562; + +class duscc26562_device : public duscc_device +{ +public : + duscc26562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + +class duscc26C562_device : public duscc_device +{ +public : + duscc26C562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + +class duscc68562_device : public duscc_device +{ +public : + duscc68562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + +class duscc68C562_device : public duscc_device +{ +public : + duscc68C562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + +#endif // __SCNXX562_H__ diff --git a/src/devices/machine/stvcd.cpp b/src/devices/machine/stvcd.cpp index 69b51472eb5..aed8d46aea1 100644 --- a/src/devices/machine/stvcd.cpp +++ b/src/devices/machine/stvcd.cpp @@ -136,7 +136,7 @@ void saturn_state::cd_exec_command( void ) ((cr1 & 0xff00) != 0x5200) && ((cr1 & 0xff00) != 0x5300) && 1) - printf("CD: command exec %04x %04x %04x %04x %04x (stat %04x)\n", hirqreg, cr1, cr2, cr3, cr4, cd_stat); + logerror("CD: command exec %04x %04x %04x %04x %04x (stat %04x)\n", hirqreg, cr1, cr2, cr3, cr4, cd_stat); switch ((cr1 >> 8) & 0xff) { @@ -283,7 +283,7 @@ void saturn_state::cd_exec_command( void ) } else { - printf("No xferdnum error\n"); + logerror("No xferdnum error\n"); cr1 = (cd_stat) | (0xff); // is this right? cr2 = 0xffff; cr3 = 0; @@ -360,7 +360,7 @@ void saturn_state::cd_exec_command( void ) if (start_pos != 0xffffff) cd_curfad = start_pos & 0xfffff; - printf("fad mode\n"); + logerror("fad mode\n"); cur_track = cdrom_get_track(cdrom, cd_curfad-150); } else @@ -415,7 +415,7 @@ void saturn_state::cd_exec_command( void ) else fadstoplay = (cdrom_get_track_start(cdrom, (end_pos & 0xff00) >> 8)) - cd_curfad; } - printf("track mode %08x %08x\n",cd_curfad,fadstoplay); + logerror("track mode %08x %08x\n",cd_curfad,fadstoplay); } else { @@ -428,7 +428,7 @@ void saturn_state::cd_exec_command( void ) cd_curfad = cdrom_get_track_start(cdrom, cur_track-1); fadstoplay = cdrom_get_track_start(cdrom, cur_track) - cd_curfad; } - printf("track resume %08x %08x\n",cd_curfad,fadstoplay); + logerror("track resume %08x %08x\n",cd_curfad,fadstoplay); } } @@ -1193,7 +1193,7 @@ void saturn_state::cd_exec_command( void ) case 0x67: // get copy error CDROM_LOG(("%s:CD: Get copy error\n", machine().describe_context())) - printf("Get copy error\n"); + logerror("Get copy error\n"); cr1 = cd_stat; cr2 = 0; cr3 = 0; diff --git a/src/devices/machine/tms9901.cpp b/src/devices/machine/tms9901.cpp index 3da7028baa8..1ff3b7381f6 100644 --- a/src/devices/machine/tms9901.cpp +++ b/src/devices/machine/tms9901.cpp @@ -411,37 +411,53 @@ WRITE8_MEMBER ( tms9901_device::write ) switch (offset) { case 0x10: - if (!m_write_p0.isnull()) m_write_p0(data); break; + if (!m_write_p0.isnull()) m_write_p0(data); + break; case 0x11: - if (!m_write_p1.isnull()) m_write_p1(data); break; + if (!m_write_p1.isnull()) m_write_p1(data); + break; case 0x12: - if (!m_write_p2.isnull()) m_write_p2(data); break; + if (!m_write_p2.isnull()) m_write_p2(data); + break; case 0x13: - if (!m_write_p3.isnull()) m_write_p3(data); break; + if (!m_write_p3.isnull()) m_write_p3(data); + break; case 0x14: - if (!m_write_p4.isnull()) m_write_p4(data); break; + if (!m_write_p4.isnull()) m_write_p4(data); + break; case 0x15: - if (!m_write_p5.isnull()) m_write_p5(data); break; + if (!m_write_p5.isnull()) m_write_p5(data); + break; case 0x16: - if (!m_write_p6.isnull()) m_write_p6(data); break; + if (!m_write_p6.isnull()) m_write_p6(data); + break; case 0x17: - if (!m_write_p7.isnull()) m_write_p7(data); break; + if (!m_write_p7.isnull()) m_write_p7(data); + break; case 0x18: - if (!m_write_p8.isnull()) m_write_p8(data); break; + if (!m_write_p8.isnull()) m_write_p8(data); + break; case 0x19: - if (!m_write_p9.isnull()) m_write_p9(data); break; + if (!m_write_p9.isnull()) m_write_p9(data); + break; case 0x1A: - if (!m_write_p10.isnull()) m_write_p10(data); break; + if (!m_write_p10.isnull()) m_write_p10(data); + break; case 0x1B: - if (!m_write_p11.isnull()) m_write_p11(data); break; + if (!m_write_p11.isnull()) m_write_p11(data); + break; case 0x1C: - if (!m_write_p12.isnull()) m_write_p12(data); break; + if (!m_write_p12.isnull()) m_write_p12(data); + break; case 0x1D: - if (!m_write_p13.isnull()) m_write_p13(data); break; + if (!m_write_p13.isnull()) m_write_p13(data); + break; case 0x1E: - if (!m_write_p14.isnull()) m_write_p14(data); break; + if (!m_write_p14.isnull()) m_write_p14(data); + break; case 0x1F: - if (!m_write_p15.isnull()) m_write_p15(data); break; + if (!m_write_p15.isnull()) m_write_p15(data); + break; } return; diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp index 04a194d6993..96dd03fa1a9 100644 --- a/src/devices/machine/upd765.cpp +++ b/src/devices/machine/upd765.cpp @@ -1,8 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Olivier Galibert -#include "debugger.h" #include "upd765.h" +#include "debugger.h" const device_type UPD765A = &device_creator<upd765a_device>; const device_type UPD765B = &device_creator<upd765b_device>; diff --git a/src/devices/machine/vrc4373.cpp b/src/devices/machine/vrc4373.cpp index 60c1124e4ef..c750d2fb580 100644 --- a/src/devices/machine/vrc4373.cpp +++ b/src/devices/machine/vrc4373.cpp @@ -144,8 +144,8 @@ void vrc4373_device::map_cpu_space() winStart = m_cpu_regs[NREG_PCIMW1]&0xff000000; winEnd = winStart | (~(0x80000000 | (((m_cpu_regs[NREG_PCIMW1]>>13)&0x7f)<<24))); winSize = winEnd - winStart + 1; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(vrc4373_device::master1_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(vrc4373_device::master1_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(vrc4373_device::master1_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(vrc4373_device::master1_w), this)); if (LOG_NILE) logerror("%s: map_cpu_space Master Window 1 start=%08X end=%08X size=%08X laddr=%08X\n", tag(), winStart, winEnd, winSize, m_pci1_laddr); } @@ -154,8 +154,8 @@ void vrc4373_device::map_cpu_space() winStart = m_cpu_regs[NREG_PCIMW2]&0xff000000; winEnd = winStart | (~(0x80000000 | (((m_cpu_regs[NREG_PCIMW2]>>13)&0x7f)<<24))); winSize = winEnd - winStart + 1; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(vrc4373_device::master2_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(vrc4373_device::master2_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(vrc4373_device::master2_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(vrc4373_device::master2_w), this)); if (LOG_NILE) logerror("%s: map_cpu_space Master Window 2 start=%08X end=%08X size=%08X laddr=%08X\n", tag(), winStart, winEnd, winSize, m_pci2_laddr); } @@ -164,8 +164,8 @@ void vrc4373_device::map_cpu_space() winStart = m_cpu_regs[NREG_PCIMIOW]&0xff000000; winEnd = winStart | (~(0x80000000 | (((m_cpu_regs[NREG_PCIMIOW]>>13)&0x7f)<<24))); winSize = winEnd - winStart + 1; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(vrc4373_device::master_io_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(vrc4373_device::master_io_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(vrc4373_device::master_io_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(vrc4373_device::master_io_w), this)); if (LOG_NILE) logerror("%s: map_cpu_space IO Window start=%08X end=%08X size=%08X laddr=%08X\n", tag(), winStart, winEnd, winSize, m_pci_io_laddr); } @@ -181,8 +181,8 @@ void vrc4373_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = m_cpu_regs[NREG_PCITW1]&0xffe00000; winEnd = winStart | (~(0xf0000000 | (((m_cpu_regs[NREG_PCITW1]>>13)&0x7f)<<21))); winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(vrc4373_device::target1_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(vrc4373_device::target1_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(vrc4373_device::target1_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(vrc4373_device::target1_w), this)); if (LOG_NILE) logerror("%s: map_extra Target Window 1 start=%08X end=%08X size=%08X laddr=%08X\n", tag(), winStart, winEnd, winSize, m_target1_laddr); } @@ -191,8 +191,8 @@ void vrc4373_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = m_cpu_regs[NREG_PCITW2]&0xffe00000; winEnd = winStart | (~(0xf0000000 | (((m_cpu_regs[NREG_PCITW2]>>13)&0x7f)<<21))); winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(vrc4373_device::target2_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(vrc4373_device::target2_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(vrc4373_device::target2_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(vrc4373_device::target2_w), this)); if (LOG_NILE) logerror("%s: map_extra Target Window 2 start=%08X end=%08X size=%08X laddr=%08X\n", tag(), winStart, winEnd, winSize, m_target2_laddr); } diff --git a/src/devices/machine/vt82c496.cpp b/src/devices/machine/vt82c496.cpp index 8f24e2338fd..eb2fff4e564 100644 --- a/src/devices/machine/vt82c496.cpp +++ b/src/devices/machine/vt82c496.cpp @@ -41,17 +41,17 @@ void vt82c496_device::device_reset() memset(m_reg,0,0x100); // set up default ROM banking - m_space->install_read_bank(0xc0000,0xc3fff,0,0,"bios_c0_r"); - m_space->install_read_bank(0xc4000,0xc7fff,0,0,"bios_c4_r"); - m_space->install_read_bank(0xc8000,0xcbfff,0,0,"bios_c8_r"); - m_space->install_read_bank(0xcc000,0xcffff,0,0,"bios_cc_r"); - m_space->install_read_bank(0xd0000,0xd3fff,0,0,"bios_d0_r"); - m_space->install_read_bank(0xd4000,0xd7fff,0,0,"bios_d4_r"); - m_space->install_read_bank(0xd8000,0xdbfff,0,0,"bios_d8_r"); - m_space->install_read_bank(0xdc000,0xdffff,0,0,"bios_dc_r"); - m_space->install_read_bank(0xe0000,0xeffff,0,0,"bios_e0_r"); - m_space->install_read_bank(0xf0000,0xfffff,0,0,"bios_f0_r"); - m_space->nop_write(0xc0000,0xfffff,0,0); + m_space->install_read_bank(0xc0000,0xc3fff,0,"bios_c0_r"); + m_space->install_read_bank(0xc4000,0xc7fff,0,"bios_c4_r"); + m_space->install_read_bank(0xc8000,0xcbfff,0,"bios_c8_r"); + m_space->install_read_bank(0xcc000,0xcffff,0,"bios_cc_r"); + m_space->install_read_bank(0xd0000,0xd3fff,0,"bios_d0_r"); + m_space->install_read_bank(0xd4000,0xd7fff,0,"bios_d4_r"); + m_space->install_read_bank(0xd8000,0xdbfff,0,"bios_d8_r"); + m_space->install_read_bank(0xdc000,0xdffff,0,"bios_dc_r"); + m_space->install_read_bank(0xe0000,0xeffff,0,"bios_e0_r"); + m_space->install_read_bank(0xf0000,0xfffff,0,"bios_f0_r"); + m_space->nop_write(0xc0000,0xfffff); machine().root_device().membank("bios_c0_r")->set_base(m_rom); machine().root_device().membank("bios_c4_r")->set_base(m_rom+0x4000); machine().root_device().membank("bios_c8_r")->set_base(m_rom+0x8000); @@ -101,11 +101,11 @@ void vt82c496_device::update_mem_c0(UINT8 data) machine().root_device().membank("bios_cc_r")->set_base(m_rom+0xc000); if(data & 0x40) { - m_space->install_write_bank(0xcc000,0xcffff,0,0,"bios_cc_w"); + m_space->install_write_bank(0xcc000,0xcffff,0,"bios_cc_w"); machine().root_device().membank("bios_cc_w")->set_base(m_ram->pointer()+0xcc000); } else - m_space->nop_write(0xcc000,0xcffff,0,0); + m_space->nop_write(0xcc000,0xcffff); if(data & 0x20) machine().root_device().membank("bios_c8_r")->set_base(m_ram->pointer()+0xc8000); @@ -113,11 +113,11 @@ void vt82c496_device::update_mem_c0(UINT8 data) machine().root_device().membank("bios_c8_r")->set_base(m_rom+0x8000); if(data & 0x10) { - m_space->install_write_bank(0xc8000,0xcbfff,0,0,"bios_c8_w"); + m_space->install_write_bank(0xc8000,0xcbfff,0,"bios_c8_w"); machine().root_device().membank("bios_c8_w")->set_base(m_ram->pointer()+0xc8000); } else - m_space->nop_write(0xc8000,0xcbfff,0,0); + m_space->nop_write(0xc8000,0xcbfff); if(data & 0x08) machine().root_device().membank("bios_c4_r")->set_base(m_ram->pointer()+0xc4000); @@ -125,11 +125,11 @@ void vt82c496_device::update_mem_c0(UINT8 data) machine().root_device().membank("bios_c4_r")->set_base(m_rom+0x4000); if(data & 0x04) { - m_space->install_write_bank(0xc4000,0xc7fff,0,0,"bios_c4_w"); + m_space->install_write_bank(0xc4000,0xc7fff,0,"bios_c4_w"); machine().root_device().membank("bios_c4_w")->set_base(m_ram->pointer()+0xc4000); } else - m_space->nop_write(0xc4000,0xc7fff,0,0); + m_space->nop_write(0xc4000,0xc7fff); if(data & 0x02) machine().root_device().membank("bios_c0_r")->set_base(m_ram->pointer()+0xc0000); @@ -137,11 +137,11 @@ void vt82c496_device::update_mem_c0(UINT8 data) machine().root_device().membank("bios_c0_r")->set_base(m_rom+0); if(data & 0x01) { - m_space->install_write_bank(0xc0000,0xc3fff,0,0,"bios_c0_w"); + m_space->install_write_bank(0xc0000,0xc3fff,0,"bios_c0_w"); machine().root_device().membank("bios_c0_w")->set_base(m_ram->pointer()+0xc0000); } else - m_space->nop_write(0xc0000,0xc3fff,0,0); + m_space->nop_write(0xc0000,0xc3fff); } void vt82c496_device::update_mem_d0(UINT8 data) @@ -152,11 +152,11 @@ void vt82c496_device::update_mem_d0(UINT8 data) machine().root_device().membank("bios_dc_r")->set_base(m_rom+0x1c000); if(data & 0x40) { - m_space->install_write_bank(0xdc000,0xdffff,0,0,"bios_dc_w"); + m_space->install_write_bank(0xdc000,0xdffff,0,"bios_dc_w"); machine().root_device().membank("bios_dc_w")->set_base(m_ram->pointer()+0xdc000); } else - m_space->nop_write(0xdc000,0xdffff,0,0); + m_space->nop_write(0xdc000,0xdffff); if(data & 0x20) machine().root_device().membank("bios_d8_r")->set_base(m_ram->pointer()+0xd8000); @@ -164,11 +164,11 @@ void vt82c496_device::update_mem_d0(UINT8 data) machine().root_device().membank("bios_d8_r")->set_base(m_rom+0x18000); if(data & 0x10) { - m_space->install_write_bank(0xd8000,0xdbfff,0,0,"bios_d8_w"); + m_space->install_write_bank(0xd8000,0xdbfff,0,"bios_d8_w"); machine().root_device().membank("bios_d8_w")->set_base(m_ram->pointer()+0xd8000); } else - m_space->nop_write(0xd8000,0xdbfff,0,0); + m_space->nop_write(0xd8000,0xdbfff); if(data & 0x08) machine().root_device().membank("bios_d4_r")->set_base(m_ram->pointer()+0xd4000); @@ -176,11 +176,11 @@ void vt82c496_device::update_mem_d0(UINT8 data) machine().root_device().membank("bios_d4_r")->set_base(m_rom+0x14000); if(data & 0x04) { - m_space->install_write_bank(0xd4000,0xd7fff,0,0,"bios_d4_w"); + m_space->install_write_bank(0xd4000,0xd7fff,0,"bios_d4_w"); machine().root_device().membank("bios_d4_w")->set_base(m_ram->pointer()+0xd4000); } else - m_space->nop_write(0xd4000,0xd7fff,0,0); + m_space->nop_write(0xd4000,0xd7fff); if(data & 0x02) machine().root_device().membank("bios_d0_r")->set_base(m_ram->pointer()+0xd0000); @@ -188,11 +188,11 @@ void vt82c496_device::update_mem_d0(UINT8 data) machine().root_device().membank("bios_d0_r")->set_base(m_rom+0x10000); if(data & 0x01) { - m_space->install_write_bank(0xd0000,0xd3fff,0,0,"bios_d0_w"); + m_space->install_write_bank(0xd0000,0xd3fff,0,"bios_d0_w"); machine().root_device().membank("bios_d0_w")->set_base(m_ram->pointer()+0xd0000); } else - m_space->nop_write(0xd0000,0xd3fff,0,0); + m_space->nop_write(0xd0000,0xd3fff); } void vt82c496_device::update_mem_e0(UINT8 data) @@ -204,11 +204,11 @@ void vt82c496_device::update_mem_e0(UINT8 data) if(data & 0x40) { - m_space->install_write_bank(0xe0000,0xeffff,0,0,"bios_e0_w"); + m_space->install_write_bank(0xe0000,0xeffff,0,"bios_e0_w"); machine().root_device().membank("bios_e0_w")->set_base(m_ram->pointer()+0xe0000); } else - m_space->nop_write(0xe0000,0xeffff,0,0); + m_space->nop_write(0xe0000,0xeffff); if(data & 0x20) machine().root_device().membank("bios_f0_r")->set_base(m_ram->pointer()+0xf0000); @@ -217,9 +217,9 @@ void vt82c496_device::update_mem_e0(UINT8 data) if(data & 0x10) { - m_space->install_write_bank(0xf0000,0xfffff,0,0,"bios_f0_w"); + m_space->install_write_bank(0xf0000,0xfffff,0,"bios_f0_w"); machine().root_device().membank("bios_f0_w")->set_base(m_ram->pointer()+0xf0000); } else - m_space->nop_write(0xf0000,0xfffff,0,0); + m_space->nop_write(0xf0000,0xfffff); } diff --git a/src/devices/machine/watchdog.h b/src/devices/machine/watchdog.h index 67cc915b092..ee97e9026db 100644 --- a/src/devices/machine/watchdog.h +++ b/src/devices/machine/watchdog.h @@ -11,17 +11,6 @@ // DEVICE CONFIGURATION MACROS //************************************************************************** -#ifdef LEGACY_WATCHDOG -#undef MCFG_WATCHDOG_VBLANK_INIT -#undef MCFG_WATCHDOG_TIME_INIT -#define watchdog_reset_r MUST_USE_WATCHDOG_DEVICE_INSTEAD -#define watchdog_reset_w MUST_USE_WATCHDOG_DEVICE_INSTEAD -#define watchdog_reset16_r MUST_USE_WATCHDOG_DEVICE_INSTEAD -#define watchdog_reset16_w MUST_USE_WATCHDOG_DEVICE_INSTEAD -#define watchdog_reset32_r MUST_USE_WATCHDOG_DEVICE_INSTEAD -#define watchdog_reset32_w MUST_USE_WATCHDOG_DEVICE_INSTEAD -#endif - #define MCFG_WATCHDOG_ADD(_tag) \ MCFG_DEVICE_ADD(_tag, WATCHDOG_TIMER, 0) #define MCFG_WATCHDOG_MODIFY(_tag) \ diff --git a/src/devices/machine/wd7600.cpp b/src/devices/machine/wd7600.cpp index 90ed0d9ef73..b1540fd7bff 100644 --- a/src/devices/machine/wd7600.cpp +++ b/src/devices/machine/wd7600.cpp @@ -170,7 +170,10 @@ void wd7600_device::device_start() // install BIOS ROM at cpu inital pc m_space->install_rom(0x000f0000, 0x000fffff, m_bios + 0x10000); - m_space->install_rom(0xffff0000, 0xffffffff, m_bios + 0x10000); + if(m_space->addrmask() == 0xffffffff) // 32-bit address space only + m_space->install_rom(0xffff0000, 0xffffffff, m_bios + 0x10000); + else + m_space->install_rom(0x00ff0000, 0x00ffffff, m_bios + 0x10000); // install i/o accesses m_space_io->install_readwrite_handler(0x0000, 0x000f, read8_delegate(FUNC(am9517a_device::read), &(*m_dma1)), write8_delegate(FUNC(am9517a_device::write), &(*m_dma1)), 0xffffffff); @@ -180,7 +183,7 @@ void wd7600_device::device_start() m_space_io->install_readwrite_handler(0x0060, 0x0063, read8_delegate(FUNC(wd7600_device::portb_r), this), write8_delegate(FUNC(wd7600_device::portb_w), this), 0x0000ff00); m_space_io->install_readwrite_handler(0x0064, 0x0067, read8_delegate(FUNC(wd7600_device::keyb_status_r), this), write8_delegate(FUNC(wd7600_device::keyb_cmd_w), this), 0x000000ff); m_space_io->install_readwrite_handler(0x0070, 0x007f, read8_delegate(FUNC(mc146818_device::read), &(*m_rtc)), write8_delegate(FUNC(wd7600_device::rtc_w), this), 0x0000ffff); - m_space_io->install_readwrite_handler(0x0080, 0x009f, read8_delegate(FUNC(wd7600_device::dma_page_r), this), write8_delegate(FUNC(wd7600_device::dma_page_w), this), 0xffffffff); + m_space_io->install_readwrite_handler(0x0080, 0x008f, read8_delegate(FUNC(wd7600_device::dma_page_r), this), write8_delegate(FUNC(wd7600_device::dma_page_w), this), 0xffffffff); m_space_io->install_readwrite_handler(0x0090, 0x0093, read8_delegate(FUNC(wd7600_device::a20_reset_r), this), write8_delegate(FUNC(wd7600_device::a20_reset_w), this), 0x00ff0000); m_space_io->install_readwrite_handler(0x00a0, 0x00a3, read8_delegate(FUNC(pic8259_device::read), &(*m_pic2)), write8_delegate(FUNC(pic8259_device::write), &(*m_pic2)), 0x0000ffff); m_space_io->install_readwrite_handler(0x00c0, 0x00df, read8_delegate(FUNC(am9517a_device::read), &(*m_dma2)), write8_delegate(FUNC(am9517a_device::write), &(*m_dma2)), 0x00ff00ff); @@ -294,7 +297,7 @@ READ8_MEMBER( wd7600_device::keyb_data_r ) { UINT8 ret = m_keybc->data_r(space,0); // if(LOG) logerror("WD7600 '%s': keyboard data read %02x\n", tag(), ret); - return ret; + return ret; } WRITE8_MEMBER( wd7600_device::keyb_cmd_w ) diff --git a/src/devices/machine/wd_fdc.cpp b/src/devices/machine/wd_fdc.cpp index 84fcbf5ceb8..3db1b1113f6 100644 --- a/src/devices/machine/wd_fdc.cpp +++ b/src/devices/machine/wd_fdc.cpp @@ -243,7 +243,7 @@ void wd_fdc_t::command_end() void wd_fdc_t::seek_start(int state) { - if (TRACE_COMMAND) logerror("seek %d (track=%d)\n", data, track); + if (TRACE_COMMAND) logerror("seek %d %x (track=%d)\n", state, data, track); main_state = state; status &= ~(S_CRC|S_RNF|S_SPIN); if(head_control) { @@ -1273,12 +1273,6 @@ void wd_fdc_t::index_callback(floppy_image_device *floppy, int state) return; } - if(!intrq && (intrq_cond & I_IDX)) { - intrq = true; - if(!intrq_cb.isnull()) - intrq_cb(intrq); - } - switch(sub_state) { case IDLE: if(motor_control || head_control) { @@ -1300,6 +1294,12 @@ void wd_fdc_t::index_callback(floppy_image_device *floppy, int state) status &= ~S_HLD; // todo: should get this value from the drive } } + + if(!intrq && (intrq_cond & I_IDX)) { + intrq = true; + if(!intrq_cb.isnull()) + intrq_cb(intrq); + } break; case SPINUP: diff --git a/src/devices/sound/scsp.cpp b/src/devices/sound/scsp.cpp index 2d6054209c8..4f5311def8e 100644 --- a/src/devices/sound/scsp.cpp +++ b/src/devices/sound/scsp.cpp @@ -1390,13 +1390,10 @@ int IRQCB(void *param) void scsp_device::set_ram_base(void *base) { - if (this) - { - m_SCSPRAM = (unsigned char *)base; - m_DSP.SCSPRAM = (UINT16 *)base; - m_SCSPRAM_LENGTH = 0x80000; - m_DSP.SCSPRAM_LENGTH = 0x80000/2; - } + m_SCSPRAM = (unsigned char *)base; + m_DSP.SCSPRAM = (UINT16 *)base; + m_SCSPRAM_LENGTH = 0x80000; + m_DSP.SCSPRAM_LENGTH = 0x80000/2; } diff --git a/src/devices/sound/upd7759.cpp b/src/devices/sound/upd7759.cpp index cb75e30b231..78cdf5ce24a 100644 --- a/src/devices/sound/upd7759.cpp +++ b/src/devices/sound/upd7759.cpp @@ -716,7 +716,7 @@ void upd7759_device::device_timer(emu_timer &timer, device_timer_id id, int para /* set a timer to go off when that is done */ if (m_state != STATE_IDLE) m_timer->adjust(m_clock_period * m_clocks_left); - break; + break; default: assert_always(FALSE, "Unknown id in upd7759_device::device_timer"); diff --git a/src/devices/video/ef9345.cpp b/src/devices/video/ef9345.cpp index 057550d794b..a78835b12c0 100644 --- a/src/devices/video/ef9345.cpp +++ b/src/devices/video/ef9345.cpp @@ -428,7 +428,7 @@ void ef9345_device::bichrome40(UINT8 type, UINT16 address, UINT8 dial, UINT16 ib case 0x70: //11 = flash underlined if (m_blink) underline = 1; - break; + break; } } diff --git a/src/devices/video/voodoo_pci.cpp b/src/devices/video/voodoo_pci.cpp index 5ca7b700569..9aa3b39eba9 100644 --- a/src/devices/video/voodoo_pci.cpp +++ b/src/devices/video/voodoo_pci.cpp @@ -136,7 +136,7 @@ void voodoo_pci_device::map_extra(UINT64 memory_window_start, UINT64 memory_wind if (m_type>=TYPE_VOODOO_BANSHEE) { UINT64 start = io_offset + 0x3b0; UINT64 end = io_offset + 0x3df; - io_space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(voodoo_pci_device::vga_r), this), write32_delegate(FUNC(voodoo_pci_device::vga_w), this)); + io_space->install_readwrite_handler(start, end, read32_delegate(FUNC(voodoo_pci_device::vga_r), this), write32_delegate(FUNC(voodoo_pci_device::vga_w), this)); logerror("%s: map %s at %0*x-%0*x\n", this->tag(), "vga_r/w", 4, UINT32(start), 4, UINT32(end)); } } diff --git a/src/emu/addrmap.cpp b/src/emu/addrmap.cpp index a7a510b56f7..2b3f45b1795 100644 --- a/src/emu/addrmap.cpp +++ b/src/emu/addrmap.cpp @@ -36,6 +36,7 @@ address_map_entry::address_map_entry(device_t &device, address_map &map, offs_t m_addrend((map.m_globalmask == 0) ? end : end & map.m_globalmask), m_addrmirror(0), m_addrmask(0), + m_addrselect(0), m_share(nullptr), m_region(nullptr), m_rgnoffs(0), @@ -578,6 +579,9 @@ void address_map::uplift_submaps(running_machine &machine, device_t &device, dev if (entry->m_addrmask || subentry->m_addrmask) throw emu_fatalerror("uplift_submaps unhandled case: address masks.\n"); + if (entry->m_addrselect || subentry->m_addrselect) + throw emu_fatalerror("uplift_submaps unhandled case: select masks.\n"); + if (subentry->m_addrmirror & mirror_address_mask) throw emu_fatalerror("uplift_submaps unhandled case: address mirror bit within subentry.\n"); @@ -681,6 +685,28 @@ void address_map::map_validity_check(validity_checker &valid, const device_t &de if ((bytestart & (alignunit - 1)) != 0 || (byteend & (alignunit - 1)) != (alignunit - 1)) osd_printf_error("Wrong %s memory read handler start = %08x, end = %08x ALIGN = %d\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, alignunit); + // verify mask/mirror/select + offs_t set_bits = entry.m_addrstart | entry.m_addrend; + offs_t changing_bits = entry.m_addrstart ^ entry.m_addrend; + changing_bits |= changing_bits >> 1; + changing_bits |= changing_bits >> 2; + changing_bits |= changing_bits >> 4; + changing_bits |= changing_bits >> 8; + changing_bits |= changing_bits >> 16; + + if (entry.m_addrmask & ~changing_bits) + osd_printf_error("In %s memory range %x-%x, mask %x is trying to unmask an unchanging address bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmask & ~changing_bits); + if (entry.m_addrmirror & changing_bits) + osd_printf_error("In %s memory range %x-%x, mirror %x touches a changing address bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, entry.m_addrmirror & changing_bits); + if (entry.m_addrselect & changing_bits) + osd_printf_error("In %s memory range %x-%x, select %x touches a changing address bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrselect, entry.m_addrselect & changing_bits); + if (entry.m_addrmirror & set_bits) + osd_printf_error("In %s memory range %x-%x, mirror %x touches a set address bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, entry.m_addrmirror & set_bits); + if (entry.m_addrselect & set_bits) + osd_printf_error("In %s memory range %x-%x, select %x touches a set address bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrselect, entry.m_addrselect & set_bits); + if (entry.m_addrmirror & entry.m_addrselect) + osd_printf_error("In %s memory range %x-%x, mirror %x touches a select bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, entry.m_addrmirror & entry.m_addrselect); + // if this is a program space, auto-assign implicit ROM entries if (entry.m_read.m_type == AMH_ROM && entry.m_region == nullptr) { diff --git a/src/emu/addrmap.h b/src/emu/addrmap.h index e4386d68365..3bcea1a3f47 100644 --- a/src/emu/addrmap.h +++ b/src/emu/addrmap.h @@ -81,6 +81,7 @@ public: // simple inline setters void set_mirror(offs_t _mirror) { m_addrmirror = _mirror; } + void set_select(offs_t _select) { m_addrselect = _select; } void set_read_type(map_handler_type _type) { m_read.m_type = _type; } void set_write_type(map_handler_type _type) { m_write.m_type = _type; } void set_region(const char *tag, offs_t offset) { m_region = tag; m_rgnoffs = offset; } @@ -115,6 +116,7 @@ public: offs_t m_addrend; // end address offs_t m_addrmirror; // mirror bits offs_t m_addrmask; // mask bits + offs_t m_addrselect; // select bits map_handler_data m_read; // data for read handler map_handler_data m_write; // data for write handler map_handler_data m_setoffsethd; // data for setoffset handler @@ -314,7 +316,6 @@ void ADDRESS_MAP_NAME(_name)(address_map &map, device_t &device) \ typedef write##_bits##_delegate write_delegate ATTR_UNUSED; \ address_map_entry##_bits *curentry = nullptr; \ (void)curentry; \ - assert(&device != nullptr); \ map.configure(_space, _bits); \ typedef _class drivdata_class ATTR_UNUSED; #define DEVICE_ADDRESS_MAP_START(_name, _bits, _class) \ @@ -324,7 +325,6 @@ void _class :: _name(::address_map &map, device_t &device) \ typedef write##_bits##_delegate write_delegate ATTR_UNUSED; \ address_map_entry##_bits *curentry = nullptr; \ (void)curentry; \ - assert(&device != nullptr); \ map.configure(AS_PROGRAM, _bits); \ typedef _class drivdata_class ATTR_UNUSED; #define ADDRESS_MAP_END \ @@ -362,6 +362,8 @@ void _class :: _name(::address_map &map, device_t &device) \ curentry->set_mask(_mask); #define AM_MIRROR(_mirror) \ curentry->set_mirror(_mirror); +#define AM_SELECT(_select) \ + curentry->set_select(_select); // driver data reads #define AM_READ(_handler) \ diff --git a/src/emu/crsshair.cpp b/src/emu/crsshair.cpp index 28d5cced1ce..d976e49714f 100644 --- a/src/emu/crsshair.cpp +++ b/src/emu/crsshair.cpp @@ -113,8 +113,8 @@ crosshair_manager::crosshair_manager(running_machine &machine) m_auto_time = CROSSHAIR_VISIBILITY_AUTOTIME_DEFAULT; /* determine who needs crosshairs */ - for (ioport_port &port : machine.ioport().ports()) - for (ioport_field &field : port.fields()) + for (auto &port : machine.ioport().ports()) + for (ioport_field &field : port.second->fields()) if (field.crosshair_axis() != CROSSHAIR_AXIS_NONE) { int player = field.player(); diff --git a/src/emu/debug/debugcmd.cpp b/src/emu/debug/debugcmd.cpp index ad1359baa28..4959f215caa 100644 --- a/src/emu/debug/debugcmd.cpp +++ b/src/emu/debug/debugcmd.cpp @@ -2823,12 +2823,12 @@ void debugger_commands::execute_symlist(int ref, int params, const char **param) } /* gather names for all symbols */ - for (symbol_entry &entry : symtable->entries()) + for (auto &entry : symtable->entries()) { /* only display "register" type symbols */ - if (!entry.is_function()) + if (!entry.second->is_function()) { - namelist[count++] = entry.name(); + namelist[count++] = entry.second->name(); if (count >= ARRAY_LENGTH(namelist)) break; } diff --git a/src/emu/debug/debugcpu.cpp b/src/emu/debug/debugcpu.cpp index 7c2806ba601..d9a63868899 100644 --- a/src/emu/debug/debugcpu.cpp +++ b/src/emu/debug/debugcpu.cpp @@ -47,6 +47,7 @@ debugger_cpu::debugger_cpu(running_machine &machine) , m_rpindex(1) , m_wpdata(0) , m_wpaddr(0) + , m_last_periodic_update_time(0) , m_comments_loaded(false) { screen_device *first_screen = m_machine.first_screen(); @@ -54,7 +55,7 @@ debugger_cpu::debugger_cpu(running_machine &machine) m_tempvar = make_unique_clear<UINT64[]>(NUM_TEMP_VARIABLES); /* create a global symbol table */ - m_symtable = global_alloc(symbol_table(&m_machine)); + m_symtable = std::make_unique<symbol_table>(&m_machine); // configure our base memory accessors configure_memory(*m_symtable); @@ -83,8 +84,6 @@ debugger_cpu::debugger_cpu(running_machine &machine) /* add callback for breaking on VBLANK */ if (m_machine.first_screen() != nullptr) m_machine.first_screen()->register_vblank_callback(vblank_state_delegate(FUNC(debugger_cpu::on_vblank), this)); - - machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(debugger_cpu::exit), this)); } void debugger_cpu::configure_memory(symbol_table &table) @@ -162,7 +161,7 @@ bool debugger_cpu::is_stopped() symbol_table* debugger_cpu::get_global_symtable() { - return m_symtable; + return m_symtable.get(); } @@ -956,16 +955,6 @@ UINT64 debugger_cpu::read_opcode(address_space &space, offs_t address, int size) ***************************************************************************/ /*------------------------------------------------- - exit - free all memory --------------------------------------------------*/ - -void debugger_cpu::exit() -{ - global_free(m_symtable); -} - - -/*------------------------------------------------- on_vblank - called when a VBLANK hits -------------------------------------------------*/ diff --git a/src/emu/debug/debugcpu.h b/src/emu/debug/debugcpu.h index 2acfba9ea67..af8cb57a2e4 100644 --- a/src/emu/debug/debugcpu.h +++ b/src/emu/debug/debugcpu.h @@ -606,7 +606,6 @@ private: UINT64 get_frame(symbol_table &table, void *ref); /* internal helpers */ - void exit(); void on_vblank(screen_device &device, bool vblank_state); running_machine& m_machine; @@ -617,7 +616,7 @@ private: FILE * m_source_file; // script source file - symbol_table * m_symtable; // global symbol table + std::unique_ptr<symbol_table> m_symtable; // global symbol table bool m_within_instruction_hook; bool m_vblank_occurred; diff --git a/src/emu/debug/debugvw.cpp b/src/emu/debug/debugvw.cpp index 09842dc349e..bfeec537118 100644 --- a/src/emu/debug/debugvw.cpp +++ b/src/emu/debug/debugvw.cpp @@ -355,12 +355,6 @@ debug_view *debug_view_manager::alloc_view(debug_view_type type, debug_view_osd_ case DVT_LOG: return append(global_alloc(debug_view_log(machine(), osdupdate, osdprivate))); - case DVT_TIMERS: -// return append(global_alloc(debug_view_timers(machine(), osdupdate, osdprivate))); - - case DVT_ALLOCS: -// return append(global_alloc(debug_view_allocs(machine(), osdupdate, osdprivate))); - case DVT_BREAK_POINTS: return append(global_alloc(debug_view_breakpoints(machine(), osdupdate, osdprivate))); diff --git a/src/emu/debug/debugvw.h b/src/emu/debug/debugvw.h index cb1852aed2c..2f5d8c16872 100644 --- a/src/emu/debug/debugvw.h +++ b/src/emu/debug/debugvw.h @@ -27,8 +27,6 @@ enum debug_view_type DVT_DISASSEMBLY, DVT_MEMORY, DVT_LOG, - DVT_TIMERS, - DVT_ALLOCS, DVT_BREAK_POINTS, DVT_WATCH_POINTS }; diff --git a/src/emu/debug/dvmemory.cpp b/src/emu/debug/dvmemory.cpp index 8307812b365..47a046081a4 100644 --- a/src/emu/debug/dvmemory.cpp +++ b/src/emu/debug/dvmemory.cpp @@ -147,10 +147,10 @@ void debug_view_memory::enumerate_sources() } // then add all the memory regions - for (memory_region ®ion : machine().memory().regions()) + for (auto ®ion : machine().memory().regions()) { - name = string_format("Region '%s'", region.name()); - m_source_list.append(*global_alloc(debug_view_memory_source(name.c_str(), region))); + name = string_format("Region '%s'", region.second->name()); + m_source_list.append(*global_alloc(debug_view_memory_source(name.c_str(), *region.second.get()))); } // finally add all global array symbols diff --git a/src/emu/debug/express.cpp b/src/emu/debug/express.cpp index f10a48bcd11..000ff270937 100644 --- a/src/emu/debug/express.cpp +++ b/src/emu/debug/express.cpp @@ -414,8 +414,8 @@ void symbol_table::configure_memory(void *param, valid_func valid, read_func rea void symbol_table::add(const char *name, read_write rw, UINT64 *ptr) { - m_symlist.remove(name); - m_symlist.append(name, *global_alloc(integer_symbol_entry(*this, name, rw, ptr))); + m_symlist.erase(name); + m_symlist.emplace(name, std::make_unique<integer_symbol_entry>(*this, name, rw, ptr)); } @@ -425,8 +425,8 @@ void symbol_table::add(const char *name, read_write rw, UINT64 *ptr) void symbol_table::add(const char *name, UINT64 value) { - m_symlist.remove(name); - m_symlist.append(name, *global_alloc(integer_symbol_entry(*this, name, value))); + m_symlist.erase(name); + m_symlist.emplace(name, std::make_unique<integer_symbol_entry>(*this, name, value)); } @@ -436,8 +436,8 @@ void symbol_table::add(const char *name, UINT64 value) void symbol_table::add(const char *name, void *ref, getter_func getter, setter_func setter) { - m_symlist.remove(name); - m_symlist.append(name, *global_alloc(integer_symbol_entry(*this, name, ref, getter, setter))); + m_symlist.erase(name); + m_symlist.emplace(name, std::make_unique<integer_symbol_entry>(*this, name, ref, getter, setter)); } @@ -447,8 +447,8 @@ void symbol_table::add(const char *name, void *ref, getter_func getter, setter_f void symbol_table::add(const char *name, void *ref, int minparams, int maxparams, execute_func execute) { - m_symlist.remove(name); - m_symlist.append(name, *global_alloc(function_symbol_entry(*this, name, ref, minparams, maxparams, execute))); + m_symlist.erase(name); + m_symlist.emplace(name, std::make_unique<function_symbol_entry>(*this, name, ref, minparams, maxparams, execute)); } diff --git a/src/emu/debug/express.h b/src/emu/debug/express.h index c07f5ecc6f0..4f57bea70a2 100644 --- a/src/emu/debug/express.h +++ b/src/emu/debug/express.h @@ -117,9 +117,9 @@ protected: // construction/destruction symbol_entry(symbol_table &table, symbol_type type, const char *name, void *ref); +public: virtual ~symbol_entry(); -public: // getters symbol_entry *next() const { return m_next; } const char *name() const { return m_name.c_str(); } @@ -171,7 +171,7 @@ public: symbol_table(void *globalref, symbol_table *parent = nullptr); // getters - const tagged_list<symbol_entry> &entries() const { return m_symlist; } + const std::unordered_map<std::string, std::unique_ptr<symbol_entry>> &entries() const { return m_symlist; } symbol_table *parent() const { return m_parent; } void *globalref() const { return m_globalref; } @@ -183,7 +183,7 @@ public: void add(const char *name, UINT64 constvalue); void add(const char *name, void *ref, getter_func getter, setter_func setter = nullptr); void add(const char *name, void *ref, int minparams, int maxparams, execute_func execute); - symbol_entry *find(const char *name) const { return m_symlist.find(name); } + symbol_entry *find(const char *name) const { if (name) { auto search = m_symlist.find(name); if (search != m_symlist.end()) return search->second.get(); else return nullptr; } else return nullptr; } symbol_entry *find_deep(const char *name); // value getter/setter @@ -199,7 +199,7 @@ private: // internal state symbol_table * m_parent; // pointer to the parent symbol table void * m_globalref; // global reference parameter - tagged_list<symbol_entry> m_symlist; // list of symbols + std::unordered_map<std::string,std::unique_ptr<symbol_entry>> m_symlist; // list of symbols void * m_memory_param; // callback parameter for memory valid_func m_memory_valid; // validation callback read_func m_memory_read; // read callback diff --git a/src/emu/devdelegate.h b/src/emu/devdelegate.h index b688cd31261..58974c4f5b3 100644 --- a/src/emu/devdelegate.h +++ b/src/emu/devdelegate.h @@ -74,7 +74,7 @@ public: device_delegate(const thistype &src, device_t &search_root) : basetype(src), device_delegate_helper(src.m_device_name) { bind_relative_to(search_root); } // perform the binding - void bind_relative_to(device_t &search_root) { assert(&search_root != nullptr); if (!basetype::isnull()) basetype::late_bind(bound_object(search_root)); } + void bind_relative_to(device_t &search_root) { if (!basetype::isnull()) basetype::late_bind(bound_object(search_root)); } // getter (for validation purposes) const char *device_name() const { return m_device_name; } diff --git a/src/emu/device.cpp b/src/emu/device.cpp index 97c345788da..8d4ec1b8d62 100644 --- a/src/emu/device.cpp +++ b/src/emu/device.cpp @@ -74,7 +74,16 @@ device_t::~device_t() memory_region *device_t::memregion(const char *_tag) const { // build a fully-qualified name and look it up - return machine().memory().regions().find(subtag(_tag).c_str()); + if (_tag) + { + auto search = machine().memory().regions().find(subtag(_tag).c_str()); + if (search != machine().memory().regions().end()) + return search->second.get(); + else + return nullptr; + } + else + return nullptr; } @@ -86,7 +95,16 @@ memory_region *device_t::memregion(const char *_tag) const memory_share *device_t::memshare(const char *_tag) const { // build a fully-qualified name and look it up - return machine().memory().shares().find(subtag(_tag).c_str()); + if (_tag) + { + auto search = machine().memory().shares().find(subtag(_tag).c_str()); + if (search != machine().memory().shares().end()) + return search->second.get(); + else + return nullptr; + } + else + return nullptr; } @@ -97,8 +115,16 @@ memory_share *device_t::memshare(const char *_tag) const memory_bank *device_t::membank(const char *_tag) const { - // build a fully-qualified name and look it up - return machine().memory().banks().find(subtag(_tag).c_str()); + if (_tag) + { + auto search = machine().memory().banks().find(subtag(_tag).c_str()); + if (search != machine().memory().banks().end()) + return search->second.get(); + else + return nullptr; + } + else + return nullptr; } diff --git a/src/emu/diimage.h b/src/emu/diimage.h index 89c402b47fa..f411aa99419 100644 --- a/src/emu/diimage.h +++ b/src/emu/diimage.h @@ -152,7 +152,7 @@ public: virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) { return FALSE; } virtual bool call_create(int format_type, option_resolution *format_options) { return FALSE; } virtual void call_unload() { } - virtual void call_display() { } + virtual int call_display(std::string& s) { return -1; } virtual device_image_partialhash_func get_partial_hash() const { return nullptr; } virtual bool core_opens_image_file() const { return TRUE; } virtual iodevice_t image_type() const = 0; diff --git a/src/emu/dioutput.h b/src/emu/dioutput.h index 94528671ad9..1ba6f9d9f81 100644 --- a/src/emu/dioutput.h +++ b/src/emu/dioutput.h @@ -20,7 +20,7 @@ //************************************************************************** -// TYPE DEFINITIONS +// MACROS //************************************************************************** #define MCFG_OUTPUT_INDEX(_index) \ diff --git a/src/emu/dislot.cpp b/src/emu/dislot.cpp index 051dc33bdb2..5489cdc4453 100644 --- a/src/emu/dislot.cpp +++ b/src/emu/dislot.cpp @@ -21,7 +21,6 @@ device_slot_interface::~device_slot_interface() } device_slot_option::device_slot_option(const char *name, const device_type &devtype): - m_next(nullptr), m_name(name), m_devtype(devtype), m_selectable(true), @@ -36,7 +35,7 @@ void device_slot_interface::static_option_reset(device_t &device) { device_slot_interface &intf = dynamic_cast<device_slot_interface &>(device); - intf.m_options.reset(); + intf.m_options.clear(); } void device_slot_interface::static_option_add(device_t &device, const char *name, const device_type &devtype) @@ -46,8 +45,8 @@ void device_slot_interface::static_option_add(device_t &device, const char *name if (option != nullptr) throw emu_fatalerror("slot '%s' duplicate option '%s\n", device.tag(), name); - - intf.m_options.append(name, *global_alloc(device_slot_option(name, devtype))); + if (intf.m_options.count(name) != 0) throw tag_add_exception(name); + intf.m_options.emplace(std::make_pair(name, std::make_unique<device_slot_option>(name, devtype))); } device_slot_option *device_slot_interface::static_option(device_t &device, const char *name) diff --git a/src/emu/dislot.h b/src/emu/dislot.h index 7aaf28d004d..a5e6d3edfc1 100644 --- a/src/emu/dislot.h +++ b/src/emu/dislot.h @@ -67,12 +67,10 @@ class device_slot_option { friend class device_slot_interface; - friend class simple_list<device_slot_option>; public: device_slot_option(const char *name, const device_type &devtype); - device_slot_option *next() const { return m_next; } const char *name() const { return m_name; } const device_type &devtype() const { return m_devtype; } bool selectable() const { return m_selectable; } @@ -83,7 +81,6 @@ public: private: // internal state - device_slot_option *m_next; const char *m_name; const device_type &m_devtype; bool m_selectable; @@ -114,15 +111,15 @@ public: static void static_set_option_clock(device_t &device, const char *option, UINT32 default_clock) { static_option(device, option)->m_clock = default_clock; } bool fixed() const { return m_fixed; } const char *default_option() const { return m_default_option; } - const tagged_list<device_slot_option> &option_list() const { return m_options; } - device_slot_option *option(const char *name) const { if (name) return m_options.find(name); return nullptr; } + const std::unordered_map<std::string, std::unique_ptr<device_slot_option>> &option_list() const { return m_options; } + device_slot_option *option(const char *name) const { if (name) { auto search = m_options.find(name); if (search != m_options.end()) return search->second.get(); else return nullptr; } else return nullptr; } virtual std::string get_default_card_software() { return std::string(); } device_t *get_card_device(); private: // internal state static device_slot_option *static_option(device_t &device, const char *option); - tagged_list<device_slot_option> m_options; + std::unordered_map<std::string,std::unique_ptr<device_slot_option>> m_options; const char *m_default_option; bool m_fixed; }; diff --git a/src/emu/disound.cpp b/src/emu/disound.cpp index 81c63dd0106..200320d3a18 100644 --- a/src/emu/disound.cpp +++ b/src/emu/disound.cpp @@ -42,7 +42,7 @@ device_sound_interface::~device_sound_interface() // a new route to the device //------------------------------------------------- -device_sound_interface::sound_route &device_sound_interface::static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input, UINT32 mixoutput) +void device_sound_interface::static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input, UINT32 mixoutput) { // find our sound interface device_sound_interface *sound; @@ -50,7 +50,7 @@ device_sound_interface::sound_route &device_sound_interface::static_add_route(de throw emu_fatalerror("MCFG_SOUND_ROUTE called on device '%s' with no sound interface", device.tag()); // append a new route to the list - return sound->m_route_list.append(*global_alloc(sound_route(output, input, gain, target, mixoutput))); + sound->m_route_list.push_back(std::make_unique<sound_route>(output, input, gain, target, mixoutput)); } @@ -67,7 +67,7 @@ void device_sound_interface::static_reset_routes(device_t &device) throw emu_fatalerror("MCFG_SOUND_ROUTES_RESET called on device '%s' with no sound interface", device.tag()); // reset the routine list - sound->m_route_list.reset(); + sound->m_route_list.clear(); } @@ -235,17 +235,17 @@ int device_sound_interface::inputnum_from_device(device_t &source_device, int ou void device_sound_interface::interface_validity_check(validity_checker &valid) const { // loop over all the routes - for (const sound_route &route : routes()) + for (auto &route : routes()) { // find a device with the requested tag - const device_t *target = device().siblingdevice(route.m_target.c_str()); + const device_t *target = device().siblingdevice(route->m_target.c_str()); if (target == nullptr) - osd_printf_error("Attempting to route sound to non-existant device '%s'\n", route.m_target.c_str()); + osd_printf_error("Attempting to route sound to non-existant device '%s'\n", route->m_target.c_str()); // if it's not a speaker or a sound device, error const device_sound_interface *sound; if (target != nullptr && target->type() != SPEAKER && !target->interface(sound)) - osd_printf_error("Attempting to route sound to a non-sound device '%s' (%s)\n", route.m_target.c_str(), target->name()); + osd_printf_error("Attempting to route sound to a non-sound device '%s' (%s)\n", route->m_target.c_str(), target->name()); } } @@ -262,10 +262,10 @@ void device_sound_interface::interface_pre_start() for (device_sound_interface &sound : iter) { // scan each route on the device - for (const sound_route &route : sound.routes()) + for (auto &route : sound.routes()) { // see if we are the target of this route; if we are, make sure the source device is started - device_t *target_device = sound.device().siblingdevice(route.m_target.c_str()); + device_t *target_device = sound.device().siblingdevice(route->m_target.c_str()); if (target_device == &m_device && !sound.device().started()) throw device_missing_dependencies(); } @@ -276,14 +276,14 @@ void device_sound_interface::interface_pre_start() for (device_sound_interface &sound : iter) { // scan each route on the device - for (sound_route &route : sound.routes()) + for (auto &route : sound.routes()) { // see if we are the target of this route - device_t *target_device = sound.device().siblingdevice(route.m_target.c_str()); - if (target_device == &m_device && route.m_input == AUTO_ALLOC_INPUT) + device_t *target_device = sound.device().siblingdevice(route->m_target.c_str()); + if (target_device == &m_device && route->m_input == AUTO_ALLOC_INPUT) { - route.m_input = m_auto_allocated_inputs; - m_auto_allocated_inputs += (route.m_output == ALL_OUTPUTS) ? sound.outputs() : 1; + route->m_input = m_auto_allocated_inputs; + m_auto_allocated_inputs += (route->m_output == ALL_OUTPUTS) ? sound.outputs() : 1; } } } @@ -301,32 +301,32 @@ void device_sound_interface::interface_post_start() for (device_sound_interface &sound : sound_interface_iterator(m_device.machine().root_device())) { // scan each route on the device - for (const sound_route &route : sound.routes()) + for (auto &route : sound.routes()) { // if we are the target of this route, hook it up - device_t *target_device = sound.device().siblingdevice(route.m_target.c_str()); + device_t *target_device = sound.device().siblingdevice(route->m_target.c_str()); if (target_device == &m_device) { // iterate over all outputs, matching any that apply - int inputnum = route.m_input; + int inputnum = route->m_input; int numoutputs = sound.outputs(); for (int outputnum = 0; outputnum < numoutputs; outputnum++) - if (route.m_output == outputnum || route.m_output == ALL_OUTPUTS) + if (route->m_output == outputnum || route->m_output == ALL_OUTPUTS) { // find the output stream to connect from int streamoutputnum; sound_stream *outputstream = sound.output_to_stream_output(outputnum, streamoutputnum); if (outputstream == nullptr) - fatalerror("Sound device '%s' specifies route for non-existant output #%d\n", route.m_target.c_str(), outputnum); + fatalerror("Sound device '%s' specifies route for non-existant output #%d\n", route->m_target.c_str(), outputnum); // find the input stream to connect to int streaminputnum; sound_stream *inputstream = input_to_stream_input(inputnum++, streaminputnum); if (inputstream == nullptr) - fatalerror("Sound device '%s' targeted output #%d to non-existant device '%s' input %d\n", route.m_target.c_str(), outputnum, m_device.tag(), inputnum - 1); + fatalerror("Sound device '%s' targeted output #%d to non-existant device '%s' input %d\n", route->m_target.c_str(), outputnum, m_device.tag(), inputnum - 1); // set the input - inputstream->set_input(streaminputnum, outputstream, streamoutputnum, route.m_gain); + inputstream->set_input(streaminputnum, outputstream, streamoutputnum, route->m_gain); } } } @@ -358,8 +358,7 @@ void device_sound_interface::interface_pre_reset() //------------------------------------------------- device_sound_interface::sound_route::sound_route(int output, int input, float gain, const char *target, UINT32 mixoutput) - : m_next(nullptr), - m_output(output), + : m_output(output), m_input(input), m_mixoutput(mixoutput), m_gain(gain), @@ -416,15 +415,15 @@ void device_mixer_interface::interface_pre_start() // iterate through all routes that point to us and note their mixer output for (device_sound_interface &sound : sound_interface_iterator(m_device.machine().root_device())) - for (const sound_route &route : sound.routes()) + for (auto &route : sound.routes()) { // see if we are the target of this route - device_t *target_device = sound.device().siblingdevice(route.m_target.c_str()); - if (target_device == &device() && route.m_input < m_auto_allocated_inputs) + device_t *target_device = sound.device().siblingdevice(route->m_target.c_str()); + if (target_device == &device() && route->m_input < m_auto_allocated_inputs) { - int count = (route.m_output == ALL_OUTPUTS) ? sound.outputs() : 1; + int count = (route->m_output == ALL_OUTPUTS) ? sound.outputs() : 1; for (int output = 0; output < count; output++) - m_outputmap[route.m_input + output] = route.m_mixoutput; + m_outputmap[route->m_input + output] = route->m_mixoutput; } } diff --git a/src/emu/disound.h b/src/emu/disound.h index 055f59d921e..f981113317e 100644 --- a/src/emu/disound.h +++ b/src/emu/disound.h @@ -70,9 +70,6 @@ public: public: sound_route(int output, int input, float gain, const char *target, UINT32 mixoutput); - sound_route *next() const { return m_next; } - - sound_route * m_next; // pointer to next route UINT32 m_output; // output index, or ALL_OUTPUTS UINT32 m_input; // target input index UINT32 m_mixoutput; // target mixer output @@ -85,10 +82,10 @@ public: virtual ~device_sound_interface(); // configuration access - const simple_list<sound_route> &routes() const { return m_route_list; } + const std::vector<std::unique_ptr<sound_route>> &routes() const { return m_route_list; } // static inline configuration helpers - static sound_route &static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input = AUTO_ALLOC_INPUT, UINT32 mixoutput = 0); + static void static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input = AUTO_ALLOC_INPUT, UINT32 mixoutput = 0); static void static_reset_routes(device_t &device); // sound stream update overrides @@ -114,7 +111,7 @@ protected: virtual void interface_pre_reset() override; // internal state - simple_list<sound_route> m_route_list; // list of sound routes + std::vector<std::unique_ptr<sound_route>> m_route_list; // list of sound routes int m_outputs; // number of outputs from this instance int m_auto_allocated_inputs; // number of auto-allocated inputs targeting us }; diff --git a/src/emu/driver.cpp b/src/emu/driver.cpp index b504f9b6694..510cf8d9199 100644 --- a/src/emu/driver.cpp +++ b/src/emu/driver.cpp @@ -37,12 +37,9 @@ driver_device::driver_device(const machine_config &mconfig, device_type type, co device_memory_interface(mconfig, *this), m_space_config("generic", ENDIANNESS_LITTLE, 8, 32, 0, nullptr, *ADDRESS_MAP_NAME(generic)), m_system(nullptr), - m_latch_clear_value(0), m_flip_screen_x(0), m_flip_screen_y(0) { - memset(m_latched_value, 0, sizeof(m_latched_value)); - memset(m_latch_read, 0, sizeof(m_latch_read)); } @@ -231,8 +228,6 @@ void driver_device::device_start() video_start(); // save generic states - save_item(NAME(m_latch_clear_value)); - save_item(NAME(m_latched_value)); save_item(NAME(m_flip_screen_x)); save_item(NAME(m_flip_screen_y)); } @@ -375,74 +370,6 @@ INTERRUPT_GEN_MEMBER( driver_device::irq7_line_hold ) { device.execute().set_i INTERRUPT_GEN_MEMBER( driver_device::irq7_line_pulse ) { generic_pulse_irq_line(device.execute(), 7, 1); } INTERRUPT_GEN_MEMBER( driver_device::irq7_line_assert ) { device.execute().set_input_line(7, ASSERT_LINE); } -//************************************************************************** -// GENERIC SOUND COMMAND LATCHING -//************************************************************************** - -//------------------------------------------------- -// soundlatch_sync_callback - time-delayed -// callback to set a latch value -//------------------------------------------------- - -void driver_device::soundlatch_sync_callback(void *ptr, INT32 param) -{ - UINT16 value = param >> 8; - int which = param & 0xff; - - // if the latch hasn't been read and the value is changed, log a warning - if (!m_latch_read[which] && m_latched_value[which] != value) - logerror("Warning: sound latch %d written before being read. Previous: %02x, new: %02x\n", which, m_latched_value[which], value); - - // store the new value and mark it not read - m_latched_value[which] = value; - m_latch_read[which] = 0; -} - - -//------------------------------------------------- -// soundlatch_byte_w - global write handlers for -// writing to sound latches -//------------------------------------------------- - -void driver_device::soundlatch_write(UINT8 index, UINT32 data) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(driver_device::soundlatch_sync_callback), this), index | (data << 8)); } -WRITE8_MEMBER( driver_device::soundlatch_byte_w ) { soundlatch_write(0, data); } -WRITE16_MEMBER( driver_device::soundlatch_word_w ) { soundlatch_write(0, data); } -WRITE8_MEMBER( driver_device::soundlatch2_byte_w ) { soundlatch_write(1, data); } -WRITE16_MEMBER( driver_device::soundlatch2_word_w ) { soundlatch_write(1, data); } -WRITE8_MEMBER( driver_device::soundlatch3_byte_w ) { soundlatch_write(2, data); } -WRITE16_MEMBER( driver_device::soundlatch3_word_w ) { soundlatch_write(2, data); } -WRITE8_MEMBER( driver_device::soundlatch4_byte_w ) { soundlatch_write(3, data); } -WRITE16_MEMBER( driver_device::soundlatch4_word_w ) { soundlatch_write(3, data); } - - -//------------------------------------------------- -// soundlatch_byte_r - global read handlers for -// reading from sound latches -//------------------------------------------------- - -UINT32 driver_device::soundlatch_read(UINT8 index) { m_latch_read[index] = 1; return m_latched_value[index]; } -READ8_MEMBER( driver_device::soundlatch_byte_r ) { return soundlatch_read(0); } -READ16_MEMBER( driver_device::soundlatch_word_r ) { return soundlatch_read(0); } -READ8_MEMBER( driver_device::soundlatch2_byte_r ) { return soundlatch_read(1); } -READ16_MEMBER( driver_device::soundlatch2_word_r ) { return soundlatch_read(1); } -READ8_MEMBER( driver_device::soundlatch3_byte_r ) { return soundlatch_read(2); } -READ16_MEMBER( driver_device::soundlatch3_word_r ) { return soundlatch_read(2); } -READ8_MEMBER( driver_device::soundlatch4_byte_r ) { return soundlatch_read(3); } -READ16_MEMBER( driver_device::soundlatch4_word_r ) { return soundlatch_read(3); } - - -//------------------------------------------------- -// soundlatch_clear_byte_w - global write handlers -// for clearing sound latches -//------------------------------------------------- - -void driver_device::soundlatch_clear(UINT8 index) { m_latched_value[index] = m_latch_clear_value; } -WRITE8_MEMBER( driver_device::soundlatch_clear_byte_w ) { soundlatch_clear(0); } -WRITE8_MEMBER( driver_device::soundlatch2_clear_byte_w ) { soundlatch_clear(1); } -WRITE8_MEMBER( driver_device::soundlatch3_clear_byte_w ) { soundlatch_clear(2); } -WRITE8_MEMBER( driver_device::soundlatch4_clear_byte_w ) { soundlatch_clear(3); } - - //************************************************************************** // GENERIC FLIP SCREEN HANDLING diff --git a/src/emu/driver.h b/src/emu/driver.h index 16c66ef9ec4..9d1bd42727e 100644 --- a/src/emu/driver.h +++ b/src/emu/driver.h @@ -179,38 +179,6 @@ public: INTERRUPT_GEN_MEMBER( irq7_line_pulse ); INTERRUPT_GEN_MEMBER( irq7_line_assert ); - // generic audio - void soundlatch_setclearedvalue(UINT16 value) { m_latch_clear_value = value; } - - // sound latch readers - UINT32 soundlatch_read(UINT8 index = 0); - DECLARE_READ8_MEMBER( soundlatch_byte_r ); - DECLARE_READ8_MEMBER( soundlatch2_byte_r ); - DECLARE_READ8_MEMBER( soundlatch3_byte_r ); - DECLARE_READ8_MEMBER( soundlatch4_byte_r ); - DECLARE_READ16_MEMBER( soundlatch_word_r ); - DECLARE_READ16_MEMBER( soundlatch2_word_r ); - DECLARE_READ16_MEMBER( soundlatch3_word_r ); - DECLARE_READ16_MEMBER( soundlatch4_word_r ); - - // sound latch writers - void soundlatch_write(UINT8 index, UINT32 data); - void soundlatch_write(UINT32 data) { soundlatch_write(0, data); } - DECLARE_WRITE8_MEMBER( soundlatch_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch2_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch3_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch4_byte_w ); - DECLARE_WRITE16_MEMBER( soundlatch_word_w ); - DECLARE_WRITE16_MEMBER( soundlatch2_word_w ); - DECLARE_WRITE16_MEMBER( soundlatch3_word_w ); - DECLARE_WRITE16_MEMBER( soundlatch4_word_w ); - - // sound latch clearers - void soundlatch_clear(UINT8 index = 0); - DECLARE_WRITE8_MEMBER( soundlatch_clear_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch2_clear_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch3_clear_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch4_clear_byte_w ); // generic video void flip_screen_set(UINT32 on); @@ -252,7 +220,6 @@ protected: private: // helpers void irq_pulse_clear(void *ptr, INT32 param); - void soundlatch_sync_callback(void *ptr, INT32 param); void updateflip(); // configuration state @@ -262,11 +229,6 @@ private: const game_driver * m_system; // pointer to the game driver driver_callback_delegate m_callbacks[CB_COUNT]; // start/reset callbacks - // generic audio - UINT16 m_latch_clear_value; - UINT16 m_latched_value[4]; - UINT8 m_latch_read[4]; - // generic video UINT8 m_flip_screen_x; UINT8 m_flip_screen_y; diff --git a/src/emu/emucore.h b/src/emu/emucore.h index c8c95c1af48..121ea41481c 100644 --- a/src/emu/emucore.h +++ b/src/emu/emucore.h @@ -28,6 +28,7 @@ // standard C++ includes #include <exception> +#include <type_traits> #include <typeinfo> // core system includes @@ -35,8 +36,6 @@ #include "emualloc.h" #include "corestr.h" #include "bitmap.h" -#include "tagmap.h" - //************************************************************************** @@ -301,7 +300,14 @@ private: int code; }; - +class tag_add_exception +{ +public: + tag_add_exception(const char *tag) : m_tag(tag) { } + const char *tag() const { return m_tag.c_str(); } +private: + std::string m_tag; +}; //************************************************************************** // CASTING TEMPLATES @@ -312,48 +318,41 @@ class device_t; void report_bad_cast(const std::type_info &src_type, const std::type_info &dst_type); void report_bad_device_cast(const device_t *dev, const std::type_info &src_type, const std::type_info &dst_type); +template <typename Dest, typename Source> +inline std::enable_if_t<std::is_base_of<device_t, Source>::value> report_bad_cast(Source *const src) +{ + if (src) report_bad_device_cast(src, typeid(Source), typeid(Dest)); + else report_bad_cast(typeid(Source), typeid(Dest)); +} + +template <typename Dest, typename Source> +inline std::enable_if_t<!std::is_base_of<device_t, Source>::value> report_bad_cast(Source *const src) +{ + device_t const *dev(dynamic_cast<device_t const *>(src)); + if (dev) report_bad_device_cast(dev, typeid(Source), typeid(Dest)); + else report_bad_cast(typeid(Source), typeid(Dest)); +} + // template function for casting from a base class to a derived class that is checked // in debug builds and fast in release builds -template<class _Dest, class _Source> -inline _Dest downcast(_Source *src) +template <typename Dest, typename Source> +inline Dest downcast(Source *src) { #if defined(MAME_DEBUG) && !defined(MAME_DEBUG_FAST) - try { - if (dynamic_cast<_Dest>(src) != src) - { - if (dynamic_cast<const device_t *>(src) != nullptr) - report_bad_device_cast(dynamic_cast<const device_t *>(src), typeid(src), typeid(_Dest)); - else - report_bad_cast(typeid(src), typeid(_Dest)); - } - } - catch (std::bad_cast &) - { - report_bad_cast(typeid(src), typeid(_Dest)); - } + Dest const chk(dynamic_cast<Dest>(src)); + if (chk != src) report_bad_cast<std::remove_pointer_t<Dest>, Source>(src); #endif - return static_cast<_Dest>(src); + return static_cast<Dest>(src); } -template<class _Dest, class _Source> -inline _Dest downcast(_Source &src) +template<class Dest, class Source> +inline Dest downcast(Source &src) { #if defined(MAME_DEBUG) && !defined(MAME_DEBUG_FAST) - try { - if (&dynamic_cast<_Dest>(src) != &src) - { - if (dynamic_cast<const device_t *>(&src) != nullptr) - report_bad_device_cast(dynamic_cast<const device_t *>(&src), typeid(src), typeid(_Dest)); - else - report_bad_cast(typeid(src), typeid(_Dest)); - } - } - catch (std::bad_cast &) - { - report_bad_cast(typeid(src), typeid(_Dest)); - } + std::remove_reference_t<Dest> *const chk(dynamic_cast<std::remove_reference_t<Dest> *>(&src)); + if (chk != &src) report_bad_cast<std::remove_reference_t<Dest>, Source>(&src); #endif - return static_cast<_Dest>(src); + return static_cast<Dest>(src); } diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp index 0f530ecd712..47c89bd8892 100644 --- a/src/emu/emumem.cpp +++ b/src/emu/emumem.cpp @@ -67,9 +67,9 @@ Specifies a mask for the addresses in the current bucket. This mask is applied after a positive hit in the bucket specified by AM_RANGE or AM_SPACE, and is computed before accessing the RAM or calling - through to the read/write handler. If you use AM_MIRROR, below, the - mask is ANDed implicitly with the logical NOT of the mirror. The - mask specified by this macro is ANDed against any implicit masks. + through to the read/write handler. If you use AM_MIRROR, below, there + should not be any bits in common between mask and mirror. Same for + select. AM_MIRROR(mirror) Specifies mirror addresses for the given bucket. The current bucket @@ -78,6 +78,12 @@ value of 0x14000 would map the bucket at 0x00000, 0x04000, 0x10000, and 0x14000. + AM_SELECT(select) + Mirrors the addresses for the given bucket and pass the corresponding + address bits to the handler. Very useful for devices with multiple + slots/channels/etc were each slot is on a series of consecutive + addresses regrouping all its registers. + AM_ROM Specifies that this bucket contains ROM data by attaching an internal read handler. If this address space describes the first @@ -303,6 +309,12 @@ public: m_bytemask = bytemask; } + // Re-expand the bytemask after subunit fun + void expand_bytemask(offs_t previous_mask) + { + m_bytemask |= previous_mask; + } + // reconfigure the subunits on a base address change void reconfigure_subunits(offs_t bytestart); @@ -323,6 +335,7 @@ protected: // Subunit description information struct subunit_info { + offs_t m_bytemask; // bytemask for this subunit UINT32 m_mask; // mask (ff, ffff or ffffffff) INT32 m_offset; // offset to add to the address UINT32 m_multiplier; // multiplier to the pre-split address @@ -1555,30 +1568,30 @@ void memory_manager::initialize() // if there is a configuration for this space, we need an address space const address_space_config *spaceconfig = memory.space_config(spacenum); if (spaceconfig != nullptr) - m_spacelist.append(address_space::allocate(*this, *spaceconfig, memory, spacenum)); + address_space::allocate(m_spacelist,*this, *spaceconfig, memory, spacenum); } // construct and preprocess the address_map for each space - for (address_space &space : m_spacelist) - space.prepare_map(); + for (auto &space : m_spacelist) + space->prepare_map(); // create the handlers from the resulting address maps - for (address_space &space : m_spacelist) - space.populate_from_map(); + for (auto &space : m_spacelist) + space->populate_from_map(); // allocate memory needed to back each address space - for (address_space &space : m_spacelist) - space.allocate_memory(); + for (auto &space : m_spacelist) + space->allocate_memory(); // find all the allocated pointers - for (address_space &space : m_spacelist) - space.locate_memory(); + for (auto &space : m_spacelist) + space->locate_memory(); // disable logging of unmapped access when no one receives it - for (address_space &space : m_spacelist) + for (auto &space : m_spacelist) { if (!machine().options().log() && !machine().options().oslog() && !(machine().debug_flags & DEBUG_FLAG_ENABLED)) - space.set_log_unmap(false); + space->set_log_unmap(false); } // register a callback to reset banks when reloading state @@ -1604,19 +1617,19 @@ void memory_manager::dump(FILE *file) return; // loop over address spaces - for (address_space &space : m_spacelist) + for (auto &space : m_spacelist) { fprintf(file, "\n\n" "====================================================\n" "Device '%s' %s address space read handler dump\n" - "====================================================\n", space.device().tag(), space.name()); - space.dump_map(file, ROW_READ); + "====================================================\n", space->device().tag(), space->name()); + space->dump_map(file, ROW_READ); fprintf(file, "\n\n" "====================================================\n" "Device '%s' %s address space write handler dump\n" - "====================================================\n", space.device().tag(), space.name()); - space.dump_map(file, ROW_WRITE); + "====================================================\n", space->device().tag(), space->name()); + space->dump_map(file, ROW_WRITE); } } @@ -1627,14 +1640,14 @@ void memory_manager::dump(FILE *file) memory_region *memory_manager::region_alloc(const char *name, UINT32 length, UINT8 width, endianness_t endian) { -osd_printf_verbose("Region '%s' created\n", name); + osd_printf_verbose("Region '%s' created\n", name); // make sure we don't have a region of the same name; also find the end of the list - memory_region *info = m_regionlist.find(name); - if (info != nullptr) + if (m_regionlist.find(name) != m_regionlist.end()) fatalerror("region_alloc called with duplicate region name \"%s\"\n", name); // allocate the region - return &m_regionlist.append(name, *global_alloc(memory_region(machine(), name, length, width, endian))); + m_regionlist.emplace(name, std::make_unique<memory_region>(machine(), name, length, width, endian)); + return m_regionlist.find(name)->second.get(); } @@ -1644,7 +1657,7 @@ osd_printf_verbose("Region '%s' created\n", name); void memory_manager::region_free(const char *name) { - m_regionlist.remove(name); + m_regionlist.erase(name); } @@ -1658,9 +1671,9 @@ memory_region *memory_manager::region_containing(const void *memory, offs_t byte const UINT8 *data = reinterpret_cast<const UINT8 *>(memory); // look through the region list and return the first match - for (memory_region ®ion : m_regionlist) - if (data >= region.base() && (data + bytes) <= region.end()) - return ®ion; + for (auto ®ion : m_regionlist) + if (data >= region.second->base() && (data + bytes) <= region.second->end()) + return region.second.get(); // didn't find one return nullptr; @@ -1692,9 +1705,9 @@ static void generate_memdump(running_machine &machine) void memory_manager::bank_reattach() { // for each non-anonymous bank, explicitly reset its entry - for (memory_bank &bank : m_banklist) - if (!bank.anonymous() && bank.entry() != BANK_ENTRY_UNSPECIFIED) - bank.set_entry(bank.entry()); + for (auto &bank : m_banklist) + if (!bank.second->anonymous() && bank.second->entry() != BANK_ENTRY_UNSPECIFIED) + bank.second->set_entry(bank.second->entry()); } @@ -1708,8 +1721,7 @@ void memory_manager::bank_reattach() //------------------------------------------------- address_space::address_space(memory_manager &manager, device_memory_interface &memory, address_spacenum spacenum, bool large) - : m_next(nullptr), - m_config(*memory.space_config(spacenum)), + : m_config(*memory.space_config(spacenum)), m_device(memory.device()), m_addrmask(0xffffffffUL >> (32 - m_config.m_addrbus_width)), m_bytemask(address_to_byte_end(m_addrmask)), @@ -1744,7 +1756,7 @@ address_space::~address_space() // allocate - static smart allocator of subtypes //------------------------------------------------- -address_space &address_space::allocate(memory_manager &manager, const address_space_config &config, device_memory_interface &memory, address_spacenum spacenum) +void address_space::allocate(std::vector<std::unique_ptr<address_space>> &space_list,memory_manager &manager, const address_space_config &config, device_memory_interface &memory, address_spacenum spacenum) { // allocate one of the appropriate type bool large = (config.addr2byte_end(0xffffffffUL >> (32 - config.m_addrbus_width)) >= (1 << 18)); @@ -1754,68 +1766,73 @@ address_space &address_space::allocate(memory_manager &manager, const address_sp case 8: if (config.endianness() == ENDIANNESS_LITTLE) { - if (large) - return *global_alloc(address_space_8le_large(manager, memory, spacenum)); + if (large) + space_list.push_back(std::make_unique<address_space_8le_large>(manager, memory, spacenum)); else - return *global_alloc(address_space_8le_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_8le_small>(manager, memory, spacenum)); } else { - if (large) - return *global_alloc(address_space_8be_large(manager, memory, spacenum)); + if (large) + space_list.push_back(std::make_unique<address_space_8be_large>(manager, memory, spacenum)); else - return *global_alloc(address_space_8be_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_8be_small>(manager, memory, spacenum)); } + break; case 16: if (config.endianness() == ENDIANNESS_LITTLE) { - if (large) - return *global_alloc(address_space_16le_large(manager, memory, spacenum)); + if (large) + space_list.push_back(std::make_unique<address_space_16le_large>(manager, memory, spacenum)); else - return *global_alloc(address_space_16le_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_16le_small>(manager, memory, spacenum)); } else { if (large) - return *global_alloc(address_space_16be_large(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_16be_large>(manager, memory, spacenum)); else - return *global_alloc(address_space_16be_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_16be_small>(manager, memory, spacenum)); } + break; case 32: if (config.endianness() == ENDIANNESS_LITTLE) { if (large) - return *global_alloc(address_space_32le_large(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_32le_large>(manager, memory, spacenum)); else - return *global_alloc(address_space_32le_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_32le_small>(manager, memory, spacenum)); } else { if (large) - return *global_alloc(address_space_32be_large(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_32be_large>(manager, memory, spacenum)); else - return *global_alloc(address_space_32be_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_32be_small>(manager, memory, spacenum)); } + break; case 64: if (config.endianness() == ENDIANNESS_LITTLE) { if (large) - return *global_alloc(address_space_64le_large(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_64le_large>(manager, memory, spacenum)); else - return *global_alloc(address_space_64le_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_64le_small>(manager, memory, spacenum)); } else { if (large) - return *global_alloc(address_space_64be_large(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_64be_large>(manager, memory, spacenum)); else - return *global_alloc(address_space_64be_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique<address_space_64be_small>(manager, memory, spacenum)); } - } - throw emu_fatalerror("Invalid width %d specified for address_space::allocate", config.data_width()); + break; + default: + throw emu_fatalerror("Invalid width %d specified for address_space::allocate", config.data_width()); + } } @@ -1841,6 +1858,133 @@ inline void address_space::adjust_addresses(offs_t &start, offs_t &end, offs_t & mirror = address_to_byte(mirror); } +void address_space::check_optimize_all(const char *function, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror) +{ + if (addrstart > addrend) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, start address is after the end address.\n", function, addrstart, addrend, addrmask, addrmirror, addrselect); + if (addrstart & ~m_bytemask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, start address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, m_bytemask, addrstart & m_bytemask); + if (addrend & ~m_bytemask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, end address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, m_bytemask, addrend & m_bytemask); + + offs_t lowbits_mask = (m_config.data_width() >> (3 - m_config.m_addrbus_shift)) - 1; + if (addrstart & lowbits_mask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, start address has low bits set, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrstart & ~lowbits_mask); + if ((~addrend) & lowbits_mask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, end address has low bits unset, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrend | lowbits_mask); + + offs_t set_bits = addrstart | addrend; + offs_t changing_bits = addrstart ^ addrend; + // Round up to the nearest power-of-two-minus-one + changing_bits |= changing_bits >> 1; + changing_bits |= changing_bits >> 2; + changing_bits |= changing_bits >> 4; + changing_bits |= changing_bits >> 8; + changing_bits |= changing_bits >> 16; + + if (addrmask & ~m_bytemask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mask is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, m_bytemask, addrmask & m_bytemask); + if (addrmirror & ~m_bytemask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mirror is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, m_bytemask, addrmirror & m_bytemask); + if (addrselect & ~m_bytemask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, select is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, m_bytemask, addrselect & m_bytemask); + if (addrmask & ~changing_bits) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mask is trying to unmask an unchanging address bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrmask & changing_bits); + if (addrmirror & changing_bits) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mirror touches a changing address bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrmirror & ~changing_bits); + if (addrselect & changing_bits) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, select touches a changing address bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrselect & ~changing_bits); + if (addrmirror & set_bits) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mirror touches a set address bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrmirror & ~set_bits); + if (addrselect & set_bits) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, select touches a set address bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrselect & ~set_bits); + if (addrmirror & addrselect) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mirror touches a select bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrmirror & ~addrselect); + + nstart = addrstart; + nend = addrend; + nmask = (addrmask ? addrmask : changing_bits) | addrselect; + nmirror = addrmirror | addrselect; + if(nmirror && !(nstart & changing_bits) && !((~nend) & changing_bits)) { + // If the range covers the a complete power-of-two zone, it is + // possible to remove 1 bits from the mirror, pushing the end + // address. The mask will clamp, and installing the range + // will be faster. + while(nmirror & (changing_bits+1)) { + offs_t bit = nmirror & (changing_bits+1); + nmirror &= ~bit; + nend |= bit; + changing_bits |= bit; + } + } +} + +void address_space::check_optimize_mirror(const char *function, offs_t addrstart, offs_t addrend, offs_t addrmirror, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror) +{ + if (addrstart > addrend) + fatalerror("%s: In range %x-%x mirror %x, start address is after the end address.\n", function, addrstart, addrend, addrmirror); + if (addrstart & ~m_bytemask) + fatalerror("%s: In range %x-%x mirror %x, start address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmirror, m_bytemask, addrstart & m_bytemask); + if (addrend & ~m_bytemask) + fatalerror("%s: In range %x-%x mirror %x, end address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmirror, m_bytemask, addrend & m_bytemask); + + offs_t lowbits_mask = (m_config.data_width() >> (3 - m_config.m_addrbus_shift)) - 1; + if (addrstart & lowbits_mask) + fatalerror("%s: In range %x-%x mirror %x, start address has low bits set, did you mean %x ?\n", function, addrstart, addrend, addrmirror, addrstart & ~lowbits_mask); + if ((~addrend) & lowbits_mask) + fatalerror("%s: In range %x-%x mirror %x, end address has low bits unset, did you mean %x ?\n", function, addrstart, addrend, addrmirror, addrend | lowbits_mask); + + offs_t set_bits = addrstart | addrend; + offs_t changing_bits = addrstart ^ addrend; + // Round up to the nearest power-of-two-minus-one + changing_bits |= changing_bits >> 1; + changing_bits |= changing_bits >> 2; + changing_bits |= changing_bits >> 4; + changing_bits |= changing_bits >> 8; + changing_bits |= changing_bits >> 16; + + if (addrmirror & ~m_bytemask) + fatalerror("%s: In range %x-%x mirror %x, mirror is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmirror, m_bytemask, addrmirror & m_bytemask); + if (addrmirror & changing_bits) + fatalerror("%s: In range %x-%x mirror %x, mirror touches a changing address bit, did you mean %x ?\n", function, addrstart, addrend, addrmirror, addrmirror & ~changing_bits); + if (addrmirror & set_bits) + fatalerror("%s: In range %x-%x mirror %x, mirror touches a set address bit, did you mean %x ?\n", function, addrstart, addrend, addrmirror, addrmirror & ~set_bits); + + nstart = addrstart; + nend = addrend; + nmask = changing_bits; + nmirror = addrmirror; + + if(nmirror && !(nstart & changing_bits) && !((~nend) & changing_bits)) { + // If the range covers the a complete power-of-two zone, it is + // possible to remove 1 bits from the mirror, pushing the end + // address. The mask will clamp, and installing the range + // will be faster. + while(nmirror & (changing_bits+1)) { + offs_t bit = nmirror & (changing_bits+1); + nmirror &= ~bit; + nend |= bit; + changing_bits |= bit; + } + } +} + +void address_space::check_address(const char *function, offs_t addrstart, offs_t addrend) +{ + if (addrstart > addrend) + fatalerror("%s: In range %x-%x, start address is after the end address.\n", function, addrstart, addrend); + if (addrstart & ~m_bytemask) + fatalerror("%s: In range %x-%x, start address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, m_bytemask, addrstart & m_bytemask); + if (addrend & ~m_bytemask) + fatalerror("%s: In range %x-%x, end address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, m_bytemask, addrend & m_bytemask); + + offs_t lowbits_mask = (m_config.data_width() >> (3 - m_config.m_addrbus_shift)) - 1; + if (addrstart & lowbits_mask) + fatalerror("%s: In range %x-%x, start address has low bits set, did you mean %x ?\n", function, addrstart, addrend, addrstart & ~lowbits_mask); + if ((~addrend) & lowbits_mask) + fatalerror("%s: In range %x-%x, end address has low bits unset, did you mean %x ?\n", function, addrstart, addrend, addrend | lowbits_mask); +} + //------------------------------------------------- // prepare_map - allocate the address map and @@ -1882,11 +2026,10 @@ void address_space::prepare_map() { // if we can't find it, add it to our map std::string fulltag = entry.m_devbase.subtag(entry.m_share); - if (manager().m_sharelist.find(fulltag.c_str()) == nullptr) + if (manager().m_sharelist.find(fulltag.c_str()) == manager().m_sharelist.end()) { VPRINTF(("Creating share '%s' of length 0x%X\n", fulltag.c_str(), entry.m_byteend + 1 - entry.m_bytestart)); - auto share = global_alloc(memory_share(m_map->m_databits, entry.m_byteend + 1 - entry.m_bytestart, endianness())); - manager().m_sharelist.append(fulltag.c_str(), *share); + manager().m_sharelist.emplace(fulltag.c_str(), std::make_unique<memory_share>(m_map->m_databits, entry.m_byteend + 1 - entry.m_bytestart, endianness())); } } @@ -1989,44 +2132,44 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w // fall through to the RAM case otherwise case AMH_RAM: - install_ram_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, readorwrite, nullptr); + install_ram_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, readorwrite, nullptr); break; case AMH_NOP: - unmap_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, readorwrite, true); + unmap_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, readorwrite, true); break; case AMH_UNMAP: - unmap_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, readorwrite, false); + unmap_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, readorwrite, false); break; case AMH_DEVICE_DELEGATE: if (readorwrite == ROW_READ) switch (data.m_bits) { - case 8: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, read8_delegate(entry.m_rproto8, entry.m_devbase), data.m_mask); break; - case 16: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, read16_delegate(entry.m_rproto16, entry.m_devbase), data.m_mask); break; - case 32: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, read32_delegate(entry.m_rproto32, entry.m_devbase), data.m_mask); break; - case 64: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, read64_delegate(entry.m_rproto64, entry.m_devbase), data.m_mask); break; + case 8: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read8_delegate(entry.m_rproto8, entry.m_devbase), data.m_mask); break; + case 16: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read16_delegate(entry.m_rproto16, entry.m_devbase), data.m_mask); break; + case 32: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read32_delegate(entry.m_rproto32, entry.m_devbase), data.m_mask); break; + case 64: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read64_delegate(entry.m_rproto64, entry.m_devbase), data.m_mask); break; } else switch (data.m_bits) { - case 8: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, write8_delegate(entry.m_wproto8, entry.m_devbase), data.m_mask); break; - case 16: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, write16_delegate(entry.m_wproto16, entry.m_devbase), data.m_mask); break; - case 32: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, write32_delegate(entry.m_wproto32, entry.m_devbase), data.m_mask); break; - case 64: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, write64_delegate(entry.m_wproto64, entry.m_devbase), data.m_mask); break; + case 8: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write8_delegate(entry.m_wproto8, entry.m_devbase), data.m_mask); break; + case 16: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write16_delegate(entry.m_wproto16, entry.m_devbase), data.m_mask); break; + case 32: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write32_delegate(entry.m_wproto32, entry.m_devbase), data.m_mask); break; + case 64: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write64_delegate(entry.m_wproto64, entry.m_devbase), data.m_mask); break; } break; case AMH_PORT: - install_readwrite_port(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, + install_readwrite_port(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, (readorwrite == ROW_READ) ? data.m_tag : nullptr, (readorwrite == ROW_WRITE) ? data.m_tag : nullptr); break; case AMH_BANK: - install_bank_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, + install_bank_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, (readorwrite == ROW_READ) ? data.m_tag : nullptr, (readorwrite == ROW_WRITE) ? data.m_tag : nullptr); break; @@ -2043,7 +2186,7 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w void address_space::populate_map_entry_setoffset(const address_map_entry &entry) { install_setoffset_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, - entry.m_addrmirror, setoffset_delegate(entry.m_soproto, entry.m_devbase), entry.m_setoffsethd.m_mask); + entry.m_addrmirror, entry.m_addrselect, setoffset_delegate(entry.m_soproto, entry.m_devbase), entry.m_setoffsethd.m_mask); } //------------------------------------------------- @@ -2054,20 +2197,20 @@ void address_space::populate_map_entry_setoffset(const address_map_entry &entry) void address_space::allocate_memory() { - simple_list<memory_block> &blocklist = manager().m_blocklist; + auto &blocklist = manager().m_blocklist; // make a first pass over the memory map and track blocks with hardcoded pointers // we do this to make sure they are found by space_find_backing_memory first - memory_block *prev_memblock_tail = blocklist.last(); + int tail = blocklist.size(); for (address_map_entry &entry : m_map->m_entrylist) if (entry.m_memory != nullptr) - blocklist.append(*global_alloc(memory_block(*this, entry.m_bytestart, entry.m_byteend, entry.m_memory))); + blocklist.push_back(std::make_unique<memory_block>(*this, entry.m_bytestart, entry.m_byteend, entry.m_memory)); // loop over all blocks just allocated and assign pointers from them address_map_entry *unassigned = nullptr; - memory_block *first_new_block = (prev_memblock_tail != nullptr) ? prev_memblock_tail->next() : blocklist.first(); - for (memory_block *memblock = first_new_block; memblock != nullptr; memblock = memblock->next()) - unassigned = block_assign_intersecting(memblock->bytestart(), memblock->byteend(), memblock->data()); + + for (auto memblock = blocklist.begin() + tail; memblock != blocklist.end(); ++memblock) + unassigned = block_assign_intersecting(memblock->get()->bytestart(), memblock->get()->byteend(), memblock->get()->data()); // if we don't have an unassigned pointer yet, try to find one if (unassigned == nullptr) @@ -2108,10 +2251,11 @@ void address_space::allocate_memory() // we now have a block to allocate; do it offs_t curbytestart = curblockstart * MEMORY_BLOCK_CHUNK; offs_t curbyteend = curblockend * MEMORY_BLOCK_CHUNK + (MEMORY_BLOCK_CHUNK - 1); - memory_block &block = blocklist.append(*global_alloc(memory_block(*this, curbytestart, curbyteend))); - + auto block = std::make_unique<memory_block>(*this, curbytestart, curbyteend); + // assign memory that intersected the new block - unassigned = block_assign_intersecting(curbytestart, curbyteend, block.data()); + unassigned = block_assign_intersecting(curbytestart, curbyteend, block.get()->data()); + blocklist.push_back(std::move(block)); } } @@ -2124,21 +2268,21 @@ void address_space::allocate_memory() void address_space::locate_memory() { // once this is done, find the starting bases for the banks - for (memory_bank &bank : manager().banks()) - if (bank.base() == nullptr && bank.references_space(*this, ROW_READWRITE)) + for (auto &bank : manager().banks()) + if (bank.second->base() == nullptr && bank.second->references_space(*this, ROW_READWRITE)) { // set the initial bank pointer for (address_map_entry &entry : m_map->m_entrylist) - if (entry.m_bytestart == bank.bytestart() && entry.m_memory != nullptr) + if (entry.m_bytestart == bank.second->bytestart() && entry.m_memory != nullptr) { - bank.set_base(entry.m_memory); - VPRINTF(("assigned bank '%s' pointer to memory from range %08X-%08X [%p]\n", bank.tag(), entry.m_addrstart, entry.m_addrend, entry.m_memory)); + bank.second->set_base(entry.m_memory); + VPRINTF(("assigned bank '%s' pointer to memory from range %08X-%08X [%p]\n", bank.second->tag(), entry.m_addrstart, entry.m_addrend, entry.m_memory)); break; } // if the entry was set ahead of time, override the automatically found pointer - if (!bank.anonymous() && bank.entry() != BANK_ENTRY_UNSPECIFIED) - bank.set_entry(bank.entry()); + if (!bank.second->anonymous() && bank.second->entry() != BANK_ENTRY_UNSPECIFIED) + bank.second->set_entry(bank.second->entry()); } } @@ -2161,10 +2305,10 @@ address_map_entry *address_space::block_assign_intersecting(offs_t bytestart, of if (entry.m_memory == nullptr && entry.m_share != nullptr) { std::string fulltag = entry.m_devbase.subtag(entry.m_share); - memory_share *share = manager().shares().find(fulltag.c_str()); - if (share != nullptr && share->ptr() != nullptr) + auto share = manager().shares().find(fulltag.c_str()); + if (share != manager().shares().end() && share->second->ptr() != nullptr) { - entry.m_memory = share->ptr(); + entry.m_memory = share->second->ptr(); VPRINTF(("memory range %08X-%08X -> shared_ptr '%s' [%p]\n", entry.m_addrstart, entry.m_addrend, entry.m_share, entry.m_memory)); } else @@ -2184,10 +2328,10 @@ address_map_entry *address_space::block_assign_intersecting(offs_t bytestart, of if (entry.m_memory != nullptr && entry.m_share != nullptr) { std::string fulltag = entry.m_devbase.subtag(entry.m_share); - memory_share *share = manager().shares().find(fulltag.c_str()); - if (share != nullptr && share->ptr() == nullptr) + auto share = manager().shares().find(fulltag.c_str()); + if (share != manager().shares().end() && share->second->ptr() == nullptr) { - share->set_ptr(entry.m_memory); + share->second->set_ptr(entry.m_memory); VPRINTF(("setting shared_ptr '%s' = %p\n", entry.m_share, entry.m_memory)); } } @@ -2251,21 +2395,24 @@ void address_space::dump_map(FILE *file, read_or_write readorwrite) // unmap - unmap a section of address space //------------------------------------------------- -void address_space::unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, bool quiet) +void address_space::unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, bool quiet) { - VPRINTF(("address_space::unmap(%s-%s mask=%s mirror=%s, %s, %s)\n", + VPRINTF(("address_space::unmap(%s-%s mirror=%s, %s, %s)\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), + core_i64_hex_format(addrmirror, m_addrchars), (readorwrite == ROW_READ) ? "read" : (readorwrite == ROW_WRITE) ? "write" : (readorwrite == ROW_READWRITE) ? "read/write" : "??", quiet ? "quiet" : "normal")); + offs_t nstart, nend, nmask, nmirror; + check_optimize_mirror("unmap_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); + // read space if (readorwrite == ROW_READ || readorwrite == ROW_READWRITE) - read().map_range(addrstart, addrend, addrmask, addrmirror, quiet ? STATIC_NOP : STATIC_UNMAP); + read().map_range(nstart, nend, nmask, nmirror, quiet ? STATIC_NOP : STATIC_UNMAP); // write space if (readorwrite == ROW_WRITE || readorwrite == ROW_READWRITE) - write().map_range(addrstart, addrend, addrmask, addrmirror, quiet ? STATIC_NOP : STATIC_UNMAP); + write().map_range(nstart, nend, nmask, nmirror, quiet ? STATIC_NOP : STATIC_UNMAP); } @@ -2276,6 +2423,7 @@ void address_space::unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrm void address_space::install_device_delegate(offs_t addrstart, offs_t addrend, device_t &device, address_map_delegate &delegate, int bits, UINT64 unitmask) { + check_address("install_device_delegate", addrstart, addrend); address_map map(*this, addrstart, addrend, bits, unitmask, device, delegate); map.uplift_submaps(machine(), m_device, device, endianness()); populate_from_map(&map); @@ -2288,13 +2436,16 @@ void address_space::install_device_delegate(offs_t addrstart, offs_t addrend, de // handler into this address space //------------------------------------------------- -void address_space::install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag, const char *wtag) +void address_space::install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag, const char *wtag) { - VPRINTF(("address_space::install_readwrite_port(%s-%s mask=%s mirror=%s, read=\"%s\" / write=\"%s\")\n", + VPRINTF(("address_space::install_readwrite_port(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), + core_i64_hex_format(addrmirror, m_addrchars), (rtag != nullptr) ? rtag : "(none)", (wtag != nullptr) ? wtag : "(none)")); + offs_t nstart, nend, nmask, nmirror; + check_optimize_mirror("install_readwrite_port", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); + // read handler if (rtag != nullptr) { @@ -2304,7 +2455,7 @@ void address_space::install_readwrite_port(offs_t addrstart, offs_t addrend, off throw emu_fatalerror("Attempted to map non-existent port '%s' for read in space %s of device '%s'\n", rtag, m_name, m_device.tag()); // map the range and set the ioport - read().handler_map_range(addrstart, addrend, addrmask, addrmirror).set_ioport(*port); + read().handler_map_range(nstart, nend, nmask, nmirror).set_ioport(*port); } if (wtag != nullptr) @@ -2315,7 +2466,7 @@ void address_space::install_readwrite_port(offs_t addrstart, offs_t addrend, off fatalerror("Attempted to map non-existent port '%s' for write in space %s of device '%s'\n", wtag, m_name, m_device.tag()); // map the range and set the ioport - write().handler_map_range(addrstart, addrend, addrmask, addrmirror).set_ioport(*port); + write().handler_map_range(nstart, nend, nmask, nmirror).set_ioport(*port); } // update the memory dump @@ -2328,27 +2479,30 @@ void address_space::install_readwrite_port(offs_t addrstart, offs_t addrend, off // mapping to a particular bank //------------------------------------------------- -void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag, const char *wtag) +void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag, const char *wtag) { - VPRINTF(("address_space::install_readwrite_bank(%s-%s mask=%s mirror=%s, read=\"%s\" / write=\"%s\")\n", + VPRINTF(("address_space::install_readwrite_bank(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), + core_i64_hex_format(addrmirror, m_addrchars), (rtag != nullptr) ? rtag : "(none)", (wtag != nullptr) ? wtag : "(none)")); + offs_t nstart, nend, nmask, nmirror; + check_optimize_mirror("install_bank_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); + // map the read bank if (rtag != nullptr) { std::string fulltag = device().siblingtag(rtag); - memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmask, addrmirror, ROW_READ); - read().map_range(addrstart, addrend, addrmask, addrmirror, bank.index()); + memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmirror, ROW_READ); + read().map_range(nstart, nend, nmask, nmirror, bank.index()); } // map the write bank if (wtag != nullptr) { std::string fulltag = device().siblingtag(wtag); - memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmask, addrmirror, ROW_WRITE); - write().map_range(addrstart, addrend, addrmask, addrmirror, bank.index()); + memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmirror, ROW_WRITE); + write().map_range(nstart, nend, nmask, nmirror, bank.index()); } // update the memory dump @@ -2356,23 +2510,26 @@ void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_ } -void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank) +void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank) { - VPRINTF(("address_space::install_readwrite_bank(%s-%s mask=%s mirror=%s, read=\"%s\" / write=\"%s\")\n", + VPRINTF(("address_space::install_readwrite_bank(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), + core_i64_hex_format(addrmirror, m_addrchars), (rbank != nullptr) ? rbank->tag() : "(none)", (wbank != nullptr) ? wbank->tag() : "(none)")); + offs_t nstart, nend, nmask, nmirror; + check_optimize_mirror("install_bank_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); + // map the read bank if (rbank != nullptr) { - read().map_range(addrstart, addrend, addrmask, addrmirror, rbank->index()); + read().map_range(nstart, nend, nmask, nmirror, rbank->index()); } // map the write bank if (wbank != nullptr) { - write().map_range(addrstart, addrend, addrmask, addrmirror, wbank->index()); + write().map_range(nstart, nend, nmask, nmirror, wbank->index()); } // update the memory dump @@ -2385,20 +2542,23 @@ void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_ // RAM region into the given address space //------------------------------------------------- -void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, void *baseptr) +void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, void *baseptr) { - VPRINTF(("address_space::install_ram_generic(%s-%s mask=%s mirror=%s, %s, %p)\n", + VPRINTF(("address_space::install_ram_generic(%s-%s mirror=%s, %s, %p)\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), + core_i64_hex_format(addrmirror, m_addrchars), (readorwrite == ROW_READ) ? "read" : (readorwrite == ROW_WRITE) ? "write" : (readorwrite == ROW_READWRITE) ? "read/write" : "??", baseptr)); + offs_t nstart, nend, nmask, nmirror; + check_optimize_mirror("install_ram_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); + // map for read if (readorwrite == ROW_READ || readorwrite == ROW_READWRITE) { // find a bank and map it - memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmask, addrmirror, ROW_READ); - read().map_range(addrstart, addrend, addrmask, addrmirror, bank.index()); + memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmirror, ROW_READ); + read().map_range(nstart, nend, nmask, nmirror, bank.index()); // if we are provided a pointer, set it if (baseptr != nullptr) @@ -2417,8 +2577,9 @@ void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t { if (machine().phase() >= MACHINE_PHASE_RESET) fatalerror("Attempted to call install_ram_generic() after initialization time without a baseptr!\n"); - memory_block &block = manager().m_blocklist.append(*global_alloc(memory_block(*this, address_to_byte(addrstart), address_to_byte_end(addrend)))); - bank.set_base(block.data()); + auto block = std::make_unique<memory_block>(*this, address_to_byte(addrstart), address_to_byte_end(addrend)); + bank.set_base(block.get()->data()); + manager().m_blocklist.push_back(std::move(block)); } } @@ -2426,8 +2587,8 @@ void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t if (readorwrite == ROW_WRITE || readorwrite == ROW_READWRITE) { // find a bank and map it - memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmask, addrmirror, ROW_WRITE); - write().map_range(addrstart, addrend, addrmask, addrmirror, bank.index()); + memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmirror, ROW_WRITE); + write().map_range(nstart, nend, nmask, nmirror, bank.index()); // if we are provided a pointer, set it if (baseptr != nullptr) @@ -2446,8 +2607,9 @@ void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t { if (machine().phase() >= MACHINE_PHASE_RESET) fatalerror("Attempted to call install_ram_generic() after initialization time without a baseptr!\n"); - memory_block &block = manager().m_blocklist.append(*global_alloc(memory_block(*this, address_to_byte(addrstart), address_to_byte_end(addrend)))); - bank.set_base(block.data()); + auto block = std::make_unique<memory_block>(*this, address_to_byte(addrstart), address_to_byte_end(addrend)); + bank.set_base(block.get()->data()); + manager().m_blocklist.push_back(std::move(block)); } } } @@ -2458,32 +2620,38 @@ void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t // delegate handlers for the space //------------------------------------------------- -void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_delegate handler, UINT64 unitmask) +void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate handler, UINT64 unitmask) { VPRINTF(("address_space::install_read_handler(%s-%s mask=%s mirror=%s, %s, %s)\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), handler.name(), core_i64_hex_format(unitmask, data_width() / 4))); - read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_read_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + + read().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write8_delegate handler, UINT64 unitmask) +void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8_delegate handler, UINT64 unitmask) { VPRINTF(("address_space::install_write_handler(%s-%s mask=%s mirror=%s, %s, %s)\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), handler.name(), core_i64_hex_format(unitmask, data_width() / 4))); - write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_write_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + + write().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask) +void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask) { - install_read_handler(addrstart, addrend, addrmask, addrmirror, rhandler, unitmask); - install_write_handler(addrstart, addrend, addrmask, addrmirror, whandler, unitmask); + install_read_handler(addrstart, addrend, addrmask, addrmirror, addrselect, rhandler, unitmask); + install_write_handler(addrstart, addrend, addrmask, addrmirror, addrselect, whandler, unitmask); } @@ -2492,22 +2660,26 @@ void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, // delegate handlers for the space //------------------------------------------------- -void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_delegate handler, UINT64 unitmask) +void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate handler, UINT64 unitmask) { - read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_read_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + read().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write16_delegate handler, UINT64 unitmask) +void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16_delegate handler, UINT64 unitmask) { - write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_write_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + write().handler_map_range(nstart, nend, nmask, addrmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask) +void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask) { - install_read_handler(addrstart, addrend, addrmask, addrmirror, rhandler, unitmask); - install_write_handler(addrstart, addrend, addrmask, addrmirror, whandler, unitmask); + install_read_handler(addrstart, addrend, addrmask, addrmirror, addrselect, rhandler, unitmask); + install_write_handler(addrstart, addrend, addrmask, addrmirror, addrselect, whandler, unitmask); } @@ -2516,22 +2688,26 @@ void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, // delegate handlers for the space //------------------------------------------------- -void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_delegate handler, UINT64 unitmask) +void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate handler, UINT64 unitmask) { - read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_read_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + read().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write32_delegate handler, UINT64 unitmask) +void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32_delegate handler, UINT64 unitmask) { - write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_write_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + write().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask) +void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask) { - install_read_handler(addrstart, addrend, addrmask, addrmirror, rhandler, unitmask); - install_write_handler(addrstart, addrend, addrmask, addrmirror, whandler, unitmask); + install_read_handler(addrstart, addrend, addrmask, addrmirror, addrselect, rhandler, unitmask); + install_write_handler(addrstart, addrend, addrmask, addrmirror, addrselect, whandler, unitmask); } @@ -2540,22 +2716,26 @@ void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, // delegate handlers for the space //------------------------------------------------- -void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_delegate handler, UINT64 unitmask) +void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate handler, UINT64 unitmask) { - read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_read_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + read().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write64_delegate handler, UINT64 unitmask) +void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64_delegate handler, UINT64 unitmask) { - write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_write_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + write().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask) +void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask) { - install_read_handler(addrstart, addrend, addrmask, addrmirror, rhandler, unitmask); - install_write_handler(addrstart, addrend, addrmask, addrmirror, whandler, unitmask); + install_read_handler(addrstart, addrend, addrmask, addrmirror, addrselect, rhandler, unitmask); + install_write_handler(addrstart, addrend, addrmask, addrmirror, addrselect, whandler, unitmask); } @@ -2563,14 +2743,16 @@ void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, // install_setoffset_handler - install set_offset delegate handlers for the space //----------------------------------------------------------------------- -void address_space::install_setoffset_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, setoffset_delegate handler, UINT64 unitmask) +void address_space::install_setoffset_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, setoffset_delegate handler, UINT64 unitmask) { VPRINTF(("address_space::install_setoffset_handler(%s-%s mask=%s mirror=%s, %s, %s)\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), handler.name(), core_i64_hex_format(unitmask, data_width() / 4))); - setoffset().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_setoffset_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + setoffset().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); } //************************************************************************** @@ -2606,11 +2788,11 @@ void *address_space::find_backing_memory(offs_t addrstart, offs_t addrend) } // if not found there, look in the allocated blocks - for (memory_block &block : manager().m_blocklist) - if (block.contains(*this, bytestart, byteend)) + for (auto &block : manager().m_blocklist) + if (block->contains(*this, bytestart, byteend)) { - VPRINTF(("found in allocated memory block %08X-%08X [%p]\n", block.bytestart(), block.byteend(), block.data() + (bytestart - block.bytestart()))); - return block.data() + bytestart - block.bytestart(); + VPRINTF(("found in allocated memory block %08X-%08X [%p]\n", block->bytestart(), block->byteend(), block->data() + (bytestart - block->bytestart()))); + return block->data() + bytestart - block->bytestart(); } VPRINTF(("did not find\n")); @@ -2630,8 +2812,8 @@ bool address_space::needs_backing_store(const address_map_entry &entry) if (entry.m_share != nullptr) { std::string fulltag = entry.m_devbase.subtag(entry.m_share); - memory_share *share = manager().shares().find(fulltag.c_str()); - if (share != nullptr && share->ptr() == nullptr) + auto share = manager().shares().find(fulltag.c_str()); + if (share != manager().shares().end() && share->second->ptr() == nullptr) return true; } @@ -2661,17 +2843,25 @@ bool address_space::needs_backing_store(const address_map_entry &entry) // read/write handler //------------------------------------------------- -memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite) +memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite) { // adjust the addresses, handling mirrors and such offs_t bytemirror = addrmirror; offs_t bytestart = addrstart; - offs_t bytemask = addrmask; + offs_t bytemask = 0; offs_t byteend = addrend; adjust_addresses(bytestart, byteend, bytemask, bytemirror); // look up the bank by name, or else by byte range - memory_bank *membank = (tag != nullptr) ? manager().banks().find(tag) : bank_find_anonymous(bytestart, byteend); + memory_bank *membank = nullptr; + if (tag != nullptr) { + auto bank = manager().banks().find(tag); + if (bank != manager().banks().end()) + membank = bank->second.get(); + } + else { + membank = bank_find_anonymous(bytestart, byteend); + } // if we don't have a bank yet, find a free one if (membank == nullptr) @@ -2687,13 +2877,14 @@ memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrst } // if no tag, create a unique one - membank = global_alloc(memory_bank(*this, banknum, bytestart, byteend, tag)); + auto bank = std::make_unique<memory_bank>(*this, banknum, bytestart, byteend, tag); std::string temptag; if (tag == nullptr) { - temptag = string_format("anon_%p", membank); + temptag = string_format("anon_%p", bank.get()); tag = temptag.c_str(); } - manager().m_banklist.append(tag, *membank); + manager().m_banklist.emplace(tag, std::move(bank)); + membank = manager().m_banklist.find(tag)->second.get(); } // add a reference for this space @@ -2709,9 +2900,9 @@ memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrst memory_bank *address_space::bank_find_anonymous(offs_t bytestart, offs_t byteend) const { // try to find an exact match - for (memory_bank &bank : manager().banks()) - if (bank.anonymous() && bank.references_space(*this, ROW_READWRITE) && bank.matches_exactly(bytestart, byteend)) - return &bank; + for (auto &bank : manager().banks()) + if (bank.second->anonymous() && bank.second->references_space(*this, ROW_READWRITE) && bank.second->matches_exactly(bytestart, byteend)) + return bank.second.get(); // not found return nullptr; @@ -2921,7 +3112,7 @@ void address_table::setup_range_masked(offs_t addrstart, offs_t addrend, offs_t m_space.m_direct->force_update(entry); } - // Ranges in range_partial must duplicated then partially changed + // Ranges in range_partial must be duplicated then partially changed if (!range_partial.empty()) { for (std::map<UINT16, std::list<subrange> >::const_iterator i = range_partial.begin(); i != range_partial.end(); ++i) @@ -2937,10 +3128,7 @@ void address_table::setup_range_masked(offs_t addrstart, offs_t addrend, offs_t // Get the original handler handler_entry *base_entry = &handler(i->first); - // Verify it is compatible enough with ours given what we can - // support. - if (base_entry->bytemask() != bytemask) - throw emu_fatalerror("Handlers on different subunits of the same address with different address masks are not supported."); + offs_t previous_bytemask = base_entry->bytemask(); // Grab a new handler and copy it there UINT16 entry = get_free_handler(); @@ -2957,6 +3145,8 @@ void address_table::setup_range_masked(offs_t addrstart, offs_t addrend, offs_t for (const auto & elem : i->second) populate_range(elem.start, elem.end, entry); + curentry.expand_bytemask(previous_bytemask); + // Add it in the "to be setup" list entries.push_back(entry); @@ -3519,9 +3709,9 @@ const char *address_table::handler_name(UINT16 entry) const { // banks have names if (entry >= STATIC_BANK1 && entry <= STATIC_BANKMAX) - for (memory_bank &info : m_space.manager().banks()) - if (info.index() == entry) - return info.name(); + for (auto &info : m_space.manager().banks()) + if (info.second->index() == entry) + return info.second->name(); // constant strings for static entries if (entry == STATIC_INVALID) return "invalid"; @@ -3770,22 +3960,23 @@ direct_read_data::direct_range *direct_read_data::find_range(offs_t byteaddress, entry = m_space.read().lookup_live_nowp(byteaddress); // scan our table - for (direct_range &range : m_rangelist[entry]) + for (auto &range : m_rangelist[entry]) if (byteaddress >= range.m_bytestart && byteaddress <= range.m_byteend) return ⦥ // didn't find out; allocate a new one - direct_range *range = m_freerangelist.first(); - if (range != nullptr) - m_freerangelist.detach(*range); - else - range = global_alloc(direct_range); + direct_range range; + if (m_freerangelist.size() > 0) + { + range = m_freerangelist.front(); + m_freerangelist.pop_front(); + } // fill in the range - m_space.read().derive_range(byteaddress, range->m_bytestart, range->m_byteend); - m_rangelist[entry].prepend(*range); + m_space.read().derive_range(byteaddress, range.m_bytestart, range.m_byteend); + m_rangelist[entry].push_front(range); - return range; + return &m_rangelist[entry].front(); } @@ -3800,16 +3991,13 @@ void direct_read_data::remove_intersecting_ranges(offs_t bytestart, offs_t bytee for (auto & elem : m_rangelist) { // loop over all ranges in this entry's list - direct_range *nextrange; - for (direct_range *range = elem.first(); range != nullptr; range = nextrange) + for (std::list<direct_range>::iterator range = elem.begin(); range!=elem.end();++range) { - nextrange = range->next(); - // if we intersect, remove and add to the free range list if (bytestart <= range->m_byteend && byteend >= range->m_bytestart) { - elem.detach(*range); - m_freerangelist.prepend(*range); + m_freerangelist.push_front(*range); + elem.erase(range); } } } @@ -3854,8 +4042,7 @@ void direct_read_data::explicit_configure(offs_t bytestart, offs_t byteend, offs //------------------------------------------------- memory_block::memory_block(address_space &space, offs_t bytestart, offs_t byteend, void *memory) - : m_next(nullptr), - m_machine(space.machine()), + : m_machine(space.machine()), m_space(space), m_bytestart(bytestart), m_byteend(byteend), @@ -3912,8 +4099,7 @@ memory_block::~memory_block() //------------------------------------------------- memory_bank::memory_bank(address_space &space, int index, offs_t bytestart, offs_t byteend, const char *tag) - : m_next(nullptr), - m_machine(space.machine()), + : m_machine(space.machine()), m_baseptr(space.manager().bank_pointer_addr(index)), m_index(index), m_anonymous(tag == nullptr), @@ -3955,8 +4141,8 @@ memory_bank::~memory_bank() bool memory_bank::references_space(const address_space &space, read_or_write readorwrite) const { - for (bank_reference &ref : m_reflist) - if (ref.matches(space, readorwrite)) + for (auto &ref : m_reflist) + if (ref->matches(space, readorwrite)) return true; return false; } @@ -3972,7 +4158,7 @@ void memory_bank::add_reference(address_space &space, read_or_write readorwrite) // if we already have a reference, skip it if (references_space(space, readorwrite)) return; - m_reflist.append(*global_alloc(bank_reference(space, readorwrite))); + m_reflist.push_back(std::make_unique<bank_reference>(space, readorwrite)); } @@ -3984,8 +4170,8 @@ void memory_bank::add_reference(address_space &space, read_or_write readorwrite) void memory_bank::invalidate_references() { // invalidate all the direct references to any referenced address spaces - for (bank_reference &ref : m_reflist) - ref.space().direct().force_update(); + for (auto &ref : m_reflist) + ref->space().direct().force_update(); } @@ -4086,8 +4272,7 @@ void memory_bank::configure_entries(int startentry, int numentries, void *base, //------------------------------------------------- memory_region::memory_region(running_machine &machine, const char *name, UINT32 length, UINT8 width, endianness_t endian) - : m_machine(machine), - m_next(nullptr), + : m_machine(machine), m_name(name), m_buffer(length), m_endianness(endian), @@ -4205,6 +4390,7 @@ void handler_entry::configure_subunits(UINT64 handlermask, int handlerbits, int UINT32 shift = (unitnum^shift_xor_mask) * handlerbits; if (((handlermask >> shift) & unitmask) != 0) { + m_subunit_infos[m_subunits].m_bytemask = m_bytemask; m_subunit_infos[m_subunits].m_mask = unitmask; m_subunit_infos[m_subunits].m_offset = cur_offset++; m_subunit_infos[m_subunits].m_size = handlerbits; @@ -4293,11 +4479,12 @@ void handler_entry::description(char *buffer) const { if (i) *buffer++ = ' '; - buffer += sprintf (buffer, "%d:%d:%x:%d:%s", + buffer += sprintf (buffer, "%d:%d:%x:%d:%x:%s", m_subunit_infos[i].m_size, m_subunit_infos[i].m_shift, m_subunit_infos[i].m_offset, m_subunit_infos[i].m_multiplier, + m_subunit_infos[i].m_bytemask, subunit_name(i)); } } @@ -4544,7 +4731,7 @@ UINT16 handler_entry_read::read_stub_16(address_space &space, offs_t offset, UIN { offs_t aoffset = offset * si.m_multiplier + si.m_offset; UINT8 val; - val = m_subread[index].r8(space, aoffset, submask); + val = m_subread[index].r8(space, aoffset & si.m_bytemask, submask); result |= val << si.m_shift; } } @@ -4571,10 +4758,10 @@ UINT32 handler_entry_read::read_stub_32(address_space &space, offs_t offset, UIN switch (si.m_size) { case 8: - val = m_subread[index].r8(space, aoffset, submask); + val = m_subread[index].r8(space, aoffset & si.m_bytemask, submask); break; case 16: - val = m_subread[index].r16(space, aoffset, submask); + val = m_subread[index].r16(space, aoffset & si.m_bytemask, submask); break; } result |= val << si.m_shift; @@ -4603,13 +4790,13 @@ UINT64 handler_entry_read::read_stub_64(address_space &space, offs_t offset, UIN switch (si.m_size) { case 8: - val = m_subread[index].r8(space, aoffset, submask); + val = m_subread[index].r8(space, aoffset & si.m_bytemask, submask); break; case 16: - val = m_subread[index].r16(space, aoffset, submask); + val = m_subread[index].r16(space, aoffset & si.m_bytemask, submask); break; case 32: - val = m_subread[index].r32(space, aoffset, submask); + val = m_subread[index].r32(space, aoffset & si.m_bytemask, submask); break; } result |= UINT64(val) << si.m_shift; @@ -4837,7 +5024,7 @@ void handler_entry_write::write_stub_16(address_space &space, offs_t offset, UIN { offs_t aoffset = offset * si.m_multiplier + si.m_offset; UINT8 adata = data >> si.m_shift; - m_subwrite[index].w8(space, aoffset, adata, submask); + m_subwrite[index].w8(space, aoffset & si.m_bytemask, adata, submask); } } } @@ -4861,10 +5048,10 @@ void handler_entry_write::write_stub_32(address_space &space, offs_t offset, UIN switch (si.m_size) { case 8: - m_subwrite[index].w8(space, aoffset, adata, submask); + m_subwrite[index].w8(space, aoffset & si.m_bytemask, adata, submask); break; case 16: - m_subwrite[index].w16(space, aoffset, adata, submask); + m_subwrite[index].w16(space, aoffset & si.m_bytemask, adata, submask); break; } } @@ -4890,13 +5077,13 @@ void handler_entry_write::write_stub_64(address_space &space, offs_t offset, UIN switch (si.m_size) { case 8: - m_subwrite[index].w8(space, aoffset, adata, submask); + m_subwrite[index].w8(space, aoffset & si.m_bytemask, adata, submask); break; case 16: - m_subwrite[index].w16(space, aoffset, adata, submask); + m_subwrite[index].w16(space, aoffset & si.m_bytemask, adata, submask); break; case 32: - m_subwrite[index].w32(space, aoffset, adata, submask); + m_subwrite[index].w32(space, aoffset & si.m_bytemask, adata, submask); break; } } diff --git a/src/emu/emumem.h b/src/emu/emumem.h index 25d9e7c80c8..1bb4a2e278a 100644 --- a/src/emu/emumem.h +++ b/src/emu/emumem.h @@ -147,16 +147,14 @@ public: { public: // construction - direct_range() - : m_next(nullptr), - m_bytestart(0), - m_byteend(~0) { } - - // getters - direct_range *next() const { return m_next; } + direct_range(): m_bytestart(0),m_byteend(~0) { } + + inline bool operator==(direct_range val) noexcept + { // return true if _Left and _Right identify the same thread + return (m_bytestart == val.m_bytestart) && (m_byteend == val.m_byteend); + } // internal state - direct_range * m_next; // pointer to the next range in the list offs_t m_bytestart; // starting byte offset of the range offs_t m_byteend; // ending byte offset of the range }; @@ -200,8 +198,8 @@ private: offs_t m_bytestart; // minimum valid byte address offs_t m_byteend; // maximum valid byte address UINT16 m_entry; // live entry - simple_list<direct_range> m_rangelist[TOTAL_MEMORY_BANKS]; // list of ranges for each entry - simple_list<direct_range> m_freerangelist; // list of recycled range entries + std::list<direct_range> m_rangelist[TOTAL_MEMORY_BANKS]; // list of ranges for each entry + std::list<direct_range> m_freerangelist; // list of recycled range entries direct_update_delegate m_directupdate; // fast direct-access update callback }; @@ -258,20 +256,17 @@ class address_space friend class address_table_write; friend class address_table_setoffset; friend class direct_read_data; - friend class simple_list<address_space>; - friend resource_pool_object<address_space>::~resource_pool_object(); protected: // construction/destruction address_space(memory_manager &manager, device_memory_interface &memory, address_spacenum spacenum, bool large); - virtual ~address_space(); public: + virtual ~address_space(); // public allocator - static address_space &allocate(memory_manager &manager, const address_space_config &config, device_memory_interface &memory, address_spacenum spacenum); + static void allocate(std::vector<std::unique_ptr<address_space>> &space_list, memory_manager &manager, const address_space_config &config, device_memory_interface &memory, address_spacenum spacenum); // getters - address_space *next() const { return m_next; } memory_manager &manager() const { return m_manager; } device_t &device() const { return m_device; } running_machine &machine() const { return m_machine; } @@ -354,48 +349,40 @@ public: direct_update_delegate set_direct_update_handler(direct_update_delegate function) { return m_direct->set_direct_update(function); } // umap ranges (short form) - void unmap_read(offs_t addrstart, offs_t addrend) { unmap_read(addrstart, addrend, 0, 0); } - void unmap_write(offs_t addrstart, offs_t addrend) { unmap_write(addrstart, addrend, 0, 0); } - void unmap_readwrite(offs_t addrstart, offs_t addrend) { unmap_readwrite(addrstart, addrend, 0, 0); } - void nop_read(offs_t addrstart, offs_t addrend) { nop_read(addrstart, addrend, 0, 0); } - void nop_write(offs_t addrstart, offs_t addrend) { nop_write(addrstart, addrend, 0, 0); } - void nop_readwrite(offs_t addrstart, offs_t addrend) { nop_readwrite(addrstart, addrend, 0, 0); } - - // umap ranges (with mirror/mask) - void unmap_read(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_READ, false); } - void unmap_write(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_WRITE, false); } - void unmap_readwrite(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_READWRITE, false); } - void nop_read(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_READ, true); } - void nop_write(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_WRITE, true); } - void nop_readwrite(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_READWRITE, true); } + void unmap_read(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_READ, false); } + void unmap_write(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_WRITE, false); } + void unmap_readwrite(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_READWRITE, false); } + void nop_read(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_READ, true); } + void nop_write(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_WRITE, true); } + void nop_readwrite(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_READWRITE, true); } // install ports, banks, RAM (short form) - void install_read_port(offs_t addrstart, offs_t addrend, const char *rtag) { install_read_port(addrstart, addrend, 0, 0, rtag); } - void install_write_port(offs_t addrstart, offs_t addrend, const char *wtag) { install_write_port(addrstart, addrend, 0, 0, wtag); } - void install_readwrite_port(offs_t addrstart, offs_t addrend, const char *rtag, const char *wtag) { install_readwrite_port(addrstart, addrend, 0, 0, rtag, wtag); } - void install_read_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_read_bank(addrstart, addrend, 0, 0, tag); } - void install_write_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_write_bank(addrstart, addrend, 0, 0, tag); } - void install_readwrite_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_readwrite_bank(addrstart, addrend, 0, 0, tag); } - void install_read_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_read_bank(addrstart, addrend, 0, 0, bank); } - void install_write_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_write_bank(addrstart, addrend, 0, 0, bank); } - void install_readwrite_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_readwrite_bank(addrstart, addrend, 0, 0, bank); } - void install_rom(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_rom(addrstart, addrend, 0, 0, baseptr); } - void install_writeonly(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_writeonly(addrstart, addrend, 0, 0, baseptr); } - void install_ram(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_ram(addrstart, addrend, 0, 0, baseptr); } + void install_read_port(offs_t addrstart, offs_t addrend, const char *rtag) { install_read_port(addrstart, addrend, 0, rtag); } + void install_write_port(offs_t addrstart, offs_t addrend, const char *wtag) { install_write_port(addrstart, addrend, 0, wtag); } + void install_readwrite_port(offs_t addrstart, offs_t addrend, const char *rtag, const char *wtag) { install_readwrite_port(addrstart, addrend, 0, rtag, wtag); } + void install_read_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_read_bank(addrstart, addrend, 0, tag); } + void install_write_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_write_bank(addrstart, addrend, 0, tag); } + void install_readwrite_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_readwrite_bank(addrstart, addrend, 0, tag); } + void install_read_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_read_bank(addrstart, addrend, 0, bank); } + void install_write_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_write_bank(addrstart, addrend, 0, bank); } + void install_readwrite_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_readwrite_bank(addrstart, addrend, 0, bank); } + void install_rom(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_rom(addrstart, addrend, 0, baseptr); } + void install_writeonly(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_writeonly(addrstart, addrend, 0, baseptr); } + void install_ram(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_ram(addrstart, addrend, 0, baseptr); } // install ports, banks, RAM (with mirror/mask) - void install_read_port(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag) { install_readwrite_port(addrstart, addrend, addrmask, addrmirror, rtag, nullptr); } - void install_write_port(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *wtag) { install_readwrite_port(addrstart, addrend, addrmask, addrmirror, nullptr, wtag); } - void install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag, const char *wtag); - void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, tag, nullptr); } - void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, nullptr, tag); } - void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, tag, tag); } - void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, bank, nullptr); } - void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, nullptr, bank); } - void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, bank, bank); } - void install_rom(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmask, addrmirror, ROW_READ, baseptr); } - void install_writeonly(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmask, addrmirror, ROW_WRITE, baseptr); } - void install_ram(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmask, addrmirror, ROW_READWRITE, baseptr); } + void install_read_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag) { install_readwrite_port(addrstart, addrend, addrmirror, rtag, nullptr); } + void install_write_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *wtag) { install_readwrite_port(addrstart, addrend, addrmirror, nullptr, wtag); } + void install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag, const char *wtag); + void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, tag, nullptr); } + void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, nullptr, tag); } + void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, tag, tag); } + void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, bank, nullptr); } + void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, nullptr, bank); } + void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, bank, bank); } + void install_rom(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, ROW_READ, baseptr); } + void install_writeonly(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, ROW_WRITE, baseptr); } + void install_ram(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, ROW_READWRITE, baseptr); } // install device memory maps template <typename T> void install_device(offs_t addrstart, offs_t addrend, T &device, void (T::*map)(address_map &map, device_t &device), int bits = 0, UINT64 unitmask = 0) { @@ -406,36 +393,36 @@ public: void install_device_delegate(offs_t addrstart, offs_t addrend, device_t &device, address_map_delegate &map, int bits = 0, UINT64 unitmask = 0); // install setoffset handler - void install_setoffset_handler(offs_t addrstart, offs_t addrend, setoffset_delegate sohandler, UINT64 unitmask = 0) { install_setoffset_handler(addrstart, addrend, 0, 0, sohandler, unitmask); } - void install_setoffset_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, setoffset_delegate sohandler, UINT64 unitmask = 0); + void install_setoffset_handler(offs_t addrstart, offs_t addrend, setoffset_delegate sohandler, UINT64 unitmask = 0) { install_setoffset_handler(addrstart, addrend, 0, 0, 0, sohandler, unitmask); } + void install_setoffset_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, setoffset_delegate sohandler, UINT64 unitmask = 0); // install new-style delegate handlers (short form) - void install_read_handler(offs_t addrstart, offs_t addrend, read8_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, rhandler, unitmask); } - void install_write_handler(offs_t addrstart, offs_t addrend, write8_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, whandler, unitmask); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, rhandler, whandler, unitmask); } - void install_read_handler(offs_t addrstart, offs_t addrend, read16_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, rhandler, unitmask); } - void install_write_handler(offs_t addrstart, offs_t addrend, write16_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, whandler, unitmask); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, rhandler, whandler, unitmask); } - void install_read_handler(offs_t addrstart, offs_t addrend, read32_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, rhandler, unitmask); } - void install_write_handler(offs_t addrstart, offs_t addrend, write32_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, whandler, unitmask); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, rhandler, whandler, unitmask); } - void install_read_handler(offs_t addrstart, offs_t addrend, read64_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, rhandler, unitmask); } - void install_write_handler(offs_t addrstart, offs_t addrend, write64_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, whandler, unitmask); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, rhandler, whandler, unitmask); } + void install_read_handler(offs_t addrstart, offs_t addrend, read8_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask); } + void install_write_handler(offs_t addrstart, offs_t addrend, write8_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask); } + void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask); } + void install_read_handler(offs_t addrstart, offs_t addrend, read16_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask); } + void install_write_handler(offs_t addrstart, offs_t addrend, write16_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask); } + void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask); } + void install_read_handler(offs_t addrstart, offs_t addrend, read32_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask); } + void install_write_handler(offs_t addrstart, offs_t addrend, write32_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask); } + void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask); } + void install_read_handler(offs_t addrstart, offs_t addrend, read64_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask); } + void install_write_handler(offs_t addrstart, offs_t addrend, write64_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask); } + void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask); } // install new-style delegate handlers (with mirror/mask) - void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_delegate rhandler, UINT64 unitmask = 0); - void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write8_delegate whandler, UINT64 unitmask = 0); - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask = 0); - void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_delegate rhandler, UINT64 unitmask = 0); - void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write16_delegate whandler, UINT64 unitmask = 0); - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask = 0); - void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_delegate rhandler, UINT64 unitmask = 0); - void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write32_delegate whandler, UINT64 unitmask = 0); - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask = 0); - void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_delegate rhandler, UINT64 unitmask = 0); - void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write64_delegate whandler, UINT64 unitmask = 0); - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask = 0); + void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate rhandler, UINT64 unitmask = 0); + void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8_delegate whandler, UINT64 unitmask = 0); + void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask = 0); + void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, UINT64 unitmask = 0); + void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16_delegate whandler, UINT64 unitmask = 0); + void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask = 0); + void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, UINT64 unitmask = 0); + void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32_delegate whandler, UINT64 unitmask = 0); + void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask = 0); + void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate rhandler, UINT64 unitmask = 0); + void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64_delegate whandler, UINT64 unitmask = 0); + void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask = 0); // setup void prepare_map(); @@ -451,20 +438,22 @@ private: void populate_map_entry(const address_map_entry &entry, read_or_write readorwrite); void populate_map_entry_setoffset(const address_map_entry &entry); - void unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, bool quiet); - void install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, void *baseptr); - void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag, const char *wtag); - void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank); + void unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, bool quiet); + void install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, void *baseptr); + void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag, const char *wtag); + void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank); void adjust_addresses(offs_t &start, offs_t &end, offs_t &mask, offs_t &mirror); void *find_backing_memory(offs_t addrstart, offs_t addrend); bool needs_backing_store(const address_map_entry &entry); - memory_bank &bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite); + memory_bank &bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite); memory_bank *bank_find_anonymous(offs_t bytestart, offs_t byteend) const; address_map_entry *block_assign_intersecting(offs_t bytestart, offs_t byteend, UINT8 *base); + void check_optimize_all(const char *function, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror); + void check_optimize_mirror(const char *function, offs_t addrstart, offs_t addrend, offs_t addrmirror, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror); + void check_address(const char *function, offs_t addrstart, offs_t addrend); protected: // private state - address_space * m_next; // next address space in the global list const address_space_config &m_config; // configuration of this space device_t & m_device; // reference to the owning device std::unique_ptr<address_map> m_map; // original memory map @@ -494,9 +483,6 @@ class memory_block { DISABLE_COPYING(memory_block); - friend class simple_list<memory_block>; - friend resource_pool_object<memory_block>::~resource_pool_object(); - public: // construction/destruction memory_block(address_space &space, offs_t bytestart, offs_t byteend, void *memory = nullptr); @@ -504,7 +490,6 @@ public: // getters running_machine &machine() const { return m_machine; } - memory_block *next() const { return m_next; } offs_t bytestart() const { return m_bytestart; } offs_t byteend() const { return m_byteend; } UINT8 *data() const { return m_data; } @@ -517,7 +502,6 @@ public: private: // internal state - memory_block * m_next; // next memory block in the list running_machine & m_machine; // need the machine to free our memory address_space & m_space; // which address space are we associated with? offs_t m_bytestart, m_byteend; // byte-normalized start/end for verifying a match @@ -531,24 +515,16 @@ private: // a memory bank is a global pointer to memory that can be shared across devices and changed dynamically class memory_bank { - friend class simple_list<memory_bank>; - friend resource_pool_object<memory_bank>::~resource_pool_object(); - // a bank reference is an entry in a list of address spaces that reference a given bank class bank_reference { - friend class simple_list<bank_reference>; - friend resource_pool_object<bank_reference>::~resource_pool_object(); - public: // construction/destruction bank_reference(address_space &space, read_or_write readorwrite) - : m_next(nullptr), - m_space(space), - m_readorwrite(readorwrite) { } + : m_space(space), + m_readorwrite(readorwrite) { } // getters - bank_reference *next() const { return m_next; } address_space &space() const { return m_space; } // does this reference match the space+read/write combination? @@ -559,7 +535,6 @@ class memory_bank private: // internal state - bank_reference * m_next; // link to the next reference address_space & m_space; // address space that references us read_or_write m_readorwrite; // used for read or write? }; @@ -576,7 +551,6 @@ public: ~memory_bank(); // getters - memory_bank *next() const { return m_next; } running_machine &machine() const { return m_machine; } int index() const { return m_index; } int entry() const { return m_curentry; } @@ -610,7 +584,6 @@ private: void expand_entries(int entrynum); // internal state - memory_bank * m_next; // next bank in sequence running_machine & m_machine; // need the machine to free our memory UINT8 ** m_baseptr; // pointer to our base pointer in the global array UINT16 m_index; // array index for this handler @@ -621,7 +594,7 @@ private: std::vector<bank_entry> m_entry; // array of entries (dynamically allocated) std::string m_name; // friendly name for this bank std::string m_tag; // tag for this bank - simple_list<bank_reference> m_reflist; // linked list of address spaces referencing this bank + std::vector<std::unique_ptr<bank_reference>> m_reflist; // linked list of address spaces referencing this bank }; @@ -630,13 +603,10 @@ private: // a memory share contains information about shared memory region class memory_share { - friend class simple_list<memory_share>; - public: // construction/destruction memory_share(UINT8 width, size_t bytes, endianness_t endianness, void *ptr = nullptr) - : m_next(nullptr), - m_ptr(ptr), + : m_ptr(ptr), m_bytes(bytes), m_endianness(endianness), m_bitwidth(width), @@ -644,7 +614,6 @@ public: { } // getters - memory_share *next() const { return m_next; } void *ptr() const { return m_ptr; } size_t bytes() const { return m_bytes; } endianness_t endianness() const { return m_endianness; } @@ -656,7 +625,6 @@ public: private: // internal state - memory_share * m_next; // next share in the list void * m_ptr; // pointer to the memory backing the region size_t m_bytes; // size of the shared region in bytes endianness_t m_endianness; // endianness of the memory @@ -674,16 +642,12 @@ class memory_region DISABLE_COPYING(memory_region); friend class memory_manager; - friend class simple_list<memory_region>; - friend resource_pool_object<memory_region>::~resource_pool_object(); - +public: // construction/destruction memory_region(running_machine &machine, const char *name, UINT32 length, UINT8 width, endianness_t endian); -public: // getters running_machine &machine() const { return m_machine; } - memory_region *next() const { return m_next; } UINT8 *base() { return (m_buffer.size() > 0) ? &m_buffer[0] : nullptr; } UINT8 *end() { return base() + m_buffer.size(); } UINT32 bytes() const { return m_buffer.size(); } @@ -703,7 +667,6 @@ public: private: // internal data running_machine & m_machine; - memory_region * m_next; std::string m_name; dynamic_buffer m_buffer; endianness_t m_endianness; @@ -719,7 +682,7 @@ private: class memory_manager { friend class address_space; - + friend memory_region::memory_region(running_machine &machine, const char *name, UINT32 length, UINT8 width, endianness_t endian); public: // construction/destruction memory_manager(running_machine &machine); @@ -727,9 +690,9 @@ public: // getters running_machine &machine() const { return m_machine; } - const tagged_list<memory_bank> &banks() const { return m_banklist; } - const tagged_list<memory_region> ®ions() const { return m_regionlist; } - const tagged_list<memory_share> &shares() const { return m_sharelist; } + const std::unordered_map<std::string, std::unique_ptr<memory_bank>> &banks() const { return m_banklist; } + const std::unordered_map<std::string, std::unique_ptr<memory_region>> ®ions() const { return m_regionlist; } + const std::unordered_map<std::string, std::unique_ptr<memory_share>> &shares() const { return m_sharelist; } // dump the internal memory tables to the given file void dump(FILE *file); @@ -752,15 +715,15 @@ private: UINT8 * m_bank_ptr[TOTAL_MEMORY_BANKS]; // array of bank pointers - simple_list<address_space> m_spacelist; // list of address spaces - simple_list<memory_block> m_blocklist; // head of the list of memory blocks + std::vector<std::unique_ptr<address_space>> m_spacelist; // list of address spaces + std::vector<std::unique_ptr<memory_block>> m_blocklist; // head of the list of memory blocks - tagged_list<memory_bank> m_banklist; // data gathered for each bank + std::unordered_map<std::string,std::unique_ptr<memory_bank>> m_banklist; // data gathered for each bank UINT16 m_banknext; // next bank to allocate - tagged_list<memory_share> m_sharelist; // map for share lookups + std::unordered_map<std::string, std::unique_ptr<memory_share>> m_sharelist; // map for share lookups - tagged_list<memory_region> m_regionlist; // list of memory regions + std::unordered_map<std::string, std::unique_ptr<memory_region>> m_regionlist; // list of memory regions }; diff --git a/src/emu/hashfile.cpp b/src/emu/hashfile.cpp index d37d6cbe21b..0d41f278f37 100644 --- a/src/emu/hashfile.cpp +++ b/src/emu/hashfile.cpp @@ -90,16 +90,6 @@ struct hash_parse_state /*************************************************************************** - PROTOTYPES -***************************************************************************/ - -static void *expat_malloc(size_t size); -static void *expat_realloc(void *ptr, size_t size); -static void expat_free(void *ptr); - - - -/*************************************************************************** CORE IMPLEMENTATION ***************************************************************************/ @@ -358,8 +348,6 @@ static void hashfile_parse(hash_file *hashfile, struct hash_parse_state state; char buf[1024]; UINT32 len; - XML_Memory_Handling_Suite memcallbacks; - hashfile->file->seek(0, SEEK_SET); memset(&state, 0, sizeof(state)); @@ -370,10 +358,7 @@ static void hashfile_parse(hash_file *hashfile, state.param = param; /* create the XML parser */ - memcallbacks.malloc_fcn = expat_malloc; - memcallbacks.realloc_fcn = expat_realloc; - memcallbacks.free_fcn = expat_free; - state.parser = XML_ParserCreate_MM(nullptr, &memcallbacks, nullptr); + state.parser = XML_ParserCreate_MM(nullptr, nullptr, nullptr); if (!state.parser) goto done; @@ -590,30 +575,3 @@ bool hashfile_extrainfo(device_image_interface &image, std::string &result) while (!hashfound && open != -1); return hashfound; } - -/*************************************************************************** - EXPAT INTERFACES -***************************************************************************/ - -/*------------------------------------------------- - expat_malloc/expat_realloc/expat_free - - wrappers for memory allocation functions so - that they pass through out memory tracking - systems --------------------------------------------------*/ - -static void *expat_malloc(size_t size) -{ - return global_alloc_array_clear<UINT8>(size); -} - -static void *expat_realloc(void *ptr, size_t size) -{ - if (ptr) global_free_array((UINT8 *)ptr); - return global_alloc_array_clear<UINT8>(size); -} - -static void expat_free(void *ptr) -{ - global_free_array((UINT8 *)ptr); -} diff --git a/src/emu/ioport.cpp b/src/emu/ioport.cpp index e0e8e76015d..0590f22c71a 100644 --- a/src/emu/ioport.cpp +++ b/src/emu/ioport.cpp @@ -616,7 +616,7 @@ const struct { INPUT_STRING_None, "None" }, }; -} // anonymous namespace +} // TODO: anonymous namespace std::uint8_t const inp_header::MAGIC[inp_header::OFFS_BASETIME - inp_header::OFFS_MAGIC] = { 'M', 'A', 'M', 'E', 'I', 'N', 'P', 0 }; @@ -658,8 +658,8 @@ void ioport_list::append(device_t &device, std::string &errorbuf) (*constructor)(device, *this, errorbuf); // collapse fields and sort the list - for (ioport_port &port : *this) - port.collapse_fields(errorbuf); + for (auto &port : *this) + port.second->collapse_fields(errorbuf); } @@ -1073,8 +1073,8 @@ void natural_keyboard::build_codes(ioport_manager &manager) if (curshift == 0 || shift[curshift - 1] != nullptr) // iterate over ports and fields - for (ioport_port &port : manager.ports()) - for (ioport_field &field : port.fields()) + for (auto &port : manager.ports()) + for (ioport_field &field : port.second->fields()) if (field.type() == IPT_KEYBOARD) { // fetch the code, ignoring 0 @@ -2485,11 +2485,11 @@ time_t ioport_manager::initialize() for (device_t &device : iter) { int players = 0; - for (ioport_port &port : m_portlist) + for (auto &port : m_portlist) { - if (&port.device() == &device) + if (&port.second->device() == &device) { - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) if (field.type_class()==INPUT_CLASS_CONTROLLER) { if (players < field.player() + 1) players = field.player() + 1; @@ -2501,8 +2501,8 @@ time_t ioport_manager::initialize() } // allocate live structures to mirror the configuration - for (ioport_port &port : m_portlist) - port.init_live_state(); + for (auto &port : m_portlist) + port.second->init_live_state(); // handle autoselection of devices init_autoselect_devices(IPT_AD_STICK_X, IPT_AD_STICK_Y, IPT_AD_STICK_Z, OPTION_ADSTICK_DEVICE, "analog joystick"); @@ -2517,8 +2517,8 @@ time_t ioport_manager::initialize() // look for 4-way diagonal joysticks and change the default map if we find any const char *joystick_map_default = machine().options().joystick_map(); if (joystick_map_default[0] == 0 || strcmp(joystick_map_default, "auto") == 0) - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) if (field.live().joystick != nullptr && field.rotated()) { machine().input().set_global_joystick_map(joystick_map_4way_diagonal); @@ -2537,8 +2537,8 @@ time_t ioport_manager::initialize() m_has_bioses = false; // scan the input port array to see what options we need to enable - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) { if (field.type() == IPT_DIPSWITCH) m_has_dips = true; @@ -2627,8 +2627,8 @@ void ioport_manager::init_autoselect_devices(int type1, int type2, int type3, co // only scan the list if we haven't already enabled this class of control if (!m_portlist.empty() && !machine().input().device_class(autoenable).enabled()) - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) // if this port type is in use, apply the autoselect criteria if ((type1 != 0 && field.type() == type1) || (type2 != 0 && field.type() == type2) || (type3 != 0 && field.type() == type3)) @@ -2738,8 +2738,8 @@ bool ioport_manager::type_pressed(ioport_type type, int player) bool ioport_manager::type_class_present(ioport_type_class inputclass) { - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) if (field.type_class() == inputclass) return true; return false; @@ -2754,8 +2754,8 @@ bool ioport_manager::type_class_present(ioport_type_class inputclass) bool ioport_manager::has_keyboard() const { // iterate over ports and fields - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) { // if we are at init, check IPT_KEYBOARD if (!m_safe_to_read && field.type() == IPT_KEYBOARD) @@ -2777,8 +2777,8 @@ bool ioport_manager::has_keyboard() const int ioport_manager::count_players() const { int max_player = 0; - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) if (field.type_class() == INPUT_CLASS_CONTROLLER && max_player <= field.player() + 1) max_player = field.player() + 1; @@ -2795,8 +2795,8 @@ bool ioport_manager::crosshair_position(int player, float &x, float &y) { // read all the lightgun values bool gotx = false, goty = false; - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) if (field.player() == player && field.crosshair_axis() != CROSSHAIR_AXIS_NONE && field.enabled()) { field.crosshair_position(x, y, gotx, goty); @@ -2863,23 +2863,23 @@ g_profiler.start(PROFILER_INPUT); // compute default values for all the ports // two passes to catch conditionals properly - for (ioport_port &port : m_portlist) - port.update_defvalue(true); - for (ioport_port &port : m_portlist) - port.update_defvalue(false); + for (auto &port : m_portlist) + port.second->update_defvalue(true); + for (auto &port : m_portlist) + port.second->update_defvalue(false); // loop over all input ports - for (ioport_port &port : m_portlist) + for (auto &port : m_portlist) { - port.frame_update(); + port.second->frame_update(); // handle playback/record - playback_port(port); - record_port(port); + playback_port(*port.second.get()); + record_port(*port.second.get()); // call device line write handlers - ioport_value newvalue = port.read(); - for (dynamic_field &dynfield : port.live().writelist) + ioport_value newvalue = port.second->read(); + for (dynamic_field &dynfield : port.second->live().writelist) if (dynfield.field().type() != IPT_OUTPUT) dynfield.write(newvalue); } @@ -3045,9 +3045,9 @@ bool ioport_manager::load_game_config(xml_data_node *portnode, int type, int pla ioport_value defvalue = xml_get_attribute_int(portnode, "defvalue", 0); // find the port we want; if no tag, search them all - for (ioport_port &port : m_portlist) - if (tag == nullptr || strcmp(port.tag(), tag) == 0) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + if (tag == nullptr || strcmp(port.second->tag(), tag) == 0) + for (ioport_field &field : port.second->fields()) // find the matching mask and defvalue if (field.type() == type && field.player() == player && @@ -3206,8 +3206,8 @@ void ioport_manager::save_default_inputs(xml_data_node *parentnode) void ioport_manager::save_game_inputs(xml_data_node *parentnode) { // iterate over ports - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) if (save_this_input_field_type(field.type())) { // determine if we changed @@ -3239,7 +3239,7 @@ void ioport_manager::save_game_inputs(xml_data_node *parentnode) if (portnode != nullptr) { // add the identifying information and attributes - xml_set_attribute(portnode, "tag", port.tag()); + xml_set_attribute(portnode, "tag", port.second->tag()); xml_set_attribute(portnode, "type", input_type_to_token(field.type(), field.player()).c_str()); xml_set_attribute_int(portnode, "mask", field.mask()); xml_set_attribute_int(portnode, "defvalue", field.defvalue() & field.mask()); @@ -3802,7 +3802,9 @@ void ioport_configurer::port_alloc(const char *tag) std::string fulltag = m_owner.subtag(tag); // add it to the list, and reset current field/setting - m_curport = &m_portlist.append(fulltag.c_str(), *global_alloc(ioport_port(m_owner, fulltag.c_str()))); + if (m_portlist.count(fulltag) != 0) throw tag_add_exception(fulltag.c_str()); + m_portlist.emplace(std::make_pair(fulltag, std::make_unique<ioport_port>(m_owner, fulltag.c_str()))); + m_curport = m_portlist.find(fulltag)->second.get(); m_curfield = nullptr; m_cursetting = nullptr; } @@ -3819,7 +3821,7 @@ void ioport_configurer::port_modify(const char *tag) std::string fulltag = m_owner.subtag(tag); // find the existing port - m_curport = m_portlist.find(fulltag.c_str()); + m_curport = m_portlist.find(fulltag.c_str())->second.get(); if (m_curport == nullptr) throw emu_fatalerror("Requested to modify nonexistent port '%s'", fulltag.c_str()); diff --git a/src/emu/ioport.h b/src/emu/ioport.h index 47574421d89..455ef660e60 100644 --- a/src/emu/ioport.h +++ b/src/emu/ioport.h @@ -1265,14 +1265,13 @@ struct ioport_field_live // ======================> ioport_list // class that holds a list of I/O ports -class ioport_list : public tagged_list<ioport_port> +class ioport_list : public std::unordered_map<std::string, std::unique_ptr<ioport_port>> { DISABLE_COPYING(ioport_list); public: ioport_list() { } - using tagged_list<ioport_port>::append; void append(device_t &device, std::string &errorbuf); }; @@ -1515,7 +1514,7 @@ private: void frame_update_callback(); void frame_update(); - ioport_port *port(const char *tag) const { return m_portlist.find(tag); } + ioport_port *port(const char *tag) const { if (tag) { auto search = m_portlist.find(tag); if (search != m_portlist.end()) return search->second.get(); else return nullptr; } else return nullptr; } void exit(); input_seq_type token_to_seq_type(const char *string); diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp index 0bb7ac0ba37..4759432ff00 100644 --- a/src/emu/machine.cpp +++ b/src/emu/machine.cpp @@ -377,9 +377,9 @@ int running_machine::run(bool quiet) osd_printf_error("Error performing a late bind of type %s to %s\n", btex.m_actual_type.name(), btex.m_target_type.name()); error = EMU_ERR_FATALERROR; } - catch (add_exception &aex) + catch (tag_add_exception &aex) { - osd_printf_error("Tag '%s' already exists in tagged_list\n", aex.tag()); + osd_printf_error("Tag '%s' already exists in tagged map\n", aex.tag()); error = EMU_ERR_FATALERROR; } catch (std::exception &ex) diff --git a/src/emu/rendutil.cpp b/src/emu/rendutil.cpp index 8fa5b1b7046..c356a1d0abd 100644 --- a/src/emu/rendutil.cpp +++ b/src/emu/rendutil.cpp @@ -12,7 +12,7 @@ #include "rendutil.h" #include "png.h" -#include "libjpeg/jpeglib.h" +#include "jpeglib.h" /*************************************************************************** FUNCTION PROTOTYPES @@ -570,11 +570,11 @@ void render_load_jpeg(bitmap_argb32 &bitmap, emu_file &file, const char *dirname // allocates a buffer for the image UINT32 jpg_size = file.size(); - unsigned char *jpg_buffer = global_alloc_array(unsigned char, jpg_size); + std::unique_ptr<unsigned char[]> jpg_buffer = std::make_unique<unsigned char[]>(jpg_size); // read data from the file and set them in the buffer - file.read(jpg_buffer, jpg_size); - jpeg_mem_src(&cinfo, jpg_buffer, jpg_size); + file.read(jpg_buffer.get(), jpg_size); + jpeg_mem_src(&cinfo, jpg_buffer.get(), jpg_size); // read JPEG header and start decompression jpeg_read_header(&cinfo, TRUE); @@ -617,7 +617,6 @@ void render_load_jpeg(bitmap_argb32 &bitmap, emu_file &file, const char *dirname file.close(); free(buffer[0]); free(buffer); - global_free_array(jpg_buffer); } diff --git a/src/emu/romload.cpp b/src/emu/romload.cpp index 2efc80a4dc5..e158f7ea304 100644 --- a/src/emu/romload.cpp +++ b/src/emu/romload.cpp @@ -801,6 +801,7 @@ int rom_load_manager::read_rom_data(const rom_entry *parent_region, const rom_en void rom_load_manager::fill_rom_data(const rom_entry *romp) { UINT32 numbytes = ROM_GETLENGTH(romp); + int skip = ROM_GETSKIPCOUNT(romp); UINT8 *base = m_region->base() + ROM_GETOFFSET(romp); /* make sure we fill within the region space */ @@ -810,9 +811,15 @@ void rom_load_manager::fill_rom_data(const rom_entry *romp) /* make sure the length was valid */ if (numbytes == 0) fatalerror("Error in RomModule definition: FILL has an invalid length\n"); - + /* fill the data (filling value is stored in place of the hashdata) */ - memset(base, (FPTR)ROM_GETHASHDATA(romp) & 0xff, numbytes); + if(skip != 0) + { + for (int i = 0; i < numbytes; i+= skip + 1) + base[i] = (FPTR)ROM_GETHASHDATA(romp) & 0xff; + } + else + memset(base, (FPTR)ROM_GETHASHDATA(romp) & 0xff, numbytes); } diff --git a/src/emu/romload.h b/src/emu/romload.h index f0553949d96..860f50cbe95 100644 --- a/src/emu/romload.h +++ b/src/emu/romload.h @@ -236,6 +236,7 @@ struct rom_entry #define ROM_CONTINUE(offset,length) { nullptr, nullptr, offset, length, ROMENTRYTYPE_CONTINUE | ROM_INHERITFLAGS }, #define ROM_IGNORE(length) { nullptr, nullptr, 0, length, ROMENTRYTYPE_IGNORE | ROM_INHERITFLAGS }, #define ROM_FILL(offset,length,value) { nullptr, (const char *)value, offset, length, ROMENTRYTYPE_FILL }, +#define ROMX_FILL(offset,length,value,flags) { nullptr, (const char *)value, offset, length, ROMENTRYTYPE_FILL | flags }, #define ROM_COPY(srctag,srcoffs,offset,length) { srctag, (const char *)srcoffs, offset, length, ROMENTRYTYPE_COPY }, diff --git a/src/emu/screen.cpp b/src/emu/screen.cpp index 0e298148d13..ad8b071329c 100644 --- a/src/emu/screen.cpp +++ b/src/emu/screen.cpp @@ -1572,6 +1572,7 @@ bool screen_device::update_quads() void screen_device::update_burnin() { +// TODO: other than being unnecessary (we should use our rand function first off), this is a simplification of how analog signals really works! #undef rand if (!m_burnin.valid()) return; diff --git a/src/emu/screen.h b/src/emu/screen.h index 5650365032a..01033399d64 100644 --- a/src/emu/screen.h +++ b/src/emu/screen.h @@ -48,19 +48,35 @@ enum texture_format // screen_update callback flags const UINT32 UPDATE_HAS_NOT_CHANGED = 0x0001; // the video has not changed -// ----- flags for video_attributes ----- +/*! + @defgroup flags for video_attributes + @{ + @def VIDEO_UPDATE_BEFORE_VBLANK + update_video called at the start of the VBLANK period + @todo hack, remove me + + @def VIDEO_UPDATE_AFTER_VBLANK + update_video called at the end of the VBLANK period + @todo hack, remove me + + @def VIDEO_SELF_RENDER + indicates VIDEO_UPDATE will add container bits itself + + @def VIDEO_ALWAYS_UPDATE + force VIDEO_UPDATE to be called even for skipped frames. + @todo in case you need this one for model updating, then you're doing it wrong (read: hack) + + @def VIDEO_UPDATE_SCANLINE + calls VIDEO_UPDATE for every visible scanline, even for skipped frames + + @} + */ -// should VIDEO_UPDATE by called at the start of VBLANK or at the end? #define VIDEO_UPDATE_BEFORE_VBLANK 0x0000 #define VIDEO_UPDATE_AFTER_VBLANK 0x0004 -// indicates VIDEO_UPDATE will add container bits its #define VIDEO_SELF_RENDER 0x0008 - -// force VIDEO_UPDATE to be called even for skipped frames #define VIDEO_ALWAYS_UPDATE 0x0080 - -// calls VIDEO_UPDATE for every visible scanline, even for skipped frames #define VIDEO_UPDATE_SCANLINE 0x0100 @@ -363,11 +379,89 @@ extern const device_type SCREEN; // iterator helper typedef device_type_iterator<&device_creator<screen_device>, screen_device> screen_device_iterator; - - -//************************************************************************** -// SCREEN DEVICE CONFIGURATION MACROS -//************************************************************************** +/*! + @defgroup Screen device configuration macros + @{ + @def MCFG_SCREEN_ADD + Add a new legacy screen color device + + @def MCFG_SCREEN_ADD_MONOCHROME + Add a new legacy monochrome screen device + + @def MCFG_SCREEN_MODIFY + Modify a legacy screen device + + @def MCFG_SCREEN_TYPE + Modify the screen device type + @see screen_type_enum + + @def MCFG_SCREEN_RAW_PARAMS + Configures screen parameters for the given screen. + @remark It's better than using @see MCFG_SCREEN_REFRESH_RATE and @see MCFG_SCREEN_VBLANK_TIME but still not enough. + + @param _pixclock + Pixel Clock frequency value + + @param _htotal + Total number of horizontal pixels, including hblank period. + + @param _hbend + Horizontal pixel position for HBlank end event, also first pixel where screen rectangle is visible. + + @param _hbstart + Horizontal pixel position for HBlank start event, also last pixel where screen rectangle is visible. + + @param _vtotal + Total number of vertical pixels, including vblank period. + + @param _vbend + Vertical pixel position for VBlank end event, also first pixel where screen rectangle is visible. + + @param _vbstart + Vertical pixel position for VBlank start event, also last pixel where screen rectangle is visible. + + @def MCFG_SCREEN_REFRESH_RATE + Sets the number of Frames Per Second for this screen + @remarks Please use @see MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. + + @param _rate + FPS number + + @def MCFG_SCREEN_VBLANK_TIME + Sets the vblank time of the given screen + @remarks Please use @see MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. + + @param _time + Time parameter, in attotime value + + @def MCFG_SCREEN_SIZE + Sets total screen size, including H/V-Blanks + @remarks Please use @see MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. + + @param _width + Screen horizontal size + + @param _height + Screen vertical size + + @def MCFG_SCREEN_VISIBLE_AREA + Sets screen visible area + @remarks Please use MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. + + @param _minx + Screen left border + + @param _maxx + Screen right border, must be in N-1 format + + @param _miny + Screen top border + + @param _maxx + Screen bottom border, must be in N-1 format + + @} + */ #define MCFG_SCREEN_ADD(_tag, _type) \ MCFG_DEVICE_ADD(_tag, SCREEN, 0) \ @@ -389,57 +483,18 @@ typedef device_type_iterator<&device_creator<screen_device>, screen_device> scre MCFG_SCREEN_TYPE(SVG) \ screen_device::static_set_svg_region(*device, _region); -/*! - @brief Configures screen parameters for the given screen. - - @param _pixclock Pixel Clock frequency value - @param _htotal Total number of horizontal pixels, including hblank period. - @param _hbend Horizontal pixel position for HBlank end event, also first pixel where screen rectangle is visible. - @param _hbstart Horizontal pixel position for HBlank start event, also last pixel where screen rectangle is visible. - @param _vtotal Total number of vertical pixels, including vblank period. - @param _vbend Vertical pixel position for VBlank end event, also first pixel where screen rectangle is visible. - @param _vbstart Vertical pixel position for VBlank start event, also last pixel where screen rectangle is visible. - */ #define MCFG_SCREEN_RAW_PARAMS(_pixclock, _htotal, _hbend, _hbstart, _vtotal, _vbend, _vbstart) \ screen_device::static_set_raw(*device, _pixclock, _htotal, _hbend, _hbstart, _vtotal, _vbend, _vbstart); -/*! - @brief Sets the number of Frames Per Second for this screen - - @param _rate FPS number - @deprecated Please use MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. - */ #define MCFG_SCREEN_REFRESH_RATE(_rate) \ screen_device::static_set_refresh(*device, HZ_TO_ATTOSECONDS(_rate)); -/*! - @brief Sets the vblank time of the given screen - - @param _time Time parameter, in attotime value\ - @deprecated Please use MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. - */ #define MCFG_SCREEN_VBLANK_TIME(_time) \ screen_device::static_set_vblank_time(*device, _time); -/*! - @brief Sets total screen size, including H/V-Blanks - - @param _width Screen horizontal size - @param _height Screen vertical size - @deprecated Please use MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. - */ #define MCFG_SCREEN_SIZE(_width, _height) \ screen_device::static_set_size(*device, _width, _height); -/*! - @brief Sets screen visible area - - @param _minx Screen left border - @param _maxx Screen right border, must be in N-1 format - @param _miny Screen top border - @param _maxx Screen bottom border, must be in N-1 format - @deprecated Please use MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. - */ #define MCFG_SCREEN_VISIBLE_AREA(_minx, _maxx, _miny, _maxy) \ screen_device::static_set_visarea(*device, _minx, _maxx, _miny, _maxy); #define MCFG_SCREEN_DEFAULT_POSITION(_xscale, _xoffs, _yscale, _yoffs) \ diff --git a/src/emu/softlist.cpp b/src/emu/softlist.cpp index 6f4955e61b1..381d32fd4c4 100644 --- a/src/emu/softlist.cpp +++ b/src/emu/softlist.cpp @@ -59,9 +59,6 @@ private: void add_rom_entry(const char *name, const char *hashdata, UINT32 offset, UINT32 length, UINT32 flags); // expat callbacks - static void *expat_malloc(size_t size); - static void *expat_realloc(void *ptr, size_t size); - static void expat_free(void *ptr); static void start_handler(void *data, const char *tagname, const char **attributes); static void data_handler(void *data, const XML_Char *s, int len); static void end_handler(void *data, const char *name); @@ -708,14 +705,8 @@ softlist_parser::softlist_parser(software_list_device &list, std::ostringstream { osd_printf_verbose("Parsing %s\n", m_list.m_file.filename()); - // set up memory callbacks - XML_Memory_Handling_Suite memcallbacks; - memcallbacks.malloc_fcn = expat_malloc; - memcallbacks.realloc_fcn = expat_realloc; - memcallbacks.free_fcn = expat_free; - // create the parser - m_parser = XML_ParserCreate_MM(nullptr, &memcallbacks, nullptr); + m_parser = XML_ParserCreate_MM(nullptr, nullptr, nullptr); if (m_parser == nullptr) throw std::bad_alloc(); @@ -743,31 +734,6 @@ softlist_parser::softlist_parser(software_list_device &list, std::ostringstream osd_printf_verbose("Parsing complete\n"); } - -//------------------------------------------------- -// expat_malloc/expat_realloc/expat_free - -// wrappers for memory allocation functions so -// that they pass through out memory tracking -// systems -//------------------------------------------------- - -void *softlist_parser::expat_malloc(size_t size) -{ - return global_alloc_array_clear<UINT8>(size); -} - -void *softlist_parser::expat_realloc(void *ptr, size_t size) -{ - if (ptr != nullptr) global_free_array((UINT8 *)ptr); - return global_alloc_array_clear<UINT8>(size); -} - -void softlist_parser::expat_free(void *ptr) -{ - global_free_array((UINT8 *)ptr); -} - - //------------------------------------------------- // parse_error - append a parsing error with // filename, line and column information diff --git a/src/emu/ui/uimain.h b/src/emu/ui/uimain.h index 9e18a667ec7..49d2dd023a5 100644 --- a/src/emu/ui/uimain.h +++ b/src/emu/ui/uimain.h @@ -41,8 +41,6 @@ public: virtual void popup_time_string(int seconds, std::string message) { } - virtual void image_display(const device_type &type, device_image_interface *image) { } - virtual void menu_reset() { } template <typename Format, typename... Params> void popup_time(int seconds, Format &&fmt, Params &&... args); diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp index f31cd20a8cd..d732d3e892e 100644 --- a/src/emu/validity.cpp +++ b/src/emu/validity.cpp @@ -849,17 +849,17 @@ void validity_checker::validate_inputs() osd_printf_error("I/O port error during construction:\n%s\n", errorbuf.c_str()); // do a first pass over ports to add their names and find duplicates - for (ioport_port &port : portlist) - if (!port_map.insert(port.tag()).second) - osd_printf_error("Multiple I/O ports with the same tag '%s' defined\n", port.tag()); + for (auto &port : portlist) + if (!port_map.insert(port.second->tag()).second) + osd_printf_error("Multiple I/O ports with the same tag '%s' defined\n", port.second->tag()); // iterate over ports - for (ioport_port &port : portlist) + for (auto &port : portlist) { - m_current_ioport = port.tag(); + m_current_ioport = port.second->tag(); // iterate through the fields on this port - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { // verify analog inputs if (field.is_analog()) @@ -971,11 +971,11 @@ void validity_checker::validate_devices() std::unordered_set<std::string> slot_device_map; for (const device_slot_interface &slot : slot_interface_iterator(m_current_config->root_device())) { - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { std::string temptag("_"); - temptag.append(option.name()); - device_t *dev = const_cast<machine_config &>(*m_current_config).device_add(&m_current_config->root_device(), temptag.c_str(), option.devtype(), 0); + temptag.append(option.second->name()); + device_t *dev = const_cast<machine_config &>(*m_current_config).device_add(&m_current_config->root_device(), temptag.c_str(), option.second->devtype(), 0); // notify this device and all its subdevices that they are now configured for (device_t &device : device_iterator(*dev)) diff --git a/src/frontend/mame/cheat.cpp b/src/frontend/mame/cheat.cpp index 0a9bedbb44a..1e2167f9176 100644 --- a/src/frontend/mame/cheat.cpp +++ b/src/frontend/mame/cheat.cpp @@ -1078,10 +1078,12 @@ cheat_manager::cheat_manager(running_machine &machine) // we rely on the debugger expression callbacks; if the debugger isn't // enabled, we must jumpstart them manually if ((machine.debug_flags & DEBUG_FLAG_ENABLED) == 0) + { m_cpu = std::make_unique<debugger_cpu>(machine); - // configure for memory access (shared with debugger) - m_cpu->configure_memory(m_symtable); + // configure for memory access (shared with debugger) + m_cpu->configure_memory(m_symtable); + } // load the cheats reload(); diff --git a/src/frontend/mame/clifront.cpp b/src/frontend/mame/clifront.cpp index a03479cde61..39033e84d20 100644 --- a/src/frontend/mame/clifront.cpp +++ b/src/frontend/mame/clifront.cpp @@ -313,9 +313,9 @@ int cli_frontend::execute(int argc, char **argv) osd_printf_error("Caught unhandled emulator exception\n"); m_result = EMU_ERR_FATALERROR; } - catch (add_exception &aex) + catch (tag_add_exception &aex) { - osd_printf_error("Tag '%s' already exists in tagged_list\n", aex.tag()); + osd_printf_error("Tag '%s' already exists in tagged map\n", aex.tag()); m_result = EMU_ERR_FATALERROR; } catch (std::exception &ex) @@ -721,16 +721,16 @@ void cli_frontend::listslots(const char *gamename) bool first_option = true; // get the options and print them - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { - if (option.selectable()) + if (option.second->selectable()) { - device_t *dev = (*option.devtype())(drivlist.config(), "dummy", &drivlist.config().root_device(), 0); + device_t *dev = (*option.second->devtype())(drivlist.config(), "dummy", &drivlist.config().root_device(), 0); dev->config_complete(); if (first_option) { - printf("%-15s %s\n", option.name(),dev->name()); + printf("%-15s %s\n", option.second->name(),dev->name()); } else { - printf("%-23s %-15s %s\n", "",option.name(),dev->name()); + printf("%-23s %-15s %s\n", "", option.second->name(),dev->name()); } global_free(dev); @@ -929,11 +929,11 @@ void cli_frontend::verifyroms(const char *gamename) for (const device_slot_interface &slot : slot_interface_iterator(config.root_device())) { - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { std::string temptag("_"); - temptag.append(option.name()); - device_t *dev = const_cast<machine_config &>(config).device_add(&config.root_device(), temptag.c_str(), option.devtype(), 0); + temptag.append(option.second->name()); + device_t *dev = const_cast<machine_config &>(config).device_add(&config.root_device(), temptag.c_str(), option.second->devtype(), 0); // notify this device and all its subdevices that they are now configured for (device_t &device : device_iterator(*dev)) diff --git a/src/frontend/mame/info.cpp b/src/frontend/mame/info.cpp index e5b1677370e..db9f003f09d 100644 --- a/src/frontend/mame/info.cpp +++ b/src/frontend/mame/info.cpp @@ -261,9 +261,9 @@ void info_xml_creator::output_one() { int nplayers = 0; bool new_kbd = false; - for (ioport_port &port : portlist) - if (&port.device() == &device) - for (ioport_field &field : port.fields()) + for (auto &port : portlist) + if (&port.second->device() == &device) + for (ioport_field &field : port.second->fields()) if (field.type() >= IPT_START && field.type() < IPT_ANALOG_LAST) { if (field.type() == IPT_KEYBOARD) @@ -366,8 +366,8 @@ void info_xml_creator::output_one_device(device_t &device, const char *devtag) for (device_t &dev : device_iterator(device)) portlist.append(dev, errors); // check if the device adds player inputs (other than dsw and configs) to the system - for (ioport_port &port : portlist) - for (ioport_field &field : port.fields()) + for (auto &port : portlist) + for (ioport_field &field : port.second->fields()) if (field.type() >= IPT_START1 && field.type() < IPT_UI_FIRST) { has_input = TRUE; @@ -438,11 +438,11 @@ void info_xml_creator::output_devices() // then, run through slot devices for (const device_slot_interface &slot : slot_interface_iterator(m_drivlist.config().root_device())) { - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { std::string temptag("_"); - temptag.append(option.name()); - device_t *dev = const_cast<machine_config &>(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), temptag.c_str(), option.devtype(), 0); + temptag.append(option.second->name()); + device_t *dev = const_cast<machine_config &>(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), temptag.c_str(), option.second->devtype(), 0); // notify this device and all its subdevices that they are now configured for (device_t &device : device_iterator(*dev)) @@ -891,11 +891,11 @@ void info_xml_creator::output_input(const ioport_list &portlist) bool tilt = false; // iterate over the ports - for (ioport_port &port : portlist) + for (auto &port : portlist) { int ctrl_type = CTRL_DIGITAL_BUTTONS; bool ctrl_analog = FALSE; - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { // track the highest player number if (nplayer < field.player() + 1) @@ -1317,13 +1317,13 @@ void info_xml_creator::output_input(const ioport_list &portlist) void info_xml_creator::output_switches(const ioport_list &portlist, const char *root_tag, int type, const char *outertag, const char *innertag) { // iterate looking for DIP switches - for (ioport_port &port : portlist) - for (ioport_field &field : port.fields()) + for (auto &port : portlist) + for (ioport_field &field : port.second->fields()) if (field.type() == type) { std::ostringstream output; - std::string newtag(port.tag()), oldtag(":"); + std::string newtag(port.second->tag()), oldtag(":"); newtag = newtag.substr(newtag.find(oldtag.append(root_tag)) + oldtag.length()); // output the switch name information @@ -1351,10 +1351,10 @@ void info_xml_creator::output_switches(const ioport_list &portlist, const char * void info_xml_creator::output_ports(const ioport_list &portlist) { // cycle through ports - for (ioport_port &port : portlist) + for (auto &port : portlist) { - fprintf(m_output,"\t\t<port tag=\"%s\">\n", xml_normalize_string(port.tag())); - for (ioport_field &field : port.fields()) + fprintf(m_output,"\t\t<port tag=\"%s\">\n", xml_normalize_string(port.second->tag())); + for (ioport_field &field : port.second->fields()) { if(field.is_analog()) fprintf(m_output,"\t\t\t<analog mask=\"%u\"/>\n", field.mask()); @@ -1373,8 +1373,8 @@ void info_xml_creator::output_ports(const ioport_list &portlist) void info_xml_creator::output_adjusters(const ioport_list &portlist) { // iterate looking for Adjusters - for (ioport_port &port : portlist) - for (ioport_field &field : port.fields()) + for (auto &port : portlist) + for (ioport_field &field : port.second->fields()) if (field.type() == IPT_ADJUSTER) fprintf(m_output, "\t\t<adjuster name=\"%s\" default=\"%d\"/>\n", xml_normalize_string(field.name()), field.defvalue()); } @@ -1528,18 +1528,18 @@ void info_xml_creator::output_slots(device_t &device, const char *root_tag) fprintf(m_output, " interface=\"%s\"", xml_normalize_string(slot.slot_interface())); */ - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { - if (option.selectable()) + if (option.second->selectable()) { - device_t *dev = const_cast<machine_config &>(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), "dummy", option.devtype(), 0); + device_t *dev = const_cast<machine_config &>(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), "dummy", option.second->devtype(), 0); if (!dev->configured()) dev->config_complete(); fprintf(m_output, "\t\t\t<slotoption"); - fprintf(m_output, " name=\"%s\"", xml_normalize_string(option.name())); + fprintf(m_output, " name=\"%s\"", xml_normalize_string(option.second->name())); fprintf(m_output, " devname=\"%s\"", xml_normalize_string(dev->shortname())); - if (slot.default_option() != nullptr && strcmp(slot.default_option(),option.name())==0) + if (slot.default_option() != nullptr && strcmp(slot.default_option(), option.second->name())==0) fprintf(m_output, " default=\"yes\""); fprintf(m_output, "/>\n"); const_cast<machine_config &>(m_drivlist.config()).device_remove(&m_drivlist.config().root_device(), "dummy"); diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp index 1ab9ba8cc1a..ec61f96fe30 100644 --- a/src/frontend/mame/luaengine.cpp +++ b/src/frontend/mame/luaengine.cpp @@ -568,8 +568,8 @@ luabridge::LuaRef lua_engine::l_memory_get_banks(const memory_manager *m) lua_State *L = luaThis->m_lua_state; luabridge::LuaRef table = luabridge::LuaRef::newTable(L); - for (memory_bank &bank : mm->banks()) { - table[bank.tag()] = &bank; + for (auto &bank : mm->banks()) { + table[bank.second->tag()] = bank.second.get(); } return table; @@ -586,8 +586,8 @@ luabridge::LuaRef lua_engine::l_memory_get_regions(const memory_manager *m) lua_State *L = luaThis->m_lua_state; luabridge::LuaRef table = luabridge::LuaRef::newTable(L); - for (memory_region ®ion: mm->regions()) { - table[region.name()] = ®ion; + for (auto ®ion: mm->regions()) { + table[region.second->name()] = ®ion; } return table; @@ -644,8 +644,8 @@ luabridge::LuaRef lua_engine::l_ioport_get_ports(const ioport_manager *m) lua_State *L = luaThis->m_lua_state; luabridge::LuaRef port_table = luabridge::LuaRef::newTable(L); - for (ioport_port &port : im->ports()) { - port_table[port.tag()] = &port; + for (auto &port : im->ports()) { + port_table[port.second->tag()] = &port; } return port_table; @@ -1977,9 +1977,9 @@ void lua_engine::update_machine() if (m_machine!=nullptr) { // Create the ioport array - for (ioport_port &port : machine().ioport().ports()) + for (auto &port : machine().ioport().ports()) { - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { if (field.type_class() != INPUT_CLASS_INTERNAL) { diff --git a/src/frontend/mame/ui/auditmenu.cpp b/src/frontend/mame/ui/auditmenu.cpp index 8c148c09c00..9a6a47c8fc8 100644 --- a/src/frontend/mame/ui/auditmenu.cpp +++ b/src/frontend/mame/ui/auditmenu.cpp @@ -27,8 +27,8 @@ inline int cs_stricmp(const char *s1, const char *s2) { for (;;) { - int c1 = tolower((UINT8)*s1++); - int c2 = tolower((UINT8)*s2++); + int c1 = tolower(*s1++); + int c2 = tolower(*s2++); if (c1 == 0 || c1 != c2) return c1 - c2; } @@ -36,8 +36,8 @@ inline int cs_stricmp(const char *s1, const char *s2) bool sorted_game_list(const game_driver *x, const game_driver *y) { - bool clonex = strcmp(x->parent, "0"); - bool cloney = strcmp(y->parent, "0"); + bool clonex = (x->parent[0] != '0'); + bool cloney = (y->parent[0] != '0'); if (!clonex && !cloney) return (cs_stricmp(x->description, y->description) < 0); diff --git a/src/frontend/mame/ui/cheatopt.cpp b/src/frontend/mame/ui/cheatopt.cpp index b194510e1c9..f72eed5d20f 100644 --- a/src/frontend/mame/ui/cheatopt.cpp +++ b/src/frontend/mame/ui/cheatopt.cpp @@ -145,7 +145,10 @@ void menu_cheat::populate() { UINT32 flags; curcheat->menu_text(text, subtext, flags); - item_append(text.c_str(), subtext.c_str(), flags, curcheat.get()); + if (text == MENU_SEPARATOR_ITEM) + item_append(menu_item_type::SEPARATOR); + else + item_append(text.c_str(), subtext.c_str(), flags, curcheat.get()); } /* add a separator */ @@ -273,10 +276,10 @@ void menu_autofire::populate() /* iterate over the input ports and add autofire toggle items */ int menu_items = 0; - for (ioport_port &port : machine().ioport().ports()) + for (auto &port : machine().ioport().ports()) { bool is_first_button = true; - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { if (field.type() >= IPT_BUTTON1 && field.type() <= IPT_BUTTON16) { diff --git a/src/frontend/mame/ui/custui.cpp b/src/frontend/mame/ui/custui.cpp index 5b10342f310..e033f022356 100644 --- a/src/frontend/mame/ui/custui.cpp +++ b/src/frontend/mame/ui/custui.cpp @@ -35,14 +35,14 @@ menu_custom_ui::menu_custom_ui(mame_ui_manager &mui, render_container *container { // load languages file_enumerator path(mui.machine().options().language_path()); - const char *lang = mui.machine().options().language(); + auto lang = mui.machine().options().language(); const osd_directory_entry *dirent; int cnt = 0; while ((dirent = path.next()) != nullptr) if (dirent->type == ENTTYPE_DIR && strcmp(dirent->name, ".") != 0 && strcmp(dirent->name, "..") != 0) { auto name = std::string(dirent->name); - int i = strreplace(name, "_", " ("); + auto i = strreplace(name, "_", " ("); if (i > 0) name = name.append(")"); m_lang.push_back(name); if (strcmp(name.c_str(), lang) == 0) @@ -1002,7 +1002,7 @@ void menu_rgb_ui::inkey_special(const event *menu_event) } } -menu_palette_sel::palcolor menu_palette_sel::m_palette[] = { +std::vector<std::pair<const char *, const char *>> menu_palette_sel::m_palette = { { __("White"), "FFFFFFFF" }, { __("Silver"), "FFC0C0C0" }, { __("Gray"), "FF808080" }, @@ -1057,8 +1057,8 @@ void menu_palette_sel::handle() void menu_palette_sel::populate() { - for (int x = 0; x < ARRAY_LENGTH(m_palette); ++x) - item_append(_(m_palette[x].name), m_palette[x].argb, FLAG_UI_PALETTE, (void *)(FPTR)(x + 1)); + for (int x = 0; x < m_palette.size(); ++x) + item_append(_(m_palette[x].first), m_palette[x].second, FLAG_UI_PALETTE, (void *)(FPTR)(x + 1)); item_append(menu_item_type::SEPARATOR); } diff --git a/src/frontend/mame/ui/custui.h b/src/frontend/mame/ui/custui.h index 217bc4e6ac4..7cf10d44a45 100644 --- a/src/frontend/mame/ui/custui.h +++ b/src/frontend/mame/ui/custui.h @@ -169,13 +169,8 @@ public: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: - struct palcolor - { - const char *name; - const char *argb; - }; - static palcolor m_palette[]; + static std::vector<std::pair<const char *, const char *>> m_palette; rgb_t &m_original; }; diff --git a/src/frontend/mame/ui/datfile.cpp b/src/frontend/mame/ui/datfile.cpp index 51b0289e75f..ea391a9eadf 100644 --- a/src/frontend/mame/ui/datfile.cpp +++ b/src/frontend/mame/ui/datfile.cpp @@ -55,55 +55,25 @@ std::string datfile_manager::m_story_rev; std::string datfile_manager::m_ginit_rev; bool datfile_manager::first_run = true; +#define opendatsfile(f) if (parseopen(#f".dat")) { init_##f(); parseclose(); } + //------------------------------------------------- // ctor //------------------------------------------------- -datfile_manager::datfile_manager(running_machine &machine, ui_options &moptions) : m_machine(machine), m_options(moptions) +datfile_manager::datfile_manager(running_machine &machine, ui_options &moptions) + : m_machine(machine) + , m_options(moptions) { if (m_options.enabled_dats() && first_run) { first_run = false; - if (parseopen("mameinfo.dat")) - { - init_mameinfo(); - parseclose(); - } - - if (parseopen("command.dat")) - { - init_command(); - parseclose(); - } - - if (parseopen("story.dat")) - { - init_storyinfo(); - parseclose(); - } - - if (parseopen("messinfo.dat")) - { - init_messinfo(); - parseclose(); - } - - if (parseopen("sysinfo.dat")) - { - init_sysinfo(); - parseclose(); - } - - if (parseopen("history.dat")) - { - init_history(); - parseclose(); - } - - if (parseopen("gameinit.dat")) - { - init_gameinit(); - parseclose(); - } + opendatsfile(mameinfo); + opendatsfile(command); + opendatsfile(story); + opendatsfile(messinfo); + opendatsfile(sysinfo); + opendatsfile(history); + opendatsfile(gameinit); } } @@ -113,7 +83,7 @@ datfile_manager::datfile_manager(running_machine &machine, ui_options &moptions) void datfile_manager::init_sysinfo() { int swcount = 0; - int count = index_datafile(m_sysidx, swcount); + auto count = index_datafile(m_sysidx, swcount, TAG_SYSINFO_R, m_sysinfo_rev, '.'); osd_printf_verbose("Sysinfo.dat games found = %i\n", count); osd_printf_verbose("Rev = %s\n", m_sysinfo_rev.c_str()); } @@ -121,10 +91,10 @@ void datfile_manager::init_sysinfo() //------------------------------------------------- // initialize story.dat index //------------------------------------------------- -void datfile_manager::init_storyinfo() +void datfile_manager::init_story() { int swcount = 0; - int count = index_datafile(m_storyidx, swcount); + auto count = index_datafile(m_storyidx, swcount, TAG_STORY_R, m_story_rev, 's'); osd_printf_verbose("Story.dat games found = %i\n", count); } @@ -134,7 +104,7 @@ void datfile_manager::init_storyinfo() void datfile_manager::init_history() { int swcount = 0; - int count = index_datafile(m_histidx, swcount); + auto count = index_datafile(m_histidx, swcount, TAG_HISTORY_R, m_history_rev, ' '); osd_printf_verbose("History.dat systems found = %i\n", count); osd_printf_verbose("History.dat software packages found = %i\n", swcount); osd_printf_verbose("Rev = %s\n", m_history_rev.c_str()); @@ -147,7 +117,7 @@ void datfile_manager::init_gameinit() { int swcount = 0; drvindex tmp; - int count = index_mame_mess_info(m_ginitidx, tmp, swcount); + auto count = index_mame_mess_info(m_ginitidx, tmp, swcount); osd_printf_verbose("Gameinit.dat games found = %i\n", count); osd_printf_verbose("Rev = %s\n", m_ginit_rev.c_str()); } @@ -158,7 +128,7 @@ void datfile_manager::init_gameinit() void datfile_manager::init_mameinfo() { int drvcount = 0; - int count = index_mame_mess_info(m_mameidx, m_drvidx, drvcount); + auto count = index_mame_mess_info(m_mameidx, m_drvidx, drvcount); osd_printf_verbose("Mameinfo.dat games found = %i\n", count); osd_printf_verbose("Mameinfo.dat drivers found = %d\n", drvcount); osd_printf_verbose("Rev = %s\n", m_mame_rev.c_str()); @@ -170,7 +140,7 @@ void datfile_manager::init_mameinfo() void datfile_manager::init_messinfo() { int drvcount = 0; - int count = index_mame_mess_info(m_messidx, m_messdrvidx, drvcount); + auto count = index_mame_mess_info(m_messidx, m_messdrvidx, drvcount); osd_printf_verbose("Messinfo.dat games found = %i\n", count); osd_printf_verbose("Messinfo.dat drivers found = %d\n", drvcount); osd_printf_verbose("Rev = %s\n", m_mess_rev.c_str()); @@ -182,7 +152,8 @@ void datfile_manager::init_messinfo() void datfile_manager::init_command() { int swcount = 0; - int count = index_datafile(m_cmdidx, swcount); + std::string tmp, tmp2; + auto count = index_datafile(m_cmdidx, swcount, tmp, tmp2, 'c'); osd_printf_verbose("Command.dat games found = %i\n", count); } @@ -213,7 +184,7 @@ void datfile_manager::load_software_info(std::string &softlist, std::string &buf if (!has_software(softlist, softname, parentname)) return; - long s_offset = (*m_itemsiter).second; + auto s_offset = m_itemsiter->second; char rbuf[64 * 1024]; fseek(fp, s_offset, SEEK_SET); std::string readbuf; @@ -239,8 +210,7 @@ void datfile_manager::load_data_info(const game_driver *drv, std::string &buffer { dataindex index_idx; drvindex driver_idx; - std::string tag; - std::string filename; + std::string tag, filename; switch (type) { @@ -299,22 +269,22 @@ void datfile_manager::load_data_info(const game_driver *drv, std::string &buffer //------------------------------------------------- void datfile_manager::load_data_text(const game_driver *drv, std::string &buffer, dataindex &idx, std::string &tag) { - dataindex::iterator itemsiter = idx.find(drv); + auto itemsiter = idx.find(drv); if (itemsiter == idx.end()) { - int cloneof = driver_list::non_bios_clone(*drv); + auto cloneof = driver_list::non_bios_clone(*drv); if (cloneof == -1) return; else { - const game_driver *c_drv = &driver_list::driver(cloneof); + auto c_drv = &driver_list::driver(cloneof); itemsiter = idx.find(c_drv); if (itemsiter == idx.end()) return; } } - long s_offset = (*itemsiter).second; + auto s_offset = itemsiter->second; fseek(fp, s_offset, SEEK_SET); char rbuf[64 * 1024]; std::string readbuf; @@ -342,14 +312,14 @@ void datfile_manager::load_data_text(const game_driver *drv, std::string &buffer void datfile_manager::load_driver_text(const game_driver *drv, std::string &buffer, drvindex &idx, std::string &tag) { std::string s(core_filename_extract_base(drv->source_file)); - drvindex::const_iterator index = idx.find(s); + auto index = idx.find(s); // if driver not found, return if (index == idx.end()) return; buffer.append("\n--- DRIVER INFO ---\n").append("Driver: ").append(s).append("\n\n"); - long s_offset = (*index).second; + auto s_offset = index->second; fseek(fp, s_offset, SEEK_SET); char rbuf[64 * 1024]; std::string readbuf; @@ -376,31 +346,30 @@ void datfile_manager::load_driver_text(const game_driver *drv, std::string &buff //------------------------------------------------- int datfile_manager::index_mame_mess_info(dataindex &index, drvindex &index_drv, int &drvcount) { - std::string name; size_t foundtag; - size_t t_mame = TAG_MAMEINFO_R.size(); - size_t t_mess = TAG_MESSINFO_R.size(); - size_t t_ginit = TAG_GAMEINIT_R.size(); - size_t t_info = TAG_INFO.size(); + auto t_mame = TAG_MAMEINFO_R.size(); + auto t_mess = TAG_MESSINFO_R.size(); + auto t_ginit = TAG_GAMEINIT_R.size(); + auto t_info = TAG_INFO.size(); char rbuf[64 * 1024]; - std::string readbuf, xid; + std::string readbuf, xid, name; while (fgets(rbuf, 64 * 1024, fp) != nullptr) { readbuf = chartrimcarriage(rbuf); if (m_mame_rev.empty() && readbuf.compare(0, t_mame, TAG_MAMEINFO_R) == 0) { - size_t found = readbuf.find(" ", t_mame + 1); + auto found = readbuf.find(" ", t_mame + 1); m_mame_rev = readbuf.substr(t_mame + 1, found - t_mame); } else if (m_mess_rev.empty() && (foundtag = readbuf.find(TAG_MESSINFO_R)) != std::string::npos) { - size_t found = readbuf.find(" ", foundtag + t_mess + 1); + auto found = readbuf.find(" ", foundtag + t_mess + 1); m_mess_rev = readbuf.substr(foundtag + t_mess + 1, found - t_mess - foundtag); } else if (m_ginit_rev.empty() && readbuf.compare(0, t_ginit, TAG_GAMEINIT_R) == 0) { - size_t found = readbuf.find(" ", t_ginit + 1); + auto found = readbuf.find(" ", t_ginit + 1); m_ginit_rev = readbuf.substr(t_ginit + 1, found - t_ginit); } else if (readbuf.compare(0, t_info, TAG_INFO) == 0) @@ -412,7 +381,7 @@ int datfile_manager::index_mame_mess_info(dataindex &index, drvindex &index_drv, if (xid == TAG_MAME) { // validate driver - int game_index = driver_list::find(name.c_str()); + auto game_index = driver_list::find(name.c_str()); if (game_index != -1) index.emplace(&driver_list::driver(game_index), ftell(fp)); } @@ -430,139 +399,57 @@ int datfile_manager::index_mame_mess_info(dataindex &index, drvindex &index_drv, // load a game name and offset into an // indexed array //------------------------------------------------- -int datfile_manager::index_datafile(dataindex &index, int &swcount) +int datfile_manager::index_datafile(dataindex &index, int &swcount, std::string &tag, std::string &str, char sep) { - std::string readbuf, name; - size_t t_hist = TAG_HISTORY_R.size(); - size_t t_story = TAG_STORY_R.size(); - size_t t_sysinfo = TAG_SYSINFO_R.size(); - size_t t_info = TAG_INFO.size(); - size_t t_bio = TAG_BIO.size(); + std::string readbuf; + auto tag_size = tag.size(); + auto t_info = TAG_INFO.size(); + auto t_bio = TAG_BIO.size(); char rbuf[64 * 1024]; while (fgets(rbuf, 64 * 1024, fp) != nullptr) { readbuf = chartrimcarriage(rbuf); - if (m_history_rev.empty() && readbuf.compare(0, t_hist, TAG_HISTORY_R) == 0) - { - size_t found = readbuf.find(" ", t_hist + 1); - m_history_rev = readbuf.substr(t_hist + 1, found - t_hist); - } - else if (m_sysinfo_rev.empty() && readbuf.compare(0, t_sysinfo, TAG_SYSINFO_R) == 0) - { - size_t found = readbuf.find(".", t_sysinfo + 1); - m_sysinfo_rev = readbuf.substr(t_sysinfo + 1, found - t_sysinfo); - } - else if (m_story_rev.empty() && readbuf.compare(0, t_story, TAG_STORY_R) == 0) - m_story_rev = readbuf.substr(t_story + 1); - else if (readbuf.compare(0, t_info, TAG_INFO) == 0) - { - int curpoint = t_info + 1; - int ends = readbuf.size(); - while (curpoint < ends) + if (!tag.empty()) + if (str.empty() && readbuf.compare(0, tag_size, tag) == 0) { - // search for comma - size_t found = readbuf.find(",", curpoint); - - // found it - if (found != std::string::npos) + if (sep != 's') { - // copy data and validate driver - name = readbuf.substr(curpoint, found - curpoint); - - // validate driver - int game_index = driver_list::find(name.c_str()); - if (game_index != -1) - index.emplace(&driver_list::driver(game_index), ftell(fp)); - - // update current point - curpoint = ++found; + auto found = readbuf.find(sep, tag_size + 1); + str = readbuf.substr(tag_size + 1, found - tag_size); } - // if comma not found, copy data while until reach the end of string - else if (curpoint < ends) - { - name = readbuf.substr(curpoint); - int game_index = driver_list::find(name.c_str()); - if (game_index != -1) - index.emplace(&driver_list::driver(game_index), ftell(fp)); + else + str = readbuf.substr(tag_size + 1); + } - // update current point - curpoint = ends; - } + if (readbuf.compare(0, t_info, TAG_INFO) == 0) + { + // search for game info + auto rd = readbuf.substr(t_info + 1); + std::vector<std::string> gamelist = tokenize(rd, ','); + for (auto & e : gamelist) + { + auto game_index = driver_list::find(e.c_str()); + if (game_index != -1) + index.emplace(&driver_list::driver(game_index), ftell(fp)); } } - // search for software info else if (!readbuf.empty() && readbuf[0] == DATAFILE_TAG[0]) { + // search for software info fgets(rbuf, 64 * 1024, fp); std::string readbuf_2(chartrimcarriage(rbuf)); - - // TAG_BIO identifies software list if (readbuf_2.compare(0, t_bio, TAG_BIO) == 0) { - size_t eq_sign = readbuf.find("="); + auto eq_sign = readbuf.find('='); std::string s_list(readbuf.substr(1, eq_sign - 1)); std::string s_roms(readbuf.substr(eq_sign + 1)); - int ends = s_list.size(); - int curpoint = 0; - - while (curpoint < ends) - { - size_t found = s_list.find(",", curpoint); - - // found it - if (found != std::string::npos) - { - name = s_list.substr(curpoint, found - curpoint); - curpoint = ++found; - } - else - { - name = s_list.substr(curpoint); - curpoint = ends; - } - - // search for a software list in the index, if not found then allocates - std::string lname(name); - int cpoint = 0; - int cends = s_roms.size(); - - while (cpoint < cends) - { - // search for comma - size_t comma_found = s_roms.find(",", cpoint); - - // found it - if (comma_found != std::string::npos) - { - // copy data - name = s_roms.substr(cpoint, comma_found - cpoint); - - // add a SoftwareItem - m_swindex[lname].emplace(name, ftell(fp)); - - // update current point - cpoint = ++comma_found; - swcount++; - } - else - { - // if reach the end, bail out - if (s_roms[cpoint] == '\r' || s_roms[cpoint] == '\n') - break; - - // copy data - name = s_roms.substr(cpoint); - - // add a SoftwareItem - m_swindex[lname].emplace(name, ftell(fp)); - - // update current point - cpoint = cends; - swcount++; - } - } - } + std::vector<std::string> token_list = tokenize(s_list, ','); + std::vector<std::string> token_roms = tokenize(s_roms, ','); + for (auto & li : token_list) + for (auto & ro : token_roms) + m_swindex[li].emplace(ro, ftell(fp)); + swcount++; } } } @@ -574,9 +461,6 @@ int datfile_manager::index_datafile(dataindex &index, int &swcount) //--------------------------------------------------------- bool datfile_manager::parseopen(const char *filename) { - // MAME core file parsing functions fail in recognizing UNICODE chars in UTF-8 without BOM, - // so it's better and faster use standard C fileio functions. - emu_file file(m_options.history_path(), OPEN_FLAG_READ); if (file.open(filename) != osd_file::error::NONE) return false; @@ -598,22 +482,21 @@ void datfile_manager::index_menuidx(const game_driver *drv, dataindex &idx, drvi dataindex::iterator itemsiter = idx.find(drv); if (itemsiter == idx.end()) { - int cloneof = driver_list::non_bios_clone(*drv); + auto cloneof = driver_list::non_bios_clone(*drv); if (cloneof == -1) return; else { - const game_driver *c_drv = &driver_list::driver(cloneof); - itemsiter = idx.find(c_drv); - if (itemsiter == idx.end()) + auto c_drv = &driver_list::driver(cloneof); + if ((itemsiter = idx.find(c_drv)) == idx.end()) return; } } // seek to correct point in datafile - long s_offset = (*itemsiter).second; + auto s_offset = itemsiter->second; fseek(fp, s_offset, SEEK_SET); - size_t tinfo = TAG_INFO.size(); + auto tinfo = TAG_INFO.size(); char rbuf[64 * 1024]; std::string readbuf; while (fgets(rbuf, 64 * 1024, fp) != nullptr) @@ -641,7 +524,7 @@ void datfile_manager::load_command_info(std::string &buffer, std::string &sel) if (parseopen("command.dat")) { // open and seek to correct point in datafile - long offset = m_menuidx.at(sel); + auto offset = m_menuidx.at(sel); fseek(fp, offset, SEEK_SET); char rbuf[64 * 1024]; std::string readbuf; @@ -673,6 +556,7 @@ void datfile_manager::command_sub_menu(const game_driver *drv, std::vector<std:: { m_menuidx.clear(); index_menuidx(drv, m_cmdidx, m_menuidx); + menuitems.reserve(m_menuidx.size()); for (auto & elem : m_menuidx) menuitems.push_back(elem.first); parseclose(); diff --git a/src/frontend/mame/ui/datfile.h b/src/frontend/mame/ui/datfile.h index dca01570375..260b23a40ce 100644 --- a/src/frontend/mame/ui/datfile.h +++ b/src/frontend/mame/ui/datfile.h @@ -71,7 +71,7 @@ private: void init_messinfo(); void init_command(); void init_sysinfo(); - void init_storyinfo(); + void init_story(); void init_gameinit(); // file open/close/seek @@ -79,9 +79,9 @@ private: void parseclose() { if (fp != nullptr) fclose(fp); } int index_mame_mess_info(dataindex &index, drvindex &index_drv, int &drvcount); - int index_datafile(dataindex &index, int &swcount); + int index_datafile(dataindex &index, int &swcount, std::string &tag, std::string &str, char sep); void index_menuidx(const game_driver *drv, dataindex &idx, drvindex &index); - drvindex::iterator m_itemsiter; + drvindex::const_iterator m_itemsiter; void load_data_text(const game_driver *drv, std::string &buffer, dataindex &idx, std::string &tag); void load_driver_text(const game_driver *drv, std::string &buffer, drvindex &idx, std::string &tag); diff --git a/src/frontend/mame/ui/datmenu.cpp b/src/frontend/mame/ui/datmenu.cpp index fe3fc622699..a3a29b76116 100644 --- a/src/frontend/mame/ui/datmenu.cpp +++ b/src/frontend/mame/ui/datmenu.cpp @@ -111,7 +111,7 @@ void menu_dats_view::populate() (m_issoft == true) ? get_data_sw() : get_data(); - item_append(MENU_SEPARATOR_ITEM, nullptr, (FLAG_UI_DATS | FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW), nullptr); + item_append(menu_item_type::SEPARATOR); customtop = 2.0f * ui().get_line_height() + 4.0f * UI_BOX_TB_BORDER; custombottom = ui().get_line_height() + 3.0f * UI_BOX_TB_BORDER; @@ -171,7 +171,6 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); // take off the borders - x2 -= UI_BOX_LR_BORDER; y1 += UI_BOX_TB_BORDER; // draw the text within it @@ -224,22 +223,20 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f void menu_dats_view::get_data() { - std::vector<int> xstart; - std::vector<int> xend; + std::vector<int> xstart, xend; std::string buffer; - std::vector<std::string> m_item; if (m_items_list[m_actual].option == UI_COMMAND_LOAD) { + std::vector<std::string> m_item; mame_machine_manager::instance()->datfile().command_sub_menu(m_driver, m_item); if (!m_item.empty()) { - for (size_t x = 0; x < m_item.size(); ++x) + for (auto & e : m_item) { std::string t_buffer; - buffer.append(m_item[x]).append("\n"); - mame_machine_manager::instance()->datfile().load_command_info(t_buffer, m_item[x]); - if (!t_buffer.empty()) - buffer.append(t_buffer).append("\n"); + buffer.append(e).append("\n"); + mame_machine_manager::instance()->datfile().load_command_info(t_buffer, e); + if (!t_buffer.empty()) buffer.append(t_buffer).append("\n"); } convert_command_glyph(buffer); } @@ -247,7 +244,7 @@ void menu_dats_view::get_data() else mame_machine_manager::instance()->datfile().load_data_info(m_driver, buffer, m_items_list[m_actual].option); - int lines = ui().wrap_text(container, buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); + auto lines = ui().wrap_text(container, buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); for (int x = 0; x < lines; ++x) { std::string tempbuf(buffer.substr(xstart[x], xend[x] - xstart[x])); @@ -270,7 +267,7 @@ void menu_dats_view::get_data_sw() mame_machine_manager::instance()->datfile().load_software_info(m_swinfo->listname, buffer, m_swinfo->shortname, m_swinfo->parentname); } - int lines = ui().wrap_text(container, buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); + auto lines = ui().wrap_text(container, buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); for (int x = 0; x < lines; ++x) { std::string tempbuf(buffer.substr(xstart[x], xend[x] - xstart[x])); diff --git a/src/frontend/mame/ui/devopt.cpp b/src/frontend/mame/ui/devopt.cpp index 3b8fa1442c1..52e0264b43f 100644 --- a/src/frontend/mame/ui/devopt.cpp +++ b/src/frontend/mame/ui/devopt.cpp @@ -176,8 +176,8 @@ void menu_device_config::populate() portlist.append(iptdev, errors); // check if the device adds inputs to the system - for (ioport_port &port : portlist) - for (ioport_field &field : port.fields()) + for (auto &port : portlist) + for (ioport_field &field : port.second->fields()) { if (field.type() >= IPT_MAHJONG_FIRST && field.type() < IPT_MAHJONG_LAST) input_mj++; diff --git a/src/frontend/mame/ui/filesel.cpp b/src/frontend/mame/ui/filesel.cpp index 03e9f5c5dd4..61f3f8d5fb2 100644 --- a/src/frontend/mame/ui/filesel.cpp +++ b/src/frontend/mame/ui/filesel.cpp @@ -108,7 +108,7 @@ menu_confirm_save_as::~menu_confirm_save_as() void menu_confirm_save_as::populate() { item_append(_("File Already Exists - Override?"), nullptr, FLAG_DISABLE, nullptr); - item_append(MENU_SEPARATOR_ITEM, nullptr, FLAG_DISABLE, nullptr); + item_append(menu_item_type::SEPARATOR); item_append(_("No"), nullptr, 0, ITEMREF_NO); item_append(_("Yes"), nullptr, 0, ITEMREF_YES); } @@ -319,13 +319,63 @@ menu_file_selector::~menu_file_selector() void menu_file_selector::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2) { - extra_text_render(top, bottom, - origx1, origy1, origx2, origy2, - m_current_directory.c_str(), - nullptr); + // lay out extra text + auto layout = ui().create_layout(container); + layout.add_text(m_current_directory.c_str()); + + // position this extra text + float x1, y1, x2, y2; + extra_text_position(origx1, origx2, origy1, top, layout, -1, x1, y1, x2, y2); + + // draw a box + ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + + // take off the borders + x1 += UI_BOX_LR_BORDER; + y1 += UI_BOX_TB_BORDER; + + size_t hit_start = 0, hit_span = 0; + if (mouse_hit + && layout.hit_test(mouse_x - x1, mouse_y - y1, hit_start, hit_span) + && m_current_directory.substr(hit_start, hit_span) != PATH_SEPARATOR) + { + // we're hovering over a directory! highlight it + auto target_dir_start = m_current_directory.rfind(PATH_SEPARATOR, hit_start) + 1; + auto target_dir_end = m_current_directory.find(PATH_SEPARATOR, hit_start + hit_span); + m_hover_directory = m_current_directory.substr(0, target_dir_end); + + // highlight the text in question + rgb_t fgcolor = UI_MOUSEOVER_COLOR; + rgb_t bgcolor = UI_MOUSEOVER_BG_COLOR; + layout.restyle(target_dir_start, target_dir_end - target_dir_start, &fgcolor, &bgcolor); + } + else + { + // we are not hovering over anything + m_hover_directory.clear(); + } + + // draw the text within it + layout.emit(container, x1, y1); } +//------------------------------------------------- +// custom_mouse_down - perform our special mouse down +//------------------------------------------------- + +bool menu_file_selector::custom_mouse_down() +{ + if (m_hover_directory.length() > 0) + { + m_current_directory = m_hover_directory; + reset(reset_options::SELECT_FIRST); + return true; + } + + return false; +} + //------------------------------------------------- // compare_file_selector_entries - sorting proc diff --git a/src/frontend/mame/ui/filesel.h b/src/frontend/mame/ui/filesel.h index e7988ed7912..66be755f699 100644 --- a/src/frontend/mame/ui/filesel.h +++ b/src/frontend/mame/ui/filesel.h @@ -69,6 +69,9 @@ public: virtual void handle() override; virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; +protected: + virtual bool custom_mouse_down() override; + private: enum file_selector_entry_type { @@ -98,6 +101,7 @@ private: bool m_has_create; int * m_result; file_selector_entry * m_entrylist; + std::string m_hover_directory; char m_filename_buffer[1024]; // methods diff --git a/src/frontend/mame/ui/inifile.cpp b/src/frontend/mame/ui/inifile.cpp index f176073786d..d9f5cbeef8a 100644 --- a/src/frontend/mame/ui/inifile.cpp +++ b/src/frontend/mame/ui/inifile.cpp @@ -25,7 +25,8 @@ UINT16 inifile_manager::c_file = 0; //------------------------------------------------- inifile_manager::inifile_manager(running_machine &machine, ui_options &moptions) - : m_machine(machine), m_options(moptions) + : m_machine(machine) + , m_options(moptions) { ini_index.clear(); directory_scan(); @@ -37,28 +38,15 @@ inifile_manager::inifile_manager(running_machine &machine, ui_options &moptions) void inifile_manager::directory_scan() { - // open extra INIs folder file_enumerator path(m_options.extraini_path()); const osd_directory_entry *dir; - // loop into folder's file while ((dir = path.next()) != nullptr) - { - int length = strlen(dir->name); - std::string filename(dir->name); - - // check .ini file ending - if ((length > 4) && dir->name[length - 4] == '.' && tolower((UINT8)dir->name[length - 3]) == 'i' && - tolower((UINT8)dir->name[length - 2]) == 'n' && tolower((UINT8)dir->name[length - 1]) == 'i') + if (core_filename_ends_with(dir->name, ".ini") && parseopen(dir->name)) { - // try to open file and indexing - if (parseopen(filename.c_str())) - { - init_category(filename); - parseclose(); - } + init_category(std::string(dir->name)); + parseclose(); } - } // sort std::stable_sort(ini_index.begin(), ini_index.end()); @@ -68,30 +56,25 @@ void inifile_manager::directory_scan() // initialize category //------------------------------------------------- -void inifile_manager::init_category(std::string &filename) +void inifile_manager::init_category(std::string filename) { categoryindex index; char rbuf[MAX_CHAR_INFO]; - std::string readbuf, name; + std::string readbuf; while (fgets(rbuf, MAX_CHAR_INFO, fp) != nullptr) - { - readbuf = rbuf; - if (readbuf[0] == '[') + if (rbuf[0] == '[') { - size_t found = readbuf.find("]"); - name = readbuf.substr(1, found - 1); - if (name == "FOLDER_SETTINGS" || name == "ROOT_FOLDER") - continue; - else - index.emplace_back(name, ftell(fp)); + readbuf = rbuf; + auto name = readbuf.substr(1, readbuf.find("]") - 1); + if (name == "FOLDER_SETTINGS") continue; + index.emplace_back(name, ftell(fp)); } - } // sort std::stable_sort(index.begin(), index.end()); if (!index.empty()) - ini_index.emplace_back(filename, index); + ini_index.emplace_back(strmakelower(filename), index); } //------------------------------------------------- @@ -103,17 +86,16 @@ void inifile_manager::load_ini_category(std::vector<int> &temp_filter) if (ini_index.empty()) return; - bool search_clones = false; + auto search_clones = false; std::string filename(ini_index[c_file].first); - long offset = ini_index[c_file].second[c_cat].second; + auto offset = ini_index[c_file].second[c_cat].second; - if (!core_stricmp(filename.c_str(), "category.ini") || !core_stricmp(filename.c_str(), "alltime.ini")) + if (filename == "category.ini" || filename == "alltime.ini") search_clones = true; if (parseopen(filename.c_str())) { fseek(fp, offset, SEEK_SET); - int num_game = driver_list::total(); char rbuf[MAX_CHAR_INFO]; std::string readbuf; while (fgets(rbuf, MAX_CHAR_INFO, fp) != nullptr) @@ -123,20 +105,15 @@ void inifile_manager::load_ini_category(std::vector<int> &temp_filter) if (readbuf.empty() || readbuf[0] == '[') break; - int dfind = driver_list::find(readbuf.c_str()); - if (dfind != -1 && search_clones) + auto dfind = driver_list::find(readbuf.c_str()); + if (dfind != -1) { temp_filter.push_back(dfind); - int clone_of = driver_list::non_bios_clone(dfind); - if (clone_of == -1) - { - for (int x = 0; x < num_game; x++) + if (search_clones && driver_list::non_bios_clone(dfind) == -1) + for (int x = 0; x < driver_list::total(); x++) if (readbuf == driver_list::driver(x).parent && readbuf != driver_list::driver(x).name) temp_filter.push_back(x); - } } - else if (dfind != -1) - temp_filter.push_back(dfind); } parseclose(); } @@ -148,9 +125,6 @@ void inifile_manager::load_ini_category(std::vector<int> &temp_filter) bool inifile_manager::parseopen(const char *filename) { - // MAME core file parsing functions fail in recognizing UNICODE chars in UTF-8 without BOM, - // so it's better and faster use standard C fileio functions. - emu_file file(m_options.extraini_path(), OPEN_FLAG_READ); if (file.open(filename) != osd_file::error::NONE) return false; @@ -173,7 +147,8 @@ bool inifile_manager::parseopen(const char *filename) //------------------------------------------------- favorite_manager::favorite_manager(running_machine &machine, ui_options &moptions) - : m_machine(machine), m_options(moptions) + : m_machine(machine) + , m_options(moptions) { m_current = -1; parse_favorite(); @@ -211,13 +186,13 @@ void favorite_manager::add_favorite_game() return; } - bool software_avail = false; + auto software_avail = false; for (device_image_interface &image : image_interface_iterator(machine().root_device())) { if (image.exists() && image.software_entry()) { - const software_info *swinfo = image.software_entry(); - const software_part *part = image.part_entry(); + auto swinfo = image.software_entry(); + auto part = image.part_entry(); ui_software_info tmpmatches; tmpmatches.shortname = strensure(swinfo->shortname()); tmpmatches.longname = strensure(image.longname()); @@ -234,7 +209,7 @@ void favorite_manager::add_favorite_game() tmpmatches.parentlongname.clear(); if (swinfo->parentname()) { - software_list_device *swlist = software_list_device::find_by_name(machine().config(), image.software_list_name()); + auto swlist = software_list_device::find_by_name(machine().config(), image.software_list_name()); for (software_info &c_swinfo : swlist->get_info()) { std::string c_parent(c_swinfo.parentname()); @@ -292,7 +267,7 @@ bool favorite_manager::isgame_favorite() if ((machine().system().flags & MACHINE_TYPE_ARCADE) != 0) return isgame_favorite(&machine().system()); - bool image_loaded = false; + auto image_loaded = false; for (device_image_interface &image : image_interface_iterator(machine().root_device())) { @@ -384,7 +359,7 @@ void favorite_manager::parse_favorite() tmpmatches.part = chartrimcarriage(readbuf); file.gets(readbuf, 1024); chartrimcarriage(readbuf); - int dx = driver_list::find(readbuf); + auto dx = driver_list::find(readbuf); if (dx == -1) continue; tmpmatches.driver = &driver_list::driver(dx); file.gets(readbuf, 1024); diff --git a/src/frontend/mame/ui/inifile.h b/src/frontend/mame/ui/inifile.h index b8ba87addae..0658cf1f7db 100644 --- a/src/frontend/mame/ui/inifile.h +++ b/src/frontend/mame/ui/inifile.h @@ -29,10 +29,12 @@ public: // getters running_machine &machine() const { return m_machine; } - std::string get_file(int file = -1) { return ((file == -1) ? ini_index[c_file].first : ini_index[file].first); } - std::string get_category(int cat = -1) { return ((cat == -1) ? ini_index[c_file].second[c_cat].first : ini_index[c_file].second[cat].first); } + std::string get_file() { return ini_index[c_file].first; } + std::string get_file(int file) { return ini_index[file].first; } + std::string get_category(int cat) { return ini_index[c_file].second[cat].first; } + std::string get_category() { return ini_index[c_file].second[c_cat].first; } size_t total() { return ini_index.size(); } - size_t cat_total(int cat = -1) { return ((cat == -1) ? ini_index[c_file].second.size() : ini_index[cat].second.size()); } + size_t cat_total() { return ini_index[c_file].second.size(); } UINT16 &cur_file() { return c_file; } UINT16 &cur_cat() { return c_cat; } @@ -42,8 +44,8 @@ public: // setters void move_file(int d) { c_file += d; c_cat = 0; } void move_cat(int d) { c_cat += d; } - void set_cat(int i = -1) { (i == -1) ? c_cat = 0 : c_cat = i; } - void set_file(int i = -1) { (i == -1) ? c_file = 0 : c_file = i; } + void set_cat(int i) { c_cat = i; } + void set_file(int i) { c_file = i; } private: @@ -55,7 +57,7 @@ private: std::vector<std::pair<std::string, categoryindex>> ini_index; // init category index - void init_category(std::string &filename); + void init_category(std::string filename); // init file index void directory_scan(); diff --git a/src/frontend/mame/ui/inputmap.cpp b/src/frontend/mame/ui/inputmap.cpp index 5552f46d38c..766ce7cd05c 100644 --- a/src/frontend/mame/ui/inputmap.cpp +++ b/src/frontend/mame/ui/inputmap.cpp @@ -164,10 +164,10 @@ void menu_input_specific::populate() suborder[SEQ_TYPE_INCREMENT] = 2; /* iterate over the input ports and add menu items */ - for (ioport_port &port : machine().ioport().ports()) + for (auto &port : machine().ioport().ports()) { port_count++; - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { ioport_type_class type_class = field.type_class(); @@ -548,8 +548,8 @@ void menu_settings::populate() diplist_tailptr = &diplist; /* loop over input ports and set up the current values */ - for (ioport_port &port : machine().ioport().ports()) - for (ioport_field &field : port.fields()) + for (auto &port : machine().ioport().ports()) + for (ioport_field &field : port.second->fields()) if (field.type() == type && field.enabled()) { UINT32 flags = 0; @@ -818,8 +818,8 @@ void menu_analog::populate() bool first_entry = true; /* loop over input ports and add the items */ - for (ioport_port &port : machine().ioport().ports()) - for (ioport_field &field : port.fields()) + for (auto &port : machine().ioport().ports()) + for (ioport_field &field : port.second->fields()) if (field.is_analog() && field.enabled()) { ioport_field::user_settings settings; diff --git a/src/frontend/mame/ui/menu.cpp b/src/frontend/mame/ui/menu.cpp index 35e325a35e7..997683d1a98 100644 --- a/src/frontend/mame/ui/menu.cpp +++ b/src/frontend/mame/ui/menu.cpp @@ -37,12 +37,7 @@ namespace ui { #define UI_MENU_POOL_SIZE 65536 #define MAX_ICONS_RENDER 40 -struct arts_info -{ - const char *title, *path; -}; - -static const arts_info arts_info[] = +static std::vector<std::pair<const char *, const char *>> arts_info = { { __("Snapshots"), OPTION_SNAPSHOT_DIRECTORY }, { __("Cabinets"), OPTION_CABINETS_PATH }, @@ -61,7 +56,6 @@ static const arts_info arts_info[] = { __("Select"), OPTION_SELECT_PATH }, { __("Marquees"), OPTION_MARQUEES_PATH }, { __("Covers"), OPTION_COVER_PATH }, - { nullptr } }; static const char *hover_msg[] = { @@ -90,10 +84,10 @@ std::unique_ptr<bitmap_argb32> menu::snapx_bitmap; std::unique_ptr<bitmap_argb32> menu::no_avail_bitmap; std::unique_ptr<bitmap_argb32> menu::star_bitmap; std::unique_ptr<bitmap_argb32> menu::bgrnd_bitmap; -bitmap_argb32 *menu::icons_bitmap[MAX_ICONS_RENDER]; +std::vector<std::unique_ptr<bitmap_argb32>> menu::icons_bitmap; std::unique_ptr<bitmap_rgb32> menu::hilight_main_bitmap; -bitmap_argb32 *menu::toolbar_bitmap[UI_TOOLBAR_BUTTONS]; -bitmap_argb32 *menu::sw_toolbar_bitmap[UI_TOOLBAR_BUTTONS]; +std::vector<std::shared_ptr<bitmap_argb32>> menu::toolbar_bitmap; +std::vector<std::shared_ptr<bitmap_argb32>> menu::sw_toolbar_bitmap; /*************************************************************************** INLINE FUNCTIONS @@ -106,7 +100,7 @@ bitmap_argb32 *menu::sw_toolbar_bitmap[UI_TOOLBAR_BUTTONS]; inline bool is_selectable(menu_item const &item) { - return ((item.flags & (menu::FLAG_MULTILINE | menu::FLAG_DISABLE)) == 0 && strcmp(item.text, MENU_SEPARATOR_ITEM) != 0); + return ((item.flags & (menu::FLAG_MULTILINE | menu::FLAG_DISABLE)) == 0 && item.type != menu_item_type::SEPARATOR); } @@ -186,11 +180,13 @@ void menu::exit(running_machine &machine) for (auto & elem : icons_texture) mre.texture_free(elem); - for (int i = 0; i < UI_TOOLBAR_BUTTONS; i++) + for (int i = 0; i < UI_TOOLBAR_BUTTONS; ++i) { mre.texture_free(sw_toolbar_texture[i]); mre.texture_free(toolbar_texture[i]); } + + icons_bitmap.clear(); } @@ -322,7 +318,7 @@ void menu::item_append(menu_item item) void menu::item_append(menu_item_type type) { if (type == menu_item_type::SEPARATOR) - item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr); + item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr, menu_item_type::SEPARATOR); } //------------------------------------------------- @@ -396,7 +392,7 @@ const menu::event *menu::process(UINT32 flags, float x0, float y0) { // read events if ((item[0].flags & FLAG_UI ) != 0 || (item[0].flags & FLAG_UI_SWLIST ) != 0) - handle_main_events(flags); + handle_main_events(); else handle_events(flags); @@ -520,8 +516,6 @@ void menu::draw(UINT32 flags, float origx0, float origy0) bool selected_subitem_too_big = false; int itemnum, linenum; - bool mouse_hit, mouse_button; - float mouse_x = -1, mouse_y = -1; if (ui().options().use_background_image() && &machine().system() == &GAME_NAME(___empty) && bgrnd_bitmap->valid() && !noimage) container->add_quad(0.0f, 0.0f, 1.0f, 1.0f, rgb_t::white, bgrnd_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); @@ -529,9 +523,8 @@ void menu::draw(UINT32 flags, float origx0, float origy0) // compute the width and height of the full menu float visible_width = 0; float visible_main_menu_height = 0; - for (itemnum = 0; itemnum < item.size(); itemnum++) + for (auto & pitem : item) { - const menu_item &pitem = item[itemnum]; float total_width; // compute width of left hand side @@ -572,38 +565,6 @@ void menu::draw(UINT32 flags, float origx0, float origy0) float visible_left = (1.0f - visible_width) * 0.5f; float visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; -/* float visible_left; - float visible_top; - if (origx0 == 0.0f && origy0 == 0.0f) - { - visible_left = (1.0f - visible_width) * 0.5f; - visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; - } - else - { - INT32 mouse_target_x, mouse_target_y; - float m_x, m_y; - render_target *mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button); - if (mouse_target != nullptr) - { - if (mouse_target->map_point_container(origx0, origy0, *container, m_x, m_y)) - { - visible_left = m_x; - visible_top = m_y; - } - else - { - visible_left = (1.0f - visible_width) * 0.5f; - visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; - } - } - else - { - visible_left = (1.0f - visible_width) * 0.5f; - visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; - } - } -*/ // if the menu is at the bottom of the extra, adjust visible_top += customtop; @@ -677,19 +638,15 @@ void menu::draw(UINT32 flags, float origx0, float origy0) // if we're selected, draw with a different background if (itemnum == selected) { - fgcolor = UI_SELECTED_COLOR; + fgcolor = fgcolor2 = fgcolor3 = UI_SELECTED_COLOR; bgcolor = UI_SELECTED_BG_COLOR; - fgcolor2 = UI_SELECTED_COLOR; - fgcolor3 = UI_SELECTED_COLOR; } // else if the mouse is over this item, draw with a different background else if (itemnum == hover) { - fgcolor = UI_MOUSEOVER_COLOR; + fgcolor = fgcolor2 = fgcolor3 = UI_MOUSEOVER_COLOR; bgcolor = UI_MOUSEOVER_BG_COLOR; - fgcolor2 = UI_MOUSEOVER_COLOR; - fgcolor3 = UI_MOUSEOVER_COLOR; } // if we have some background hilighting to do, add a quad behind everything else @@ -700,12 +657,12 @@ void menu::draw(UINT32 flags, float origx0, float origy0) if (linenum == 0 && show_top_arrow) { draw_arrow(container, - 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, - line_y + 0.25f * line_height, - 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, - line_y + 0.75f * line_height, - fgcolor, - ROT0); + 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, + line_y + 0.25f * line_height, + 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, + line_y + 0.75f * line_height, + fgcolor, + ROT0); if (hover == itemnum) hover = HOVER_ARROW_UP; } @@ -714,18 +671,18 @@ void menu::draw(UINT32 flags, float origx0, float origy0) else if (linenum == visible_lines - 1 && show_bottom_arrow) { draw_arrow(container, - 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, - line_y + 0.25f * line_height, - 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, - line_y + 0.75f * line_height, - fgcolor, - ROT0 ^ ORIENTATION_FLIP_Y); + 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, + line_y + 0.25f * line_height, + 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, + line_y + 0.75f * line_height, + fgcolor, + ROT0 ^ ORIENTATION_FLIP_Y); if (hover == itemnum) hover = HOVER_ARROW_DOWN; } // if we're just a divider, draw a line - else if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + else if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // if we don't have a subitem, just draw the string centered @@ -750,7 +707,7 @@ void menu::draw(UINT32 flags, float origx0, float origy0) // draw the left-side text ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, - JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, &item_width, nullptr); + JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, &item_width, nullptr); // give 2 spaces worth of padding item_width += 2.0f * gutter_width; @@ -765,38 +722,38 @@ void menu::draw(UINT32 flags, float origx0, float origy0) // customize subitem text color if (!core_stricmp(subitem_text, _("On"))) - fgcolor2 = rgb_t(0xff,0x00,0xff,0x00); + fgcolor2 = rgb_t(0x00,0xff,0x00); if (!core_stricmp(subitem_text, _("Off"))) - fgcolor2 = rgb_t(0xff,0xff,0x00,0x00); + fgcolor2 = rgb_t(0xff,0x00,0x00); if (!core_stricmp(subitem_text, _("Auto"))) - fgcolor2 = rgb_t(0xff,0xff,0xff,0x00); + fgcolor2 = rgb_t(0xff,0xff,0x00); // draw the subitem right-justified ui().draw_text_full(container, subitem_text, effective_left + item_width, line_y, effective_width - item_width, - JUSTIFY_RIGHT, WRAP_TRUNCATE, DRAW_NORMAL, subitem_invert ? fgcolor3 : fgcolor2, bgcolor, &subitem_width, nullptr); + JUSTIFY_RIGHT, WRAP_TRUNCATE, DRAW_NORMAL, subitem_invert ? fgcolor3 : fgcolor2, bgcolor, &subitem_width, nullptr); // apply arrows if (itemnum == selected && (pitem.flags & FLAG_LEFT_ARROW)) { draw_arrow(container, - effective_left + effective_width - subitem_width - gutter_width, - line_y + 0.1f * line_height, - effective_left + effective_width - subitem_width - gutter_width + lr_arrow_width, - line_y + 0.9f * line_height, - fgcolor, - ROT90 ^ ORIENTATION_FLIP_X); + effective_left + effective_width - subitem_width - gutter_width, + line_y + 0.1f * line_height, + effective_left + effective_width - subitem_width - gutter_width + lr_arrow_width, + line_y + 0.9f * line_height, + fgcolor, + ROT90 ^ ORIENTATION_FLIP_X); } if (itemnum == selected && (pitem.flags & FLAG_RIGHT_ARROW)) { draw_arrow(container, - effective_left + effective_width + gutter_width - lr_arrow_width, - line_y + 0.1f * line_height, - effective_left + effective_width + gutter_width, - line_y + 0.9f * line_height, - fgcolor, - ROT90); + effective_left + effective_width + gutter_width - lr_arrow_width, + line_y + 0.1f * line_height, + effective_left + effective_width + gutter_width, + line_y + 0.9f * line_height, + fgcolor, + ROT90); } } } @@ -814,7 +771,7 @@ void menu::draw(UINT32 flags, float origx0, float origy0) // compute the multi-line target width/height ui().draw_text_full(container, pitem.subtext, 0, 0, visible_width * 0.75f, - JUSTIFY_RIGHT, WRAP_WORD, DRAW_NONE, rgb_t::white, rgb_t::black, &target_width, &target_height); + JUSTIFY_RIGHT, WRAP_WORD, DRAW_NONE, rgb_t::white, rgb_t::black, &target_width, &target_height); // determine the target location target_x = visible_left + visible_width - target_width - UI_BOX_LR_BORDER; @@ -829,7 +786,7 @@ void menu::draw(UINT32 flags, float origx0, float origy0) target_y + target_height + UI_BOX_TB_BORDER, subitem_invert ? UI_SELECTED_BG_COLOR : UI_BACKGROUND_COLOR); ui().draw_text_full(container, pitem.subtext, target_x, target_y, target_width, - JUSTIFY_RIGHT, WRAP_WORD, DRAW_NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr); + JUSTIFY_RIGHT, WRAP_WORD, DRAW_NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr); } // if there is something special to add, do it by calling the virtual method @@ -858,7 +815,7 @@ void menu::draw_text_box() // compute the multi-line target width/height ui().draw_text_full(container, text, 0, 0, 1.0f - 2.0f * UI_BOX_LR_BORDER - 2.0f * gutter_width, - JUSTIFY_LEFT, WRAP_WORD, DRAW_NONE, rgb_t::white, rgb_t::black, &target_width, &target_height); + JUSTIFY_LEFT, WRAP_WORD, DRAW_NONE, rgb_t::white, rgb_t::black, &target_width, &target_height); target_height += 2.0f * line_height; if (target_height > 1.0f - 2.0f * UI_BOX_TB_BORDER) target_height = floorf((1.0f - 2.0f * UI_BOX_TB_BORDER) / line_height) * line_height; @@ -883,12 +840,12 @@ void menu::draw_text_box() // add a box around that ui().draw_outlined_box(container, target_x - UI_BOX_LR_BORDER - gutter_width, - target_y - UI_BOX_TB_BORDER, - target_x + target_width + gutter_width + UI_BOX_LR_BORDER, - target_y + target_height + UI_BOX_TB_BORDER, - (item[0].flags & FLAG_REDTEXT) ? UI_RED_COLOR : UI_BACKGROUND_COLOR); + target_y - UI_BOX_TB_BORDER, + target_x + target_width + gutter_width + UI_BOX_LR_BORDER, + target_y + target_height + UI_BOX_TB_BORDER, + (item[0].flags & FLAG_REDTEXT) ? UI_RED_COLOR : UI_BACKGROUND_COLOR); ui().draw_text_full(container, text, target_x, target_y, target_width, - JUSTIFY_LEFT, WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + JUSTIFY_LEFT, WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // draw the "return to prior menu" text with a hilight behind it highlight(container, @@ -898,7 +855,7 @@ void menu::draw_text_box() target_y + target_height, UI_SELECTED_BG_COLOR); ui().draw_text_full(container, backtext, target_x, target_y + target_height - line_height, target_width, - JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr); + JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr); // artificially set the hover to the last item so a double-click exits hover = item.size() - 1; @@ -922,6 +879,9 @@ void menu::handle_events(UINT32 flags) { // if we are hovering over a valid item, select it with a single click case UI_EVENT_MOUSE_DOWN: + if (custom_mouse_down()) + return; + if ((flags & PROCESS_ONLYCHAR) == 0) { if (hover >= 0 && hover < item.size()) @@ -955,7 +915,7 @@ void menu::handle_events(UINT32 flags) // if we are hovering over a valid item, fake a UI_SELECT with a double-click case UI_EVENT_MOUSE_DOUBLE_CLICK: - if ((flags & PROCESS_ONLYCHAR) == 0 && hover >= 0 && hover < item.size()) + if (!(flags & PROCESS_ONLYCHAR) && hover >= 0 && hover < item.size()) { selected = hover; m_event.iptkey = IPT_UI_SELECT; @@ -970,7 +930,7 @@ void menu::handle_events(UINT32 flags) // caught scroll event case UI_EVENT_MOUSE_WHEEL: - if ((flags & PROCESS_ONLYCHAR) == 0) + if (!(flags & PROCESS_ONLYCHAR)) { if (local_menu_event.zdelta > 0) { @@ -987,7 +947,7 @@ void menu::handle_events(UINT32 flags) } else { - if ((flags & FLAG_UI_DATS) != 0) + if ((flags & FLAG_UI_DATS)) { top_line += local_menu_event.num_lines; return; @@ -1042,7 +1002,7 @@ void menu::handle_keys(UINT32 flags) } // bail out - if ((flags & PROCESS_ONLYCHAR) != 0) + if ((flags & PROCESS_ONLYCHAR)) return; // hitting cancel also pops the stack @@ -1060,7 +1020,7 @@ void menu::handle_keys(UINT32 flags) bool ignoreleft = ((item[selected].flags & FLAG_LEFT_ARROW) == 0); bool ignoreright = ((item[selected].flags & FLAG_RIGHT_ARROW) == 0); - if ((item[0].flags & FLAG_UI_DATS) != 0) + if ((item[0].flags & FLAG_UI_DATS)) ignoreleft = ignoreright = false; // accept left/right keys as-is with repeat @@ -1072,7 +1032,7 @@ void menu::handle_keys(UINT32 flags) // up backs up by one item if (exclusive_input_pressed(IPT_UI_UP, 6)) { - if ((item[0].flags & FLAG_UI_DATS) != 0) + if ((item[0].flags & FLAG_UI_DATS)) { top_line--; return; @@ -1087,7 +1047,7 @@ void menu::handle_keys(UINT32 flags) // down advances by one item if (exclusive_input_pressed(IPT_UI_DOWN, 6)) { - if ((item[0].flags & FLAG_UI_DATS) != 0) + if ((item[0].flags & FLAG_UI_DATS)) { top_line++; return; @@ -1376,15 +1336,15 @@ void menu::init_ui(running_machine &machine, ui_options &mopt) { render_manager &mrender = machine.render(); // create a texture for hilighting items in main menu - hilight_main_bitmap = std::make_unique<bitmap_rgb32>(1, 26); + hilight_main_bitmap = std::make_unique<bitmap_rgb32>(1, 128); int r1 = 0, g1 = 169, b1 = 255; //Any start color int r2 = 0, g2 = 39, b2 = 130; //Any stop color - for (int y = 0; y < 26; y++) + for (int y = 0; y < 128; y++) { - int r = r1 + (y * (r2 - r1) / 26); - int g = g1 + (y * (g2 - g1) / 26); - int b = b1 + (y * (b2 - b1) / 26); - hilight_main_bitmap->pix32(y, 0) = rgb_t(0xff, r, g, b); + int r = r1 + (y * (r2 - r1) / 128); + int g = g1 + (y * (g2 - g1) / 128); + int b = b1 + (y * (b2 - b1) / 128); + hilight_main_bitmap->pix32(y, 0) = rgb_t(r, g, b); } hilight_main_texture = mrender.texture_alloc(); @@ -1407,10 +1367,10 @@ void menu::init_ui(running_machine &machine, ui_options &mopt) star_texture->set_bitmap(*star_bitmap, star_bitmap->cliprect(), TEXFORMAT_ARGB32); // allocate icons - for (int i = 0; i < MAX_ICONS_RENDER; i++) + for (auto & icons : icons_texture) { - icons_bitmap[i] = auto_alloc(machine, bitmap_argb32); - icons_texture[i] = mrender.texture_alloc(); + icons_bitmap.emplace_back(std::make_unique<bitmap_argb32>()); + icons = mrender.texture_alloc(); } // create a texture for main menu background @@ -1436,28 +1396,28 @@ void menu::init_ui(running_machine &machine, ui_options &mopt) // create a texture for toolbar for (int x = 0; x < UI_TOOLBAR_BUTTONS; ++x) { - toolbar_bitmap[x] = auto_alloc(machine, bitmap_argb32(32, 32)); - sw_toolbar_bitmap[x] = auto_alloc(machine, bitmap_argb32(32, 32)); + toolbar_bitmap.emplace_back(std::make_shared<bitmap_argb32>(32, 32)); + sw_toolbar_bitmap.emplace_back(std::make_shared<bitmap_argb32>(32, 32)); toolbar_texture[x] = mrender.texture_alloc(); sw_toolbar_texture[x] = mrender.texture_alloc(); - UINT32 *texture_dst = &toolbar_bitmap[x]->pix32(0); + UINT32 *texture_dst = &toolbar_bitmap.back()->pix32(0); memcpy(texture_dst, toolbar_bitmap_bmp[x], 32 * 32 * sizeof(UINT32)); - if (toolbar_bitmap[x]->valid()) - toolbar_texture[x]->set_bitmap(*toolbar_bitmap[x], toolbar_bitmap[x]->cliprect(), TEXFORMAT_ARGB32); + if (toolbar_bitmap.back()->valid()) + toolbar_texture[x]->set_bitmap(*toolbar_bitmap.back(), toolbar_bitmap.back()->cliprect(), TEXFORMAT_ARGB32); else - toolbar_bitmap[x]->reset(); + toolbar_bitmap.back()->reset(); if (x == 0 || x == 2) { texture_dst = &sw_toolbar_bitmap[x]->pix32(0); memcpy(texture_dst, toolbar_bitmap_bmp[x], 32 * 32 * sizeof(UINT32)); - if (sw_toolbar_bitmap[x]->valid()) - sw_toolbar_texture[x]->set_bitmap(*sw_toolbar_bitmap[x], sw_toolbar_bitmap[x]->cliprect(), TEXFORMAT_ARGB32); + if (sw_toolbar_bitmap.back()->valid()) + sw_toolbar_texture[x]->set_bitmap(*sw_toolbar_bitmap.back(), sw_toolbar_bitmap.back()->cliprect(), TEXFORMAT_ARGB32); else - sw_toolbar_bitmap[x]->reset(); + sw_toolbar_bitmap.back()->reset(); } else - sw_toolbar_bitmap[x]->reset(); + sw_toolbar_bitmap.back()->reset(); } } @@ -1478,8 +1438,8 @@ void menu::draw_select_game(UINT32 flags) float visible_width = 1.0f - 4.0f * UI_BOX_LR_BORDER; float primary_left = (1.0f - visible_width) * 0.5f; float primary_width = visible_width; - bool is_swlist = ((item[0].flags & FLAG_UI_SWLIST) != 0); - bool is_favorites = ((item[0].flags & FLAG_UI_FAVORITE) != 0); + bool is_swlist = (item[0].flags & FLAG_UI_SWLIST); + bool is_favorites = (item[0].flags & FLAG_UI_FAVORITE); // draw background image if available if (ui().options().use_background_image() && bgrnd_bitmap->valid()) @@ -1496,7 +1456,7 @@ void menu::draw_select_game(UINT32 flags) if (!noinput) { mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button); - if (mouse_target != nullptr) + if (mouse_target) if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, *container, mouse_x, mouse_y)) mouse_hit = true; } @@ -1554,7 +1514,6 @@ void menu::draw_select_game(UINT32 flags) float line_y = visible_top + (float)linenum * line_height; int itemnum = top_line + linenum; const menu_item &pitem = item[itemnum]; - const char *itemtext = pitem.text; rgb_t fgcolor = UI_TEXT_COLOR; rgb_t bgcolor = UI_TEXT_BG_COLOR; rgb_t fgcolor3 = UI_CLONE_COLOR; @@ -1570,10 +1529,10 @@ void menu::draw_select_game(UINT32 flags) // if we're selected, draw with a different background if (itemnum == selected && m_focus == focused_menu::main) { - fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); - bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); - fgcolor3 = rgb_t(0xff, 0xcc, 0xcc, 0x00); - ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(255, 43, 43, 43), + fgcolor = rgb_t(0xff, 0xff, 0x00); + bgcolor = rgb_t(0xff, 0xff, 0xff); + fgcolor3 = rgb_t(0xcc, 0xcc, 0x00); + ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } // else if the mouse is over this item, draw with a different background @@ -1587,7 +1546,7 @@ void menu::draw_select_game(UINT32 flags) { fgcolor = fgcolor3 = UI_MOUSEOVER_COLOR; bgcolor = UI_MOUSEOVER_BG_COLOR; - ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(255, 43, 43, 43), + ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } @@ -1610,9 +1569,10 @@ void menu::draw_select_game(UINT32 flags) hover = HOVER_ARROW_DOWN; } // if we're just a divider, draw a line - else if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + else if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + // draw the item centered else if (pitem.subtext == nullptr) { @@ -1632,26 +1592,25 @@ void menu::draw_select_game(UINT32 flags) space = ud_arrow_width * 1.5f; } - ui().draw_text_full(container, itemtext, effective_left + space, line_y, effective_width - space, JUSTIFY_LEFT, WRAP_TRUNCATE, + ui().draw_text_full(container, pitem.text, effective_left + space, line_y, effective_width - space, JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, nullptr, nullptr); } else { int item_invert = pitem.flags & FLAG_INVERT; - const char *subitem_text = pitem.subtext; float item_width, subitem_width; // compute right space for subitem - ui().draw_text_full(container, subitem_text, effective_left, line_y, ui().get_string_width(pitem.subtext), + ui().draw_text_full(container, pitem.subtext, effective_left, line_y, ui().get_string_width(pitem.subtext), JUSTIFY_RIGHT, WRAP_NEVER, DRAW_NONE, item_invert ? fgcolor3 : fgcolor, bgcolor, &subitem_width, nullptr); subitem_width += gutter_width; // draw the item left-justified - ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width - subitem_width, + ui().draw_text_full(container, pitem.text, effective_left, line_y, effective_width - subitem_width, JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, &item_width, nullptr); // draw the subitem right-justified - ui().draw_text_full(container, subitem_text, effective_left + item_width, line_y, effective_width - item_width, + ui().draw_text_full(container, pitem.subtext, effective_left + item_width, line_y, effective_width - item_width, JUSTIFY_RIGHT, WRAP_NEVER, DRAW_NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, nullptr, nullptr); } } @@ -1659,7 +1618,6 @@ void menu::draw_select_game(UINT32 flags) for (size_t count = visible_items; count < item.size(); count++) { const menu_item &pitem = item[count]; - const char *itemtext = pitem.text; float line_x0 = x1 + 0.5f * UI_LINE_WIDTH; float line_y0 = line; float line_x1 = x2 - 0.5f * UI_LINE_WIDTH; @@ -1673,9 +1631,9 @@ void menu::draw_select_game(UINT32 flags) // if we're selected, draw with a different background if (count == selected && m_focus == focused_menu::main) { - fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); - bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); - ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(255, 43, 43, 43), + fgcolor = rgb_t(0xff, 0xff, 0x00); + bgcolor = rgb_t(0xff, 0xff, 0xff); + ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } // else if the mouse is over this item, draw with a different background @@ -1686,11 +1644,11 @@ void menu::draw_select_game(UINT32 flags) highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor); } - if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line + 0.5f * line_height, visible_left + visible_width, line + 0.5f * line_height, UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); else - ui().draw_text_full(container, itemtext, effective_left, line, effective_width, JUSTIFY_CENTER, WRAP_TRUNCATE, + ui().draw_text_full(container, pitem.text, effective_left, line, effective_width, JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); line += line_height; } @@ -1710,8 +1668,7 @@ void menu::draw_select_game(UINT32 flags) visitems = visible_lines - (top_line != 0) - (top_line + visible_lines != visible_items); // reset redraw icon stage - if (!is_swlist) - ui_globals::redraw_icon = false; + if (!is_swlist) ui_globals::redraw_icon = false; // noinput if (noinput) @@ -1731,21 +1688,21 @@ void menu::draw_select_game(UINT32 flags) void menu::get_title_search(std::string &snaptext, std::string &searchstr) { // get arts title text - snaptext.assign(_(arts_info[ui_globals::curimage_view].title)); + snaptext.assign(_(arts_info[ui_globals::curimage_view].first)); // get search path std::string addpath; if (ui_globals::curimage_view == SNAPSHOT_VIEW) { emu_options moptions; - searchstr = machine().options().value(arts_info[ui_globals::curimage_view].path); - addpath = moptions.value(arts_info[ui_globals::curimage_view].path); + searchstr = machine().options().value(arts_info[ui_globals::curimage_view].second); + addpath = moptions.value(arts_info[ui_globals::curimage_view].second); } else { ui_options moptions; - searchstr = ui().options().value(arts_info[ui_globals::curimage_view].path); - addpath = moptions.value(arts_info[ui_globals::curimage_view].path); + searchstr = ui().options().value(arts_info[ui_globals::curimage_view].second); + addpath = moptions.value(arts_info[ui_globals::curimage_view].second); } std::string tmp(searchstr); @@ -1768,7 +1725,7 @@ void menu::get_title_search(std::string &snaptext, std::string &searchstr) void menu::handle_main_keys(UINT32 flags) { - bool ignorepause = menu::stack_has_special_main_menu(); + auto ignorepause = menu::stack_has_special_main_menu(); // bail if no items if (item.size() == 0) @@ -1979,9 +1936,9 @@ void menu::handle_main_keys(UINT32 flags) // handle input events for main menu //------------------------------------------------- -void menu::handle_main_events(UINT32 flags) +void menu::handle_main_events() { - bool stop = false; + auto stop = false; ui_event local_menu_event; if (m_pressed) @@ -1989,8 +1946,8 @@ void menu::handle_main_events(UINT32 flags) bool pressed = mouse_pressed(); INT32 m_target_x, m_target_y; bool m_button; - render_target *mouse_target = machine().ui_input().find_mouse(&m_target_x, &m_target_y, &m_button); - if (mouse_target != nullptr && m_button && (hover == HOVER_ARROW_DOWN || hover == HOVER_ARROW_UP)) + auto mouse_target = machine().ui_input().find_mouse(&m_target_x, &m_target_y, &m_button); + if (mouse_target && m_button && (hover == HOVER_ARROW_DOWN || hover == HOVER_ARROW_UP)) { if (pressed) machine().ui_input().push_mouse_down_event(mouse_target, m_target_x, m_target_y); @@ -2185,7 +2142,7 @@ void menu::handle_main_events(UINT32 flags) float menu::draw_right_box_title(float x1, float y1, float x2, float y2) { - float line_height = ui().get_line_height(); + auto line_height = ui().get_line_height(); float midl = (x2 - x1) * 0.5f; // add outlined box for options @@ -2202,7 +2159,7 @@ float menu::draw_right_box_title(float x1, float y1, float x2, float y2) float text_size = 1.0f; for (auto & elem : buffer) { - float textlen = ui().get_string_width(elem.c_str()) + 0.01f; + auto textlen = ui().get_string_width(elem.c_str()) + 0.01f; float tmp_size = (textlen > midl) ? (midl / textlen) : 1.0f; text_size = MIN(text_size, tmp_size); } @@ -2232,10 +2189,10 @@ float menu::draw_right_box_title(float x1, float y1, float x2, float y2) if (m_focus == focused_menu::righttop && ui_globals::rpanel == cells) { - fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); - bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); + fgcolor = rgb_t(0xff, 0xff, 0x00); + bgcolor = rgb_t(0xff, 0xff, 0xff); ui().draw_textured_box(container, x1 + UI_LINE_WIDTH, y1 + UI_LINE_WIDTH, x1 + midl - UI_LINE_WIDTH, y1 + line_height, - bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + bgcolor, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } else if (bgcolor == UI_MOUSEOVER_BG_COLOR) container->add_rect(x1 + UI_LINE_WIDTH, y1 + UI_LINE_WIDTH, x1 + midl - UI_LINE_WIDTH, y1 + line_height, @@ -2255,25 +2212,25 @@ float menu::draw_right_box_title(float x1, float y1, float x2, float y2) std::string menu::arts_render_common(float origx1, float origy1, float origx2, float origy2) { - float line_height = ui().get_line_height(); + auto line_height = ui().get_line_height(); std::string snaptext, searchstr; - float title_size = 0.0f; - float txt_lenght = 0.0f; - float gutter_width = 0.4f * line_height * machine().render().ui_aspect() * 1.3f; + auto title_size = 0.0f; + auto txt_lenght = 0.0f; + auto gutter_width = 0.4f * line_height * machine().render().ui_aspect() * 1.3f; get_title_search(snaptext, searchstr); // apply title to right panel for (int x = FIRST_VIEW; x < LAST_VIEW; x++) { - ui().draw_text_full(container, _(arts_info[x].title), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, + ui().draw_text_full(container, _(arts_info[x].first), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NONE, rgb_t::white, rgb_t::black, &txt_lenght, nullptr); txt_lenght += 0.01f; title_size = MAX(txt_lenght, title_size); } - rgb_t fgcolor = (m_focus == focused_menu::rightbottom) ? rgb_t(0xff, 0xff, 0xff, 0x00) : UI_TEXT_COLOR; - rgb_t bgcolor = (m_focus == focused_menu::rightbottom) ? rgb_t(0xff, 0xff, 0xff, 0xff) : UI_TEXT_BG_COLOR; + rgb_t fgcolor = (m_focus == focused_menu::rightbottom) ? rgb_t(0xff, 0xff, 0x00) : UI_TEXT_COLOR; + rgb_t bgcolor = (m_focus == focused_menu::rightbottom) ? rgb_t(0xff, 0xff, 0xff) : UI_TEXT_BG_COLOR; float middle = origx2 - origx1; // check size @@ -2283,7 +2240,7 @@ std::string menu::arts_render_common(float origx1, float origy1, float origx2, f if (bgcolor != UI_TEXT_BG_COLOR) ui().draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), - origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + origy1 + line_height, bgcolor, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); ui().draw_text_full(container, snaptext.c_str(), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); @@ -2320,16 +2277,11 @@ void menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software) y2 -= UI_BOX_TB_BORDER; render_texture **t_texture = (software) ? sw_toolbar_texture : toolbar_texture; - bitmap_argb32 **t_bitmap = (software) ? sw_toolbar_bitmap : toolbar_bitmap; + auto t_bitmap = (software) ? sw_toolbar_bitmap : toolbar_bitmap; int m_valid = 0; - for (int x = 0; x < UI_TOOLBAR_BUTTONS; ++x) - { - if (t_bitmap[x]->valid()) - { - m_valid++; - } - } + for (auto & e : t_bitmap) + if (e->valid()) m_valid++; float space_x = (y2 - y1) * container->manager().ui_aspect(); float total = (m_valid * space_x) + ((m_valid - 1) * 0.001f); @@ -2337,7 +2289,6 @@ void menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software) x2 = x1 + space_x; for (int z = 0; z < UI_TOOLBAR_BUTTONS; ++z) - { if (t_bitmap[z]->valid()) { rgb_t color(0xEFEFEFEF); @@ -2353,7 +2304,6 @@ void menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software) x1 += space_x + ((z < UI_TOOLBAR_BUTTONS - 1) ? 0.001f : 0.0f); x2 = x1 + space_x; } - } } @@ -2361,7 +2311,7 @@ void menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software) // perform rendering of image //------------------------------------------------- -void menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float origy1, float origx2, float origy2, bool software) +void menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float origy1, float origx2, float origy2) { bool no_available = false; float line_height = ui().get_line_height(); @@ -2390,11 +2340,11 @@ void menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float ori int panel_height_pixel = panel_height * screen_height; // Calculate resize ratios for resizing - float ratioW = (float)panel_width_pixel / tmp_bitmap->width(); - float ratioH = (float)panel_height_pixel / tmp_bitmap->height(); - float ratioI = (float)tmp_bitmap->height() / tmp_bitmap->width(); - int dest_xPixel = tmp_bitmap->width(); - int dest_yPixel = tmp_bitmap->height(); + auto ratioW = (float)panel_width_pixel / tmp_bitmap->width(); + auto ratioH = (float)panel_height_pixel / tmp_bitmap->height(); + auto ratioI = (float)tmp_bitmap->height() / tmp_bitmap->width(); + auto dest_xPixel = tmp_bitmap->width(); + auto dest_yPixel = tmp_bitmap->height(); // force 4:3 ratio min if (ui().options().forced_4x3_snapshot() && ratioI < 0.75f && ui_globals::curimage_view == SNAPSHOT_VIEW) @@ -2451,9 +2401,9 @@ void menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float ori void menu::draw_common_arrow(float origx1, float origy1, float origx2, float origy2, int current, int dmin, int dmax, float title_size) { - float line_height = ui().get_line_height(); - float lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); - float gutter_width = lr_arrow_width * 1.3f; + auto line_height = ui().get_line_height(); + auto lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); + auto gutter_width = lr_arrow_width * 1.3f; // set left-right arrows dimension float ar_x0 = 0.5f * (origx2 + origx1) + 0.5f * title_size + gutter_width - lr_arrow_width; @@ -2472,14 +2422,14 @@ void menu::draw_common_arrow(float origx1, float origy1, float origx2, float ori // set hover if (mouse_hit && ar_x0 <= mouse_x && ar_x1 > mouse_x && ar_y0 <= mouse_y && ar_y1 > mouse_y && current != dmax) { - ui().draw_textured_box(container, ar_x0 + 0.01f, ar_y0, ar_x1 - 0.01f, ar_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(255, 43, 43, 43), + ui().draw_textured_box(container, ar_x0 + 0.01f, ar_y0, ar_x1 - 0.01f, ar_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); hover = HOVER_UI_RIGHT; fgcolor_right = UI_MOUSEOVER_COLOR; } else if (mouse_hit && al_x0 <= mouse_x && al_x1 > mouse_x && al_y0 <= mouse_y && al_y1 > mouse_y && current != dmin) { - ui().draw_textured_box(container, al_x0 + 0.01f, al_y0, al_x1 - 0.01f, al_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(255, 43, 43, 43), + ui().draw_textured_box(container, al_x0 + 0.01f, al_y0, al_x1 - 0.01f, al_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); hover = HOVER_UI_LEFT; fgcolor_left = UI_MOUSEOVER_COLOR; @@ -2504,9 +2454,9 @@ void menu::draw_common_arrow(float origx1, float origy1, float origx2, float ori void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) { static const game_driver *olddriver[MAX_ICONS_RENDER] = { nullptr }; - float x1 = x0 + ui().get_line_height() * container->manager().ui_aspect(container); - float y1 = y0 + ui().get_line_height(); - const game_driver *driver = (const game_driver *)selectedref; + auto x1 = x0 + ui().get_line_height() * container->manager().ui_aspect(container); + auto y1 = y0 + ui().get_line_height(); + auto driver = (const game_driver *)selectedref; if (olddriver[linenum] != driver || ui_globals::redraw_icon) { @@ -2516,7 +2466,7 @@ void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) bool cloneof = strcmp(driver->parent, "0"); if (cloneof) { - int cx = driver_list::find(driver->parent); + auto cx = driver_list::find(driver->parent); if (cx != -1 && ((driver_list::driver(cx).flags & MACHINE_IS_BIOS_ROOT) != 0)) cloneof = false; } @@ -2545,8 +2495,8 @@ void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) { float panel_width = x1 - x0; float panel_height = y1 - y0; - int screen_width = machine().render().ui_target().width(); - int screen_height = machine().render().ui_target().height(); + auto screen_width = machine().render().ui_target().width(); + auto screen_height = machine().render().ui_target().height(); if (machine().render().ui_target().orientation() & ORIENTATION_SWAP_XY) std::swap(screen_height, screen_width); @@ -2555,10 +2505,10 @@ void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) int panel_height_pixel = panel_height * screen_height; // Calculate resize ratios for resizing - float ratioW = (float)panel_width_pixel / tmp->width(); - float ratioH = (float)panel_height_pixel / tmp->height(); - int dest_xPixel = tmp->width(); - int dest_yPixel = tmp->height(); + auto ratioW = (float)panel_width_pixel / tmp->width(); + auto ratioH = (float)panel_height_pixel / tmp->height(); + auto dest_xPixel = tmp->width(); + auto dest_yPixel = tmp->height(); if (ratioW < 1 || ratioH < 1) { @@ -2614,7 +2564,7 @@ void menu::info_arrow(int ub, float origx1, float origx2, float oy1, float line_ if (mouse_hit && origx1 <= mouse_x && origx2 > mouse_x && oy1 <= mouse_y && oy1 + (line_height * text_size) > mouse_y) { ui().draw_textured_box(container, origx1 + 0.01f, oy1, origx2 - 0.01f, oy1 + (line_height * text_size), UI_MOUSEOVER_BG_COLOR, - rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); hover = (!ub) ? HOVER_DAT_UP : HOVER_DAT_DOWN; fgcolor = UI_MOUSEOVER_COLOR; } @@ -2629,24 +2579,22 @@ void menu::info_arrow(int ub, float origx1, float origx2, float oy1, float line_ void menu::draw_palette_menu() { - float line_height = ui().get_line_height(); - float lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); - float ud_arrow_width = line_height * machine().render().ui_aspect(); - float gutter_width = lr_arrow_width * 1.3f; + auto line_height = ui().get_line_height(); + auto lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); + auto ud_arrow_width = line_height * machine().render().ui_aspect(); + auto gutter_width = lr_arrow_width * 1.3f; int itemnum, linenum; if (ui().options().use_background_image() && &machine().system() == &GAME_NAME(___empty) && bgrnd_bitmap->valid()) container->add_quad(0.0f, 0.0f, 1.0f, 1.0f, rgb_t::white, bgrnd_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // compute the width and height of the full menu - float visible_width = 0; - float visible_main_menu_height = 0; - for (itemnum = 0; itemnum < item.size(); itemnum++) + auto visible_width = 0.0f; + auto visible_main_menu_height = 0.0f; + for (auto & pitem : item) { - const menu_item &pitem = item[itemnum]; - // compute width of left hand side - float total_width = gutter_width + ui().get_string_width(pitem.text) + gutter_width; + auto total_width = gutter_width + ui().get_string_width(pitem.text) + gutter_width; // add in width of right hand side if (pitem.subtext) @@ -2661,7 +2609,7 @@ void menu::draw_palette_menu() } // account for extra space at the top and bottom - float visible_extra_menu_height = customtop + custombottom; + auto visible_extra_menu_height = customtop + custombottom; // add a little bit of slop for rounding visible_width += 0.01f; @@ -2778,13 +2726,13 @@ void menu::draw_palette_menu() } // if we're just a divider, draw a line - else if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + else if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // if we don't have a subitem, just draw the string centered else if (pitem.subtext == nullptr) ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, - JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); + JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); // otherwise, draw the item on the left and the subitem text on the right else @@ -2817,9 +2765,9 @@ void menu::draw_palette_menu() void menu::draw_dats_menu() { - float line_height = ui().get_line_height(); - float ud_arrow_width = line_height * machine().render().ui_aspect(); - float gutter_width = 0.52f * line_height * machine().render().ui_aspect(); + auto line_height = ui().get_line_height(); + auto ud_arrow_width = line_height * machine().render().ui_aspect(); + auto gutter_width = 0.52f * line_height * machine().render().ui_aspect(); mouse_x = -1, mouse_y = -1; float visible_width = 1.0f - 2.0f * UI_BOX_LR_BORDER; float visible_left = (1.0f - visible_width) * 0.5f; @@ -2938,7 +2886,7 @@ void menu::draw_dats_menu() if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y && is_selectable(pitem)) hover = count; - if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line + 0.5f * line_height, visible_left + visible_width, line + 0.5f * line_height, UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); else @@ -2971,28 +2919,13 @@ void menu::set_pressed() void menu::extra_text_draw_box(float origx1, float origx2, float origy, float yspan, const char *text, int direction) { - float text_width, text_height; - float width, maxwidth; - float x1, y1, x2, y2, temp; - // get the size of the text - ui().draw_text_full(container,text, 0.0f, 0.0f, 1.0f, JUSTIFY_LEFT, WRAP_WORD, - DRAW_NONE, rgb_t::white, rgb_t::black, &text_width, &text_height); - width = text_width + (2 * UI_BOX_LR_BORDER); - maxwidth = MAX(width, origx2 - origx1); + auto layout = ui().create_layout(container); + layout.add_text(text); - // compute our bounds - x1 = 0.5f - 0.5f * maxwidth; - x2 = x1 + maxwidth; - y1 = origy + (yspan * direction); - y2 = origy + (UI_BOX_TB_BORDER * direction); - - if (y1 > y2) - { - temp = y1; - y1 = y2; - y2 = temp; - } + // position this extra text + float x1, y1, x2, y2; + extra_text_position(origx1, origx2, origy, yspan, layout, direction, x1, y1, x2, y2); // draw a box ui().draw_outlined_box(container,x1, y1, x2, y2, UI_BACKGROUND_COLOR); @@ -3002,8 +2935,29 @@ void menu::extra_text_draw_box(float origx1, float origx2, float origy, float ys y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container,text, x1, y1, text_width, JUSTIFY_LEFT, WRAP_WORD, - DRAW_NORMAL, rgb_t::white, rgb_t::black, nullptr, nullptr); + layout.emit(container, x1, y1); +} + + +//------------------------------------------------- +// extra_text_position - given extra text that has +// been put into a layout, position it +//------------------------------------------------- + +void menu::extra_text_position(float origx1, float origx2, float origy, float yspan, text_layout &layout, + int direction, float &x1, float &y1, float &x2, float &y2) +{ + float width = layout.actual_width() + (2 * UI_BOX_LR_BORDER); + float maxwidth = MAX(width, origx2 - origx1); + + // compute our bounds + x1 = 0.5f - 0.5f * maxwidth; + x2 = x1 + maxwidth; + y1 = origy + (yspan * direction); + y2 = origy + (UI_BOX_TB_BORDER * direction); + + if (y1 > y2) + std::swap(y1, y2); } @@ -3012,9 +2966,7 @@ void menu::extra_text_draw_box(float origx1, float origx2, float origy, float ys // and footer text //------------------------------------------------- -void menu::extra_text_render(float top, float bottom, - float origx1, float origy1, float origx2, float origy2, - const char *header, const char *footer) +void menu::extra_text_render(float top, float bottom, float origx1, float origy1, float origx2, float origy2, const char *header, const char *footer) { header = ((header != nullptr) && (header[0] != '\0')) ? header : nullptr; footer = ((footer != nullptr) && (footer[0] != '\0')) ? footer : nullptr; diff --git a/src/frontend/mame/ui/menu.h b/src/frontend/mame/ui/menu.h index e450cf7399b..e053409114f 100644 --- a/src/frontend/mame/ui/menu.h +++ b/src/frontend/mame/ui/menu.h @@ -268,7 +268,7 @@ protected: const event *process(UINT32 flags, float x0 = 0.0f, float y0 = 0.0f); void process_parent() { m_parent->process(PROCESS_NOINPUT); } - bool is_focus(focused_menu focus) const { return m_focus == focus; } + focused_menu get_focus() const { return m_focus; } void set_focus(focused_menu focus) { m_focus = focus; } // draw right box @@ -280,10 +280,15 @@ protected: // images render std::string arts_render_common(float origx1, float origy1, float origx2, float origy2); - void arts_render_images(bitmap_argb32 *bitmap, float origx1, float origy1, float origx2, float origy2, bool software); + void arts_render_images(bitmap_argb32 *bitmap, float origx1, float origy1, float origx2, float origy2); // draw header and footer text void extra_text_render(float top, float bottom, float origx1, float origy1, float origx2, float origy2, const char *header, const char *footer); + void extra_text_position(float origx1, float origx2, float origy, float yspan, text_layout &layout, + int direction, float &x1, float &y1, float &x2, float &y2); + + // custom events + virtual bool custom_mouse_down() { return false; } template <typename T> static T *topmost_menu() { return dynamic_cast<T *>(menu_stack.get()); } @@ -312,7 +317,7 @@ private: static std::unique_ptr<bitmap_argb32> no_avail_bitmap, bgrnd_bitmap, star_bitmap; static render_texture *bgrnd_texture, *star_texture; - static bitmap_argb32 *icons_bitmap[]; + static std::vector<std::unique_ptr<bitmap_argb32>> icons_bitmap; static render_texture *icons_texture[]; // request the specific handling of the game selection main menu @@ -322,7 +327,7 @@ private: static void stack_push(std::unique_ptr<menu> &&menu); // toolbar - static bitmap_argb32 *toolbar_bitmap[], *sw_toolbar_bitmap[]; + static std::vector<std::shared_ptr<bitmap_argb32>> toolbar_bitmap, sw_toolbar_bitmap; static render_texture *toolbar_texture[], *sw_toolbar_texture[]; // draw game list @@ -340,7 +345,7 @@ private: void handle_main_keys(UINT32 flags); // handle mouse - void handle_main_events(UINT32 flags); + void handle_main_events(); void draw_icon(int linenum, void *selectedref, float x1, float y1); void extra_text_draw_box(float origx1, float origx2, float origy, float yspan, const char *text, int direction); diff --git a/src/frontend/mame/ui/miscmenu.cpp b/src/frontend/mame/ui/miscmenu.cpp index 3158055febd..b17ff5fefa8 100644 --- a/src/frontend/mame/ui/miscmenu.cpp +++ b/src/frontend/mame/ui/miscmenu.cpp @@ -450,12 +450,7 @@ void menu_crosshair::populate() int length = strlen(dir->name); /* look for files ending in .png with a name not larger then 9 chars*/ - if ((length > 4) && (length <= CROSSHAIR_PIC_NAME_LENGTH + 4) && - dir->name[length - 4] == '.' && - tolower((UINT8)dir->name[length - 3]) == 'p' && - tolower((UINT8)dir->name[length - 2]) == 'n' && - tolower((UINT8)dir->name[length - 1]) == 'g') - + if ((length > 4) && (length <= CROSSHAIR_PIC_NAME_LENGTH + 4) && core_filename_ends_with(dir->name, ".png")) { /* remove .png from length */ length -= 4; @@ -826,7 +821,6 @@ void menu_machine_configure::custom_render(void *selectedref, float top, float b // compute our bounds float x1 = 0.5f - 0.5f * maxwidth; -// float x1 = origx1; float x2 = x1 + maxwidth; float y1 = origy1 - top; float y2 = origy1 - UI_BOX_TB_BORDER; @@ -900,7 +894,11 @@ menu_plugins_configure::~menu_plugins_configure() { emu_file file_plugin(OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); if (file_plugin.open("plugin.ini") != osd_file::error::NONE) - throw emu_fatalerror("Unable to create file plugin.ini\n"); + // Can't throw in a destructor, so let's ignore silently for + // now. We shouldn't write files in a destructor in any case. + // + // throw emu_fatalerror("Unable to create file plugin.ini\n"); + return; // generate the updated INI file_plugin.puts(mame_machine_manager::instance()->plugins().output_ini().c_str()); } @@ -983,4 +981,4 @@ void menu_plugins_configure::custom_render(void *selectedref, float top, float b DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } -} // namespace ui
\ No newline at end of file +} // namespace ui diff --git a/src/frontend/mame/ui/selector.cpp b/src/frontend/mame/ui/selector.cpp index a60bb6ce070..502dab9bbc8 100644 --- a/src/frontend/mame/ui/selector.cpp +++ b/src/frontend/mame/ui/selector.cpp @@ -235,7 +235,6 @@ void menu_selector::find_matches(const char *str) if (m_str_items[index] == "_skip_") continue; - // pick the best match between driver name and description int curpenalty = fuzzy_substring(str, m_str_items[index]); // insert into the sorted table of matches diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp index 7143096f3b4..e53164433ed 100644 --- a/src/frontend/mame/ui/selgame.cpp +++ b/src/frontend/mame/ui/selgame.cpp @@ -217,14 +217,14 @@ void menu_select_game::handle() else if (menu_event->iptkey == IPT_UI_SELECT) { // handle selections - if (is_focus(focused_menu::main)) + if (get_focus() == focused_menu::main) { if (isfavorite()) inkey_select_favorite(menu_event); else inkey_select(menu_event); } - else if (is_focus(focused_menu::left)) + else if (get_focus() == focused_menu::left) { l_hover = highlight; check_filter = true; @@ -236,6 +236,11 @@ void menu_select_game::handle() // handle IPT_CUSTOM (mouse right click) if (!isfavorite()) menu::stack_push<menu_machine_configure>(ui(), container, (const game_driver *)m_prev_selected, menu_event->mouse.x0, menu_event->mouse.y0); + else + { + ui_software_info *sw = (ui_software_info *)m_prev_selected; + menu::stack_push<menu_machine_configure>(ui(), container, (const game_driver *)sw->driver, menu_event->mouse.x0, menu_event->mouse.y0); + } } else if (menu_event->iptkey == IPT_UI_LEFT) { @@ -417,7 +422,7 @@ void menu_select_game::handle() inkey_special(menu_event); } else if (menu_event->iptkey == IPT_UI_CONFIGURE) - inkey_configure(menu_event); + inkey_navigation(); else if (menu_event->iptkey == IPT_OTHER) { @@ -435,7 +440,7 @@ void menu_select_game::handle() } else if (menu_event->iptkey == IPT_UI_CONFIGURE) { - inkey_configure(menu_event); + inkey_navigation(); } else if (menu_event->iptkey == IPT_OTHER) { @@ -590,7 +595,7 @@ void menu_select_game::populate() } } - item_append(MENU_SEPARATOR_ITEM, nullptr, FLAG_UI, nullptr); + item_append(menu_item_type::SEPARATOR); // add special items if (menu::stack_has_special_main_menu()) @@ -664,11 +669,11 @@ void menu_select_game::build_available_list() // now check and include NONE_NEEDED for (int x = 0; x < m_total; ++x) { - const game_driver *driver = &driver_list::driver(x); + auto driver = &driver_list::driver(x); if (!m_included[x] && driver != &GAME_NAME(___empty)) { const rom_entry *rom = driver->rom; - bool noroms = true; + auto noroms = true; // check NO-DUMP for (; !ROMENTRY_ISEND(rom) && noroms == true; ++rom) @@ -685,8 +690,8 @@ void menu_select_game::build_available_list() int cx = driver_list::clone(*driver); if (cx != -1 && m_included[cx]) { - const game_driver *drv = &driver_list::driver(cx); - const rom_entry *parentrom = drv->rom; + auto drv = &driver_list::driver(cx); + auto parentrom = drv->rom; if ((rom = driver->rom) == parentrom) noroms = true; @@ -703,7 +708,7 @@ void menu_select_game::build_available_list() continue; UINT64 lenght = ROM_GETLENGTH(rom); - bool found = false; + auto found = false; for (parentrom = drv->rom; !ROMENTRY_ISEND(parentrom) && found == false; ++parentrom) { if (ROMENTRY_ISFILE(parentrom) && ROM_GETLENGTH(parentrom) == lenght) @@ -1028,8 +1033,7 @@ void menu_select_game::inkey_select(const event *menu_event) { if (m_prev_selected != nullptr) menu::stack_push<menu_machine_configure>(ui(), container, (const game_driver *)m_prev_selected); - else - return; + return; } // special case for configure plugins @@ -1093,18 +1097,16 @@ void menu_select_game::inkey_select_favorite(const event *menu_event) // special case for configure options if ((FPTR)ui_swinfo == CONF_OPTS) menu::stack_push<menu_game_options>(ui(), container); - /* special case for configure machine TODO + // special case for configure machine else if ((FPTR)ui_swinfo == CONF_MACHINE) { if (m_prev_selected != nullptr) { ui_software_info *swinfo = (ui_software_info *)m_prev_selected; - if (swinfo->startempty == 1) - menu::stack_push(ui(), container, swinfo->driver); + menu::stack_push<menu_machine_configure>(ui(), container, (const game_driver *)swinfo->driver); } - else - return; - } */ + return; + } // special case for configure plugins else if ((FPTR)ui_swinfo == CONF_PLUGINS) { @@ -1239,40 +1241,59 @@ void menu_select_game::inkey_special(const event *menu_event) } -void menu_select_game::inkey_configure(const event *menu_event) +void menu_select_game::inkey_navigation() { - if (is_focus(focused_menu::main)) + switch (get_focus()) { - if (selected <= visible_items) - { - m_prev_selected = item[selected].ref; - selected = visible_items + 1; - } - else - { - if (ui_globals::panels_status != HIDE_LEFT_PANEL) - set_focus(focused_menu::left); - - else if (ui_globals::panels_status == HIDE_BOTH) + case focused_menu::main: + if (selected <= visible_items) { - for (int x = 0; x < item.size(); ++x) - if (item[x].ref == m_prev_selected) - selected = x; + m_prev_selected = item[selected].ref; + selected = visible_items + 1; } else { + if (ui_globals::panels_status != HIDE_LEFT_PANEL) + set_focus(focused_menu::left); + + else if (ui_globals::panels_status == HIDE_BOTH) + { + for (int x = 0; x < item.size(); ++x) + if (item[x].ref == m_prev_selected) + selected = x; + } + else + { + set_focus(focused_menu::righttop); + } + } + break; + + case focused_menu::left: + if (ui_globals::panels_status != HIDE_RIGHT_PANEL) + { set_focus(focused_menu::righttop); } - } - } - else if (is_focus(focused_menu::left)) - { - if (ui_globals::panels_status != HIDE_RIGHT_PANEL) - { - set_focus(focused_menu::righttop); - } - else - { + else + { + set_focus(focused_menu::main); + if (m_prev_selected == nullptr) + { + selected = 0; + return; + } + + for (int x = 0; x < item.size(); ++x) + if (item[x].ref == m_prev_selected) + selected = x; + } + break; + + case focused_menu::righttop: + set_focus(focused_menu::rightbottom); + break; + + case focused_menu::rightbottom: set_focus(focused_menu::main); if (m_prev_selected == nullptr) { @@ -1283,24 +1304,7 @@ void menu_select_game::inkey_configure(const event *menu_event) for (int x = 0; x < item.size(); ++x) if (item[x].ref == m_prev_selected) selected = x; - } - } - else if (is_focus(focused_menu::righttop)) - { - set_focus(focused_menu::rightbottom); - } - else if (is_focus(focused_menu::rightbottom)) - { - set_focus(focused_menu::main); - if (m_prev_selected == nullptr) - { - selected = 0; - return; - } - - for (int x = 0; x < item.size(); ++x) - if (item[x].ref == m_prev_selected) - selected = x; + break; } } @@ -1677,6 +1681,9 @@ void menu_select_game::init_sorted_list() c_year::set(driver->year); } + for (auto & e : c_mnfct::uimap) + c_mnfct::ui.emplace_back(e.first); + // sort manufacturers - years and driver std::stable_sort(c_mnfct::ui.begin(), c_mnfct::ui.end()); std::stable_sort(c_year::ui.begin(), c_year::ui.end()); @@ -1860,7 +1867,7 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2) menu::highlight(container, x1, y1, x2, y1+ line_height_max, bgcolor); } - if (highlight == filter && is_focus(focused_menu::left)) + if (highlight == filter && get_focus() == focused_menu::left) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -2015,7 +2022,7 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy rgb_t fgcolor = UI_TEXT_COLOR; rgb_t bgcolor = UI_TEXT_BG_COLOR; - if (is_focus(focused_menu::rightbottom)) + if (get_focus() == focused_menu::rightbottom) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -2194,7 +2201,7 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy rgb_t fgcolor = UI_TEXT_COLOR; rgb_t bgcolor = UI_TEXT_BG_COLOR; - if (is_focus(focused_menu::rightbottom)) + if (get_focus() == focused_menu::rightbottom) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -2402,7 +2409,7 @@ void menu_select_game::arts_render(void *selectedref, float origx1, float origy1 olddriver = driver; ui_globals::switch_image = false; - arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2, false); + arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2); auto_free(machine(), tmp_bitmap); } @@ -2491,7 +2498,7 @@ void menu_select_game::arts_render(void *selectedref, float origx1, float origy1 oldsoft = soft; ui_globals::switch_image = false; - arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2, true); + arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2); auto_free(machine(), tmp_bitmap); } diff --git a/src/frontend/mame/ui/selgame.h b/src/frontend/mame/ui/selgame.h index fc4281d9117..074db944b4c 100644 --- a/src/frontend/mame/ui/selgame.h +++ b/src/frontend/mame/ui/selgame.h @@ -81,7 +81,7 @@ private: void inkey_select_favorite(const event *menu_event); void inkey_special(const event *menu_event); void inkey_export(); - void inkey_configure(const event *menu_event); + void inkey_navigation(); }; } // namespace ui diff --git a/src/frontend/mame/ui/selsoft.cpp b/src/frontend/mame/ui/selsoft.cpp index e650ce3ae1a..fa68affb36a 100644 --- a/src/frontend/mame/ui/selsoft.cpp +++ b/src/frontend/mame/ui/selsoft.cpp @@ -184,11 +184,11 @@ void menu_select_software::handle() else if (menu_event->iptkey == IPT_UI_SELECT) { // handle selections - if (is_focus(focused_menu::main)) + if (get_focus() == focused_menu::main) { inkey_select(menu_event); } - else if (is_focus(focused_menu::left)) + else if (get_focus() == focused_menu::left) { l_sw_hover = highlight; check_filter = true; @@ -300,14 +300,14 @@ void menu_select_software::handle() } else if (menu_event->iptkey == IPT_UI_CONFIGURE) - inkey_configure(menu_event); + inkey_navigation(); } if (menu_event && !menu_event->itemref) { if (menu_event->iptkey == IPT_UI_CONFIGURE) { - inkey_configure(menu_event); + inkey_navigation(); } else if (menu_event->iptkey == IPT_UI_LEFT) { @@ -363,7 +363,7 @@ void menu_select_software::handle() // handle UI_DOWN_FILTER highlight++; } - else if (menu_event->iptkey == IPT_OTHER && is_focus(focused_menu::left)) + else if (menu_event->iptkey == IPT_OTHER && get_focus() == focused_menu::left) { l_sw_hover = highlight; check_filter = true; @@ -493,7 +493,7 @@ void menu_select_software::populate() (void *)m_searchlist[curitem]); } - item_append(MENU_SEPARATOR_ITEM, nullptr, flags_ui, nullptr); + item_append(menu_item_type::SEPARATOR); // configure the custom rendering customtop = 4.0f * ui().get_line_height() + 5.0f * UI_BOX_TB_BORDER; @@ -987,40 +987,59 @@ void menu_select_software::inkey_special(const event *menu_event) } -void menu_select_software::inkey_configure(const event *menu_event) +void menu_select_software::inkey_navigation() { - if (is_focus(focused_menu::main)) + switch (get_focus()) { - if (selected <= visible_items) - { - m_prev_selected = item[selected].ref; - selected = visible_items + 1; - } - else - { - if (ui_globals::panels_status != HIDE_LEFT_PANEL) - set_focus(focused_menu::left); - - else if (ui_globals::panels_status == HIDE_BOTH) + case focused_menu::main: + if (selected <= visible_items) { - for (int x = 0; x < item.size(); ++x) - if (item[x].ref == m_prev_selected) - selected = x; + m_prev_selected = item[selected].ref; + selected = visible_items + 1; } else { + if (ui_globals::panels_status != HIDE_LEFT_PANEL) + set_focus(focused_menu::left); + + else if (ui_globals::panels_status == HIDE_BOTH) + { + for (int x = 0; x < item.size(); ++x) + if (item[x].ref == m_prev_selected) + selected = x; + } + else + { + set_focus(focused_menu::righttop); + } + } + break; + + case focused_menu::left: + if (ui_globals::panels_status != HIDE_RIGHT_PANEL) + { set_focus(focused_menu::righttop); } - } - } - else if (is_focus(focused_menu::left)) - { - if (ui_globals::panels_status != HIDE_RIGHT_PANEL) - { - set_focus(focused_menu::righttop); - } - else - { + else + { + set_focus(focused_menu::main); + if (m_prev_selected == nullptr) + { + selected = 0; + return; + } + + for (int x = 0; x < item.size(); ++x) + if (item[x].ref == m_prev_selected) + selected = x; + } + break; + + case focused_menu::righttop: + set_focus(focused_menu::rightbottom); + break; + + case focused_menu::rightbottom: set_focus(focused_menu::main); if (m_prev_selected == nullptr) { @@ -1031,24 +1050,7 @@ void menu_select_software::inkey_configure(const event *menu_event) for (int x = 0; x < item.size(); ++x) if (item[x].ref == m_prev_selected) selected = x; - } - } - else if (is_focus(focused_menu::righttop)) - { - set_focus(focused_menu::rightbottom); - } - else if (is_focus(focused_menu::rightbottom)) - { - set_focus(focused_menu::main); - if (m_prev_selected == nullptr) - { - selected = 0; - return; - } - - for (int x = 0; x < item.size(); ++x) - if (item[x].ref == m_prev_selected) - selected = x; + break; } } @@ -1243,12 +1245,12 @@ void menu_select_software::build_list(std::vector<ui_software_info *> &s_drivers case UI_SW_AVAILABLE: if (s_driver->available) m_displaylist.push_back(s_driver); - break; + break; case UI_SW_UNAVAILABLE: if (!s_driver->available) m_displaylist.push_back(s_driver); - break; + break; case UI_SW_SUPPORTED: if (s_driver->supported == SOFTWARE_SUPPORTED_YES) @@ -1446,7 +1448,7 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float hover = phover + filter; } - if (highlight == filter && is_focus(focused_menu::left)) + if (highlight == filter && get_focus() == focused_menu::left) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -1571,7 +1573,7 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o rgb_t fgcolor = UI_TEXT_COLOR; rgb_t bgcolor = UI_TEXT_BG_COLOR; - if (is_focus(focused_menu::rightbottom)) + if (get_focus() == focused_menu::rightbottom) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -1605,7 +1607,7 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o rgb_t fgcolor = UI_TEXT_COLOR; rgb_t bgcolor = UI_TEXT_BG_COLOR; - if (is_focus(focused_menu::rightbottom)) + if (get_focus() == focused_menu::rightbottom) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -1767,7 +1769,7 @@ void menu_select_software::arts_render(void *selectedref, float origx1, float or olddriver = driver; ui_globals::switch_image = false; - arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2, false); + arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2); auto_free(machine(), tmp_bitmap); } @@ -1856,7 +1858,7 @@ void menu_select_software::arts_render(void *selectedref, float origx1, float or oldsoft = soft; ui_globals::switch_image = false; - arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2, true); + arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2); auto_free(machine(), tmp_bitmap); } diff --git a/src/frontend/mame/ui/selsoft.h b/src/frontend/mame/ui/selsoft.h index f5cca6a2ac5..478f7add19d 100644 --- a/src/frontend/mame/ui/selsoft.h +++ b/src/frontend/mame/ui/selsoft.h @@ -61,7 +61,7 @@ private: // handlers void inkey_select(const event *menu_event); void inkey_special(const event *menu_event); - void inkey_configure(const event *menu_event); + void inkey_navigation(); }; class software_parts : public menu diff --git a/src/frontend/mame/ui/simpleselgame.cpp b/src/frontend/mame/ui/simpleselgame.cpp index a29cf56e385..19cbbe5941f 100644 --- a/src/frontend/mame/ui/simpleselgame.cpp +++ b/src/frontend/mame/ui/simpleselgame.cpp @@ -122,7 +122,7 @@ void simple_menu_select_game::handle() inkey_select(menu_event); break; case IPT_UI_CANCEL: - inkey_cancel(menu_event); + inkey_cancel(); break; case IPT_SPECIAL: inkey_special(menu_event); @@ -182,7 +182,7 @@ void simple_menu_select_game::inkey_select(const event *menu_event) // inkey_cancel //------------------------------------------------- -void simple_menu_select_game::inkey_cancel(const event *menu_event) +void simple_menu_select_game::inkey_cancel() { // escape pressed with non-empty text clears the text if (m_search[0] != 0) diff --git a/src/frontend/mame/ui/simpleselgame.h b/src/frontend/mame/ui/simpleselgame.h index 707777937b4..ee185d5b4a6 100644 --- a/src/frontend/mame/ui/simpleselgame.h +++ b/src/frontend/mame/ui/simpleselgame.h @@ -44,7 +44,7 @@ private: // internal methods void build_driver_list(); void inkey_select(const event *menu_event); - void inkey_cancel(const event *menu_event); + void inkey_cancel(); void inkey_special(const event *menu_event); }; diff --git a/src/frontend/mame/ui/slotopt.cpp b/src/frontend/mame/ui/slotopt.cpp index 2da3a411599..5c97dc594a0 100644 --- a/src/frontend/mame/ui/slotopt.cpp +++ b/src/frontend/mame/ui/slotopt.cpp @@ -49,12 +49,12 @@ int menu_slot_devices::slot_get_current_index(device_slot_interface &slot) if (current != nullptr) { int val = 0; - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { - if (&option == current) + if (option.second.get() == current) return val; - if (option.selectable()) + if (option.second->selectable()) val++; } } @@ -68,8 +68,8 @@ int menu_slot_devices::slot_get_current_index(device_slot_interface &slot) int menu_slot_devices::slot_get_length(device_slot_interface &slot) { int val = 0; - for (const device_slot_option &option : slot.option_list()) - if (option.selectable()) + for (auto &option : slot.option_list()) + if (option.second->selectable()) val++; return val; @@ -117,12 +117,12 @@ const char *menu_slot_devices::slot_get_option(device_slot_interface &slot, int if (index >= 0) { int val = 0; - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { if (val == index) - return option.name(); + return option.second->name(); - if (option.selectable()) + if (option.second->selectable()) val++; } } diff --git a/src/frontend/mame/ui/text.cpp b/src/frontend/mame/ui/text.cpp new file mode 100644 index 00000000000..c029c410ff4 --- /dev/null +++ b/src/frontend/mame/ui/text.cpp @@ -0,0 +1,539 @@ +// license:BSD-3-Clause +// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods +/********************************************************************* + + text.cpp + + Text functionality for MAME's crude user interface + +*********************************************************************/ + +#include "text.h" +#include "rendfont.h" +#include "render.h" + +namespace ui { + +/*************************************************************************** +INLINE FUNCTIONS +***************************************************************************/ + +//------------------------------------------------- +// is_space_character +//------------------------------------------------- + +inline bool is_space_character(unicode_char ch) +{ + return ch == ' '; +} + + +//------------------------------------------------- +// is_breakable_char - is a given unicode +// character a possible line break? +//------------------------------------------------- + +inline bool is_breakable_char(unicode_char ch) +{ + // regular spaces and hyphens are breakable + if (is_space_character(ch) || ch == '-') + return true; + + // In the following character sets, any character is breakable: + // Hiragana (3040-309F) + // Katakana (30A0-30FF) + // Bopomofo (3100-312F) + // Hangul Compatibility Jamo (3130-318F) + // Kanbun (3190-319F) + // Bopomofo Extended (31A0-31BF) + // CJK Strokes (31C0-31EF) + // Katakana Phonetic Extensions (31F0-31FF) + // Enclosed CJK Letters and Months (3200-32FF) + // CJK Compatibility (3300-33FF) + // CJK Unified Ideographs Extension A (3400-4DBF) + // Yijing Hexagram Symbols (4DC0-4DFF) + // CJK Unified Ideographs (4E00-9FFF) + if (ch >= 0x3040 && ch <= 0x9fff) + return true; + + // Hangul Syllables (AC00-D7AF) are breakable + if (ch >= 0xac00 && ch <= 0xd7af) + return true; + + // CJK Compatibility Ideographs (F900-FAFF) are breakable + if (ch >= 0xf900 && ch <= 0xfaff) + return true; + + return false; +} + + + +/*************************************************************************** +CORE IMPLEMENTATION +***************************************************************************/ + +//------------------------------------------------- +// ctor +//------------------------------------------------- + +text_layout::text_layout(render_font &font, float xscale, float yscale, float width, text_layout::text_justify justify, text_layout::word_wrapping wrap) + : m_font(font), m_xscale(xscale), m_yscale(yscale), m_width(width), m_justify(justify), m_wrap(wrap), m_current_line(nullptr), m_last_break(0), m_text_position(0) + +{ +} + + +//------------------------------------------------- +// ctor (move) +//------------------------------------------------- + +text_layout::text_layout(text_layout &&that) + : m_font(that.m_font), m_xscale(that.m_xscale), m_yscale(that.m_yscale), m_width(that.m_width), m_justify(that.m_justify), m_wrap(that.m_wrap), m_lines(std::move(that.m_lines)), + m_current_line(that.m_current_line), m_last_break(that.m_last_break), m_text_position(that.m_text_position) +{ +} + + +//------------------------------------------------- +// dtor +//------------------------------------------------- + +text_layout::~text_layout() +{ +} + + +//------------------------------------------------- +// add_text +//------------------------------------------------- + +void text_layout::add_text(const char *text, const char_style &style) +{ + int position = 0; + int text_length = strlen(text); + + while(position < text_length) + { + // do we need to create a new line? + if (m_current_line == nullptr) + { + // get the current character + unicode_char schar; + int scharcount; + scharcount = uchar_from_utf8(&schar, &text[position], text_length - position); + if (scharcount == -1) + break; + + // if the line starts with a tab character, center it regardless + text_justify line_justify = justify(); + if (schar == '\t') + { + position += scharcount; + line_justify = text_layout::CENTER; + } + + // start a new line + start_new_line(line_justify, style.size); + } + + // get the current character + int scharcount; + unicode_char ch; + scharcount = uchar_from_utf8(&ch, &text[position], text_length - position); + if (scharcount < 0) + break; + position += scharcount; + + // set up source information + source_info source = { 0, }; + source.start = m_text_position; + source.span = scharcount; + m_text_position += scharcount; + + // is this an endline? + if (ch == '\n') + { + // first, start a line if we have not already + if (m_current_line == nullptr) + start_new_line(LEFT, style.size); + + // and then close up the current line + update_maximum_line_width(); + m_current_line = nullptr; + } + else + { + // if we hit a space, remember the location and width *without* the space + if (is_space_character(ch)) + m_last_break = m_current_line->character_count(); + + // append the character + m_current_line->add_character(ch, style, source); + + // do we have to wrap? + if (wrap() != NEVER && m_current_line->width() > m_width) + { + switch (wrap()) + { + case TRUNCATE: + truncate_wrap(); + break; + + case WORD: + word_wrap(); + break; + + default: + fatalerror("invalid word wrapping value"); + break; + } + } + else + { + // we didn't wrap - if we hit any non-space breakable character, remember the location and width + // *with* the breakable character + if (ch != ' ' && is_breakable_char(ch)) + m_last_break = m_current_line->character_count(); + } + } + } +} + + +//------------------------------------------------- +// update_maximum_line_width +//------------------------------------------------- + +void text_layout::update_maximum_line_width() +{ + m_maximum_line_width = actual_width(); +} + + +//------------------------------------------------- +// actual_width +//------------------------------------------------- + +float text_layout::actual_width() const +{ + float current_line_width = m_current_line ? m_current_line->width() : 0; + return MAX(m_maximum_line_width, current_line_width); +} + + +//------------------------------------------------- +// actual_height +//------------------------------------------------- + +float text_layout::actual_height() const +{ + line *last_line = (m_lines.size() > 0) + ? m_lines[m_lines.size() - 1].get() + : nullptr; + return last_line + ? last_line->yoffset() + last_line->height() + : 0; +} + + +//------------------------------------------------- +// start_new_line +//------------------------------------------------- + +void text_layout::start_new_line(text_layout::text_justify justify, float height) +{ + // create a new line + std::unique_ptr<line> new_line(global_alloc_clear<line>(*this, justify, actual_height(), height * yscale())); + + // update the current line + update_maximum_line_width(); + m_current_line = new_line.get(); + m_last_break = 0; + + // append it + m_lines.push_back(std::move(new_line)); +} + + +//------------------------------------------------- +// get_char_width +//------------------------------------------------- + +float text_layout::get_char_width(unicode_char ch, float size) +{ + return font().char_width(size * yscale(), xscale() / yscale(), ch); +} + + +//------------------------------------------------- +// truncate_wrap +//------------------------------------------------- + +void text_layout::truncate_wrap() +{ + // for now, lets assume that we're only truncating the last character + size_t truncate_position = m_current_line->character_count() - 1; + const auto& truncate_char = m_current_line->character(truncate_position); + + // copy style information + char_style style = truncate_char.style; + + // copy source information + source_info source = { 0, }; + source.start = truncate_char.source.start + truncate_char.source.span; + source.span = 0; + + // figure out how wide an elipsis is + float elipsis_width = 3 * get_char_width('.', style.size); + + // where should we really truncate from? + while (truncate_position > 0 && m_current_line->character(truncate_position).xoffset + elipsis_width < width()) + truncate_position--; + + // truncate!!! + m_current_line->truncate(truncate_position); + + // and append the elipsis + m_current_line->add_character('.', style, source); + + // finally start a new line + start_new_line(m_current_line->justify(), style.size); +} + + +//------------------------------------------------- +// word_wrap +//------------------------------------------------- + +void text_layout::word_wrap() +{ + // keep track of the last line and break + line *last_line = m_current_line; + size_t last_break = m_last_break; + + // start a new line with the same justification + start_new_line(last_line->justify(), last_line->character(last_line->character_count() - 1).style.size); + + // find the begining of the word to wrap + size_t position = last_break; + while (position + 1 < last_line->character_count() && is_space_character(last_line->character(position).character)) + position++; + + // transcribe the characters + for (size_t i = position; i < last_line->character_count(); i++) + { + auto &ch = last_line->character(i); + m_current_line->add_character(ch.character, ch.style, ch.source); + } + + // and finally, truncate the last line + last_line->truncate(last_break); +} + + +//------------------------------------------------- +// hit_test +//------------------------------------------------- + +bool text_layout::hit_test(float x, float y, size_t &start, size_t &span) const +{ + for (const auto &line : m_lines) + { + if (y >= line->yoffset() && y < line->yoffset() + line->height()) + { + float line_xoffset = line->xoffset(); + if (x >= line_xoffset && x < line_xoffset + line->width()) + { + for (size_t i = 0; i < line->character_count(); i++) + { + const auto &ch = line->character(i); + if (x >= ch.xoffset && x < ch.xoffset + ch.xwidth) + { + start = ch.source.start; + span = ch.source.span; + return true; + } + } + } + } + } + start = 0; + span = 0; + return false; +} + + +//------------------------------------------------- +// restyle +//------------------------------------------------- + +void text_layout::restyle(size_t start, size_t span, rgb_t *fgcolor, rgb_t *bgcolor) +{ + for (const auto &line : m_lines) + { + for (size_t i = 0; i < line->character_count(); i++) + { + auto &ch = line->character(i); + if (ch.source.start >= start && ch.source.start + ch.source.span <= start + span) + { + if (fgcolor != nullptr) + ch.style.fgcolor = *fgcolor; + if (bgcolor != nullptr) + ch.style.bgcolor = *bgcolor; + } + } + } +} + + +//------------------------------------------------- +// get_wrap_info +//------------------------------------------------- + +int text_layout::get_wrap_info(std::vector<int> &xstart, std::vector<int> &xend) const +{ + // this is a hacky method (tailored to the need to implement + // mame_ui_manager::wrap_text) but so be it + int line_count = 0; + for (const auto &line : m_lines) + { + int start_pos = 0; + int end_pos = 0; + + auto line_character_count = line->character_count(); + if (line_character_count > 0) + { + start_pos = line->character(0).source.start; + end_pos = line->character(line_character_count - 1).source.start + + line->character(line_character_count - 1).source.span; + } + + line_count++; + xstart.push_back(start_pos); + xend.push_back(end_pos); + } + return line_count; +} + + +//------------------------------------------------- +// emit +//------------------------------------------------- + +void text_layout::emit(render_container *container, float x, float y) +{ + for (const auto &line : m_lines) + { + float line_xoffset = line->xoffset(); + + // emit every single character + for (auto i = 0; i < line->character_count(); i++) + { + auto &ch = line->character(i); + + // position this specific character correctly (TODO - this doesn't + // handle differently sized text (yet) + float char_x = x + line_xoffset + ch.xoffset; + float char_y = y + line->yoffset(); + float char_width = ch.xwidth; + float char_height = line->height(); + + // render the background of the character (if present) + if (ch.style.bgcolor.a() != 0) + container->add_rect(char_x, char_y, char_x + char_width, char_y + char_height, ch.style.bgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + + // render the foreground + container->add_char( + char_x, + char_y, + char_height, + xscale() / yscale(), + ch.style.fgcolor, + font(), + ch.character); + } + } +} + + +//------------------------------------------------- +// line::ctor +//------------------------------------------------- + +text_layout::line::line(text_layout &layout, text_justify justify, float yoffset, float height) + : m_layout(layout), m_justify(justify), m_yoffset(yoffset), m_width(0.0), m_height(height) +{ +} + + +//------------------------------------------------- +// line::add_character +//------------------------------------------------- + +void text_layout::line::add_character(unicode_char ch, const char_style &style, const source_info &source) +{ + // get the width of this character + float chwidth = m_layout.get_char_width(ch, style.size); + + // create the positioned character + positioned_char positioned_char = { 0, }; + positioned_char.character = ch; + positioned_char.xoffset = m_width; + positioned_char.xwidth = chwidth; + positioned_char.style = style; + positioned_char.source = source; + + // append the character + m_characters.push_back(positioned_char); + m_width += chwidth; + + // we might be bigger + m_height = MAX(m_height, style.size * m_layout.yscale()); +} + + +//------------------------------------------------- +// line::xoffset +//------------------------------------------------- + +float text_layout::line::xoffset() const +{ + float result; + switch (justify()) + { + case LEFT: + default: + result = 0; + break; + case CENTER: + result = (m_layout.width() - width()) / 2; + break; + case RIGHT: + result = m_layout.width() - width(); + break; + } + return result; +} + + +//------------------------------------------------- +// line::truncate +//------------------------------------------------- + +void text_layout::line::truncate(size_t position) +{ + assert(position <= m_characters.size()); + + // are we actually truncating? + if (position < m_characters.size()) + { + // set the width as appropriate + m_width = m_characters[position].xoffset; + + // and resize the array + m_characters.resize(position); + } +} + +} // namespace ui diff --git a/src/frontend/mame/ui/text.h b/src/frontend/mame/ui/text.h new file mode 100644 index 00000000000..791aff9b112 --- /dev/null +++ b/src/frontend/mame/ui/text.h @@ -0,0 +1,160 @@ +// license:BSD-3-Clause +// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods +/*************************************************************************** + + text.h + + Text functionality for MAME's crude user interface + +***************************************************************************/ + +#pragma once + +#ifndef MAME_FRONTEND_UI_TEXT_H +#define MAME_FRONTEND_UI_TEXT_H + +#include "palette.h" +#include "unicode.h" + +class render_font; +class render_container; + +namespace ui { + +/*************************************************************************** +TYPE DEFINITIONS +***************************************************************************/ + +class text_layout +{ +public: + // justification options for text + enum text_justify + { + LEFT = 0, + CENTER, + RIGHT + }; + + // word wrapping options + enum word_wrapping + { + NEVER, + TRUNCATE, + WORD + }; + + // ctor/dtor + text_layout(render_font &font, float xscale, float yscale, float width, text_justify justify, word_wrapping wrap); + text_layout(text_layout &&that); + ~text_layout(); + + // accessors + render_font &font() const { return m_font; } + float xscale() const { return m_xscale; } + float yscale() const { return m_yscale; } + float width() const { return m_width; } + text_justify justify() const { return m_justify; } + word_wrapping wrap() const { return m_wrap; } + + // methods + float actual_width() const; + float actual_height() const; + bool hit_test(float x, float y, size_t &start, size_t &span) const; + void restyle(size_t start, size_t span, rgb_t *fgcolor, rgb_t *bgcolor); + int get_wrap_info(std::vector<int> &xstart, std::vector<int> &xend) const; + void emit(render_container *container, float x, float y); + void add_text(const char *text, rgb_t fgcolor = rgb_t::white, rgb_t bgcolor = rgb_t(0,0,0,0), float size = 1.0) + { + // create the style + char_style style = { 0, }; + style.fgcolor = fgcolor; + style.bgcolor = bgcolor; + style.size = size; + + // and add the text + add_text(text, style); + } + +private: + // text style information - in a struct to facilitate copying + struct char_style + { + rgb_t fgcolor; + rgb_t bgcolor; + float size; + }; + + // information about the "source" of a chracter - also in a struct + // to facilitate copying + struct source_info + { + size_t start; + size_t span; + }; + + // this should really be "positioned glyph" as glyphs != characters, but + // we'll get there eventually + struct positioned_char + { + unicode_char character; + char_style style; + source_info source; + float xoffset; + float xwidth; + }; + + // class to represent a line + class line + { + public: + line(text_layout &layout, text_justify justify, float yoffset, float height); + + // methods + void add_character(unicode_char ch, const char_style &style, const source_info &source); + void truncate(size_t position); + + // accessors + float xoffset() const; + float yoffset() const { return m_yoffset; } + float width() const { return m_width; } + float height() const { return m_height; } + text_justify justify() const { return m_justify; } + size_t character_count() const { return m_characters.size(); } + const positioned_char &character(size_t index) const { return m_characters[index]; } + positioned_char &character(size_t index) { return m_characters[index]; } + + private: + std::vector<positioned_char> m_characters; + text_layout &m_layout; + text_justify m_justify; + float m_yoffset; + float m_width; + float m_height; + }; + + // instance variables + render_font &m_font; + float m_xscale; + float m_yscale; + float m_width; + float m_maximum_line_width; + text_justify m_justify; + word_wrapping m_wrap; + std::vector<std::unique_ptr<line>> m_lines; + line *m_current_line; + size_t m_last_break; + size_t m_text_position; + + // methods + void add_text(const char *text, const char_style &style); + void start_new_line(text_justify justify, float height); + float get_char_width(unicode_char ch, float size); + void truncate_wrap(); + void word_wrap(); + void update_maximum_line_width(); +}; + +} // namespace ui + +#endif // MAME_FRONTEND_UI_TEXT_H diff --git a/src/frontend/mame/ui/ui.cpp b/src/frontend/mame/ui/ui.cpp index ed5b3c9be7d..21759412710 100644 --- a/src/frontend/mame/ui/ui.cpp +++ b/src/frontend/mame/ui/ui.cpp @@ -126,51 +126,6 @@ slider_state *mame_ui_manager::slider_current; /*************************************************************************** - INLINE FUNCTIONS -***************************************************************************/ - -//------------------------------------------------- -// is_breakable_char - is a given unicode -// character a possible line break? -//------------------------------------------------- - -static inline int is_breakable_char(unicode_char ch) -{ - // regular spaces and hyphens are breakable - if (ch == ' ' || ch == '-') - return TRUE; - - // In the following character sets, any character is breakable: - // Hiragana (3040-309F) - // Katakana (30A0-30FF) - // Bopomofo (3100-312F) - // Hangul Compatibility Jamo (3130-318F) - // Kanbun (3190-319F) - // Bopomofo Extended (31A0-31BF) - // CJK Strokes (31C0-31EF) - // Katakana Phonetic Extensions (31F0-31FF) - // Enclosed CJK Letters and Months (3200-32FF) - // CJK Compatibility (3300-33FF) - // CJK Unified Ideographs Extension A (3400-4DBF) - // Yijing Hexagram Symbols (4DC0-4DFF) - // CJK Unified Ideographs (4E00-9FFF) - if (ch >= 0x3040 && ch <= 0x9fff) - return TRUE; - - // Hangul Syllables (AC00-D7AF) are breakable - if (ch >= 0xac00 && ch <= 0xd7af) - return TRUE; - - // CJK Compatibility Ideographs (F900-FAFF) are breakable - if (ch >= 0xf900 && ch <= 0xfaff) - return TRUE; - - return FALSE; -} - - - -/*************************************************************************** CORE IMPLEMENTATION ***************************************************************************/ @@ -600,204 +555,25 @@ void mame_ui_manager::draw_text(render_container *container, const char *buf, fl void mame_ui_manager::draw_text_full(render_container *container, const char *origs, float x, float y, float origwrapwidth, int justify, int wrap, int draw, rgb_t fgcolor, rgb_t bgcolor, float *totalwidth, float *totalheight, float text_size) { - float lineheight = get_line_height() * text_size; - const char *ends = origs + strlen(origs); - float wrapwidth = origwrapwidth; - const char *s = origs; - const char *linestart; - float cury = y; - float maxwidth = 0; - float aspect = machine().render().ui_aspect(container); - - // if we don't want wrapping, guarantee a huge wrapwidth - if (wrap == WRAP_NEVER) - wrapwidth = 1000000.0f; - if (wrapwidth <= 0) - return; - - // loop over lines - while (*s != 0) - { - const char *lastbreak = nullptr; - int line_justify = justify; - unicode_char schar; - int scharcount; - float lastbreak_width = 0; - float curwidth = 0; - float curx = x; - - // get the current character - scharcount = uchar_from_utf8(&schar, s, ends - s); - if (scharcount == -1) - break; - - // if the line starts with a tab character, center it regardless - if (schar == '\t') - { - s += scharcount; - line_justify = JUSTIFY_CENTER; - } - - // remember the starting position of the line - linestart = s; - - // loop while we have characters and are less than the wrapwidth - while (*s != 0 && curwidth <= wrapwidth) - { - float chwidth; - - // get the current chcaracter - scharcount = uchar_from_utf8(&schar, s, ends - s); - if (scharcount == -1) - break; - - // if we hit a newline, stop immediately - if (schar == '\n') - break; - - // get the width of this character - chwidth = get_font()->char_width(lineheight, aspect, schar); - - // if we hit a space, remember the location and width *without* the space - if (schar == ' ') - { - lastbreak = s; - lastbreak_width = curwidth; - } - - // add the width of this character and advance - curwidth += chwidth; - s += scharcount; - - // if we hit any non-space breakable character, remember the location and width - // *with* the breakable character - if (schar != ' ' && is_breakable_char(schar) && curwidth <= wrapwidth) - { - lastbreak = s; - lastbreak_width = curwidth; - } - } - - // if we accumulated too much for the current width, we need to back off - if (curwidth > wrapwidth) - { - // if we're word wrapping, back up to the last break if we can - if (wrap == WRAP_WORD) - { - // if we hit a break, back up to there with the appropriate width - if (lastbreak != nullptr) - { - s = lastbreak; - curwidth = lastbreak_width; - } - - // if we didn't hit a break, back up one character - else if (s > linestart) - { - // get the previous character - s = (const char *)utf8_previous_char(s); - scharcount = uchar_from_utf8(&schar, s, ends - s); - if (scharcount == -1) - break; - - curwidth -= get_font()->char_width(lineheight, aspect, schar); - // if back to 0, there is no space to draw even a single char - if (curwidth <= 0) - break; - } - } - - // if we're truncating, make sure we have enough space for the ... - else if (wrap == WRAP_TRUNCATE) - { - // add in the width of the ... - curwidth += 3.0f * get_font()->char_width(lineheight, aspect, '.'); - - // while we are above the wrap width, back up one character - while (curwidth > wrapwidth && s > linestart) - { - // get the previous character - s = (const char *)utf8_previous_char(s); - scharcount = uchar_from_utf8(&schar, s, ends - s); - if (scharcount == -1) - break; + // create the layout + auto layout = create_layout(container, origwrapwidth, (ui::text_layout::text_justify)justify, (ui::text_layout::word_wrapping)wrap); - curwidth -= get_font()->char_width(lineheight, aspect, schar); - } - } - } - - // align according to the justfication - if (line_justify == JUSTIFY_CENTER) - curx += (origwrapwidth - curwidth) * 0.5f; - else if (line_justify == JUSTIFY_RIGHT) - curx += origwrapwidth - curwidth; - - // track the maximum width of any given line - if (curwidth > maxwidth) - maxwidth = curwidth; - - // if opaque, add a black box - if (draw == DRAW_OPAQUE) - container->add_rect(curx, cury, curx + curwidth, cury + lineheight, bgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - - // loop from the line start and add the characters - while (linestart < s) - { - // get the current character - unicode_char linechar; - int linecharcount = uchar_from_utf8(&linechar, linestart, ends - linestart); - if (linecharcount == -1) - break; - - if (draw != DRAW_NONE) - { - container->add_char(curx, cury, lineheight, aspect, fgcolor, *get_font(), linechar); - curx += get_font()->char_width(lineheight, aspect, linechar); - } - linestart += linecharcount; - } + // append text to it + layout.add_text( + origs, + fgcolor, + draw == DRAW_OPAQUE ? bgcolor : rgb_t(0, 0, 0, 0), + text_size); - // append ellipses if needed - if (wrap == WRAP_TRUNCATE && *s != 0 && draw != DRAW_NONE) - { - container->add_char(curx, cury, lineheight, aspect, fgcolor, *get_font(), '.'); - curx += get_font()->char_width(lineheight, aspect, '.'); - container->add_char(curx, cury, lineheight, aspect, fgcolor, *get_font(), '.'); - curx += get_font()->char_width(lineheight, aspect, '.'); - container->add_char(curx, cury, lineheight, aspect, fgcolor, *get_font(), '.'); - curx += get_font()->char_width(lineheight, aspect, '.'); - } + // and emit it (if we are asked to do so) + if (draw != DRAW_NONE) + layout.emit(container, x, y); - // if we're not word-wrapping, we're done - if (wrap != WRAP_WORD) - break; - - // advance by a row - cury += lineheight; - - // skip past any spaces at the beginning of the next line - scharcount = uchar_from_utf8(&schar, s, ends - s); - if (scharcount == -1) - break; - - if (schar == '\n') - s += scharcount; - else - while (*s && isspace(schar)) - { - s += scharcount; - scharcount = uchar_from_utf8(&schar, s, ends - s); - if (scharcount == -1) - break; - } - } - - // report the width and height of the resulting space + // return width/height if (totalwidth) - *totalwidth = maxwidth; + *totalwidth = layout.actual_width(); if (totalheight) - *totalheight = cury - y; + *totalheight = layout.actual_height(); } @@ -1401,59 +1177,20 @@ void mame_ui_manager::paste() void mame_ui_manager::image_handler_ingame() { // run display routine for devices - if (machine().phase() == MACHINE_PHASE_RUNNING) - for (device_image_interface &image : image_interface_iterator(machine().root_device())) - image.call_display(); -} - - -#define ANIMATION_FPS 1 -#define ANIMATION_FRAMES 4 - -void mame_ui_manager::image_display(const device_type &type, device_image_interface *image) -{ - if (type == CASSETTE) - { - cassette_image_device *cass = dynamic_cast<cassette_image_device *>(image); - if (cass != nullptr) - { - char buf[65]; - float x, y; - int n; - double position, length; - cassette_state uistate; - static const UINT8 shapes[8] = { 0x2d, 0x5c, 0x7c, 0x2f, 0x2d, 0x20, 0x20, 0x20 }; - - /* figure out where we are in the cassette */ - position = cass->get_position(); - length = cass->get_length(); - uistate = (cassette_state)(cass->get_state() & CASSETTE_MASK_UISTATE); - - /* choose a location on the screen */ - x = 0.2f; - y = 0.5f; - - y += cassette_device_iterator(machine().root_device()).indexof(*cass); - - y *= get_line_height() + 2.0f * UI_BOX_TB_BORDER; - /* choose which frame of the animation we are at */ - n = ((int)position / ANIMATION_FPS) % ANIMATION_FRAMES; - /* Since you can have anything in a BDF file, we will use crude ascii characters instead */ - snprintf(buf, ARRAY_LENGTH(buf), "%c%c %c %02d:%02d (%04d) [%02d:%02d (%04d)]", - shapes[n], /* cassette icon left */ - shapes[n | 4], /* cassette icon right */ - (uistate == CASSETTE_PLAY) ? 0x50 : 0x52, /* play (P) or record (R) */ - ((int)position / 60), - ((int)position % 60), - (int)position, - ((int)length / 60), - ((int)length % 60), - (int)length); - - // draw the cassette - draw_text_box(&machine().render().ui_container(), buf, JUSTIFY_LEFT, x, y, UI_BACKGROUND_COLOR); + if (machine().phase() == MACHINE_PHASE_RUNNING) + for (device_image_interface &image : image_interface_iterator(machine().root_device())) { + std::string str; + int idx = image.call_display(str); + if (idx >= 0) { + float x, y; + /* choose a location on the screen */ + x = 0.2f; + y = 0.5f + idx; + y *= get_line_height() + 2.0f * UI_BOX_TB_BORDER; + + draw_text_box(&machine().render().ui_container(), str.c_str(), JUSTIFY_LEFT, x, y, UI_BACKGROUND_COLOR); + } } - } } //------------------------------------------------- @@ -1920,9 +1657,9 @@ std::vector<ui::menu_item> mame_ui_manager::slider_init(running_machine &machine // add analog adjusters int slider_index = 0; - for (ioport_port &port : machine.ioport().ports()) + for (auto &port : machine.ioport().ports()) { - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { if (field.type() == IPT_ADJUSTER) { @@ -2026,9 +1763,9 @@ std::vector<ui::menu_item> mame_ui_manager::slider_init(running_machine &machine #ifdef MAME_DEBUG slider_index = 0; // add crosshair adjusters - for (ioport_port &port : machine.ioport().ports()) + for (auto &port : machine.ioport().ports()) { - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { if (field.crosshair_axis() != CROSSHAIR_AXIS_NONE && field.player() == 0) { @@ -2575,136 +2312,40 @@ void mame_ui_manager::set_use_natural_keyboard(bool use_natural_keyboard) assert(error.empty()); } + //------------------------------------------------- // wrap_text //------------------------------------------------- -int mame_ui_manager::wrap_text(render_container *container, const char *origs, float x, float y, float origwrapwidth, std::vector<int> &xstart, std::vector<int> &xend, float text_size) +ui::text_layout mame_ui_manager::create_layout(render_container *container, float width, ui::text_layout::text_justify justify, ui::text_layout::word_wrapping wrap) { - float lineheight = get_line_height() * text_size; - const char *ends = origs + strlen(origs); - float wrapwidth = origwrapwidth; - const char *s = origs; - const char *linestart; - float maxwidth = 0; - float aspect = machine().render().ui_aspect(container); - int count = 0; - - // loop over lines - while (*s != 0) - { - const char *lastbreak = nullptr; - unicode_char schar; - int scharcount; - float lastbreak_width = 0; - float curwidth = 0; - - // get the current character - scharcount = uchar_from_utf8(&schar, s, ends - s); - if (scharcount == -1) - break; - - // remember the starting position of the line - linestart = s; - - // loop while we have characters and are less than the wrapwidth - while (*s != 0 && curwidth <= wrapwidth) - { - float chwidth; - - // get the current chcaracter - scharcount = uchar_from_utf8(&schar, s, ends - s); - if (scharcount == -1) - break; - - // if we hit a newline, stop immediately - if (schar == '\n') - break; - - // get the width of this character - chwidth = get_font()->char_width(lineheight, aspect, schar); + // determine scale factors + float yscale = get_line_height(); + float xscale = yscale * machine().render().ui_aspect(container); - // if we hit a space, remember the location and width *without* the space - if (schar == ' ') - { - lastbreak = s; - lastbreak_width = curwidth; - } - - // add the width of this character and advance - curwidth += chwidth; - s += scharcount; - - // if we hit any non-space breakable character, remember the location and width - // *with* the breakable character - if (schar != ' ' && is_breakable_char(schar) && curwidth <= wrapwidth) - { - lastbreak = s; - lastbreak_width = curwidth; - } - } - - // if we accumulated too much for the current width, we need to back off - if (curwidth > wrapwidth) - { - // if we hit a break, back up to there with the appropriate width - if (lastbreak != nullptr) - { - s = lastbreak; - curwidth = lastbreak_width; - } - - // if we didn't hit a break, back up one character - else if (s > linestart) - { - // get the previous character - s = (const char *)utf8_previous_char(s); - scharcount = uchar_from_utf8(&schar, s, ends - s); - if (scharcount == -1) - break; - - curwidth -= get_font()->char_width(lineheight, aspect, schar); - } - } - - // track the maximum width of any given line - if (curwidth > maxwidth) - maxwidth = curwidth; + // create the layout + return ui::text_layout(*get_font(), xscale, yscale, width, justify, wrap); +} - xstart.push_back(linestart - origs); - xend.push_back(s - origs); - // loop from the line start and add the characters - while (linestart < s) - { - // get the current character - unicode_char linechar; - int linecharcount = uchar_from_utf8(&linechar, linestart, ends - linestart); - if (linecharcount == -1) - break; - linestart += linecharcount; - } +//------------------------------------------------- +// wrap_text +//------------------------------------------------- - // advance by a row - count++; +int mame_ui_manager::wrap_text(render_container *container, const char *origs, float x, float y, float origwrapwidth, std::vector<int> &xstart, std::vector<int> &xend, float text_size) +{ + // create the layout + auto layout = create_layout(container, origwrapwidth, ui::text_layout::LEFT, ui::text_layout::WORD); - // skip past any spaces at the beginning of the next line - scharcount = uchar_from_utf8(&schar, s, ends - s); - if (scharcount == -1) - break; + // add the text + layout.add_text( + origs, + rgb_t::black, + rgb_t::black, + text_size); - if (schar == '\n') - s += scharcount; - else - while (*s && isspace(schar)) - { - s += scharcount; - scharcount = uchar_from_utf8(&schar, s, ends - s); - if (scharcount == -1) - break; - } - } - return count; + // and get the wrapping info + return layout.get_wrap_info(xstart, xend); } //------------------------------------------------- diff --git a/src/frontend/mame/ui/ui.h b/src/frontend/mame/ui/ui.h index c5e4127a369..f518535f054 100644 --- a/src/frontend/mame/ui/ui.h +++ b/src/frontend/mame/ui/ui.h @@ -21,6 +21,7 @@ #include "ui/uimain.h" #include "ui/menuitem.h" #include "ui/slider.h" +#include "ui/text.h" namespace ui { @@ -256,6 +257,7 @@ public: // other void process_natural_keyboard(); + ui::text_layout create_layout(render_container *container, float width = 1.0, ui::text_layout::text_justify justify = ui::text_layout::LEFT, ui::text_layout::word_wrapping wrap = ui::text_layout::WORD); // word wrap int wrap_text(render_container *container, const char *origs, float x, float y, float origwrapwidth, std::vector<int> &xstart, std::vector<int> &xend, float text_size = 1.0f); @@ -264,8 +266,6 @@ public: void draw_textured_box(render_container *container, float x0, float y0, float x1, float y1, rgb_t backcolor, rgb_t linecolor, render_texture *texture = nullptr, UINT32 flags = PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); virtual void popup_time_string(int seconds, std::string message) override; - virtual void image_display(const device_type &type, device_image_interface *image) override; - virtual void menu_reset() override; private: diff --git a/src/frontend/mame/ui/utils.cpp b/src/frontend/mame/ui/utils.cpp index d65bbc52ef7..5ad21c6839c 100644 --- a/src/frontend/mame/ui/utils.cpp +++ b/src/frontend/mame/ui/utils.cpp @@ -21,6 +21,7 @@ std::vector<std::string> c_year::ui; // Manufacturers index UINT16 c_mnfct::actual = 0; std::vector<std::string> c_mnfct::ui; +std::unordered_map<std::string, int> c_mnfct::uimap; // Main filters UINT16 main_filters::actual = 0; @@ -92,6 +93,22 @@ int getprecisionchr(const char* s) return precision; } +std::vector<std::string> tokenize(const std::string &text, char sep) +{ + std::vector<std::string> tokens; + tokens.reserve(64); + std::size_t start = 0, end = 0; + while ((end = text.find(sep, start)) != std::string::npos) + { + std::string temp = text.substr(start, end - start); + if (!temp.empty()) tokens.push_back(temp); + start = end + 1; + } + std::string temp = text.substr(start); + if (!temp.empty()) tokens.push_back(temp); + return tokens; +} + //------------------------------------------------- // search a substring with even partial matching //------------------------------------------------- @@ -150,10 +167,7 @@ int fuzzy_substring(std::string s_needle, std::string s_haystack) void c_mnfct::set(const char *str) { std::string name = getname(str); - if (std::find(ui.begin(), ui.end(), name) != ui.end()) - return; - - ui.push_back(name); + uimap[name] = 0; } std::string c_mnfct::getname(const char *str) diff --git a/src/frontend/mame/ui/utils.h b/src/frontend/mame/ui/utils.h index d31b3746e77..8d3d2d0c085 100644 --- a/src/frontend/mame/ui/utils.h +++ b/src/frontend/mame/ui/utils.h @@ -185,6 +185,7 @@ struct c_mnfct static void set(const char *str); static std::string getname(const char *str); static std::vector<std::string> ui; + static std::unordered_map<std::string, int> uimap; static UINT16 actual; }; @@ -242,15 +243,10 @@ struct sw_custfltr }; // GLOBAL FUNCTIONS - -// advanced search function int fuzzy_substring(std::string needle, std::string haystack); - -// trim carriage return char* chartrimcarriage(char str[]); - const char* strensure(const char* s); - int getprecisionchr(const char* s); +std::vector<std::string> tokenize(const std::string &text, char sep); #endif /* __UI_UTILS_H__ */ diff --git a/src/lib/formats/sol_cas.cpp b/src/lib/formats/sol_cas.cpp index 1f22cd68a9f..ef808842ec6 100644 --- a/src/lib/formats/sol_cas.cpp +++ b/src/lib/formats/sol_cas.cpp @@ -198,7 +198,7 @@ static int sol20_handle_cassette(INT16 *buffer, const UINT8 *bytes) { UINT32 sample_count = 0; UINT32 i = 0,t = 0; - UINT8 c = 0; + UINT16 cc = 0; sol20_byte_num = 1; bool process_d = 0; UINT16 length = 0; @@ -227,10 +227,10 @@ static int sol20_handle_cassette(INT16 *buffer, const UINT8 *bytes) break; case 'C': // carrier { - if (c) // if this is the next file, clean up after the previous one + if (cc) // if this is the next file, clean up after the previous one { sample_count += sol20_output_byte(buffer, sample_count, sol20_cksm_byte); // final checksum if needed - c = 0; + cc = 0; } sol20_byte_num+=2; // bump to parameter @@ -242,18 +242,21 @@ static int sol20_handle_cassette(INT16 *buffer, const UINT8 *bytes) } case 'H': // header { - if (c) // if this is the next file, clean up after the previous one + if (cc) // if this is the next file, clean up after the previous one { sample_count += sol20_output_byte(buffer, sample_count, sol20_cksm_byte); // final checksum if needed - c = 0; + cc = 0; } sol20_byte_num+=2; // bump to file name - sol20_header[0] = bytes[sol20_byte_num++]; - sol20_header[1] = bytes[sol20_byte_num++]; - sol20_header[2] = bytes[sol20_byte_num++]; - sol20_header[3] = bytes[sol20_byte_num++]; - sol20_header[4] = bytes[sol20_byte_num++]; + for (i = 0; i < 5; i++) + sol20_header[i] = 0x20; + for (i = 0; i < 5; i++) + { + sol20_header[i] = bytes[sol20_byte_num++]; + if (sol20_header[i] == 0x20) + break; + } sol20_header[5] = 0; sol20_scan_to_hex(bytes); // bump to file type sol20_header[6] = sol20_read_hex(bytes, 2); @@ -298,16 +301,24 @@ static int sol20_handle_cassette(INT16 *buffer, const UINT8 *bytes) { t = sol20_read_hex(bytes, 2); sample_count += sol20_output_byte(buffer, sample_count, t); - sol20_cksm_byte = sol20_calc_cksm(sol20_cksm_byte, t); - c++; - length--; - if (!length) - process_d = 0; - if (!c) + cc++; + // if it's a data byte reduce remaining length and calculate checksum; + // tape supplies checksums except last one + if (cc < 257) { - sample_count += sol20_output_byte(buffer, sample_count, sol20_cksm_byte); + length--; + sol20_cksm_byte = sol20_calc_cksm(sol20_cksm_byte, t); + } + else + // didnt need it, throw away + { + cc = 0; sol20_cksm_byte = 0; } + // see if finished tape + if (!length) + process_d = 0; + // bump to next byte sol20_scan_to_hex(bytes); } } @@ -318,7 +329,7 @@ static int sol20_handle_cassette(INT16 *buffer, const UINT8 *bytes) } } - if (c) // reached the end of the svt file + if (cc) // reached the end of the svt file sample_count += sol20_output_byte(buffer, sample_count, sol20_cksm_byte); // final checksum if needed return sample_count; diff --git a/src/lib/formats/thom_dsk.cpp b/src/lib/formats/thom_dsk.cpp index da7187d65f8..2e126b696e7 100644 --- a/src/lib/formats/thom_dsk.cpp +++ b/src/lib/formats/thom_dsk.cpp @@ -93,9 +93,9 @@ static floperr_t get_offset(floppy_image_legacy *floppy, int head, int track, in || (sector < 0) || (sector >= 16)) return FLOPPY_ERROR_SEEKERROR; - offs = tag->sector_pos[track][sector]; - if (offs <= 0 ) - return FLOPPY_ERROR_SEEKERROR; + offs = tag->sector_pos[track][sector]; + if (offs <= 0 ) + return FLOPPY_ERROR_SEEKERROR; if (offset) *offset = offs; diff --git a/src/lib/netlist/analog/nld_bjt.h b/src/lib/netlist/analog/nld_bjt.h index e8b80b94b4c..bb9f6863ec1 100644 --- a/src/lib/netlist/analog/nld_bjt.h +++ b/src/lib/netlist/analog/nld_bjt.h @@ -105,7 +105,7 @@ NETLIB_OBJECT_DERIVED(QBJT_switch, QBJT) , m_gB(NETLIST_GMIN_DEFAULT) , m_gC(NETLIST_GMIN_DEFAULT) , m_V(0.0) - , m_state_on(0) + , m_state_on(*this, "m_state_on", 0) { register_subalias("B", m_RB.m_P); register_subalias("E", m_RB.m_N); @@ -119,8 +119,6 @@ NETLIB_OBJECT_DERIVED(QBJT_switch, QBJT) connect_late(m_RB.m_P, m_BC_dummy.m_P); connect_late(m_RC.m_P, m_BC_dummy.m_N); - - save(NLNAME(m_state_on)); } NETLIB_RESETI(); @@ -141,7 +139,7 @@ protected: nl_double m_gB; // base conductance / switch on nl_double m_gC; // collector conductance / switch on nl_double m_V; // internal voltage source - UINT8 m_state_on; + state_var<unsigned> m_state_on; private: }; @@ -155,11 +153,13 @@ NETLIB_OBJECT_DERIVED(QBJT_EB, QBJT) { public: NETLIB_CONSTRUCTOR_DERIVED(QBJT_EB, QBJT) - , m_D_CB(*this, "m_D_CB", true) - , m_D_EB(*this, "m_D_EB", true) - , m_D_EC(*this, "m_D_EC", true) - , m_alpha_f(0) - , m_alpha_r(0) + , m_gD_BC(*this, "m_D_BC") + , m_gD_BE(*this, "m_D_BE") + , m_D_CB(*this, "m_D_CB", true) + , m_D_EB(*this, "m_D_EB", true) + , m_D_EC(*this, "m_D_EC", true) + , m_alpha_f(0) + , m_alpha_r(0) { register_subalias("E", m_D_EB.m_P); // Cathode register_subalias("B", m_D_EB.m_N); // Anode @@ -173,9 +173,6 @@ public: connect_late(m_D_EB.m_P, m_D_EC.m_P); connect_late(m_D_EB.m_N, m_D_CB.m_N); connect_late(m_D_CB.m_P, m_D_EC.m_N); - - m_gD_BE.save("m_D_BE", *this); - m_gD_BC.save("m_D_BC", *this); } protected: diff --git a/src/lib/netlist/analog/nld_opamps.h b/src/lib/netlist/analog/nld_opamps.h index 850886b7a0e..6bef8b0bbdc 100644 --- a/src/lib/netlist/analog/nld_opamps.h +++ b/src/lib/netlist/analog/nld_opamps.h @@ -44,7 +44,7 @@ NETLIB_OBJECT(OPAMP) , m_G1(*this, "G1") , m_VCC(*this, "VCC") , m_GND(*this, "GND") - , m_model(*this, "MODEL", "") + , m_model(*this, "MODEL", "LM324") , m_VH(*this, "VH") , m_VL(*this, "VL") , m_VREF(*this, "VREF") diff --git a/src/lib/netlist/analog/nld_switches.cpp b/src/lib/netlist/analog/nld_switches.cpp index 6c887aad569..46762e72eb1 100644 --- a/src/lib/netlist/analog/nld_switches.cpp +++ b/src/lib/netlist/analog/nld_switches.cpp @@ -27,7 +27,7 @@ NETLIB_RESET(switch1) NETLIB_UPDATE(switch1) { - if (m_POS.Value() == 0) + if (!m_POS.Value()) { m_R.set_R(R_OFF); } @@ -57,7 +57,7 @@ NETLIB_RESET(switch2) NETLIB_UPDATE(switch2) { - if (m_POS.Value() == 0) + if (!m_POS.Value()) { m_R1.set_R(R_ON); m_R2.set_R(R_OFF); diff --git a/src/lib/netlist/analog/nld_switches.h b/src/lib/netlist/analog/nld_switches.h index 5355b5e13bf..69954cb4a2a 100644 --- a/src/lib/netlist/analog/nld_switches.h +++ b/src/lib/netlist/analog/nld_switches.h @@ -47,7 +47,7 @@ NETLIB_OBJECT(switch1) NETLIB_UPDATE_PARAMI(); NETLIB_SUB(R_base) m_R; - param_int_t m_POS; + param_logic_t m_POS; }; NETLIB_OBJECT(switch2) @@ -71,7 +71,7 @@ NETLIB_OBJECT(switch2) NETLIB_SUB(R_base) m_R1; NETLIB_SUB(R_base) m_R2; - param_int_t m_POS; + param_logic_t m_POS; }; } //namespace devices diff --git a/src/lib/netlist/analog/nld_twoterm.cpp b/src/lib/netlist/analog/nld_twoterm.cpp index 9a526c4c174..0460d6f2e71 100644 --- a/src/lib/netlist/analog/nld_twoterm.cpp +++ b/src/lib/netlist/analog/nld_twoterm.cpp @@ -19,12 +19,18 @@ namespace netlist // generic_diode // ---------------------------------------------------------------------------------------- -generic_diode::generic_diode() +generic_diode::generic_diode(device_t &dev, pstring name) + : m_Vd(dev, name + ".m_Vd", 0.7) + , m_Id(dev, name + ".m_Id", 0.0) + , m_G(dev, name + ".m_G", 1e-15) + , m_Vt(0.0) + , m_Is(0.0) + , m_n(0.0) + , m_gmin(1e-15) + , m_VtInv(0.0) + , m_Vcrit(0.0) { - m_Vd = 0.7; set_param(1e-15, 1, 1e-15); - m_G = m_gmin; - m_Id = 0.0; } void generic_diode::set_param(const nl_double Is, const nl_double n, nl_double gmin) @@ -40,13 +46,6 @@ void generic_diode::set_param(const nl_double Is, const nl_double n, nl_double g m_VtInv = 1.0 / m_Vt; } -void generic_diode::save(pstring name, object_t &parent) -{ - parent.save(m_Vd, name + ".m_Vd"); - parent.save(m_Id, name + ".m_Id"); - parent.save(m_G, name + ".m_G"); -} - // ---------------------------------------------------------------------------------------- // nld_twoterm // ---------------------------------------------------------------------------------------- diff --git a/src/lib/netlist/analog/nld_twoterm.h b/src/lib/netlist/analog/nld_twoterm.h index d94b1498a53..0b9f68b7fdd 100644 --- a/src/lib/netlist/analog/nld_twoterm.h +++ b/src/lib/netlist/analog/nld_twoterm.h @@ -311,7 +311,7 @@ private: class generic_diode { public: - generic_diode(); + generic_diode(device_t &dev, pstring name); inline void update_diode(const nl_double nVd) { @@ -360,12 +360,10 @@ public: /* owning object must save those ... */ - void save(pstring name, object_t &parent); - private: - nl_double m_Vd; - nl_double m_Id; - nl_double m_G; + state_var<nl_double> m_Vd; + state_var<nl_double> m_Id; + state_var<nl_double> m_G; nl_double m_Vt; nl_double m_Is; @@ -385,11 +383,10 @@ NETLIB_OBJECT_DERIVED(D, twoterm) public: NETLIB_CONSTRUCTOR_DERIVED(D, twoterm) , m_model(*this, "MODEL", "") + , m_D(*this, "m_D") { register_subalias("A", m_P); register_subalias("K", m_N); - - m_D.save("m_D", *this); } NETLIB_DYNAMIC() diff --git a/src/lib/netlist/devices/nld_4020.cpp b/src/lib/netlist/devices/nld_4020.cpp index 93916c344bc..3dec9b087b7 100644 --- a/src/lib/netlist/devices/nld_4020.cpp +++ b/src/lib/netlist/devices/nld_4020.cpp @@ -22,9 +22,8 @@ namespace netlist , m_IP(*this, "IP") , m_Q(*this, {{"Q1", "_Q2", "_Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "Q10", "Q11", "Q12", "Q13", "Q14"}}) - , m_cnt(0) + , m_cnt(*this, "m_cnt", 0) { - save(NLNAME(m_cnt)); } NETLIB_RESETI() @@ -36,12 +35,12 @@ namespace netlist NETLIB_UPDATEI(); public: - void update_outputs(const UINT16 cnt); + void update_outputs(const unsigned cnt); logic_input_t m_IP; object_array_t<logic_output_t, 14> m_Q; - UINT16 m_cnt; + state_var<unsigned> m_cnt; }; NETLIB_OBJECT(CD4020) @@ -80,10 +79,9 @@ namespace netlist NETLIB_UPDATE(CD4020_sub) { - UINT8 cnt = m_cnt; - cnt = ( cnt + 1) & 0x3fff; - update_outputs(cnt); - m_cnt = cnt; + ++m_cnt; + m_cnt &= 0x3fff; + update_outputs(m_cnt); } NETLIB_UPDATE(CD4020) @@ -101,7 +99,7 @@ namespace netlist m_sub.m_IP.activate_hl(); } - inline NETLIB_FUNC_VOID(CD4020_sub, update_outputs, (const UINT16 cnt)) + inline NETLIB_FUNC_VOID(CD4020_sub, update_outputs, (const unsigned cnt)) { /* static */ const netlist_time out_delayQn[14] = { NLTIME_FROM_NS(180), NLTIME_FROM_NS(280), diff --git a/src/lib/netlist/devices/nld_74107.cpp b/src/lib/netlist/devices/nld_74107.cpp index 4dfa8b9aa8a..52b59a0816d 100644 --- a/src/lib/netlist/devices/nld_74107.cpp +++ b/src/lib/netlist/devices/nld_74107.cpp @@ -18,14 +18,10 @@ namespace netlist , m_clk(*this, "CLK") , m_Q(*this, "Q") , m_QQ(*this, "QQ") - , m_Q1(0) - , m_Q2(0) - , m_F(0) - + , m_Q1(*this, "m_Q1", 0) + , m_Q2(*this, "m_Q2", 0) + , m_F(*this, "m_F", 0) { - save(NLNAME(m_Q1)); - save(NLNAME(m_Q2)); - save(NLNAME(m_F)); } NETLIB_RESETI(); @@ -37,9 +33,9 @@ namespace netlist logic_output_t m_Q; logic_output_t m_QQ; - netlist_sig_t m_Q1; - netlist_sig_t m_Q2; - netlist_sig_t m_F; + state_var<netlist_sig_t> m_Q1; + state_var<netlist_sig_t> m_Q2; + state_var<netlist_sig_t> m_F; void newstate(const netlist_sig_t state); @@ -141,7 +137,7 @@ namespace netlist NETLIB_UPDATE(74107A) { - const UINT8 JK = (INPLOGIC(m_J) << 1) | INPLOGIC(m_K); + const auto JK = (INPLOGIC(m_J) << 1) | INPLOGIC(m_K); switch (JK) { diff --git a/src/lib/netlist/devices/nld_74123.cpp b/src/lib/netlist/devices/nld_74123.cpp index 943fd3e14df..29cd3cd97ac 100644 --- a/src/lib/netlist/devices/nld_74123.cpp +++ b/src/lib/netlist/devices/nld_74123.cpp @@ -32,6 +32,9 @@ namespace netlist , m_Q(*this, "Q") , m_QQ(*this, "QQ") , m_CV(*this, "_CV") // internal + , m_last_trig(*this, "m_last_trig", 0) + , m_state(*this, "m_state", 0) + , m_KP(*this, "m_KP", 0) , m_K(*this, "K", (m_dev_type == 4538) ? 0.4 : 0.4) , m_RI(*this, "RI", 400.0) // around 250 for HC series, 400 on LS/TTL, estimated from datasheets { @@ -49,10 +52,6 @@ namespace netlist connect_late(m_RN.m_R.m_P, m_RP.m_R.m_N); connect_late(m_CV, m_RN.m_R.m_P); - - save(NLNAME(m_last_trig)); - save(NLNAME(m_state)); - save(NLNAME(m_KP)); } NETLIB_RESETI(); @@ -75,9 +74,9 @@ namespace netlist analog_input_t m_CV; - netlist_sig_t m_last_trig; - UINT8 m_state; - double m_KP; + state_var<netlist_sig_t> m_last_trig; + state_var<unsigned> m_state; + state_var<double> m_KP; param_double_t m_K; param_double_t m_RI; diff --git a/src/lib/netlist/devices/nld_74153.cpp b/src/lib/netlist/devices/nld_74153.cpp index 32497c627e3..913d9d19518 100644 --- a/src/lib/netlist/devices/nld_74153.cpp +++ b/src/lib/netlist/devices/nld_74153.cpp @@ -23,9 +23,8 @@ namespace netlist , m_C(*this, {{"C0", "C1", "C2", "C3"}}) , m_G(*this, "G") , m_Y(*this, "AY") //FIXME: Change netlists - , m_chan(0) + , m_chan(*this, "m_chan", 0) { - save(NLNAME(m_chan)); } NETLIB_RESETI(); @@ -37,7 +36,7 @@ namespace netlist logic_output_t m_Y; - int m_chan; + state_var<unsigned> m_chan; }; NETLIB_OBJECT(74153) @@ -110,7 +109,7 @@ namespace netlist const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) }; if (!INPLOGIC(m_G)) { - UINT8 t = INPLOGIC(m_C[m_chan]); + uint_fast8_t t = INPLOGIC(m_C[m_chan]); OUTLOGIC(m_Y, t, delay[t] ); } else diff --git a/src/lib/netlist/devices/nld_74175.cpp b/src/lib/netlist/devices/nld_74175.cpp index 79c4fb85d1a..b9c02009a68 100644 --- a/src/lib/netlist/devices/nld_74175.cpp +++ b/src/lib/netlist/devices/nld_74175.cpp @@ -18,10 +18,9 @@ namespace netlist , m_CLK(*this, "CLK") , m_Q(*this, {{"Q1", "Q2", "Q3", "Q4"}}) , m_QQ(*this, {{"Q1Q", "Q2Q", "Q3Q", "Q4Q"}}) - , m_data(0) + , m_clrq(*this, "m_clr", 0) + , m_data(*this, "m_data", 0) { - save(NLNAME(m_clrq)); - save(NLNAME(m_data)); } NETLIB_RESETI(); @@ -32,8 +31,8 @@ namespace netlist object_array_t<logic_output_t, 4> m_Q; object_array_t<logic_output_t, 4> m_QQ; - netlist_sig_t m_clrq; - UINT8 m_data; + state_var<netlist_sig_t> m_clrq; + state_var<unsigned> m_data; }; NETLIB_OBJECT(74175) @@ -109,7 +108,7 @@ namespace netlist { for (int i=0; i<4; i++) { - UINT8 d = (m_data >> i) & 1; + netlist_sig_t d = (m_data >> i) & 1; OUTLOGIC(m_Q[i], d, delay[d]); OUTLOGIC(m_QQ[i], d ^ 1, delay[d ^ 1]); } @@ -119,7 +118,7 @@ namespace netlist NETLIB_UPDATE(74175) { - UINT8 d = 0; + uint_fast8_t d = 0; for (int i=0; i<4; i++) { d |= (INPLOGIC(m_D[i]) << i); diff --git a/src/lib/netlist/devices/nld_74192.cpp b/src/lib/netlist/devices/nld_74192.cpp index cc0260fd99a..93af5de836d 100644 --- a/src/lib/netlist/devices/nld_74192.cpp +++ b/src/lib/netlist/devices/nld_74192.cpp @@ -33,7 +33,7 @@ namespace netlist logic_input_t m_C; logic_input_t m_D; - inline UINT8 read_ABCD() const + uint_fast8_t read_ABCD() const { //return (INPLOGIC_PASSIVE(m_D) << 3) | (INPLOGIC_PASSIVE(m_C) << 2) | (INPLOGIC_PASSIVE(m_B) << 1) | (INPLOGIC_PASSIVE(m_A) << 0); return (INPLOGIC(m_D) << 3) | (INPLOGIC(m_C) << 2) | (INPLOGIC(m_B) << 1) | (INPLOGIC(m_A) << 0); @@ -48,6 +48,9 @@ namespace netlist , m_LOADQ(*this, "LOADQ") , m_CU(*this, "CU") , m_CD(*this, "CD") + , m_cnt(*this, "m_cnt", 0) + , m_last_CU(*this, "m_last_CU", 0) + , m_last_CD(*this, "m_last_CD", 0) , m_Q(*this, {{"QA", "QB", "QC", "QD"}}) , m_BORROWQ(*this, "BORROWQ") , m_CARRYQ(*this, "CARRYQ") @@ -56,10 +59,6 @@ namespace netlist register_subalias("B", m_ABCD.m_B); register_subalias("C", m_ABCD.m_C); register_subalias("D", m_ABCD.m_D); - - save(NLNAME(m_cnt)); - save(NLNAME(m_last_CU)); - save(NLNAME(m_last_CD)); } NETLIB_RESETI(); @@ -72,9 +71,9 @@ namespace netlist logic_input_t m_CU; logic_input_t m_CD; - INT8 m_cnt; - UINT8 m_last_CU; - UINT8 m_last_CD; + state_var<int> m_cnt; + state_var<unsigned> m_last_CU; + state_var<unsigned> m_last_CD; object_array_t<logic_output_t, 4> m_Q; logic_output_t m_BORROWQ; diff --git a/src/lib/netlist/devices/nld_74193.cpp b/src/lib/netlist/devices/nld_74193.cpp index 0742ff1ce54..264c348e656 100644 --- a/src/lib/netlist/devices/nld_74193.cpp +++ b/src/lib/netlist/devices/nld_74193.cpp @@ -25,17 +25,13 @@ namespace netlist , m_LOADQ(*this, "LOADQ") , m_CU(*this, "CU") , m_CD(*this, "CD") - , m_cnt(0) - , m_last_CU(0) - , m_last_CD(0) + , m_cnt(*this, "m_cnt", 0) + , m_last_CU(*this, "m_last_CU", 0) + , m_last_CD(*this, "m_last_CD", 0) , m_Q(*this, {{"QA", "QB", "QC", "QD"}}) , m_BORROWQ(*this, "BORROWQ") , m_CARRYQ(*this, "CARRYQ") { - - save(NLNAME(m_cnt)); - save(NLNAME(m_last_CU)); - save(NLNAME(m_last_CD)); } NETLIB_RESETI(); @@ -51,9 +47,9 @@ namespace netlist logic_input_t m_CU; logic_input_t m_CD; - INT8 m_cnt; - UINT8 m_last_CU; - UINT8 m_last_CD; + state_var<int> m_cnt; + state_var<unsigned> m_last_CU; + state_var<unsigned> m_last_CD; object_array_t<logic_output_t, 4> m_Q; logic_output_t m_BORROWQ; diff --git a/src/lib/netlist/devices/nld_7448.cpp b/src/lib/netlist/devices/nld_7448.cpp index edb11783d2e..ea1b46ca5dd 100644 --- a/src/lib/netlist/devices/nld_7448.cpp +++ b/src/lib/netlist/devices/nld_7448.cpp @@ -13,14 +13,6 @@ namespace netlist namespace devices { - - /* - * FIXME: Using truthtable is a lot slower than the explicit device - * in breakout. Performance drops by 20%. - */ - - #define USE_TRUTHTABLE_7448 (0) - #if (USE_TRUTHTABLE_7448 && USE_TRUTHTABLE) NETLIB_TRUTHTABLE(7448, 7, 7, 0); @@ -37,18 +29,17 @@ namespace netlist , m_LTQ(*this, "LTQ") , m_BIQ(*this, "BIQ") , m_RBIQ(*this, "RBIQ") - , m_state(0) + , m_state(*this, "m_state", 0) , m_Q(*this, {{"a", "b", "c", "d", "e", "f", "g"}}) { - save(NLNAME(m_state)); } NETLIB_RESETI(); NETLIB_UPDATEI(); public: - void update_outputs(UINT8 v); - static const UINT8 tab7448[16][7]; + void update_outputs(uint_fast8_t v); + static const uint_fast8_t tab7448[16][7]; logic_input_t m_A; logic_input_t m_B; @@ -58,7 +49,7 @@ namespace netlist logic_input_t m_BIQ; logic_input_t m_RBIQ; - UINT8 m_state; + state_var<unsigned> m_state; object_array_t<logic_output_t, 7> m_Q; /* a .. g */ @@ -167,7 +158,7 @@ namespace netlist m_C.activate(); m_B.activate(); m_A.activate(); - UINT8 v; + uint_fast8_t v; v = (INPLOGIC(m_A) << 0) | (INPLOGIC(m_B) << 1) | (INPLOGIC(m_C) << 2) | (INPLOGIC(m_D) << 3); if ((!INPLOGIC(m_RBIQ) && (v==0))) @@ -186,7 +177,7 @@ namespace netlist m_RBIQ.inactivate(); } - NETLIB_FUNC_VOID(7448, update_outputs, (UINT8 v)) + NETLIB_FUNC_VOID(7448, update_outputs, (uint_fast8_t v)) { nl_assert(v<16); if (v != m_state) @@ -199,7 +190,7 @@ namespace netlist } } - const UINT8 NETLIB_NAME(7448)::tab7448[16][7] = + const uint_fast8_t NETLIB_NAME(7448)::tab7448[16][7] = { { 1, 1, 1, 1, 1, 1, 0 }, /* 00 - not blanked ! */ { 0, 1, 1, 0, 0, 0, 0 }, /* 01 */ diff --git a/src/lib/netlist/devices/nld_7448.h b/src/lib/netlist/devices/nld_7448.h index d9532b55cdb..5f3784d192d 100644 --- a/src/lib/netlist/devices/nld_7448.h +++ b/src/lib/netlist/devices/nld_7448.h @@ -26,6 +26,14 @@ #include "nl_base.h" +/* + * FIXME: Using truthtable is a lot slower than the explicit device + * in breakout. Performance drops by 20%. This can be fixed by + * setting param USE_DEACTIVATE for the device. + */ + +#define USE_TRUTHTABLE_7448 (0) + #define TTL_7448(name, cA0, cA1, cA2, cA3, cLTQ, cBIQ, cRBIQ) \ NET_REGISTER_DEV(TTL_7448, name) \ NET_CONNECT(name, A, cA0) \ diff --git a/src/lib/netlist/devices/nld_7450.cpp b/src/lib/netlist/devices/nld_7450.cpp index 548a76c47d7..67060e7955e 100644 --- a/src/lib/netlist/devices/nld_7450.cpp +++ b/src/lib/netlist/devices/nld_7450.cpp @@ -69,12 +69,12 @@ namespace netlist m_B.activate(); m_C.activate(); m_D.activate(); - UINT8 t1 = INPLOGIC(m_A) & INPLOGIC(m_B); - UINT8 t2 = INPLOGIC(m_C) & INPLOGIC(m_D); + uint_fast8_t t1 = INPLOGIC(m_A) & INPLOGIC(m_B); + uint_fast8_t t2 = INPLOGIC(m_C) & INPLOGIC(m_D); const netlist_time times[2] = { NLTIME_FROM_NS(22), NLTIME_FROM_NS(15) }; - UINT8 res = 0; + uint_fast8_t res = 0; if (t1 ^ 1) { if (t2 ^ 1) diff --git a/src/lib/netlist/devices/nld_7474.cpp b/src/lib/netlist/devices/nld_7474.cpp index 55355d83cad..56f9d1dfcb8 100644 --- a/src/lib/netlist/devices/nld_7474.cpp +++ b/src/lib/netlist/devices/nld_7474.cpp @@ -18,10 +18,8 @@ namespace netlist , m_CLK(*this, "CLK") , m_Q(*this, "Q") , m_QQ(*this, "QQ") - , m_nextD(0) + , m_nextD(*this, "m_nextD", 0) { - - save(NLNAME(m_nextD)); } NETLIB_RESETI(); @@ -31,9 +29,9 @@ namespace netlist logic_input_t m_CLK; logic_output_t m_Q; logic_output_t m_QQ; - INT8 m_nextD; + state_var<unsigned> m_nextD; - inline void newstate(const UINT8 stateQ, const UINT8 stateQQ); + inline void newstate(const netlist_sig_t stateQ, const netlist_sig_t stateQQ); private: @@ -95,7 +93,7 @@ namespace netlist NETLIB_SUB(7474) m_2; }; - inline void NETLIB_NAME(7474sub)::newstate(const UINT8 stateQ, const UINT8 stateQQ) + inline void NETLIB_NAME(7474sub)::newstate(const netlist_sig_t stateQ, const netlist_sig_t stateQQ) { // 0: High-to-low 40 ns, 1: Low-to-high 25 ns const netlist_time delay[2] = { NLTIME_FROM_NS(40), NLTIME_FROM_NS(25) }; diff --git a/src/lib/netlist/devices/nld_7483.cpp b/src/lib/netlist/devices/nld_7483.cpp index db23f26d563..c314be16d33 100644 --- a/src/lib/netlist/devices/nld_7483.cpp +++ b/src/lib/netlist/devices/nld_7483.cpp @@ -24,14 +24,13 @@ namespace netlist , m_B2(*this, "B2") , m_B3(*this, "B3") , m_B4(*this, "B4") - , m_lastr(0) + , m_lastr(*this, "m_lastr", 0) , m_S1(*this, "S1") , m_S2(*this, "S2") , m_S3(*this, "S3") , m_S4(*this, "S4") , m_C4(*this, "C4") { - save(NLNAME(m_lastr)); } NETLIB_RESETI(); NETLIB_UPDATEI(); @@ -47,7 +46,7 @@ namespace netlist logic_input_t m_B3; logic_input_t m_B4; - UINT8 m_lastr; + state_var<unsigned> m_lastr; logic_output_t m_S1; logic_output_t m_S2; @@ -90,10 +89,10 @@ namespace netlist NETLIB_UPDATE(7483) { - UINT8 a = (INPLOGIC(m_A1) << 0) | (INPLOGIC(m_A2) << 1) | (INPLOGIC(m_A3) << 2) | (INPLOGIC(m_A4) << 3); - UINT8 b = (INPLOGIC(m_B1) << 0) | (INPLOGIC(m_B2) << 1) | (INPLOGIC(m_B3) << 2) | (INPLOGIC(m_B4) << 3); + uint_fast8_t a = (INPLOGIC(m_A1) << 0) | (INPLOGIC(m_A2) << 1) | (INPLOGIC(m_A3) << 2) | (INPLOGIC(m_A4) << 3); + uint_fast8_t b = (INPLOGIC(m_B1) << 0) | (INPLOGIC(m_B2) << 1) | (INPLOGIC(m_B3) << 2) | (INPLOGIC(m_B4) << 3); - UINT8 r = a + b + INPLOGIC(m_C0); + uint_fast8_t r = a + b + INPLOGIC(m_C0); if (r != m_lastr) { diff --git a/src/lib/netlist/devices/nld_7490.cpp b/src/lib/netlist/devices/nld_7490.cpp index c47cc1d94a9..22deac2ea9a 100644 --- a/src/lib/netlist/devices/nld_7490.cpp +++ b/src/lib/netlist/devices/nld_7490.cpp @@ -21,14 +21,11 @@ namespace netlist , m_R2(*this, "R2") , m_R91(*this, "R91") , m_R92(*this, "R92") - , m_cnt(0) - , m_last_A(0) - , m_last_B(0) + , m_cnt(*this, "m_cnt", 0) + , m_last_A(*this, "m_last_A", 0) + , m_last_B(*this, "m_last_B", 0) , m_Q(*this, {{"QA", "QB", "QC", "QD"}}) { - save(NLNAME(m_cnt)); - save(NLNAME(m_last_A)); - save(NLNAME(m_last_B)); } NETLIB_UPDATEI(); @@ -44,9 +41,9 @@ namespace netlist logic_input_t m_R91; logic_input_t m_R92; - UINT8 m_cnt; - UINT8 m_last_A; - UINT8 m_last_B; + state_var_u8 m_cnt; + state_var_u8 m_last_A; + state_var_u8 m_last_B; object_array_t<logic_output_t, 4> m_Q; }; diff --git a/src/lib/netlist/devices/nld_7493.cpp b/src/lib/netlist/devices/nld_7493.cpp index b60972d8dad..8a12333e596 100644 --- a/src/lib/netlist/devices/nld_7493.cpp +++ b/src/lib/netlist/devices/nld_7493.cpp @@ -19,10 +19,9 @@ namespace netlist NETLIB_CONSTRUCTOR(7493ff) , m_I(*this, "CLK") , m_Q(*this, "Q") + , m_reset(*this, "m_reset", 0) + , m_state(*this, "m_state", 0) { - - save(NLNAME(m_reset)); - save(NLNAME(m_state)); } NETLIB_RESETI(); @@ -32,8 +31,8 @@ namespace netlist logic_input_t m_I; logic_output_t m_Q; - UINT8 m_reset; - UINT8 m_state; + state_var_u8 m_reset; + state_var_u8 m_state; }; NETLIB_OBJECT(7493) diff --git a/src/lib/netlist/devices/nld_74ls629.cpp b/src/lib/netlist/devices/nld_74ls629.cpp index eb9fbd7f712..74d2892031c 100644 --- a/src/lib/netlist/devices/nld_74ls629.cpp +++ b/src/lib/netlist/devices/nld_74ls629.cpp @@ -52,15 +52,11 @@ namespace netlist NETLIB_CONSTRUCTOR(SN74LS629clk) , m_FB(*this, "FB") , m_Y(*this, "Y") - , m_enableq(1) - , m_out(0) - , m_inc(netlist_time::zero()) + , m_enableq(*this, "m_enableq", 1) + , m_out(*this, "m_out", 0) + , m_inc(*this, "m_inc", netlist_time::zero()) { connect_late(m_FB, m_Y); - - save(NLNAME(m_enableq)); - save(NLNAME(m_inc)); - save(NLNAME(m_out)); } NETLIB_RESETI() @@ -76,9 +72,9 @@ namespace netlist logic_input_t m_FB; logic_output_t m_Y; - netlist_sig_t m_enableq; - netlist_sig_t m_out; - netlist_time m_inc; + state_var<netlist_sig_t> m_enableq; + state_var<netlist_sig_t> m_out; + state_var<netlist_time> m_inc; }; NETLIB_OBJECT(SN74LS629) @@ -216,7 +212,7 @@ namespace netlist // FIXME: we need a possibility to remove entries from queue ... // or an exact model ... - m_clock.m_inc = netlist_time(0.5 / (double) freq); + m_clock.m_inc = netlist_time::from_double(0.5 / (double) freq); //m_clock.update(); //NL_VERBOSE_OUT(("{1} {2} {3} {4}\n", name(), v_freq, v_rng, freq)); diff --git a/src/lib/netlist/devices/nld_82S16.cpp b/src/lib/netlist/devices/nld_82S16.cpp index 9b3e32cd291..a5992909b02 100644 --- a/src/lib/netlist/devices/nld_82S16.cpp +++ b/src/lib/netlist/devices/nld_82S16.cpp @@ -22,8 +22,8 @@ namespace netlist , m_WEQ(*this, "WEQ") , m_DIN(*this, "DIN") , m_DOUTQ(*this, "DOUTQ") + , m_ram(*this, "m_ram", 0) { - save(NLNAME(m_ram)); } NETLIB_RESETI(); @@ -38,8 +38,7 @@ namespace netlist logic_input_t m_DIN; logic_output_t m_DOUTQ; - //netlist_state_t<UINT8[256]> m_ram; - UINT64 m_ram[4]; // 256 bits + state_var<uint_fast64_t[4]> m_ram; // 256 bits }; NETLIB_OBJECT_DERIVED(82S16_dip, 82S16) @@ -88,7 +87,7 @@ namespace netlist if (!INPLOGIC(m_WEQ)) { - m_ram[adr >> 6] = (m_ram[adr >> 6] & ~((UINT64) 1 << (adr & 0x3f))) | ((UINT64) INPLOGIC(m_DIN) << (adr & 0x3f)); + m_ram[adr >> 6] = (m_ram[adr >> 6] & ~((uint_fast64_t) 1 << (adr & 0x3f))) | ((uint_fast64_t) INPLOGIC(m_DIN) << (adr & 0x3f)); } OUTLOGIC(m_DOUTQ, ((m_ram[adr >> 6] >> (adr & 0x3f)) & 1) ^ 1, NLTIME_FROM_NS(20)); } diff --git a/src/lib/netlist/devices/nld_9310.cpp b/src/lib/netlist/devices/nld_9310.cpp index 97c2d2b0a7f..ba53394ef8d 100644 --- a/src/lib/netlist/devices/nld_9310.cpp +++ b/src/lib/netlist/devices/nld_9310.cpp @@ -33,7 +33,7 @@ namespace netlist logic_input_t m_C; logic_input_t m_D; - inline UINT8 read_ABCD() const + uint_fast8_t read_ABCD() const { //return (INPLOGIC_PASSIVE(m_D) << 3) | (INPLOGIC_PASSIVE(m_C) << 2) | (INPLOGIC_PASSIVE(m_B) << 1) | (INPLOGIC_PASSIVE(m_A) << 0); return (INPLOGIC(m_D) << 3) | (INPLOGIC(m_C) << 2) | (INPLOGIC(m_B) << 1) | (INPLOGIC(m_A) << 0); @@ -50,19 +50,16 @@ namespace netlist , m_QC(*this, "QC") , m_QD(*this, "QD") , m_RC(*this, "RC") - , m_cnt(0) - , m_loadq(0) - , m_ent(0) + , m_cnt(*this, "m_cnt", 0) + , m_loadq(*this, "m_loadq", 0) + , m_ent(*this, "m_ent", 0) { - save(NLNAME(m_cnt)); - save(NLNAME(m_loadq)); - save(NLNAME(m_ent)); } NETLIB_RESETI(); NETLIB_UPDATEI(); public: - inline void update_outputs_all(const UINT8 cnt, const netlist_time out_delay); - inline void update_outputs(const UINT8 cnt); + inline void update_outputs_all(const uint_fast8_t cnt, const netlist_time out_delay); + inline void update_outputs(const uint_fast8_t cnt); logic_input_t m_CLK; @@ -73,9 +70,10 @@ namespace netlist logic_output_t m_QC; logic_output_t m_QD; logic_output_t m_RC; - UINT8 m_cnt; - netlist_sig_t m_loadq; - netlist_sig_t m_ent; + + state_var_u8 m_cnt; + state_var_u8 m_loadq; + state_var_u8 m_ent; }; NETLIB_OBJECT(9310) @@ -211,7 +209,7 @@ namespace netlist } } - inline NETLIB_FUNC_VOID(9310_sub, update_outputs_all, (const UINT8 cnt, const netlist_time out_delay)) + inline NETLIB_FUNC_VOID(9310_sub, update_outputs_all, (const uint_fast8_t cnt, const netlist_time out_delay)) { OUTLOGIC(m_QA, (cnt >> 0) & 1, out_delay); OUTLOGIC(m_QB, (cnt >> 1) & 1, out_delay); @@ -219,7 +217,7 @@ namespace netlist OUTLOGIC(m_QD, (cnt >> 3) & 1, out_delay); } - inline NETLIB_FUNC_VOID(9310_sub, update_outputs, (const UINT8 cnt)) + inline NETLIB_FUNC_VOID(9310_sub, update_outputs, (const uint_fast8_t cnt)) { /* static */ const netlist_time out_delay = NLTIME_FROM_NS(20); #if 0 diff --git a/src/lib/netlist/devices/nld_9312.cpp b/src/lib/netlist/devices/nld_9312.cpp index 2fa5dcdf26f..0191a905ebc 100644 --- a/src/lib/netlist/devices/nld_9312.cpp +++ b/src/lib/netlist/devices/nld_9312.cpp @@ -35,20 +35,35 @@ namespace netlist NETLIB_TRUTHTABLE(9312, 12, 2, 0); #else - NETLIB_DEVICE(9312, + NETLIB_OBJECT(9312) + { + NETLIB_CONSTRUCTOR(9312) + , m_A(*this, "A") + , m_B(*this, "B") + , m_C(*this, "C") + , m_G(*this, "G") + , m_D(*this, {{"D0","D1","D2","D3","D4","D5","D6","D7"}}) + , m_Y(*this, "Y") + , m_YQ(*this, "YQ") + , m_last_chan(*this, "m_last_chan", 0) + , m_last_G(*this, "m_last_G", 0) + { + } + + NETLIB_UPDATEI(); + NETLIB_RESETI(); public: - // C, B, A, G,D0,D1,D2,D3,D4,D5,D6,D7| Y,YQ logic_input_t m_A; logic_input_t m_B; logic_input_t m_C; logic_input_t m_G; - logic_input_t m_D[8]; + object_array_t<logic_input_t, 8> m_D; logic_output_t m_Y; logic_output_t m_YQ; - UINT8 m_last_chan; - UINT8 m_last_G; - ); + state_var_u8 m_last_chan; + state_var_u8 m_last_G; + }; #endif @@ -140,7 +155,7 @@ namespace netlist NETLIB_UPDATE(9312) { - const UINT8 G = INPLOGIC(m_G); + const NLUINT8 G = INPLOGIC(m_G); if (G) { const netlist_time delay[2] = { NLTIME_FROM_NS(33), NLTIME_FROM_NS(19) }; @@ -161,46 +176,20 @@ namespace netlist m_B.activate(); m_C.activate(); } - const netlist_time delay[2] = { NLTIME_FROM_NS(33), NLTIME_FROM_NS(28) }; - const UINT8 chan = INPLOGIC(m_A) | (INPLOGIC(m_B)<<1) | (INPLOGIC(m_C)<<2); + constexpr netlist_time delay[2] = { NLTIME_FROM_NS(33), NLTIME_FROM_NS(28) }; + const NLUINT8 chan = INPLOGIC(m_A) | (INPLOGIC(m_B)<<1) | (INPLOGIC(m_C)<<2); if (m_last_chan != chan) { m_D[m_last_chan].inactivate(); m_D[chan].activate(); } - const UINT8 val = INPLOGIC(m_D[chan]); + const auto val = INPLOGIC(m_D[chan]); OUTLOGIC(m_Y, val, delay[val]); OUTLOGIC(m_YQ, !val, delay[!val]); m_last_chan = chan; } } - NETLIB_START(9312) - { - register_input("G", m_G); - register_input("A", m_A); - register_input("B", m_B); - register_input("C", m_C); - - register_input("D0", m_D[0]); - register_input("D1", m_D[1]); - register_input("D2", m_D[2]); - register_input("D3", m_D[3]); - register_input("D4", m_D[4]); - register_input("D5", m_D[5]); - register_input("D6", m_D[6]); - register_input("D7", m_D[7]); - - register_output("Y", m_Y); - register_output("YQ", m_YQ); - - m_last_chan = 0; - m_last_G = 0; - - save(NLNAME(m_last_chan)); - save(NLNAME(m_last_G)); - } - NETLIB_RESET(9312) { } diff --git a/src/lib/netlist/devices/nld_9316.cpp b/src/lib/netlist/devices/nld_9316.cpp index 287a9b6669d..8c6b70c5810 100644 --- a/src/lib/netlist/devices/nld_9316.cpp +++ b/src/lib/netlist/devices/nld_9316.cpp @@ -33,7 +33,7 @@ namespace netlist logic_input_t m_C; logic_input_t m_D; - inline UINT8 read_ABCD() const + uint_fast8_t read_ABCD() const { //return (INPLOGIC_PASSIVE(m_D) << 3) | (INPLOGIC_PASSIVE(m_C) << 2) | (INPLOGIC_PASSIVE(m_B) << 1) | (INPLOGIC_PASSIVE(m_A) << 0); return (INPLOGIC(m_D) << 3) | (INPLOGIC(m_C) << 2) | (INPLOGIC(m_B) << 1) | (INPLOGIC(m_A) << 0); @@ -49,23 +49,19 @@ namespace netlist , m_QC(*this, "QC") , m_QD(*this, "QD") , m_RC(*this, "RC") - , m_cnt(0) , m_ABCD(nullptr) - , m_loadq(0) - , m_ent(0) + , m_cnt(*this, "m_cnt", 0) + , m_loadq(*this, "m_loadq", 0) + , m_ent(*this, "m_ent", 0) { - - save(NLNAME(m_cnt)); - save(NLNAME(m_loadq)); - save(NLNAME(m_ent)); } NETLIB_RESETI(); NETLIB_UPDATEI(); public: - inline void update_outputs_all(const UINT8 cnt, const netlist_time out_delay); - inline void update_outputs(const UINT8 cnt); + inline void update_outputs_all(const uint_fast8_t cnt, const netlist_time out_delay); + inline void update_outputs(const uint_fast8_t cnt); logic_input_t m_CLK; @@ -75,10 +71,12 @@ namespace netlist logic_output_t m_QD; logic_output_t m_RC; - UINT8 m_cnt; NETLIB_NAME(9316_subABCD) *m_ABCD; - netlist_sig_t m_loadq; - netlist_sig_t m_ent; + + state_var_u8 m_cnt; + state_var_u8 m_loadq; + state_var_u8 m_ent; + }; NETLIB_OBJECT(9316) @@ -211,7 +209,7 @@ namespace netlist } } - inline NETLIB_FUNC_VOID(9316_sub, update_outputs_all, (const UINT8 cnt, const netlist_time out_delay)) + inline NETLIB_FUNC_VOID(9316_sub, update_outputs_all, (const uint_fast8_t cnt, const netlist_time out_delay)) { OUTLOGIC(m_QA, (cnt >> 0) & 1, out_delay); OUTLOGIC(m_QB, (cnt >> 1) & 1, out_delay); @@ -219,7 +217,7 @@ namespace netlist OUTLOGIC(m_QD, (cnt >> 3) & 1, out_delay); } - inline NETLIB_FUNC_VOID(9316_sub, update_outputs, (const UINT8 cnt)) + inline NETLIB_FUNC_VOID(9316_sub, update_outputs, (const uint_fast8_t cnt)) { /* static */ const netlist_time out_delay = NLTIME_FROM_NS(20); #if 0 diff --git a/src/lib/netlist/devices/nld_legacy.cpp b/src/lib/netlist/devices/nld_legacy.cpp index aaf7c9e25a3..1f16dbe97b8 100644 --- a/src/lib/netlist/devices/nld_legacy.cpp +++ b/src/lib/netlist/devices/nld_legacy.cpp @@ -42,9 +42,8 @@ namespace netlist , m_Q(*this, "2") , m_L_to_H(*this, "L_TO_H", 10) , m_H_to_L(*this, "H_TO_L", 10) - , m_last(0) + , m_last(*this, "m_last", 0) { - save(NLNAME(m_last)); } //NETLIB_UPDATE_PARAMI(); @@ -58,7 +57,7 @@ namespace netlist param_int_t m_L_to_H; param_int_t m_H_to_L; - UINT8 m_last; + state_var_u8 m_last; }; NETLIB_RESET(nicRSFF) diff --git a/src/lib/netlist/devices/nld_mm5837.cpp b/src/lib/netlist/devices/nld_mm5837.cpp index 9624bec2621..d86fc90b0d7 100644 --- a/src/lib/netlist/devices/nld_mm5837.cpp +++ b/src/lib/netlist/devices/nld_mm5837.cpp @@ -28,10 +28,10 @@ namespace netlist /* clock */ , m_feedback(*this, "FB") , m_Q(*this, "Q") - , m_inc(0, 1) + , m_inc(netlist_time::from_hz(56000)) + , m_shift(*this, "m_shift", 0) , m_is_timestep(false) { - m_inc = netlist_time::from_hz(56000); connect_late(m_feedback, m_Q); /* output */ @@ -41,9 +41,6 @@ namespace netlist /* device */ register_subalias("3", m_RV.m_P); - - save(NLNAME(m_shift)); - } NETLIB_RESETI(); @@ -61,10 +58,10 @@ namespace netlist /* clock stage */ logic_input_t m_feedback; logic_output_t m_Q; - netlist_time m_inc; + const netlist_time m_inc; /* state */ - UINT32 m_shift; + state_var_u32 m_shift; /* cache */ bool m_is_timestep; @@ -90,10 +87,10 @@ namespace netlist * */ - const UINT32 last_state = m_shift & 0x01; + const auto last_state = m_shift & 0x01; /* shift */ m_shift = (m_shift >> 1) | (((m_shift & 0x01) ^ ((m_shift >> 3) & 0x01)) << 16); - const UINT32 state = m_shift & 0x01; + const auto state = m_shift & 0x01; if (state != last_state) { diff --git a/src/lib/netlist/devices/nld_ne555.cpp b/src/lib/netlist/devices/nld_ne555.cpp index 2197beea776..e2553099cbd 100644 --- a/src/lib/netlist/devices/nld_ne555.cpp +++ b/src/lib/netlist/devices/nld_ne555.cpp @@ -28,8 +28,8 @@ namespace netlist , m_THRES(*this, "THRESH") // Pin 6 , m_TRIG(*this, "TRIG") // Pin 2 , m_OUT(*this, "OUT") // Pin 3 - , m_last_out(false) - , m_ff(false) + , m_last_out(*this, "m_last_out", false) + , m_ff(*this, "m_ff", false) { register_subalias("GND", m_R3.m_N); // Pin 1 @@ -40,9 +40,6 @@ namespace netlist connect_late(m_R1.m_N, m_R2.m_P); connect_late(m_R2.m_N, m_R3.m_P); connect_late(m_RDIS.m_N, m_R3.m_N); - - save(NLNAME(m_last_out)); - save(NLNAME(m_ff)); } NETLIB_UPDATEI(); @@ -60,8 +57,8 @@ namespace netlist analog_output_t m_OUT; private: - bool m_last_out; - bool m_ff; + state_var<bool> m_last_out; + state_var<bool> m_ff; inline nl_double clamp(const nl_double v, const nl_double a, const nl_double b); diff --git a/src/lib/netlist/devices/nld_system.cpp b/src/lib/netlist/devices/nld_system.cpp index c7467f7e3cc..d3f554f4912 100644 --- a/src/lib/netlist/devices/nld_system.cpp +++ b/src/lib/netlist/devices/nld_system.cpp @@ -30,7 +30,7 @@ namespace netlist NETLIB_UPDATE(clock) { - OUTLOGIC(m_Q, !m_Q.net().new_Q(), m_inc ); + OUTLOGIC(m_Q, !INPLOGIC(m_feedback), m_inc ); } // ---------------------------------------------------------------------------------------- @@ -40,7 +40,7 @@ namespace netlist NETLIB_RESET(extclock) { m_cnt = 0; - m_off = netlist_time(m_offset.Value()); + m_off = netlist_time::from_double(m_offset.Value()); //m_Q.initial(0); } @@ -187,7 +187,7 @@ namespace netlist stack[ptr-1] = stack[ptr-1] / stack[ptr]; break; case PUSH_INPUT: - stack[ptr++] = INPANALOG(m_I[(int) rc.m_param]); + stack[ptr++] = INPANALOG((*m_I[(int) rc.m_param])); break; case PUSH_CONST: stack[ptr++] = rc.m_param; diff --git a/src/lib/netlist/devices/nld_truthtable.cpp b/src/lib/netlist/devices/nld_truthtable.cpp index 5aaa14c0fef..9ed524e58b1 100644 --- a/src/lib/netlist/devices/nld_truthtable.cpp +++ b/src/lib/netlist/devices/nld_truthtable.cpp @@ -32,11 +32,11 @@ namespace netlist typename nld_truthtable_t<m_NI, m_NO, has_state>::truthtable_t m_ttbl; }; - static const uint64_t all_set = ~((uint64_t) 0); + static const uint_least64_t all_set = ~((uint_least64_t) 0); -unsigned truthtable_desc_t::count_bits(uint64_t v) +unsigned truthtable_desc_t::count_bits(uint_least64_t v) { - uint64_t ret = 0; + uint_least64_t ret = 0; for (; v != 0; v = v >> 1) { ret += (v & 1); @@ -44,9 +44,9 @@ unsigned truthtable_desc_t::count_bits(uint64_t v) return ret; } -uint64_t truthtable_desc_t::set_bits(uint64_t v, uint64_t b) +uint_least64_t truthtable_desc_t::set_bits(uint_least64_t v, uint_least64_t b) { - uint64_t ret = 0; + uint_least64_t ret = 0; for (size_t i = 0; v != 0; v = v >> 1, ++i) { if (v & 1) @@ -58,9 +58,9 @@ uint64_t truthtable_desc_t::set_bits(uint64_t v, uint64_t b) return ret; } -uint64_t truthtable_desc_t::get_ignored_simple(uint64_t i) +uint_least64_t truthtable_desc_t::get_ignored_simple(uint_least64_t i) { - uint64_t m_enable = 0; + uint_least64_t m_enable = 0; for (size_t j=0; j<m_size; j++) { if (m_outs[j] != m_outs[i]) @@ -71,10 +71,10 @@ uint64_t truthtable_desc_t::get_ignored_simple(uint64_t i) return m_enable ^ (m_size - 1); } -uint64_t truthtable_desc_t::get_ignored_extended(uint64_t state) +uint_least64_t truthtable_desc_t::get_ignored_extended(uint_least64_t state) { // Determine all inputs which may be ignored ... - uint64_t ignore = 0; + uint_least64_t ignore = 0; for (unsigned j=0; j<m_NI; j++) { if (m_outs[state] == m_outs[state ^ (1 << j)]) @@ -84,17 +84,17 @@ uint64_t truthtable_desc_t::get_ignored_extended(uint64_t state) * We have to remove those where the ignored inputs * may change the output */ - uint64_t bits = (1<<count_bits(ignore)); + uint_least64_t bits = (1<<count_bits(ignore)); std::vector<bool> t(bits); for (size_t j=1; j<bits; j++) { - uint64_t tign = set_bits(ignore, j); + uint_least64_t tign = set_bits(ignore, j); t[j] = 0; - uint64_t bitsk=(1<<count_bits(tign)); + uint_least64_t bitsk=(1<<count_bits(tign)); for (size_t k=0; k<bitsk; k++) { - uint64_t b=set_bits(tign, k); + uint_least64_t b=set_bits(tign, k); if (m_outs[state] != m_outs[(state & ~tign) | b]) { t[j] = 1; @@ -104,7 +104,7 @@ uint64_t truthtable_desc_t::get_ignored_extended(uint64_t state) } size_t jb=0; size_t jm=0; - for (UINT32 j=1; j<bits; j++) + for (size_t j=1; j<bits; j++) { size_t nb = count_bits(j); if ((t[j] == 0) && (nb>jb)) @@ -121,7 +121,7 @@ uint64_t truthtable_desc_t::get_ignored_extended(uint64_t state) // ---------------------------------------------------------------------------------------- void truthtable_desc_t::help(unsigned cur, plib::pstring_vector_t list, - uint64_t state, uint64_t val, std::vector<uint8_t> &timing_index) + uint_least64_t state, uint_least64_t val, std::vector<uint_least8_t> &timing_index) { pstring elem = list[cur].trim(); int start = 0; @@ -146,7 +146,7 @@ void truthtable_desc_t::help(unsigned cur, plib::pstring_vector_t list, nl_assert_always(false, "unknown input value (not 0, 1, or X)"); for (int i = start; i <= end; i++) { - const UINT64 nstate = state | (i << cur); + const uint_least64_t nstate = state | (i << cur); if (cur < m_num_bits - 1) { @@ -165,7 +165,7 @@ void truthtable_desc_t::help(unsigned cur, plib::pstring_vector_t list, } } -void truthtable_desc_t::setup(const plib::pstring_vector_t &truthtable, UINT32 disabled_ignore) +void truthtable_desc_t::setup(const plib::pstring_vector_t &truthtable, uint_least64_t disabled_ignore) { unsigned line = 0; @@ -195,8 +195,8 @@ void truthtable_desc_t::setup(const plib::pstring_vector_t &truthtable, UINT32 d plib::pstring_vector_t times(io[2], ","); nl_assert_always(times.size() == m_NO, "timing count not matching"); - UINT16 val = 0; - std::vector<UINT8> tindex; + uint_least64_t val = 0; + std::vector<uint_least8_t> tindex; for (unsigned j=0; j<m_NO; j++) { @@ -222,7 +222,7 @@ void truthtable_desc_t::setup(const plib::pstring_vector_t &truthtable, UINT32 d } // determine ignore - std::vector<uint64_t> ign(m_size, all_set); + std::vector<uint_least64_t> ign(m_size, all_set); for (size_t i=0; i<m_size; i++) { @@ -240,10 +240,10 @@ void truthtable_desc_t::setup(const plib::pstring_vector_t &truthtable, UINT32 d ign[i] = tign; /* don't need to recalculate similar ones */ - uint64_t bitsk=(1<<count_bits(tign)); - for (uint64_t k=0; k<bitsk; k++) + uint_least64_t bitsk=(1<<count_bits(tign)); + for (uint_least64_t k=0; k<bitsk; k++) { - uint64_t b=set_bits(tign, k); + uint_least64_t b=set_bits(tign, k); ign[(i & ~tign) | b] = tign; } } diff --git a/src/lib/netlist/devices/nld_truthtable.h b/src/lib/netlist/devices/nld_truthtable.h index d5772907df6..d30ff03704c 100644 --- a/src/lib/netlist/devices/nld_truthtable.h +++ b/src/lib/netlist/devices/nld_truthtable.h @@ -64,10 +64,10 @@ namespace netlist }; template<unsigned bits> struct uint_for_size; - template<> struct uint_for_size<1> { typedef uint8_t type; }; - template<> struct uint_for_size<2> { typedef uint16_t type; }; - template<> struct uint_for_size<4> { typedef uint32_t type; }; - template<> struct uint_for_size<8> { typedef uint64_t type; }; + template<> struct uint_for_size<1> { typedef uint_least8_t type; }; + template<> struct uint_for_size<2> { typedef uint_least16_t type; }; + template<> struct uint_for_size<4> { typedef uint_least32_t type; }; + template<> struct uint_for_size<8> { typedef uint_least64_t type; }; struct packed_int { @@ -77,39 +77,39 @@ namespace netlist , m_size(sizeof(C)) {} - void set(const size_t pos, const uint64_t val) + void set(const size_t pos, const uint_least64_t val) { switch (m_size) { - case 1: ((uint8_t *) m_data)[pos] = val; break; - case 2: ((uint16_t *) m_data)[pos] = val; break; - case 4: ((uint32_t *) m_data)[pos] = val; break; - case 8: ((uint64_t *) m_data)[pos] = val; break; + case 1: ((uint_least8_t *) m_data)[pos] = val; break; + case 2: ((uint_least16_t *) m_data)[pos] = val; break; + case 4: ((uint_least32_t *) m_data)[pos] = val; break; + case 8: ((uint_least64_t *) m_data)[pos] = val; break; default: { } } } - UINT64 operator[] (size_t pos) const + uint_least64_t operator[] (size_t pos) const { switch (m_size) { - case 1: return ((uint8_t *) m_data)[pos]; break; - case 2: return ((uint16_t *) m_data)[pos]; break; - case 4: return ((uint32_t *) m_data)[pos]; break; - case 8: return ((uint64_t *) m_data)[pos]; break; + case 1: return ((uint_least8_t *) m_data)[pos]; break; + case 2: return ((uint_least16_t *) m_data)[pos]; break; + case 4: return ((uint_least32_t *) m_data)[pos]; break; + case 8: return ((uint_least64_t *) m_data)[pos]; break; default: return 0; //should never happen } } - uint64_t adjust(uint64_t val) const + uint_least64_t adjust(uint_least64_t val) const { switch (m_size) { - case 1: return ((uint8_t) val); break; - case 2: return ((uint16_t) val); break; - case 4: return ((uint32_t) val); break; - case 8: return ((uint64_t) val); break; + case 1: return ((uint_least8_t) val); break; + case 2: return ((uint_least16_t) val); break; + case 4: return ((uint_least32_t) val); break; + case 8: return ((uint_least64_t) val); break; default: return 0; //should never happen } @@ -122,7 +122,7 @@ namespace netlist struct truthtable_desc_t { truthtable_desc_t(int NO, int NI, int has_state, bool *initialized, - packed_int outs, UINT8 *timing, netlist_time *timing_nt) + packed_int outs, uint_least8_t *timing, netlist_time *timing_nt) : m_NO(NO), m_NI(NI), /*m_has_state(has_state),*/ m_initialized(initialized), m_outs(outs), m_timing(timing), m_timing_nt(timing_nt), m_num_bits(m_NI + has_state * (m_NI + m_NO)), @@ -130,21 +130,21 @@ namespace netlist { } - void setup(const plib::pstring_vector_t &desc, UINT32 disabled_ignore); + void setup(const plib::pstring_vector_t &desc, uint_least64_t disabled_ignore); private: void help(unsigned cur, plib::pstring_vector_t list, - uint64_t state, uint64_t val, std::vector<uint8_t> &timing_index); - static unsigned count_bits(uint64_t v); - static uint64_t set_bits(uint64_t v, uint64_t b); - uint64_t get_ignored_simple(uint64_t i); - uint64_t get_ignored_extended(uint64_t i); + uint_least64_t state, uint_least64_t val, std::vector<uint_least8_t> &timing_index); + static unsigned count_bits(uint_least64_t v); + static uint_least64_t set_bits(uint_least64_t v, uint_least64_t b); + uint_least64_t get_ignored_simple(uint_least64_t i); + uint_least64_t get_ignored_extended(uint_least64_t i); unsigned m_NO; unsigned m_NI; bool *m_initialized; packed_int m_outs; - uint8_t *m_timing; + uint_least8_t *m_timing; netlist_time *m_timing_nt; /* additional values */ @@ -171,7 +171,7 @@ namespace netlist {} bool m_initialized; typename uint_for_size<need_bytes_for_bits<m_NO + m_NI>::value>::type m_outs[m_size]; - UINT8 m_timing[m_size * m_NO]; + uint_least8_t m_timing[m_size * m_NO]; netlist_time m_timing_nt[16]; }; @@ -180,9 +180,10 @@ namespace netlist truthtable_t *ttp, const char *desc[]) : device_t(owner, name) , m_fam(*this, fam) - , m_last_state(0) - , m_ign(0) - , m_active(1) + , m_last_state(*this, "m_last_state", 0) + , m_ign(*this, "m_ign", 0) + , m_active(*this, "m_active", 1) + , m_use_deactivate(*this, "USE_DEACTIVATE", true) , m_ttp(ttp) { while (*desc != nullptr && **desc != 0 ) @@ -198,9 +199,10 @@ namespace netlist truthtable_t *ttp, const plib::pstring_vector_t &desc) : device_t(owner, name) , m_fam(*this, fam) - , m_last_state(0) - , m_ign(0) - , m_active(1) + , m_last_state(*this, "m_last_state", 0) + , m_ign(*this, "m_ign", 0) + , m_active(*this, "m_active", 1) + , m_use_deactivate(*this, "USE_DEACTIVATE", true) , m_ttp(ttp) { m_desc = desc; @@ -231,11 +233,11 @@ namespace netlist } // Connect output "Q" to input "_Q" if this exists // This enables timed state without having explicit state .... - UINT32 disabled_ignore = 0; + uint_least64_t disabled_ignore = 0; for (std::size_t i=0; i < m_NO; i++) { pstring tmp = "_" + out[i]; - const int idx = inout.indexof(tmp); + const int idx = plib::container::indexof(inout, tmp); if (idx>=0) { connect_late(m_Q[i], m_I[idx]); @@ -251,18 +253,14 @@ namespace netlist &m_ttp->m_initialized, packed_int(m_ttp->m_outs), m_ttp->m_timing, m_ttp->m_timing_nt); desc.setup(m_desc, disabled_ignore * 0); - #if 0 printf("%s\n", name().cstr()); for (int j=0; j < m_size; j++) - printf("%05x %04x %04x %04x\n", j, m_ttp.m_outs[j] & ((1 << m_NO)-1), - m_ttp.m_outs[j] >> m_NO, m_ttp.m_timing[j * m_NO + 0]); - for (int k=0; m_ttp.m_timing_nt[k] != netlist_time::zero(); k++) - printf("%d %f\n", k, m_ttp.m_timing_nt[k].as_double() * 1000000.0); + printf("%05x %04x %04x %04x\n", j, m_ttp->m_outs[j] & ((1 << m_NO)-1), + m_ttp->m_outs[j] >> m_NO, m_ttp->m_timing[j * m_NO + 0]); + for (int k=0; m_ttp->m_timing_nt[k] != netlist_time::zero(); k++) + printf("%d %f\n", k, m_ttp->m_timing_nt[k].as_double() * 1000000.0); #endif - save(NLNAME(m_last_state)); - save(NLNAME(m_ign)); - save(NLNAME(m_active)); } NETLIB_RESETI() @@ -285,8 +283,7 @@ namespace netlist public: void inc_active() override { - nl_assert(netlist().use_deactivate()); - if (m_NI > 1 && m_has_state == 0) + if (m_NI > 1 && m_has_state == 0 && m_use_deactivate) if (++m_active == 1) { process<false>(); @@ -295,14 +292,13 @@ namespace netlist void dec_active() override { - nl_assert(netlist().use_deactivate()); /* FIXME: * Based on current measurements there is no point to disable * 1 input devices. This should actually be a parameter so that we * can decide for each individual gate whether it is benefitial to * ignore deactivation. */ - if (m_NI > 1 && m_has_state == 0) + if (m_NI > 1 && m_has_state == 0 && m_use_deactivate) if (--m_active == 0) { for (std::size_t i = 0; i< m_NI; i++) @@ -325,7 +321,7 @@ namespace netlist { netlist_time mt = netlist_time::zero(); - uint64_t state = 0; + uint_least64_t state = 0; if (m_NI > 1 && !m_has_state) { auto ign = m_ign; @@ -389,10 +385,11 @@ namespace netlist } } - UINT32 m_last_state; - UINT32 m_ign; - INT32 m_active; - + /* FIXME: check width */ + state_var_u32 m_last_state; + state_var_u32 m_ign; + state_var_s32 m_active; + param_logic_t m_use_deactivate; truthtable_t *m_ttp; plib::pstring_vector_t m_desc; }; diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h index 8547fcfe22f..7f5aeb7cdb9 100644 --- a/src/lib/netlist/devices/nlid_system.h +++ b/src/lib/netlist/devices/nlid_system.h @@ -11,6 +11,8 @@ #ifndef NLID_SYSTEM_H_ #define NLID_SYSTEM_H_ +#include <vector> + #include "nl_setup.h" #include "nl_base.h" #include "nl_factory.h" @@ -119,6 +121,8 @@ namespace netlist , m_offset(*this, "OFFSET", 0.0) , m_feedback(*this, "FB") , m_Q(*this, "Q") + , m_cnt(*this, "m_cnt", 0) + , m_off(*this, "m_off", netlist_time::zero()) { m_inc[0] = netlist_time::from_hz(m_freq.Value()*2); @@ -126,7 +130,7 @@ namespace netlist { netlist_time base = netlist_time::from_hz(m_freq.Value()*2); plib::pstring_vector_t pat(m_pattern.Value(),","); - m_off = netlist_time(m_offset.Value()); + m_off = netlist_time::from_double(m_offset.Value()); int pati[256]; m_size = pat.size(); @@ -144,8 +148,6 @@ namespace netlist } m_inc[m_size - 1] = base * total - ttotal; } - save(NLNAME(m_cnt)); - save(NLNAME(m_off)); } NETLIB_UPDATEI(); NETLIB_RESETI(); @@ -158,10 +160,10 @@ namespace netlist logic_input_t m_feedback; logic_output_t m_Q; - unsigned m_cnt; - unsigned m_size; netlist_time m_inc[32]; - netlist_time m_off; + state_var<unsigned> m_cnt; + state_var<netlist_time> m_off; + unsigned m_size; }; // ----------------------------------------------------------------------------- @@ -258,7 +260,7 @@ namespace netlist { public: NETLIB_CONSTRUCTOR_DERIVED(frontier, base_dummy) - , m_RIN(*this, "m_RIN") + , m_RIN(*this, "m_RIN", true) , m_ROUT(*this, "m_ROUT", true) , m_I(*this, "_I") , m_Q(*this, "_Q") @@ -311,8 +313,8 @@ namespace netlist , m_Q(*this, "Q") { - for (std::size_t i=0; i < m_N; i++) - m_I.emplace(i, *this, plib::pfmt("A{1}")(i)); + for (int i=0; i < m_N; i++) + m_I.push_back(plib::make_unique<analog_input_t>(*this, plib::pfmt("A{1}")(i))); plib::pstring_vector_t cmds(m_func.Value(), " "); m_precompiled.clear(); @@ -375,9 +377,9 @@ namespace netlist param_int_t m_N; param_str_t m_func; analog_output_t m_Q; - plib::uninitialised_array_t<analog_input_t, 10> m_I; + std::vector<std::unique_ptr<analog_input_t>> m_I; - plib::pvector_t<rpn_inst> m_precompiled; + std::vector<rpn_inst> m_precompiled; }; // ----------------------------------------------------------------------------- @@ -392,12 +394,10 @@ namespace netlist , m_I(*this, "I") , m_RON(*this, "RON", 1.0) , m_ROFF(*this, "ROFF", 1.0E20) - , m_last_state(0) + , m_last_state(*this, "m_last_state", 0) { register_subalias("1", m_R.m_P); register_subalias("2", m_R.m_N); - - save(NLNAME(m_last_state)); } NETLIB_SUB(R) m_R; @@ -414,8 +414,7 @@ namespace netlist NETLIB_UPDATEI(); private: - - UINT8 m_last_state; + state_var_u8 m_last_state; }; // ----------------------------------------------------------------------------- @@ -518,7 +517,7 @@ namespace netlist : nld_base_d_to_a_proxy(anetlist, name, out_proxied, m_RV.m_P) , m_GNDHack(*this, "_Q") , m_RV(*this, "RV") - , m_last_state(-1) + , m_last_state(*this, "m_last_var", -1) , m_is_timestep(false) { //register_sub(m_RV); @@ -528,8 +527,6 @@ namespace netlist register_subalias("Q", m_RV.m_P); connect_late(m_RV.m_N, m_GNDHack); - - save(NLNAME(m_last_state)); } virtual ~nld_d_to_a_proxy() {} @@ -542,7 +539,7 @@ namespace netlist private: analog_output_t m_GNDHack; // FIXME: Long term, we need to connect proxy gnd to device gnd NETLIB_SUB(twoterm) m_RV; - int m_last_state; + state_var<int> m_last_state; bool m_is_timestep; }; diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index 6c1df62290d..e40ec1dc5d3 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -104,15 +104,16 @@ const logic_family_desc_t *family_CD4XXX() queue_t::queue_t(netlist_t &nl) : timed_queue<net_t *, netlist_time>(512) - , object_t(nl, "QUEUE", QUEUE) - , plib::pstate_callback_t() + , object_t("QUEUE") + , netlist_ref(nl) + , plib::state_manager_t::callback_t() , m_qsize(0) , m_times(512) , m_names(512) { } -void queue_t::register_state(plib::pstate_manager_t &manager, const pstring &module) +void queue_t::register_state(plib::state_manager_t &manager, const pstring &module) { netlist().log().debug("register_state\n"); manager.save_item(this, m_qsize, module + "." + "qsize"); @@ -154,10 +155,8 @@ void queue_t::on_post_load() // object_t // ---------------------------------------------------------------------------------------- -object_t::object_t(netlist_t &nl, const pstring &aname, const type_t atype) - : m_netlist(nl) - , m_name(aname) - , m_objtype(atype) +object_t::object_t(const pstring &aname) + : m_name(aname) { } @@ -175,8 +174,9 @@ const pstring &object_t::name() const // ---------------------------------------------------------------------------------------- device_object_t::device_object_t(core_device_t &dev, const pstring &aname, const type_t atype) -: object_t(dev.netlist(), aname, atype) +: object_t(aname) , m_device(dev) +, m_type(atype) { } @@ -186,22 +186,21 @@ device_object_t::device_object_t(core_device_t &dev, const pstring &aname, const // ---------------------------------------------------------------------------------------- netlist_t::netlist_t(const pstring &aname) - : pstate_manager_t(), - m_stop(netlist_time::zero()), - m_time(netlist_time::zero()), - m_use_deactivate(0), - m_queue(*this), - m_mainclock(nullptr), - m_solver(nullptr), - m_gnd(nullptr), - m_params(nullptr), - m_name(aname), - m_setup(nullptr), - m_log(this), - m_lib(nullptr) -{ - save_item(this, static_cast<plib::pstate_callback_t &>(m_queue), "m_queue"); - save_item(this, m_time, "m_time"); + : m_state() + , m_time(netlist_time::zero()) + , m_queue(*this) + , m_use_deactivate(0) + , m_mainclock(nullptr) + , m_solver(nullptr) + , m_gnd(nullptr) + , m_params(nullptr) + , m_name(aname) + , m_setup(nullptr) + , m_log(this) + , m_lib(nullptr) +{ + state().save_item(this, static_cast<plib::state_manager_t::callback_t &>(m_queue), "m_queue"); + state().save_item(this, m_time, "m_time"); } netlist_t::~netlist_t() @@ -331,51 +330,43 @@ void netlist_t::reset() void netlist_t::process_queue(const netlist_time &delta) { - m_stop = m_time + delta; + netlist_time stop(m_time + delta); + + m_queue.push(stop, nullptr); if (m_mainclock == nullptr) { - while ( (m_time < m_stop) & (!m_queue.empty())) + queue_t::entry_t e(m_queue.pop()); + m_time = e.m_exec_time; + while (e.m_object != nullptr) { - const queue_t::entry_t e(m_queue.pop()); - m_time = e.m_exec_time; e.m_object->update_devs(); - add_to_stat(m_perf_out_processed, 1); + e = m_queue.pop(); + m_time = e.m_exec_time; } - if (m_queue.empty()) - m_time = m_stop; - - } else { + } + else + { logic_net_t &mc_net = m_mainclock->m_Q.net(); const netlist_time inc = m_mainclock->m_inc; netlist_time mc_time(mc_net.time()); - while (m_time < m_stop) + while (1) { - if (!m_queue.empty()) + while (m_queue.top().m_exec_time > mc_time) { - while (m_queue.top().m_exec_time > mc_time) - { - m_time = mc_time; - mc_time += inc; - mc_net.toggle_new_Q(); - mc_net.update_devs(); - //devices::NETLIB_NAME(mainclock)::mc_update(mc_net); - } - - const queue_t::entry_t &e = m_queue.pop(); - m_time = e.m_exec_time; - e.m_object->update_devs(); - - } else { m_time = mc_time; mc_time += inc; mc_net.toggle_new_Q(); mc_net.update_devs(); - //devices::NETLIB_NAME(mainclock)::mc_update(mc_net); } + const queue_t::entry_t e(m_queue.pop()); + m_time = e.m_exec_time; + if (e.m_object == nullptr) + break; + e.m_object->update_devs(); add_to_stat(m_perf_out_processed, 1); } mc_net.set_time(mc_time); @@ -410,13 +401,13 @@ param_template_t<C, T>::param_template_t(device_t &device, const pstring name, c { /* pstrings not yet supported, these need special logic */ if (T != param_t::STRING && T != param_t::MODEL) - save(NLNAME(m_param)); + netlist().save(*this, m_param, "m_param"); device.setup().register_and_set_param(device.name() + "." + name, *this); } template class param_template_t<double, param_t::DOUBLE>; template class param_template_t<int, param_t::INTEGER>; -template class param_template_t<int, param_t::LOGIC>; +template class param_template_t<bool, param_t::LOGIC>; template class param_template_t<pstring, param_t::STRING>; template class param_template_t<pstring, param_t::MODEL>; @@ -425,7 +416,9 @@ template class param_template_t<pstring, param_t::MODEL>; // ---------------------------------------------------------------------------------------- core_device_t::core_device_t(netlist_t &owner, const pstring &name) -: object_t(owner, name, DEVICE), logic_family_t() + : object_t(name) + , logic_family_t() + , netlist_ref(owner) #if (NL_KEEP_STATISTICS) , stat_total_time(0) , stat_update_count(0) @@ -437,8 +430,9 @@ core_device_t::core_device_t(netlist_t &owner, const pstring &name) } core_device_t::core_device_t(core_device_t &owner, const pstring &name) - : object_t(owner.netlist(), owner.name() + "." + name, DEVICE) + : object_t(owner.name() + "." + name) , logic_family_t() + , netlist_ref(owner.netlist()) #if (NL_KEEP_STATISTICS) , stat_total_time(0) , stat_update_count(0) @@ -509,9 +503,6 @@ void device_t::register_subalias(const pstring &name, core_terminal_t &term) // everything already fully qualified setup().register_alias_nofqn(alias, term.name()); - - if (term.is_type(terminal_t::INPUT) || term.is_type(terminal_t::TERMINAL)) - m_terminals.push_back(alias); } void device_t::register_subalias(const pstring &name, const pstring &aliased) @@ -521,10 +512,6 @@ void device_t::register_subalias(const pstring &name, const pstring &aliased) // everything already fully qualified setup().register_alias_nofqn(alias, aliased_fqn); - - // FIXME: make this working again - //if (term.isType(terminal_t::INPUT) || term.isType(terminal_t::TERMINAL)) - // m_terminals.add(name); } void device_t::connect_late(core_terminal_t &t1, core_terminal_t &t2) @@ -573,32 +560,26 @@ struct do_nothing_deleter{ net_t::net_t(netlist_t &nl, const pstring &aname, core_terminal_t *mr) - : object_t(nl, aname, NET) - , m_new_Q(0) - , m_cur_Q (0) - , m_time(netlist_time::zero()) - , m_active(0) - , m_in_queue(2) + : object_t(aname) + , netlist_ref(nl) + , m_new_Q(*this, "m_new_Q", 0) + , m_cur_Q (*this, "m_cur_Q", 0) + , m_time(*this, "m_time", netlist_time::zero()) + , m_active(*this, "m_active", 0) + , m_in_queue(*this, "m_in_queue", 2) , m_railterminal(nullptr) - , m_cur_Analog(0.0) + , m_cur_Analog(*this, "m_cur_Analog", 0.0) { m_railterminal = mr; if (mr != nullptr) nl.m_nets.push_back(std::shared_ptr<net_t>(this, do_nothing_deleter())); else nl.m_nets.push_back(std::shared_ptr<net_t>(this)); - - save(NLNAME(m_time)); - save(NLNAME(m_active)); - save(NLNAME(m_in_queue)); - save(NLNAME(m_cur_Analog)); - save(NLNAME(m_cur_Q)); - save(NLNAME(m_new_Q)); } net_t::~net_t() { - netlist().remove_save_items(this); + netlist().state().remove_save_items(this); } void net_t::inc_active(core_terminal_t &term) @@ -770,19 +751,19 @@ analog_net_t::analog_net_t(netlist_t &nl, const pstring &aname, core_terminal_t { } -bool analog_net_t::already_processed(plib::pvector_t<list_t> &groups) +bool analog_net_t::already_processed(std::vector<list_t> &groups) { if (isRailNet()) return true; for (auto & grp : groups) { - if (grp.contains(this)) + if (plib::container::contains(grp, this)) return true; } return false; } -void analog_net_t::process_net(plib::pvector_t<list_t> &groups) +void analog_net_t::process_net(std::vector<list_t> &groups) { if (num_cons() == 0) return; @@ -809,9 +790,8 @@ core_terminal_t::core_terminal_t(core_device_t &dev, const pstring &aname, const : device_object_t(dev, dev.name() + "." + aname, atype) , plib::linkedlist_t<core_terminal_t>::element_t() , m_net(nullptr) -, m_state(STATE_NONEX) +, m_state(*this, "m_state", STATE_NONEX) { - save(NLNAME(m_state)); } void core_terminal_t::reset() @@ -822,7 +802,7 @@ void core_terminal_t::reset() set_state(STATE_INP_ACTIVE); } -void core_terminal_t::set_net(net_t::ptr_t anet) +void core_terminal_t::set_net(net_t *anet) { m_net = anet; } @@ -840,14 +820,11 @@ void core_terminal_t::set_net(net_t::ptr_t anet) terminal_t::terminal_t(core_device_t &dev, const pstring &aname) : analog_t(dev, aname, TERMINAL) , m_otherterm(nullptr) -, m_Idr1(nullptr) -, m_go1(nullptr) -, m_gt1(nullptr) +, m_Idr1(*this, "m_Idr1", nullptr) +, m_go1(*this, "m_go1", nullptr) +, m_gt1(*this, "m_gt1", nullptr) { netlist().setup().register_term(*this); - save(NLNAME(m_Idr1)); - save(NLNAME(m_go1)); - save(NLNAME(m_gt1)); } @@ -967,6 +944,7 @@ nl_double param_model_t::model_value(const pstring &entity) return netlist().setup().model_value(m_map, entity); } + } // namespace namespace netlist diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 7828c2f3f61..1587cefb99b 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -156,8 +156,10 @@ #define NLBASE_H_ #include <vector> +#include <unordered_map> #include <memory> -#include <cmath> +//#include <cmath> +#include <cstdint> #include "nl_lists.h" #include "nl_time.h" @@ -169,12 +171,7 @@ // Type definitions // ---------------------------------------------------------------------------------------- -/* - * unsigned int would be a 20% speed increase over UINT8 for pong. - * For breakout it causes a slight decrease. - * - */ -using netlist_sig_t = std::uint32_t; +using netlist_sig_t = std::uint_least32_t; //============================================================ // MACROS / New Syntax @@ -266,7 +263,7 @@ namespace netlist class NETLIB_NAME(mainclock); class NETLIB_NAME(netlistparams); class NETLIB_NAME(base_proxy); - class nld_base_d_to_a_proxy; + class NETLIB_NAME(base_d_to_a_proxy); } //============================================================ @@ -287,13 +284,13 @@ namespace netlist class setup_t; class netlist_t; class core_device_t; - class param_model_t; + class device_t; // ----------------------------------------------------------------------------- // model_map_t // ----------------------------------------------------------------------------- - using model_map_t = plib::hashmap_t<pstring, pstring>; + using model_map_t = std::unordered_map<pstring, pstring>; // ----------------------------------------------------------------------------- // logic_family_t @@ -342,40 +339,76 @@ namespace netlist // ----------------------------------------------------------------------------- + // State variables - use to preserve state + // ----------------------------------------------------------------------------- + + template <typename T> + struct state_var + { + public: + template <typename O> + state_var(O &owner, const pstring name, const T &value); + state_var(const state_var &rhs) NOEXCEPT = default; + state_var(state_var &&rhs) NOEXCEPT = default; + state_var &operator=(state_var rhs) { std::swap(rhs.m_value, this->m_value); return *this; } + state_var &operator=(const T rhs) { m_value = rhs; return *this; } + operator T & () { return m_value; } + T & operator()() { return m_value; } + operator const T & () const { return m_value; } + const T & operator()() const { return m_value; } + + T * ptr() { return &m_value; } + const T * ptr() const { return &m_value; } + private: + T m_value; + }; + + template <typename T, std::size_t N> + struct state_var<T[N]> + { + public: + state_var(device_t &dev, const pstring name, const T & value); + state_var(const state_var &rhs) NOEXCEPT = default; + state_var(state_var &&rhs) NOEXCEPT = default; + state_var &operator=(const state_var rhs) { m_value = rhs.m_value; return *this; } + state_var &operator=(const T rhs) { m_value = rhs; return *this; } + T & operator[](const std::size_t i) { return m_value[i]; } + const T & operator[](const std::size_t i) const { return m_value[i]; } + private: + T m_value[N]; + }; + + // ----------------------------------------------------------------------------- + // State variables - predefined and c++11 non-optioanl + // ----------------------------------------------------------------------------- + + using state_var_u8 = state_var<std::uint_fast8_t>; + using state_var_s8 = state_var<std::int_fast8_t>; + + using state_var_u32 = state_var<std::uint_fast32_t>; + using state_var_s32 = state_var<std::int_fast32_t>; + + // ----------------------------------------------------------------------------- // object_t // ----------------------------------------------------------------------------- - class object_t : public plib::pstate_interface_t<object_t> + + class object_t { P_PREVENT_COPYING(object_t) public: - enum type_t { - TERMINAL = 0, - INPUT = 1, - OUTPUT = 2, - PARAM = 3, - NET = 4, - DEVICE = 5, - QUEUE = 6 - }; - object_t(netlist_t &nl, const pstring &aname, const type_t atype); + object_t(const pstring &aname); ~object_t(); const pstring &name() const; - plib::pstate_manager_t &state_manager(); - - type_t type() const { return m_objtype; } - bool is_type(const type_t atype) const { return (m_objtype == atype); } - - netlist_t & netlist() { return m_netlist; } - const netlist_t & netlist() const { return m_netlist; } + //netlist_t & m_netlist; + //netlist_t & netlist() { return m_netlist; } + //const netlist_t & netlist() const { return m_netlist; } private: - netlist_t & m_netlist; pstring m_name; - const type_t m_objtype; public: void * operator new (size_t size, void *ptr) { return ptr; } @@ -384,6 +417,18 @@ namespace netlist void operator delete (void * mem); }; + struct netlist_ref + { + netlist_ref(netlist_t &nl) : m_netlist(nl) { } + + netlist_t & netlist() { return m_netlist; } + const netlist_t & netlist() const { return m_netlist; } + + private: + netlist_t & m_netlist; + + }; + // ----------------------------------------------------------------------------- // device_object_t // ----------------------------------------------------------------------------- @@ -392,10 +437,24 @@ namespace netlist { P_PREVENT_COPYING(device_object_t) public: + enum type_t { + TERMINAL = 0, + INPUT = 1, + OUTPUT = 2, + PARAM = 3, + }; + device_object_t(core_device_t &dev, const pstring &aname, const type_t atype); core_device_t &device() const { return m_device; } + + type_t type() const { return m_type; } + bool is_type(const type_t atype) const { return (m_type == atype); } + + netlist_t &netlist(); + private: core_device_t & m_device; + const type_t m_type; }; @@ -408,7 +467,7 @@ namespace netlist P_PREVENT_COPYING(core_terminal_t) public: - using list_t = plib::pvector_t<core_terminal_t *>; + using list_t = std::vector<core_terminal_t *>; /* needed here ... */ @@ -446,7 +505,7 @@ namespace netlist private: net_t * m_net; - state_e m_state; + state_var<state_e> m_state; }; // ----------------------------------------------------------------------------- @@ -475,8 +534,6 @@ namespace netlist P_PREVENT_COPYING(terminal_t) public: - using list_t = plib::pvector_t<terminal_t *>; - terminal_t(core_device_t &dev, const pstring &aname); terminal_t *m_otherterm; @@ -521,9 +578,9 @@ namespace netlist } } - nl_double *m_Idr1; // drive current - nl_double *m_go1; // conductance for Voltage from other term - nl_double *m_gt1; // conductance for total conductance + state_var<nl_double *> m_Idr1; // drive current + state_var<nl_double *> m_go1; // conductance for Voltage from other term + state_var<nl_double *> m_gt1; // conductance for total conductance }; @@ -589,14 +646,11 @@ namespace netlist // net_t // ----------------------------------------------------------------------------- - class net_t : public object_t + class net_t : public object_t, public netlist_ref { P_PREVENT_COPYING(net_t) public: - using ptr_t = net_t *; - using list_t = plib::pvector_t<std::shared_ptr<net_t>>; - net_t(netlist_t &nl, const pstring &aname, core_terminal_t *mr = nullptr); virtual ~net_t(); @@ -622,7 +676,7 @@ namespace netlist bool isRailNet() const { return !(m_railterminal == nullptr); } core_terminal_t & railterminal() const { return *m_railterminal; } - int num_cons() const { return m_core_terms.size(); } + std::size_t num_cons() const { return m_core_terms.size(); } void inc_active(core_terminal_t &term); void dec_active(core_terminal_t &term); @@ -631,15 +685,15 @@ namespace netlist void move_connections(net_t *new_net); - plib::pvector_t<core_terminal_t *> m_core_terms; // save post-start m_list ... + std::vector<core_terminal_t *> m_core_terms; // save post-start m_list ... protected: - netlist_sig_t m_new_Q; - netlist_sig_t m_cur_Q; + state_var<netlist_sig_t> m_new_Q; + state_var<netlist_sig_t> m_cur_Q; - netlist_time m_time; - INT32 m_active; - UINT8 m_in_queue; /* 0: not in queue, 1: in queue, 2: last was taken */ + state_var<netlist_time> m_time; + state_var_s32 m_active; + state_var_u8 m_in_queue; /* 0: not in queue, 1: in queue, 2: last was taken */ private: plib::linkedlist_t<core_terminal_t> m_list_active; @@ -647,7 +701,7 @@ namespace netlist public: // FIXME: Have to fix the public at some time - nl_double m_cur_Analog; + state_var<nl_double> m_cur_Analog; }; @@ -656,8 +710,6 @@ namespace netlist P_PREVENT_COPYING(logic_net_t) public: - using list_t = plib::pvector_t<logic_net_t *>; - logic_net_t(netlist_t &nl, const pstring &aname, core_terminal_t *mr = nullptr); virtual ~logic_net_t() { }; @@ -699,7 +751,7 @@ namespace netlist P_PREVENT_COPYING(analog_net_t) public: - using list_t = plib::pvector_t<analog_net_t *>; + using list_t = std::vector<analog_net_t *>; analog_net_t(netlist_t &nl, const pstring &aname, core_terminal_t *mr = nullptr); @@ -712,8 +764,8 @@ namespace netlist devices::matrix_solver_t *solver() { return m_solver; } void set_solver(devices::matrix_solver_t *solver) { m_solver = solver; } - bool already_processed(plib::pvector_t<list_t> &groups); - void process_net(plib::pvector_t<list_t> &groups); + bool already_processed(std::vector<list_t> &groups); + void process_net(std::vector<list_t> &groups); private: devices::matrix_solver_t *m_solver; @@ -759,8 +811,6 @@ namespace netlist // param_t // ----------------------------------------------------------------------------- - class device_t; - class param_t : public device_object_t { P_PREVENT_COPYING(param_t) @@ -806,7 +856,7 @@ namespace netlist using param_int_t = param_template_t<int, param_t::INTEGER>; using param_str_t = param_template_t<pstring, param_t::STRING>; - using param_logic_t = param_template_t<int, param_t::INTEGER>; + using param_logic_t = param_template_t<bool, param_t::LOGIC>; class param_model_t : public param_str_t { @@ -831,13 +881,10 @@ namespace netlist // core_device_t // ----------------------------------------------------------------------------- - class core_device_t : public object_t, public logic_family_t + class core_device_t : public object_t, public logic_family_t, public netlist_ref { P_PREVENT_COPYING(core_device_t) public: - - using list_t = plib::pvector_t<core_device_t *>; - core_device_t(netlist_t &owner, const pstring &name); core_device_t(core_device_t &owner, const pstring &name); @@ -884,8 +931,8 @@ namespace netlist #if (NL_KEEP_STATISTICS) /* stats */ plib::ticks_t stat_total_time; - INT32 stat_update_count; - INT32 stat_call_count; + int_fast32_t stat_update_count; + int_fast32_t stat_call_count; #endif protected: @@ -965,17 +1012,12 @@ namespace netlist void connect_late(const pstring &t1, const pstring &t2); void connect_late(core_terminal_t &t1, core_terminal_t &t2); void connect_post_start(core_terminal_t &t1, core_terminal_t &t2); - - plib::pvector_t<pstring> m_terminals; - protected: NETLIB_UPDATEI() { } NETLIB_UPDATE_TERMINALSI() { } private: - void register_p(const pstring &name, object_t &obj); - void register_sub_p(device_t &dev); }; // ----------------------------------------------------------------------------- @@ -1003,23 +1045,24 @@ namespace netlist // queue_t // ----------------------------------------------------------------------------- - class queue_t : public timed_queue<net_t *, netlist_time>, - public object_t, - public plib::pstate_callback_t + class queue_t : public timed_queue<net_t *, netlist_time>, + public object_t, + public netlist_ref, + public plib::state_manager_t::callback_t { public: queue_t(netlist_t &nl); protected: - void register_state(plib::pstate_manager_t &manager, const pstring &module) override; + void register_state(plib::state_manager_t &manager, const pstring &module) override; void on_pre_save() override; void on_post_load() override; private: struct names_t { char m_buf[64]; }; int m_qsize; - std::vector<netlist_time::INTERNALTYPE> m_times; + std::vector<netlist_time::internal_type> m_times; std::vector<names_t> m_names; }; @@ -1028,7 +1071,7 @@ namespace netlist // ----------------------------------------------------------------------------- - class netlist_t : public plib::pstate_manager_t, public plib::plog_dispatch_intf //, public device_owner_t + class netlist_t : public plib::plog_dispatch_intf //, public device_owner_t { P_PREVENT_COPYING(netlist_t) public: @@ -1041,18 +1084,18 @@ namespace netlist void start(); void stop(); - const queue_t &queue() const { return m_queue; } - queue_t &queue() { return m_queue; } - const netlist_time time() const { return m_time; } - devices::NETLIB_NAME(solver) *solver() const { return m_solver; } - devices::NETLIB_NAME(gnd) *gnd() const { return m_gnd; } + const queue_t &queue() const { return m_queue; } + queue_t &queue() { return m_queue; } + const netlist_time time() const { return m_time; } + devices::NETLIB_NAME(solver) *solver() const { return m_solver; } + devices::NETLIB_NAME(gnd) *gnd() const { return m_gnd; } nl_double gmin() const; void push_to_queue(net_t &out, const netlist_time attime) NOEXCEPT; void remove_from_queue(net_t &out); void process_queue(const netlist_time &delta); - void abort_current_queue_slice() { m_stop = netlist_time::zero(); } + void abort_current_queue_slice() { m_queue.retime(m_time, nullptr); } bool use_deactivate() const { return m_use_deactivate; } @@ -1064,9 +1107,9 @@ namespace netlist net_t *find_net(const pstring &name); template<class device_class> - plib::pvector_t<device_class *> get_device_list() + std::vector<device_class *> get_device_list() { - plib::pvector_t<device_class *> tmp; + std::vector<device_class *> tmp; for (auto &d : m_devices) { device_class *dev = dynamic_cast<device_class *>(d.get()); @@ -1097,16 +1140,27 @@ namespace netlist plib::plog_base<NL_DEBUG> &log() { return m_log; } const plib::plog_base<NL_DEBUG> &log() const { return m_log; } + plib::state_manager_t &state() { return m_state; } + + template<typename O, typename C> void save(O &owner, C &state, const pstring &stname) + { + this->state().save_item((void *)&owner, state, pstring(owner.name()) + "." + stname); + } + template<typename O, typename C> void save(O &owner, C *state, const pstring &stname, const int count) + { + this->state().save_state_ptr((void *)&owner, pstring(owner.name()) + "." + stname, plib::state_manager_t::datatype_f<C>::f(), count, state); + } + virtual void reset(); plib::dynlib &lib() { return *m_lib; } void print_stats() const; - plib::pvector_t<plib::owned_ptr<core_device_t>> m_devices; + std::vector<plib::owned_ptr<core_device_t>> m_devices; /* sole use is to manage lifetime of net objects */ - net_t::list_t m_nets; + std::vector<std::shared_ptr<net_t>> m_nets; /* sole use is to manage lifetime of family objects */ std::vector<std::pair<pstring, std::unique_ptr<logic_family_desc_t>>> m_family_cache; @@ -1121,16 +1175,16 @@ protected: #endif private: - netlist_time m_stop; // target time for current queue processing - + plib::state_manager_t m_state; + /* mostly rw */ netlist_time m_time; - bool m_use_deactivate; queue_t m_queue; + /* mostly rw */ + bool m_use_deactivate; devices::NETLIB_NAME(mainclock) * m_mainclock; devices::NETLIB_NAME(solver) * m_solver; devices::NETLIB_NAME(gnd) * m_gnd; - devices::NETLIB_NAME(netlistparams) *m_params; pstring m_name; @@ -1162,11 +1216,6 @@ protected: // inline implementations // ----------------------------------------------------------------------------- - inline plib::pstate_manager_t &object_t::state_manager() - { - return m_netlist; - } - template <class C, param_t::param_type_t T> inline void param_template_t<C, T>::setTo(const C ¶m) { @@ -1238,7 +1287,7 @@ protected: inline void net_t::push_to_queue(const netlist_time delay) NOEXCEPT { - if (!is_queued() && (num_cons() > 0)) + if (!is_queued() && (num_cons() != 0)) { m_time = netlist().time() + delay; m_in_queue = (m_active > 0); /* queued ? */ @@ -1317,10 +1366,28 @@ protected: out.set_Q(val, delay); } + template <typename T> + template <typename O> + state_var<T>::state_var(O &owner, const pstring name, const T &value) + : m_value(value) + { + owner.netlist().save(owner, m_value, name); + } -} + template <typename T, std::size_t N> + state_var<T[N]>::state_var(device_t &dev, const pstring name, const T & value) + { + dev.netlist().save(dev, m_value, name); + for (std::size_t i=0; i<N; i++) + m_value[i] = value; + } -NETLIST_SAVE_TYPE(netlist::core_terminal_t::state_e, pstate_data_type_e::DT_INT); + inline netlist_t &device_object_t::netlist() + { + return m_device.netlist(); + } + +} #endif /* NLBASE_H_ */ diff --git a/src/lib/netlist/nl_config.h b/src/lib/netlist/nl_config.h index 68a60ece8e4..19d8e3561ad 100644 --- a/src/lib/netlist/nl_config.h +++ b/src/lib/netlist/nl_config.h @@ -8,6 +8,8 @@ #ifndef NLCONFIG_H_ #define NLCONFIG_H_ +#include <cstdint> + #include "plib/pconfig.h" //============================================================ @@ -126,7 +128,7 @@ //============================================================ // this macro passes an item followed by a string version of itself as two consecutive parameters -#define NLNAME(x) x, #x +//#define NLNAME(x) x, #x #define NOEXCEPT noexcept @@ -137,16 +139,17 @@ #endif // !defined(USE_OPENMP) // Use nano-second resolution - Sufficient for now -#define NETLIST_INTERNAL_RES (U64(1000000000)) -//#define NETLIST_INTERNAL_RES (U64(1000000000000)) +#define NETLIST_INTERNAL_RES (UINT64_C(1000000000)) +//#define NETLIST_INTERNAL_RES (UINT64_C(1000000000000)) #define NETLIST_CLOCK (NETLIST_INTERNAL_RES) //#define nl_double float //#define NL_FCONST(x) (x ## f) -#define nl_double double +//#define nl_double double #define NL_FCONST(x) x +using nl_double = double; //============================================================ diff --git a/src/lib/netlist/nl_factory.h b/src/lib/netlist/nl_factory.h index 780408cd285..b85e85bf6b8 100644 --- a/src/lib/netlist/nl_factory.h +++ b/src/lib/netlist/nl_factory.h @@ -65,7 +65,7 @@ namespace netlist } }; - class factory_list_t : public plib::pvector_t<plib::owned_ptr<base_factory_t>> + class factory_list_t : public std::vector<plib::owned_ptr<base_factory_t>> { public: factory_list_t(setup_t &m_setup); diff --git a/src/lib/netlist/nl_lists.h b/src/lib/netlist/nl_lists.h index b3443ed2297..475e0e285c2 100644 --- a/src/lib/netlist/nl_lists.h +++ b/src/lib/netlist/nl_lists.h @@ -68,13 +68,12 @@ namespace netlist #if HAS_OPENMP && USE_OPENMP m_lock = 0; #endif - //nl_assert(m_end - m_list < Size); } - entry_t pop() NOEXCEPT { return *(--m_end); } - entry_t top() const NOEXCEPT { return *(m_end-1); } + entry_t pop() NOEXCEPT { return *(--m_end); } + const entry_t &top() const NOEXCEPT { return *(m_end-1); } - void remove(const Element &elem) NOEXCEPT + void remove(const Element &elem) NOEXCEPT { /* Lock */ #if HAS_OPENMP && USE_OPENMP @@ -101,6 +100,12 @@ namespace netlist #endif } + void retime(const Time t, const Element &elem) NOEXCEPT + { + remove(elem); + push(t, elem); + } + void clear() { m_end = &m_list[0]; diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index b311e4b1a68..5b7099a9e14 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -110,7 +110,7 @@ void setup_t::register_dev(plib::owned_ptr<device_t> dev) void setup_t::register_lib_entry(const pstring &name) { - if (m_lib.contains(name)) + if (plib::container::contains(m_lib, name)) log().warning("Lib entry collection already contains {1}. IGNORED", name); else m_lib.push_back(name); @@ -118,7 +118,7 @@ void setup_t::register_lib_entry(const pstring &name) void setup_t::register_dev(const pstring &classname, const pstring &name) { - if (m_lib.contains(classname)) + if (plib::container::contains(m_lib, classname)) { namespace_push(name); include(classname); @@ -151,13 +151,13 @@ void setup_t::register_model(const pstring &model_in) log().fatal("Unable to parse model: {1}", model_in); pstring model = model_in.left(pos).trim().ucase(); pstring def = model_in.substr(pos + 1).trim(); - if (!m_models.add(model, def)) + if (!m_models.insert({model, def}).second) log().fatal("Model already exists: {1}", model_in); } void setup_t::register_alias_nofqn(const pstring &alias, const pstring &out) { - if (!m_alias.add(alias, out)) + if (!m_alias.insert({alias, out}).second) log().fatal("Error adding alias {1} to alias list\n", alias); } @@ -181,7 +181,7 @@ void setup_t::register_dippins_arr(const pstring &terms) } } -pstring setup_t::objtype_as_str(object_t &in) const +pstring setup_t::objtype_as_str(device_object_t &in) const { switch (in.type()) { @@ -191,14 +191,8 @@ pstring setup_t::objtype_as_str(object_t &in) const return "INPUT"; case terminal_t::OUTPUT: return "OUTPUT"; - case terminal_t::NET: - return "NET"; case terminal_t::PARAM: return "PARAM"; - case terminal_t::DEVICE: - return "DEVICE"; - case terminal_t::QUEUE: - return "QUEUE"; } // FIXME: noreturn log().fatal("Unknown object type {1}\n", (unsigned) in.type()); @@ -207,9 +201,10 @@ pstring setup_t::objtype_as_str(object_t &in) const void setup_t::register_and_set_param(pstring name, param_t ¶m) { - if (m_param_values.contains(name)) + auto i = m_param_values.find(name); + if (i != m_param_values.end()) { - const pstring val = m_param_values[name]; + const pstring val = i->second; log().debug("Found parameter ... {1} : {1}\n", name, val); switch (param.param_type()) { @@ -240,24 +235,13 @@ void setup_t::register_and_set_param(pstring name, param_t ¶m) log().fatal("Parameter is not supported {1} : {2}\n", name, val); } } - if (!m_params.add(param.name(), param_ref_t(param.name(), param.device(), param))) + if (!m_params.insert({param.name(), param_ref_t(param.name(), param.device(), param)}).second) log().fatal("Error adding parameter {1} to parameter list\n", name); } void setup_t::register_term(core_terminal_t &term) { - if (term.is_type(terminal_t::OUTPUT)) - { - } - else if (term.is_type(terminal_t::INPUT)) - { - static_cast<device_t &>(term.device()).m_terminals.push_back(term.name()); - } - else - { - static_cast<device_t &>(term.device()).m_terminals.push_back(term.name()); - } - if (!m_terminals.add(term.name(), &term)) + if (!m_terminals.insert({term.name(), &term}).second) log().fatal("Error adding {1} {2} to terminal list\n", objtype_as_str(term), term.name()); log().debug("{1} {2}\n", objtype_as_str(term), term.name()); } @@ -291,15 +275,16 @@ void setup_t::remove_connections(const pstring pin) pstring pinfn = build_fqn(pin); bool found = false; - for (int i = m_links.size() - 1; i >= 0; i--) + for (auto link = m_links.begin(); link != m_links.end(); ) { - auto &link = m_links[i]; - if ((link.first == pinfn) || (link.second == pinfn)) + if ((link->first == pinfn) || (link->second == pinfn)) { - log().verbose("removing connection: {1} <==> {2}\n", link.first, link.second); - m_links.remove_at(i); + log().verbose("removing connection: {1} <==> {2}\n", link->first, link->second); + link = m_links.erase(link); found = true; } + else + link++; } if (!found) log().fatal("remove_connections: found no occurrence of {1}\n", pin); @@ -345,15 +330,15 @@ void setup_t::register_param(const pstring ¶m, const pstring &value) { pstring fqn = build_fqn(param); - int idx = m_param_values.index_of(fqn); - if (idx < 0) + auto idx = m_param_values.find(fqn); + if (idx == m_param_values.end()) { - if (!m_param_values.add(fqn, value)) + if (!m_param_values.insert({fqn, value}).second) log().fatal("Unexpected error adding parameter {1} to parameter list\n", param); } else { - log().warning("Overwriting {1} old <{2}> new <{3}>\n", fqn, m_param_values.value_at(idx), value); + log().warning("Overwriting {1} old <{2}> new <{3}>\n", fqn, idx->second, value); m_param_values[fqn] = value; } } @@ -366,8 +351,8 @@ const pstring setup_t::resolve_alias(const pstring &name) const /* FIXME: Detect endless loop */ do { ret = temp; - int p = m_alias.index_of(ret); - temp = (p>=0 ? m_alias.value_at(p) : ""); + auto p = m_alias.find(ret); + temp = (p != m_alias.end() ? p->second : ""); } while (temp != ""); log().debug("{1}==>{2}\n", name, ret); @@ -377,17 +362,15 @@ const pstring setup_t::resolve_alias(const pstring &name) const core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, bool required) { const pstring &tname = resolve_alias(terminal_in); - int ret; - - ret = m_terminals.index_of(tname); + auto ret = m_terminals.find(tname); /* look for default */ - if (ret < 0) + if (ret == m_terminals.end()) { /* look for ".Q" std output */ - ret = m_terminals.index_of(tname + ".Q"); + ret = m_terminals.find(tname + ".Q"); } - core_terminal_t *term = (ret < 0 ? nullptr : m_terminals.value_at(ret)); + core_terminal_t *term = (ret == m_terminals.end() ? nullptr : ret->second); if (term == nullptr && required) log().fatal("terminal {1}({2}) not found!\n", terminal_in, tname); @@ -396,22 +379,20 @@ core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, bool require return term; } -core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, object_t::type_t atype, bool required) +core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, device_object_t::type_t atype, bool required) { const pstring &tname = resolve_alias(terminal_in); - int ret; - - ret = m_terminals.index_of(tname); + auto ret = m_terminals.find(tname); /* look for default */ - if (ret < 0 && atype == object_t::OUTPUT) + if (ret == m_terminals.end() && atype == device_object_t::OUTPUT) { /* look for ".Q" std output */ - ret = m_terminals.index_of(tname + ".Q"); + ret = m_terminals.find(tname + ".Q"); } - if (ret < 0 && required) + if (ret == m_terminals.end() && required) log().fatal("terminal {1}({2}) not found!\n", terminal_in, tname); - core_terminal_t *term = (ret < 0 ? nullptr : m_terminals.value_at(ret)); + core_terminal_t *term = (ret == m_terminals.end() ? nullptr : ret->second); if (term != nullptr && term->type() != atype) { @@ -431,14 +412,12 @@ param_t *setup_t::find_param(const pstring ¶m_in, bool required) const pstring param_in_fqn = build_fqn(param_in); const pstring &outname = resolve_alias(param_in_fqn); - int ret; - - ret = m_params.index_of(outname); - if (ret < 0 && required) + auto ret = m_params.find(outname); + if (ret == m_params.end() && required) log().fatal("parameter {1}({2}) not found!\n", param_in_fqn, outname); - if (ret != -1) + if (ret != m_params.end()) log().debug("Found parameter {1}\n", outname); - return (ret == -1 ? nullptr : &m_params.value_at(ret).m_param); + return (ret == m_params.end() ? nullptr : &ret->second.m_param); } // FIXME avoid dynamic cast here @@ -588,7 +567,7 @@ void setup_t::connect_terminals(core_terminal_t &t1, core_terminal_t &t2) { log().debug("adding analog net ...\n"); // FIXME: Nets should have a unique name - analog_net_t::ptr_t anet = plib::palloc<analog_net_t>(netlist(),"net." + t1.name()); + auto anet = plib::palloc<analog_net_t>(netlist(),"net." + t1.name()); t1.set_net(anet); anet->register_con(t2); anet->register_con(t1); @@ -706,16 +685,16 @@ void setup_t::resolve_inputs() int tries = 100; while (m_links.size() > 0 && tries > 0) // FIXME: convert into constant { - unsigned li = 0; - while (li < m_links.size()) + auto li = m_links.begin(); + while (li != m_links.end()) { - const pstring t1s = m_links[li].first; - const pstring t2s = m_links[li].second; + const pstring t1s = li->first; + const pstring t2s = li->second; core_terminal_t *t1 = find_terminal(t1s); core_terminal_t *t2 = find_terminal(t2s); if (connect(*t1, *t2)) - m_links.remove_at(li); + li = m_links.erase(li); else li++; } @@ -733,28 +712,23 @@ void setup_t::resolve_inputs() // delete empty nets ... and save m_list ... - net_t::list_t todelete; - - for (auto & net : netlist().m_nets) + for (auto net = netlist().m_nets.begin(); net != netlist().m_nets.end();) { - if (net->num_cons() == 0) - todelete.push_back(net); + if (net->get()->num_cons() == 0) + { + log().verbose("Deleting net {1} ...", net->get()->name()); + net = netlist().m_nets.erase(net); + } else - net->rebuild_list(); - } - - for (auto & net : todelete) - { - log().verbose("Deleting net {1} ...", net->name()); - netlist().m_nets.remove(net); + ++net; } pstring errstr(""); log().verbose("looking for terminals not connected ..."); - for (std::size_t i = 0; i < m_terminals.size(); i++) + for (auto & i : m_terminals) { - core_terminal_t *term = m_terminals.value_at(i); + core_terminal_t *term = i.second; if (!term->has_net() && dynamic_cast< devices::NETLIB_NAME(dummy_input) *>(&term->device()) != nullptr) log().warning("Found dummy terminal {1} without connections", term->name()); else if (!term->has_net()) @@ -862,13 +836,12 @@ const logic_family_desc_t *setup_t::family_from_model(const pstring &model) static pstring model_string(model_map_t &map) { pstring ret = map["COREMODEL"] + "("; - for (unsigned i=0; i<map.size(); i++) - ret = ret + map.key_at(i) + "=" + map.value_at(i) + " "; + for (auto & i : map) + ret = ret + i.first + "=" + i.second + " "; return ret + ")"; } - void setup_t::model_parse(const pstring &model_in, model_map_t &map) { pstring model = model_in; @@ -881,9 +854,10 @@ void setup_t::model_parse(const pstring &model_in, model_map_t &map) if (pos >= 0) break; key = model.ucase(); - if (!m_models.contains(key)) + auto i = m_models.find(key); + if (i == m_models.end()) log().fatal("Model {1} not found\n", model); - model = m_models[key]; + model = i->second; } pstring xmodel = model.left(pos); @@ -891,7 +865,8 @@ void setup_t::model_parse(const pstring &model_in, model_map_t &map) map["COREMODEL"] = key; else { - if (m_models.contains(xmodel)) + auto i = m_models.find(xmodel); + if (i != m_models.end()) model_parse(xmodel, map); else log().fatal("Model doesn't exist: <{1}>\n", model_in); @@ -918,7 +893,7 @@ const pstring setup_t::model_value_str(model_map_t &map, const pstring &entity) if (entity != entity.ucase()) log().fatal("model parameters should be uppercase:{1} {2}\n", entity, model_string(map)); - if (!map.contains(entity)) + if (map.find(entity) == map.end()) log().fatal("Entity {1} not found in model {2}\n", entity, model_string(map)); else ret = map[entity]; diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h index ebf989cb20f..39ef1c514ff 100644 --- a/src/lib/netlist/nl_setup.h +++ b/src/lib/netlist/nl_setup.h @@ -10,6 +10,8 @@ #include <memory> #include <stack> +#include <unordered_map> + #include "nl_base.h" #include "nl_factory.h" @@ -91,7 +93,7 @@ namespace netlist class source_t { public: - using list_t = plib::pvector_t<std::shared_ptr<source_t>>; + using list_t = std::vector<std::shared_ptr<source_t>>; source_t() {} @@ -167,7 +169,7 @@ namespace netlist factory_list_t &factory() { return m_factory; } const factory_list_t &factory() const { return m_factory; } - bool is_library_item(const pstring &name) const { return m_lib.contains(name); } + bool is_library_item(const pstring &name) const { return plib::container::contains(m_lib, name); } /* model / family related */ @@ -180,14 +182,14 @@ namespace netlist plib::plog_base<NL_DEBUG> &log() { return netlist().log(); } const plib::plog_base<NL_DEBUG> &log() const { return netlist().log(); } - plib::pvector_t<std::pair<pstring, base_factory_t *>> m_device_factory; + std::vector<std::pair<pstring, base_factory_t *>> m_device_factory; protected: private: core_terminal_t *find_terminal(const pstring &outname_in, bool required = true); - core_terminal_t *find_terminal(const pstring &outname_in, object_t::type_t atype, bool required = true); + core_terminal_t *find_terminal(const pstring &outname_in, device_object_t::type_t atype, bool required = true); void connect_terminals(core_terminal_t &in, core_terminal_t &out); void connect_input_output(core_terminal_t &in, core_terminal_t &out); @@ -196,30 +198,32 @@ namespace netlist bool connect_input_input(core_terminal_t &t1, core_terminal_t &t2); // helpers - pstring objtype_as_str(object_t &in) const; + pstring objtype_as_str(device_object_t &in) const; const pstring resolve_alias(const pstring &name) const; devices::nld_base_proxy *get_d_a_proxy(core_terminal_t &out); netlist_t &m_netlist; - plib::hashmap_t<pstring, pstring> m_alias; - plib::hashmap_t<pstring, param_ref_t> m_params; - plib::hashmap_t<pstring, pstring> m_param_values; - plib::hashmap_t<pstring, core_terminal_t *> m_terminals; + public: + std::unordered_map<pstring, pstring> m_alias; + std::unordered_map<pstring, param_ref_t> m_params; + std::unordered_map<pstring, pstring> m_param_values; + std::unordered_map<pstring, core_terminal_t *> m_terminals; + private: - plib::pvector_t<link_t> m_links; + std::vector<link_t> m_links; factory_list_t m_factory; - plib::hashmap_t<pstring, pstring> m_models; + std::unordered_map<pstring, pstring> m_models; int m_proxy_cnt; int m_frontier_cnt; std::stack<pstring> m_namespace_stack; source_t::list_t m_sources; - plib::pvector_t<pstring> m_lib; + std::vector<pstring> m_lib; }; diff --git a/src/lib/netlist/nl_time.h b/src/lib/netlist/nl_time.h index ed28cedc932..0a4caac1ac6 100644 --- a/src/lib/netlist/nl_time.h +++ b/src/lib/netlist/nl_time.h @@ -7,6 +7,8 @@ #ifndef NLTIME_H_ #define NLTIME_H_ +#include <cstdint> + #include "nl_config.h" #include "plib/pstate.h" @@ -25,114 +27,113 @@ namespace netlist { - struct netlist_time final + template <typename TYPE, TYPE RES> + struct ptime final { public: -#if (PHAS_INT128) - using INTERNALTYPE = UINT128; - static const pstate_data_type_e STATETYPE = DT_INT128; -#else - using INTERNALTYPE = UINT64; - static constexpr pstate_data_type_e STATETYPE = pstate_data_type_e::DT_INT64; -#endif - static constexpr INTERNALTYPE RESOLUTION = NETLIST_INTERNAL_RES; - - constexpr netlist_time() NOEXCEPT : m_time(0) {} - netlist_time(const netlist_time &rhs) NOEXCEPT = default; - netlist_time(netlist_time &&rhs) NOEXCEPT = default; + using internal_type = TYPE; + using mult_type = std::uint_fast64_t; + static constexpr internal_type resolution = RES; - constexpr explicit netlist_time(const double t) - : m_time((INTERNALTYPE) ( t * (double) RESOLUTION)) { } - constexpr explicit netlist_time(const INTERNALTYPE nom, const INTERNALTYPE den) - : m_time(nom * (RESOLUTION / den)) { } + constexpr ptime() NOEXCEPT : m_time(0) {} + constexpr ptime(const ptime &rhs) NOEXCEPT = default; + constexpr ptime(ptime &&rhs) NOEXCEPT = default; + constexpr explicit ptime(const double t) = delete; + //: m_time((internal_type) ( t * (double) resolution)) { } + constexpr explicit ptime(const internal_type nom, const internal_type den) + : m_time(nom * (resolution / den)) { } - netlist_time &operator=(const netlist_time rhs) { m_time = rhs.m_time; return *this; } + ptime &operator=(const ptime rhs) { m_time = rhs.m_time; return *this; } - netlist_time &operator+=(const netlist_time &rhs) { m_time += rhs.m_time; return *this; } - netlist_time &operator-=(const netlist_time &rhs) { m_time -= rhs.m_time; return *this; } + ptime &operator+=(const ptime &rhs) { m_time += rhs.m_time; return *this; } + ptime &operator-=(const ptime &rhs) { m_time -= rhs.m_time; return *this; } - friend netlist_time operator-(netlist_time lhs, const netlist_time &rhs) + friend ptime operator-(ptime lhs, const ptime &rhs) { lhs -= rhs; return lhs; } - friend netlist_time operator+(netlist_time lhs, const netlist_time &rhs) + friend ptime operator+(ptime lhs, const ptime &rhs) { lhs += rhs; return lhs; } - friend netlist_time operator*(netlist_time lhs, const UINT64 factor) + friend ptime operator*(ptime lhs, const mult_type factor) { - lhs.m_time *= static_cast<INTERNALTYPE>(factor); + lhs.m_time *= static_cast<internal_type>(factor); return lhs; } - friend UINT64 operator/(const netlist_time &lhs, const netlist_time &rhs) + friend mult_type operator/(const ptime &lhs, const ptime &rhs) { - return static_cast<UINT64>(lhs.m_time / rhs.m_time); + return static_cast<mult_type>(lhs.m_time / rhs.m_time); } - friend bool operator<(const netlist_time &lhs, const netlist_time &rhs) + friend bool operator<(const ptime &lhs, const ptime &rhs) { return (lhs.m_time < rhs.m_time); } - friend bool operator>(const netlist_time &lhs, const netlist_time &rhs) + friend bool operator>(const ptime &lhs, const ptime &rhs) { - return rhs < lhs; + return (rhs < lhs); } - friend bool operator<=(const netlist_time &lhs, const netlist_time &rhs) + friend bool operator<=(const ptime &lhs, const ptime &rhs) { return !(lhs > rhs); } - friend bool operator>=(const netlist_time &lhs, const netlist_time &rhs) + friend bool operator>=(const ptime &lhs, const ptime &rhs) { return !(lhs < rhs); } - friend bool operator==(const netlist_time &lhs, const netlist_time &rhs) + friend bool operator==(const ptime &lhs, const ptime &rhs) { return lhs.m_time == rhs.m_time; } - friend bool operator!=(const netlist_time &lhs, const netlist_time &rhs) + friend bool operator!=(const ptime &lhs, const ptime &rhs) { return lhs.m_time != rhs.m_time; } - INTERNALTYPE as_raw() const { return m_time; } - double as_double() const { return (double) m_time / (double) RESOLUTION; } + constexpr internal_type as_raw() const { return m_time; } + constexpr double as_double() const { return (double) m_time / (double) resolution; } // for save states .... - INTERNALTYPE *get_internaltype_ptr() { return &m_time; } - - static inline netlist_time from_nsec(const INTERNALTYPE ns) { return netlist_time(ns, U64(1000000000)); } - static inline netlist_time from_usec(const INTERNALTYPE us) { return netlist_time(us, U64(1000000)); } - static inline netlist_time from_msec(const INTERNALTYPE ms) { return netlist_time(ms, U64(1000)); } - static inline netlist_time from_hz(const INTERNALTYPE hz) { return netlist_time(1 , hz); } - static inline netlist_time from_raw(const INTERNALTYPE raw) { return netlist_time(raw, RESOLUTION); } - - static inline netlist_time zero() { return netlist_time(0, RESOLUTION); } - static inline netlist_time quantum() { return netlist_time(1, RESOLUTION); } - static inline netlist_time never() { return netlist_time(std::numeric_limits<netlist_time::INTERNALTYPE>::max(), RESOLUTION); } + internal_type *get_internaltype_ptr() { return &m_time; } + + static inline constexpr ptime from_nsec(const internal_type ns) { return ptime(ns, UINT64_C(1000000000)); } + static inline constexpr ptime from_usec(const internal_type us) { return ptime(us, UINT64_C(1000000)); } + static inline constexpr ptime from_msec(const internal_type ms) { return ptime(ms, UINT64_C(1000)); } + static inline constexpr ptime from_hz(const internal_type hz) { return ptime(1 , hz); } + static inline constexpr ptime from_raw(const internal_type raw) { return ptime(raw, resolution); } + static inline constexpr ptime from_double(const double t) { return ptime((internal_type) ( t * (double) resolution), resolution); } + + static inline constexpr ptime zero() { return ptime(0, resolution); } + static inline constexpr ptime quantum() { return ptime(1, resolution); } + static inline constexpr ptime never() { return ptime(plib::numeric_limits<internal_type>::max(), resolution); } private: - INTERNALTYPE m_time; + internal_type m_time; }; - - +#if (PHAS_INT128) + using netlist_time = ptime<UINT128, NETLIST_INTERNAL_RES>; +#else + using netlist_time = ptime<std::uint_fast64_t, NETLIST_INTERNAL_RES>; +#endif } namespace plib { -template<> inline void pstate_manager_t::save_item(const void *owner, netlist::netlist_time &nlt, const pstring &stname) +template<> inline void state_manager_t::save_item(const void *owner, netlist::netlist_time &nlt, const pstring &stname) { - save_state_ptr(owner, stname, netlist::netlist_time::STATETYPE, sizeof(netlist::netlist_time::INTERNALTYPE), 1, nlt.get_internaltype_ptr(), false); + save_state_ptr(owner, stname, datatype_t(sizeof(netlist::netlist_time::internal_type), false, true, false), 1, nlt.get_internaltype_ptr()); } } diff --git a/src/lib/netlist/plib/palloc.h b/src/lib/netlist/plib/palloc.h index 154656602a6..1529cd38194 100644 --- a/src/lib/netlist/plib/palloc.h +++ b/src/lib/netlist/plib/palloc.h @@ -16,26 +16,6 @@ #include "pconfig.h" #include "pstring.h" -#if (PSTANDALONE) -#include <cstddef> -#include <new> - -#if defined(__GNUC__) && (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) -#if !defined(__ppc__) && !defined (__PPC__) && !defined(__ppc64__) && !defined(__PPC64__) -#define ATTR_ALIGN __attribute__ ((aligned(64))) -#else -#define ATTR_ALIGN -#endif -#else -#define ATTR_ALIGN -#endif - -#else - -#define ATTR_ALIGN - -#endif - namespace plib { //============================================================ @@ -171,8 +151,8 @@ private: struct block { block() : m_num_alloc(0), m_free(0), cur_ptr(nullptr), data(nullptr) { } - int m_num_alloc; - int m_free; + std::size_t m_num_alloc; + std::size_t m_free; char *cur_ptr; char *data; }; diff --git a/src/lib/netlist/plib/pconfig.h b/src/lib/netlist/plib/pconfig.h index 506c77c6f8d..48a7e740a8f 100644 --- a/src/lib/netlist/plib/pconfig.h +++ b/src/lib/netlist/plib/pconfig.h @@ -23,25 +23,17 @@ #endif #if (PHAS_INT128) -typedef _uint128_t UINT128; -typedef _int128_t INT128; +typedef __uint128_t UINT128; +typedef __int128_t INT128; #endif -#if !(PSTANDALONE) -#include "osdcomm.h" -//#include "eminline.h" - -#ifndef assert -#define assert(x) do {} while (0) -#endif - -#include "delegate.h" - +#if defined(__GNUC__) +#define RESTRICT __restrict__ +#define ATTR_UNUSED __attribute__((__unused__)) #else -#include <stdint.h> +#define RESTRICT +#define ATTR_UNUSED #endif -#include <cstddef> - //============================================================ // Standard defines @@ -54,27 +46,18 @@ typedef _int128_t INT128; name &operator=(const name &); //============================================================ -// Compiling standalone +// cut down delegate implementation //============================================================ -#if !(PSTANDALONE) - -/* use MAME */ -#if (USE_DELEGATE_TYPE == DELEGATE_TYPE_INTERNAL) -#define PHAS_PMF_INTERNAL 1 -#else -#define PHAS_PMF_INTERNAL 0 -#endif - -#else - -/* determine PMF approach */ - #if defined(__GNUC__) /* does not work in versions over 4.7.x of 32bit MINGW */ #if defined(__MINGW32__) && !defined(__x86_64) && defined(__i386__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))) + #define PHAS_PMF_INTERNAL 0 + #elif defined(__MINGW32__) && !defined(__x86_64) && defined(__i386__) #define PHAS_PMF_INTERNAL 1 #define MEMBER_ABI _thiscall + #elif defined(__clang__) && defined(__i386__) && defined(_WIN32) + #define PHAS_PMF_INTERNAL 0 #elif defined(EMSCRIPTEN) #define PHAS_PMF_INTERNAL 0 #elif defined(__arm__) || defined(__ARMEL__) @@ -83,56 +66,16 @@ typedef _int128_t INT128; #define PHAS_PMF_INTERNAL 1 #endif #else -#define PHAS_PMF_INTERNAL 0 + #define PHAS_PMF_INTERNAL 0 #endif #ifndef MEMBER_ABI #define MEMBER_ABI #endif -#define RESTRICT __restrict__ -#define ATTR_PRINTF(x,y) __attribute__((format(printf, x, y))) -#define ATTR_UNUSED __attribute__((__unused__)) - -/* 8-bit values */ -typedef unsigned char UINT8; -typedef signed char INT8; - -/* 16-bit values */ -typedef unsigned short UINT16; -typedef signed short INT16; - -/* 32-bit values */ -#ifndef WINDOWS_H -typedef unsigned int UINT32; -typedef signed int INT32; -#endif - -/* 64-bit values */ -#ifndef WINDOWS_H -#ifdef _MSC_VER -typedef signed _int64 INT64; -typedef unsigned _int64 UINT64; -#else -typedef uint64_t UINT64; -typedef int64_t INT64; -#endif -#endif - -/* U64 and S64 are used to wrap long integer constants. */ -#if defined(__GNUC__) || defined(_MSC_VER) -#define U64(val) val##ULL -#define S64(val) val##LL -#else -#define U64(val) val -#define S64(val) val -#endif - -#endif - namespace plib { -using ticks_t = INT64; +using ticks_t = int64_t; static inline ticks_t ticks() { diff --git a/src/lib/netlist/plib/plists.h b/src/lib/netlist/plib/plists.h index 66b48e3ab94..030b172f50e 100644 --- a/src/lib/netlist/plib/plists.h +++ b/src/lib/netlist/plib/plists.h @@ -14,8 +14,6 @@ #include <vector> #include <type_traits> #include <cmath> -//#include <cstring> -//#include <array> #include "palloc.h" #include "pstring.h" @@ -72,48 +70,6 @@ private: }; // ---------------------------------------------------------------------------------------- -// plist_t: a simple list -// ---------------------------------------------------------------------------------------- - -template <typename LC> -class pvector_t : public std::vector<LC> -{ -public: - pvector_t() : std::vector<LC>() {} - - bool contains(const LC &elem) const - { - return (std::find(this->begin(), this->end(), elem) != this->end()); - } - - void remove(const LC &elem) - { - this->erase(std::remove(this->begin(), this->end(), elem), this->end()); - } - - void insert_at(const std::size_t index, const LC &elem) - { - this->insert(this->begin() + index, elem); - } - - void remove_at(const std::size_t pos) - { - this->erase(this->begin() + pos); - } - - int indexof(const LC &elem) const - { - for (std::size_t i = 0; i < this->size(); i++) - { - if (this->at(i) == elem) - return i; - } - return -1; - } - -}; - -// ---------------------------------------------------------------------------------------- // plinkedlist_t: a simple linked list // the list allows insertions / deletions if used properly // ---------------------------------------------------------------------------------------- @@ -187,249 +143,10 @@ public: void clear() { m_head = nullptr; } bool empty() const { return (m_head == nullptr); } -//private: - LC *m_head; -}; - - -// ---------------------------------------------------------------------------------------- -// hashmap list -// ---------------------------------------------------------------------------------------- - - -template <class C> -struct hash_functor -{ - hash_functor() - : m_hash(0) - {} - hash_functor(const C &v) - : m_hash(v) - { - } - friend unsigned operator%(const hash_functor &lhs, const unsigned &rhs) { return lhs.m_hash % rhs; } - bool operator==(const hash_functor &lhs) const { return (m_hash == lhs.m_hash); } -private: - unsigned m_hash; -}; - -template <> -struct hash_functor<pstring> -{ - hash_functor() - : m_hash(0) - {} - hash_functor(const pstring &v) - { - /* modified djb2 */ - const pstring::mem_t *string = v.cstr(); - unsigned result = 5381; - for (pstring::mem_t c = *string; c != 0; c = *string++) - result = ((result << 5) + result ) ^ (result >> (32 - 5)) ^ c; - //result = (result*33) ^ c; - m_hash = result; - } - friend unsigned operator%(const hash_functor<pstring> &lhs, const unsigned &rhs) { return lhs.m_hash % rhs; } - unsigned operator()() { return m_hash; } - bool operator==(const hash_functor<pstring> &lhs) const { return (m_hash == lhs.m_hash); } -private: - unsigned m_hash; -}; - -#if 0 -#if 0 - unsigned hash(const pstring &v) const - { - /* Fowler???Noll???Vo hash - FNV-1 */ - const char *string = v.cstr(); - unsigned result = 2166136261; - for (UINT8 c = *string++; c != 0; c = *string++) - result = (result * 16777619) ^ c; - // result = (result ^ c) * 16777619; FNV 1a - return result; - } -#else - unsigned hash(const pstring &v) const - { - /* jenkins one at a time algo */ - unsigned result = 0; - const char *string = v.cstr(); - while (*string) - { - result += *string; - string++; - result += (result << 10); - result ^= (result >> 6); - } - result += (result << 3); - result ^= (result >> 11); - result += (result << 15); - return result; - } -#endif -#endif - -template <class K, class V, class H = hash_functor<K> > -class hashmap_t -{ -public: - hashmap_t() : m_hash(37) - { - for (unsigned i=0; i<m_hash.size(); i++) - m_hash[i] = -1; - } - - ~hashmap_t() - { - } - - struct element_t - { - element_t(const K &key, const H &hash, const V &value) - : m_key(key), m_hash(hash), m_value(value), m_next(-1) - {} - K m_key; - H m_hash; - V m_value; - int m_next; - }; - - void clear() - { -#if 0 - if (0) - { - unsigned cnt = 0; - for (unsigned i=0; i<m_hash.size(); i++) - if (m_hash[i] >= 0) - cnt++; - const unsigned s = m_values.size(); - if (s>0) - printf("phashmap: %d elements %d hashsize, percent in overflow: %d\n", s, (unsigned) m_hash.size(), (s - cnt) * 100 / s); - else - printf("phashmap: No elements .. \n"); - } -#endif - m_values.clear(); - for (unsigned i=0; i<m_hash.size(); i++) - m_hash[i] = -1; - } - - bool contains(const K &key) const - { - return (get_idx(key) >= 0); - } - - int index_of(const K &key) const - { - return get_idx(key); - } - - unsigned size() const { return m_values.size(); } - - bool add(const K &key, const V &value) - { - /* - * we are using the Euler prime function here - * - * n * n + n + 41 | 40 >= n >=0 - * - * and accept that outside we will not have a prime - * - */ - if (m_values.size() * 3 / 2 > m_hash.size()) - { - unsigned n = std::sqrt( 2 * m_hash.size()); - n = n * n + n + 41; - m_hash.resize(n); - rebuild(); - } - const H hash(key); - const unsigned pos = hash % m_hash.size(); - if (m_hash[pos] == -1) - { - unsigned vpos = m_values.size(); - m_values.push_back(element_t(key, hash, value)); - m_hash[pos] = vpos; - } - else - { - int ep = m_hash[pos]; - - for (; ep != -1; ep = m_values[ep].m_next) - { - if (m_values[ep].m_hash == hash && m_values[ep].m_key == key ) - return false; /* duplicate */ - } - unsigned vpos = m_values.size(); - m_values.push_back(element_t(key, hash, value)); - m_values[vpos].m_next = m_hash[pos]; - m_hash[pos] = vpos; - } - return true; - } - - V& operator[](const K &key) - { - int p = get_idx(key); - if (p == -1) - { - p = m_values.size(); - add(key, V()); - } - return m_values[p].m_value; - } - - V& value_at(const unsigned pos) { return m_values[pos].m_value; } - const V& value_at(const unsigned pos) const { return m_values[pos].m_value; } - - V& key_at(const unsigned pos) { return m_values[pos].m_key; } private: - - int get_idx(const K &key) const - { - H hash(key); - const unsigned pos = hash % m_hash.size(); - - for (int ep = m_hash[pos]; ep != -1; ep = m_values[ep].m_next) - if (m_values[ep].m_hash == hash && m_values[ep].m_key == key ) - return ep; - return -1; - } - - void rebuild() - { - for (unsigned i=0; i<m_hash.size(); i++) - m_hash[i] = -1; - for (unsigned i=0; i<m_values.size(); i++) - { - unsigned pos = m_values[i].m_hash % m_hash.size(); - m_values[i].m_next = m_hash[pos]; - m_hash[pos] = i; - } - - } - pvector_t<element_t> m_values; - std::vector<int> m_hash; + LC *m_head; }; -// ---------------------------------------------------------------------------------------- -// sort a list ... slow, I am lazy -// elements must support ">" operator. -// ---------------------------------------------------------------------------------------- - -template<typename T> -static inline void sort_list(T &sl) -{ - for(unsigned i = 0; i < sl.size(); i++) - { - for(unsigned j = i + 1; j < sl.size(); j++) - if(sl[i] > sl[j]) - std::swap(sl[i], sl[j]); - - } -} - } #endif /* PLISTS_H_ */ diff --git a/src/lib/netlist/plib/poptions.h b/src/lib/netlist/plib/poptions.h index 8a66000053c..3ab1adb78c6 100644 --- a/src/lib/netlist/plib/poptions.h +++ b/src/lib/netlist/plib/poptions.h @@ -71,7 +71,7 @@ public: virtual int parse(pstring argument) override { - if (m_limit.contains(argument)) + if (plib::container::contains(m_limit, argument)) { m_val = argument; return 0; @@ -224,7 +224,7 @@ private: return nullptr; } - pvector_t<option *> m_opts; + std::vector<option *> m_opts; pstring m_app; }; diff --git a/src/lib/netlist/plib/pparser.cpp b/src/lib/netlist/plib/pparser.cpp index 359e4415d72..6c0fa79d7e4 100644 --- a/src/lib/netlist/plib/pparser.cpp +++ b/src/lib/netlist/plib/pparser.cpp @@ -197,7 +197,7 @@ ptokenizer::token_t ptokenizer::get_token_internal() c = getc(); } ungetc(); - token_id_t id = token_id_t(m_tokens.indexof(tokstr)); + token_id_t id(plib::container::indexof(m_tokens, tokstr)); if (id.id() >= 0) return token_t(id, tokstr); else @@ -225,14 +225,14 @@ ptokenizer::token_t ptokenizer::get_token_internal() /* expensive, check for single char tokens */ if (tokstr.len() == 1) { - token_id_t id = token_id_t(m_tokens.indexof(tokstr)); + token_id_t id(plib::container::indexof(m_tokens, tokstr)); if (id.id() >= 0) return token_t(id, tokstr); } c = getc(); } ungetc(); - token_id_t id = token_id_t(m_tokens.indexof(tokstr)); + token_id_t id(plib::container::indexof(m_tokens, tokstr)); if (id.id() >= 0) return token_t(id, tokstr); else @@ -267,7 +267,7 @@ ppreprocessor::ppreprocessor() m_expr_sep.push_back(" "); m_expr_sep.push_back("\t"); - m_defines.add("__PLIB_PREPROCESSOR__", define_t("__PLIB_PREPROCESSOR__", "1")); + m_defines.insert({"__PLIB_PREPROCESSOR__", define_t("__PLIB_PREPROCESSOR__", "1")}); } void ppreprocessor::error(const pstring &err) @@ -349,9 +349,9 @@ double ppreprocessor::expr(const pstring_vector_t &sexpr, std::size_t &start, in ppreprocessor::define_t *ppreprocessor::get_define(const pstring &name) { - int idx = m_defines.index_of(name); - if (idx >= 0) - return &m_defines.value_at(idx); + auto idx = m_defines.find(name); + if (idx != m_defines.end()) + return &idx->second; else return nullptr; } @@ -440,7 +440,7 @@ pstring ppreprocessor::process_line(const pstring &line) { if (lti.size() != 3) error("PREPRO: only simple defines allowed: " + line); - m_defines.add(lti[1], define_t(lti[1], lti[2])); + m_defines.insert({lti[1], define_t(lti[1], lti[2])}); } } else diff --git a/src/lib/netlist/plib/pparser.h b/src/lib/netlist/plib/pparser.h index 610f524b5e3..e6b6dd8f989 100644 --- a/src/lib/netlist/plib/pparser.h +++ b/src/lib/netlist/plib/pparser.h @@ -8,6 +8,9 @@ #ifndef PPARSER_H_ #define PPARSER_H_ +#include <unordered_map> +#include <cstdint> + #include "pconfig.h" #include "pstring.h" #include "plists.h" @@ -139,7 +142,7 @@ private: pstring m_identifier_chars; pstring m_number_chars; pstring m_number_chars_start; - pvector_t<pstring> m_tokens; + std::vector<pstring> m_tokens; pstring m_whitespace; pstring::code_t m_string; @@ -189,11 +192,10 @@ private: pstring process_line(const pstring &line); - hashmap_t<pstring, define_t> m_defines; + std::unordered_map<pstring, define_t> m_defines; plib::pstring_vector_t m_expr_sep; - //pstringbuffer m_ret; - UINT32 m_ifflag; // 31 if levels + std::uint_least32_t m_ifflag; // 31 if levels int m_level; int m_lineno; }; diff --git a/src/lib/netlist/plib/pstate.cpp b/src/lib/netlist/plib/pstate.cpp index c8c4c5725c6..ee44eede27a 100644 --- a/src/lib/netlist/plib/pstate.cpp +++ b/src/lib/netlist/plib/pstate.cpp @@ -9,70 +9,53 @@ namespace plib { -pstate_manager_t::pstate_manager_t() +state_manager_t::state_manager_t() { } -pstate_manager_t::~pstate_manager_t() +state_manager_t::~state_manager_t() { m_save.clear(); } -void pstate_manager_t::save_state_ptr(const void *owner, const pstring &stname, const pstate_data_type_e dt, const int size, const int count, void *ptr, bool is_ptr) +void state_manager_t::save_state_ptr(const void *owner, const pstring &stname, const datatype_t dt, const int count, void *ptr) { - pstring fullname = stname; - ATTR_UNUSED pstring ts[] = { - "NOT_SUPPORTED", - "DT_CUSTOM", - "DT_DOUBLE", -#if (PHAS_INT128) - "DT_INT128", -#endif - "DT_INT64", - "DT_INT16", - "DT_INT8", - "DT_INT", - "DT_BOOLEAN", - "DT_FLOAT" - }; - - auto p = plib::make_unique<pstate_entry_t>(stname, dt, owner, size, count, ptr, is_ptr); + auto p = plib::make_unique<entry_t>(stname, dt, owner, count, ptr); m_save.push_back(std::move(p)); } -void pstate_manager_t::remove_save_items(const void *owner) +void state_manager_t::remove_save_items(const void *owner) { - unsigned i = 0; - while (i < m_save.size()) + for (auto i = m_save.begin(); i != m_save.end(); ) { - if (m_save[i]->m_owner == owner) - m_save.remove_at(i); + if (i->get()->m_owner == owner) + i = m_save.erase(i); else i++; } } -void pstate_manager_t::pre_save() +void state_manager_t::pre_save() { for (auto & s : m_save) - if (s->m_dt == DT_CUSTOM) + if (s->m_dt.is_custom) s->m_callback->on_pre_save(); } -void pstate_manager_t::post_load() +void state_manager_t::post_load() { for (auto & s : m_save) - if (s->m_dt == DT_CUSTOM) + if (s->m_dt.is_custom) s->m_callback->on_post_load(); } -template<> void pstate_manager_t::save_item(const void *owner, pstate_callback_t &state, const pstring &stname) +template<> void state_manager_t::save_item(const void *owner, callback_t &state, const pstring &stname) { //save_state_ptr(stname, DT_CUSTOM, 0, 1, &state); - pstate_callback_t *state_p = &state; - auto p = plib::make_unique<pstate_entry_t>(stname, owner, state_p); + callback_t *state_p = &state; + auto p = plib::make_unique<entry_t>(stname, owner, state_p); m_save.push_back(std::move(p)); state.register_state(*this, stname); } diff --git a/src/lib/netlist/plib/pstate.h b/src/lib/netlist/plib/pstate.h index 12115678b3a..cbfa2b06d1d 100644 --- a/src/lib/netlist/plib/pstate.h +++ b/src/lib/netlist/plib/pstate.h @@ -9,134 +9,114 @@ #define PSTATE_H_ #include <memory> +#include <type_traits> #include "plists.h" #include "pstring.h" +#include "ptypes.h" // ---------------------------------------------------------------------------------------- // state saving ... // ---------------------------------------------------------------------------------------- -enum pstate_data_type_e { - NOT_SUPPORTED, - DT_CUSTOM, - DT_DOUBLE, -#if (PHAS_INT128) - DT_INT128, -#endif - DT_INT64, - DT_INT16, - DT_INT8, - DT_INT, - DT_BOOLEAN, - DT_FLOAT -}; - -template<typename ItemType> struct pstate_datatype -{ - static const pstate_data_type_e type = pstate_data_type_e(NOT_SUPPORTED); - static const bool is_ptr = false; -}; - -template<typename ItemType> struct pstate_datatype<ItemType *> -{ - static const pstate_data_type_e type = pstate_data_type_e(NOT_SUPPORTED); - static const bool is_ptr = true; -}; - -//template<typename ItemType> struct type_checker<ItemType*> { static const bool is_atom = false; static const bool is_pointer = true; }; - -#define NETLIST_SAVE_TYPE(TYPE, TYPEDESC) \ - template<> struct pstate_datatype<TYPE>{ static const pstate_data_type_e type = pstate_data_type_e(TYPEDESC); static const bool is_ptr = false;}; \ - template<> struct pstate_datatype<TYPE *>{ static const pstate_data_type_e type = pstate_data_type_e(TYPEDESC); static const bool is_ptr = true;} - -NETLIST_SAVE_TYPE(char, DT_INT8); -NETLIST_SAVE_TYPE(double, DT_DOUBLE); -NETLIST_SAVE_TYPE(float, DT_FLOAT); -NETLIST_SAVE_TYPE(INT8, DT_INT8); -NETLIST_SAVE_TYPE(UINT8, DT_INT8); -#if (PHAS_INT128) -NETLIST_SAVE_TYPE(INT128, DT_INT128); -NETLIST_SAVE_TYPE(UINT128, DT_INT128); -#endif -NETLIST_SAVE_TYPE(INT64, DT_INT64); -NETLIST_SAVE_TYPE(UINT64, DT_INT64); -NETLIST_SAVE_TYPE(bool, DT_BOOLEAN); -NETLIST_SAVE_TYPE(UINT32, DT_INT); -NETLIST_SAVE_TYPE(INT32, DT_INT); -NETLIST_SAVE_TYPE(UINT16, DT_INT16); -NETLIST_SAVE_TYPE(INT16, DT_INT16); -//NETLIST_SAVE_TYPE(std::size_t, DT_INT64); - namespace plib { -class pstate_manager_t; - -class pstate_callback_t +class state_manager_t { public: - using list_t = pvector_t<pstate_callback_t *>; - virtual ~pstate_callback_t() { }; + struct datatype_t + { + datatype_t(std::size_t bsize, bool bptr, bool bintegral, bool bfloat) + : size(bsize), is_ptr(bptr), is_integral(bintegral), is_float(bfloat), is_custom(false) + {} + datatype_t(bool bcustom) + : size(0), is_ptr(false), is_integral(false), is_float(false), is_custom(bcustom) + {} + + const std::size_t size; + const bool is_ptr; + const bool is_integral; + const bool is_float; + const bool is_custom; + }; + + template<typename T> struct datatype_f + { + static inline const datatype_t f() + { + return datatype_t(sizeof(T), false, plib::is_integral<T>::value || std::is_enum<T>::value, + std::is_floating_point<T>::value); } + }; + + template<typename T> struct datatype_f<T *> + { + static inline const datatype_t f() + { + return datatype_t(sizeof(T), true, plib::is_integral<T>::value || std::is_enum<T>::value, + std::is_floating_point<T>::value); + } + }; + + class callback_t + { + public: + using list_t = std::vector<callback_t *>; - virtual void register_state(pstate_manager_t &manager, const pstring &module) = 0; - virtual void on_pre_save() = 0; - virtual void on_post_load() = 0; -protected: -}; + virtual ~callback_t() { }; -struct pstate_entry_t -{ - using list_t = pvector_t<std::unique_ptr<pstate_entry_t>>; + virtual void register_state(state_manager_t &manager, const pstring &module) = 0; + virtual void on_pre_save() = 0; + virtual void on_post_load() = 0; + protected: + }; - pstate_entry_t(const pstring &stname, const pstate_data_type_e dt, const void *owner, - const int size, const int count, void *ptr, bool is_ptr) - : m_name(stname), m_dt(dt), m_owner(owner), m_callback(nullptr), m_size(size), m_count(count), m_ptr(ptr), m_is_ptr(is_ptr) { } + struct entry_t + { + using list_t = std::vector<std::unique_ptr<entry_t>>; - pstate_entry_t(const pstring &stname, const void *owner, pstate_callback_t *callback) - : m_name(stname), m_dt(DT_CUSTOM), m_owner(owner), m_callback(callback), m_size(0), m_count(0), m_ptr(nullptr), m_is_ptr(false) { } + entry_t(const pstring &stname, const datatype_t dt, const void *owner, + const std::size_t count, void *ptr) + : m_name(stname), m_dt(dt), m_owner(owner), m_callback(nullptr), m_count(count), m_ptr(ptr) { } - ~pstate_entry_t() { } + entry_t(const pstring &stname, const void *owner, callback_t *callback) + : m_name(stname), m_dt(datatype_t(true)), m_owner(owner), m_callback(callback), m_count(0), m_ptr(nullptr) { } - pstring m_name; - const pstate_data_type_e m_dt; - const void *m_owner; - pstate_callback_t *m_callback; - const int m_size; - const int m_count; - void *m_ptr; - bool m_is_ptr; + ~entry_t() { } - template<typename T> - T *resolved() - { - if (m_is_ptr) - return *static_cast<T **>(m_ptr); - else - return static_cast<T *>(m_ptr); - } -}; + pstring m_name; + const datatype_t m_dt; + const void * m_owner; + callback_t * m_callback; + const std::size_t m_count; + void * m_ptr; -class pstate_manager_t -{ -public: + template<typename T> + T *resolved() + { + if (m_dt.is_ptr) + return *static_cast<T **>(m_ptr); + else + return static_cast<T *>(m_ptr); + } + }; - pstate_manager_t(); - ~pstate_manager_t(); + state_manager_t(); + ~state_manager_t(); template<typename C> void save_item(const void *owner, C &state, const pstring &stname) { - save_state_ptr( owner, stname, pstate_datatype<C>::type, sizeof(C), 1, &state, pstate_datatype<C>::is_ptr); + save_state_ptr( owner, stname, datatype_f<C>::f(), 1, &state); } template<typename C, std::size_t N> void save_item(const void *owner, C (&state)[N], const pstring &stname) { - save_state_ptr(owner, stname, pstate_datatype<C>::type, sizeof(state[0]), N, &(state[0]), false); + save_state_ptr(owner, stname, datatype_f<C>::f(), N, &(state[0])); } template<typename C> void save_item(const void *owner, C *state, const pstring &stname, const int count) { - save_state_ptr(owner, stname, pstate_datatype<C>::type, sizeof(C), count, state, false); + save_state_ptr(owner, stname, datatype_f<C>::f(), count, state); } template<typename C> @@ -149,18 +129,19 @@ public: void post_load(); void remove_save_items(const void *owner); - const pstate_entry_t::list_t &save_list() const { return m_save; } + const entry_t::list_t &save_list() const { return m_save; } - void save_state_ptr(const void *owner, const pstring &stname, const pstate_data_type_e, const int size, const int count, void *ptr, bool is_ptr); + void save_state_ptr(const void *owner, const pstring &stname, const datatype_t dt, const int count, void *ptr); protected: private: - pstate_entry_t::list_t m_save; + entry_t::list_t m_save; }; -template<> void pstate_manager_t::save_item(const void *owner, pstate_callback_t &state, const pstring &stname); +template<> void state_manager_t::save_item(const void *owner, callback_t &state, const pstring &stname); +#if 0 template <typename T> class pstate_interface_t { @@ -169,24 +150,24 @@ public: template<typename C> void save(C &state, const pstring &stname) { - pstate_manager_t &manager = static_cast<T*>(this)->state_manager(); + state_manager_t &manager = static_cast<T*>(this)->state_manager(); pstring module = static_cast<T*>(this)->name(); manager.save_item(this, state, module + "." + stname); } template<typename C, std::size_t N> void save(C (&state)[N], const pstring &stname) { - pstate_manager_t &manager = static_cast<T*>(this)->state_manager(); + state_manager_t &manager = static_cast<T*>(this)->state_manager(); pstring module = static_cast<T*>(this)->name(); - manager.save_state_ptr(this, module + "." + stname, pstate_datatype<C>::type, sizeof(state[0]), N, &(state[0]), false); + manager.save_state_ptr(this, module + "." + stname, state_manager_t::datatype_f<C>::f(), N, &(state[0])); } template<typename C> void save(C *state, const pstring &stname, const int count) { - pstate_manager_t &manager = static_cast<T*>(this)->state_manager(); + state_manager_t &manager = static_cast<T*>(this)->state_manager(); pstring module = static_cast<T*>(this)->name(); - manager.save_state_ptr(this, module + "." + stname, pstate_datatype<C>::type, sizeof(C), count, state, false); + manager.save_state_ptr(this, module + "." + stname, state_manager_t::datatype_f<C>::f(), count, state); } }; - +#endif } #endif /* PSTATE_H_ */ diff --git a/src/lib/netlist/plib/pstream.cpp b/src/lib/netlist/plib/pstream.cpp index 8b09f58fc03..431ae4c7cce 100644 --- a/src/lib/netlist/plib/pstream.cpp +++ b/src/lib/netlist/plib/pstream.cpp @@ -21,7 +21,7 @@ namespace plib { bool pistream::readline(pstring &line) { - UINT8 c = 0; + char c = 0; pstringbuffer buf; if (!this->read(c)) { diff --git a/src/lib/netlist/plib/pstream.h b/src/lib/netlist/plib/pstream.h index 9da07105df6..42379a7da4b 100644 --- a/src/lib/netlist/plib/pstream.h +++ b/src/lib/netlist/plib/pstream.h @@ -108,7 +108,7 @@ public: bool readline(pstring &line); - bool read(UINT8 &c) + bool read(char &c) { return (read(&c, 1) == 1); } diff --git a/src/lib/netlist/plib/pstring.cpp b/src/lib/netlist/plib/pstring.cpp index cb8011734b4..f6dff95fb12 100644 --- a/src/lib/netlist/plib/pstring.cpp +++ b/src/lib/netlist/plib/pstring.cpp @@ -374,8 +374,8 @@ pstr_t *pstring_t<F>::salloc(int n) if (stk == nullptr) stk = plib::palloc_array<std::stack<pstr_t *>>(17); pstr_t *p; - unsigned sn= ((32 - countleadbits(n)) + 1) / 2; - unsigned size = sizeof(pstr_t) + ((UINT64) 1<<(sn * 2)) + 1; + std::size_t sn= ((32 - countleadbits(n)) + 1) / 2; + std::size_t size = sizeof(pstr_t) + ((std::size_t) 1<<(sn * 2)) + 1; if (stk[sn].empty()) p = (pstr_t *) plib::palloc_array<char>(size); else diff --git a/src/lib/netlist/plib/pstring.h b/src/lib/netlist/plib/pstring.h index 5cfe5945fcf..2356acec3d0 100644 --- a/src/lib/netlist/plib/pstring.h +++ b/src/lib/netlist/plib/pstring.h @@ -306,7 +306,6 @@ public: // construction with copy pstring(const mem_t *string) : type_t(string) { } pstring(const type_t &string) : type_t(string) { } - }; // ---------------------------------------------------------------------------------------- @@ -345,7 +344,7 @@ public: operator pstring() const { return pstring(m_ptr); } // concatenation operators - pstringbuffer& operator+=(const UINT8 c) { UINT8 buf[2] = { c, 0 }; pcat((char *) buf); return *this; } + pstringbuffer& operator+=(const char c) { char buf[2] = { c, 0 }; pcat(buf); return *this; } pstringbuffer& operator+=(const pstring &string) { pcat(string); return *this; } pstringbuffer& operator+=(const char *string) { pcat(string); return *this; } @@ -378,4 +377,22 @@ private: }; +// custom specialization of std::hash can be injected in namespace std +namespace std +{ + template<> struct hash<pstring> + { + typedef pstring argument_type; + typedef std::size_t result_type; + result_type operator()(argument_type const& s) const + { + const pstring::mem_t *string = s.cstr(); + result_type result = 5381; + for (pstring::mem_t c = *string; c != 0; c = *string++) + result = ((result << 5) + result ) ^ (result >> (32 - 5)) ^ c; + return result; + } + }; +} + #endif /* PSTRING_H_ */ diff --git a/src/lib/netlist/plib/ptypes.h b/src/lib/netlist/plib/ptypes.h index af8e16a2253..4abfad4fb83 100644 --- a/src/lib/netlist/plib/ptypes.h +++ b/src/lib/netlist/plib/ptypes.h @@ -8,10 +8,36 @@ #ifndef PTYPES_H_ #define PTYPES_H_ +#include <type_traits> + #include "pconfig.h" #include "pstring.h" -namespace plib { +namespace plib +{ + + template<typename T> struct is_integral : public std::is_integral<T> { }; + template<typename T> struct numeric_limits : public std::numeric_limits<T> { }; + + /* 128 bit support at least on GCC is not fully supported */ +#if PHAS_INT128 + template<> struct is_integral<UINT128> { static constexpr bool value = true; }; + template<> struct is_integral<INT128> { static constexpr bool value = true; }; + template<> struct numeric_limits<UINT128> + { + static inline constexpr UINT128 max() + { + return ~((UINT128)0); + } + }; + template<> struct numeric_limits<INT128> + { + static inline constexpr INT128 max() + { + return (~((UINT128)0)) >> 1; + } + }; +#endif //============================================================ // penum - strongly typed enumeration diff --git a/src/lib/netlist/plib/putil.cpp b/src/lib/netlist/plib/putil.cpp index 3e5cecc0081..79cea5bcf88 100644 --- a/src/lib/netlist/plib/putil.cpp +++ b/src/lib/netlist/plib/putil.cpp @@ -41,7 +41,7 @@ namespace plib } pstring_vector_t::pstring_vector_t(const pstring &str, const pstring &onstr, bool ignore_empty) - : pvector_t<pstring>() + : std::vector<pstring>() { int p = 0; int pn; @@ -64,7 +64,7 @@ namespace plib } pstring_vector_t::pstring_vector_t(const pstring &str, const pstring_vector_t &onstrl) - : pvector_t<pstring>() + : std::vector<pstring>() { pstring col = ""; diff --git a/src/lib/netlist/plib/putil.h b/src/lib/netlist/plib/putil.h index db5510178c0..5f9d1fa4047 100644 --- a/src/lib/netlist/plib/putil.h +++ b/src/lib/netlist/plib/putil.h @@ -21,14 +21,49 @@ namespace plib const pstring environment(const pstring &var, const pstring &default_val = ""); } + namespace container + { + template <class C> + bool contains(C &con, const typename C::value_type &elem) + { + return std::find(con.begin(), con.end(), elem) != con.end(); + } + + template <class C> + int indexof(C &con, const typename C::value_type &elem) + { + auto it = std::find(con.begin(), con.end(), elem); + if (it != con.end()) + return it - con.begin(); + return -1; + } + + template <class C> + void insert_at(C &con, const std::size_t index, const typename C::value_type &elem) + { + con.insert(con.begin() + index, elem); + } + + } + + template <class C> + struct indexed_compare + { + indexed_compare(const C& target): m_target(target) {} + + bool operator()(int a, int b) const { return m_target[a] < m_target[b]; } + + const C& m_target; + }; + // ---------------------------------------------------------------------------------------- // string list // ---------------------------------------------------------------------------------------- - class pstring_vector_t : public pvector_t<pstring> + class pstring_vector_t : public std::vector<pstring> { public: - pstring_vector_t() : pvector_t<pstring>() { } + pstring_vector_t() : std::vector<pstring>() { } pstring_vector_t(const pstring &str, const pstring &onstr, bool ignore_empty = false); pstring_vector_t(const pstring &str, const pstring_vector_t &onstrl); }; diff --git a/src/lib/netlist/prg/nltool.cpp b/src/lib/netlist/prg/nltool.cpp index 302f1d12184..5687cd42078 100644 --- a/src/lib/netlist/prg/nltool.cpp +++ b/src/lib/netlist/prg/nltool.cpp @@ -11,12 +11,6 @@ #include <cstdio> #include <cstdlib> -#ifdef PSTANDALONE -#if (PSTANDALONE) -#define PSTANDALONE_PROVIDED -#endif -#endif - #include "plib/poptions.h" #include "plib/pstring.h" #include "plib/plists.h" @@ -129,7 +123,7 @@ protected: { pout("{}: {}\n", l.name().cstr(), ls.cstr()); if (l == plib::plog_level::FATAL) - throw; + throw std::exception(); } private: @@ -162,7 +156,7 @@ struct input_t int e = sscanf(line.cstr(), "%lf,%[^,],%lf", &t, buf, &m_value); if ( e!= 3) throw netlist::fatalerror_e(plib::pfmt("error {1} scanning line {2}\n")(e)(line)); - m_time = netlist::netlist_time(t); + m_time = netlist::netlist_time::from_double(t); m_param = netlist->setup().find_param(buf, true); } @@ -191,9 +185,9 @@ struct input_t }; -plib::pvector_t<input_t> *read_input(netlist::netlist_t *netlist, pstring fname) +std::vector<input_t> *read_input(netlist::netlist_t *netlist, pstring fname) { - plib::pvector_t<input_t> *ret = plib::palloc<plib::pvector_t<input_t>>(); + std::vector<input_t> *ret = plib::palloc<std::vector<input_t>>(); if (fname != "") { plib::pifilestream f(fname); @@ -225,7 +219,7 @@ static void run(tool_options_t &opts) nt.read_netlist(opts.opt_file(), opts.opt_name()); - plib::pvector_t<input_t> *inps = read_input(&nt, opts.opt_inp()); + std::vector<input_t> *inps = read_input(&nt, opts.opt_inp()); double ttr = opts.opt_ttr(); @@ -236,16 +230,16 @@ static void run(tool_options_t &opts) unsigned pos = 0; netlist::netlist_time nlt = netlist::netlist_time::zero(); - while (pos < inps->size() && (*inps)[pos].m_time < netlist::netlist_time(ttr)) + while (pos < inps->size() && (*inps)[pos].m_time < netlist::netlist_time::from_double(ttr)) { nt.process_queue((*inps)[pos].m_time - nlt); (*inps)[pos].setparam(); nlt = (*inps)[pos].m_time; pos++; } - nt.process_queue(netlist::netlist_time(ttr) - nlt); + nt.process_queue(netlist::netlist_time::from_double(ttr) - nlt); nt.stop(); - pfree(inps); + plib::pfree(inps); double emutime = (double) (plib::ticks() - t) / (double) plib::ticks_per_second(); pout("{1:f} seconds emulation took {2:f} real time ==> {3:5.2f}%\n", ttr, emutime, ttr/emutime*100.0); @@ -285,19 +279,34 @@ static void listdevices() nt.setup().start_devices(); nt.setup().resolve_inputs(); + std::vector<plib::owned_ptr<netlist::core_device_t>> devs; + for (auto & f : list) { pstring out = plib::pfmt("{1} {2}(<id>")(f->classname(),"-20")(f->name()); pstring terms(""); - auto d = f->Create(nt.setup().netlist(), "dummy"); - + auto d = f->Create(nt.setup().netlist(), f->name() + "_lc"); // get the list of terminals ... - for (auto & inp : d->m_terminals) + + for (auto & t : nt.setup().m_terminals) { - if (inp.startsWith(d->name() + ".")) - inp = inp.substr(d->name().len() + 1); - terms += "," + inp; + if (t.second->name().startsWith(d->name())) + { + pstring tn(t.second->name().substr(d->name().len()+1)); + if (tn.find(".")<0) + terms += ", " + tn; + } + } + + for (auto & t : nt.setup().m_alias) + { + if (t.first.startsWith(d->name())) + { + pstring tn(t.first.substr(d->name().len()+1)); + if (tn.find(".")<0) + terms += ", " + tn; + } } if (f->param_desc().startsWith("+")) @@ -317,6 +326,7 @@ static void listdevices() printf("%s\n", out.cstr()); if (terms != "") printf("Terminals: %s\n", terms.substr(1).cstr()); + devs.push_back(std::move(d)); } } @@ -326,10 +336,6 @@ static void listdevices() main - primary entry point -------------------------------------------------*/ -#if (!PSTANDALONE) -#include "corealloc.h" -#endif - #if 0 static const char *pmf_verbose[] = { diff --git a/src/lib/netlist/solver/nld_matrix_solver.h b/src/lib/netlist/solver/nld_matrix_solver.h index 7504191a356..de5e999e340 100644 --- a/src/lib/netlist/solver/nld_matrix_solver.h +++ b/src/lib/netlist/solver/nld_matrix_solver.h @@ -74,9 +74,9 @@ public: unsigned m_railstart; - plib::pvector_t<unsigned> m_nz; /* all non zero for multiplication */ - plib::pvector_t<unsigned> m_nzrd; /* non zero right of the diagonal for elimination, may include RHS element */ - plib::pvector_t<unsigned> m_nzbd; /* non zero below of the diagonal for elimination */ + std::vector<unsigned> m_nz; /* all non zero for multiplication */ + std::vector<unsigned> m_nzrd; /* non zero right of the diagonal for elimination, may include RHS element */ + std::vector<unsigned> m_nzbd; /* non zero below of the diagonal for elimination */ /* state */ nl_double m_last_V; @@ -84,12 +84,12 @@ public: nl_double m_h_n_m_1; private: - plib::pvector_t<int> m_net_other; - plib::pvector_t<nl_double> m_go; - plib::pvector_t<nl_double> m_gt; - plib::pvector_t<nl_double> m_Idr; - plib::pvector_t<nl_double *> m_other_curanalog; - plib::pvector_t<terminal_t *> m_term; + std::vector<int> m_net_other; + std::vector<nl_double> m_go; + std::vector<nl_double> m_gt; + std::vector<nl_double> m_Idr; + std::vector<nl_double *> m_other_curanalog; + std::vector<terminal_t *> m_term; }; @@ -109,8 +109,7 @@ public: class matrix_solver_t : public device_t { public: - using list_t = plib::pvector_t<matrix_solver_t *>; - using dev_list_t = core_device_t::list_t; + using list_t = std::vector<matrix_solver_t *>; enum eSortType { @@ -121,28 +120,20 @@ public: matrix_solver_t(netlist_t &anetlist, const pstring &name, const eSortType sort, const solver_parameters_t *params) - : device_t(anetlist, name), - m_stat_calculations(0), - m_stat_newton_raphson(0), - m_stat_vsolver_calls(0), - m_iterative_fail(0), - m_iterative_total(0), - m_params(*params), - m_last_step(0, 1), - m_cur_ts(0), - m_fb_sync(*this, "FB_sync"), - m_Q_sync(*this, "Q_sync"), - m_sort(sort) + : device_t(anetlist, name) + , m_params(*params) + , m_stat_calculations(*this, "m_stat_calculations", 0) + , m_stat_newton_raphson(*this, "m_stat_newton_raphson", 0) + , m_stat_vsolver_calls(*this, "m_stat_vsolver_calls", 0) + , m_iterative_fail(*this, "m_iterative_fail", 0) + , m_iterative_total(*this, "m_iterative_total", 0) + , m_last_step(*this, "m_last_step", netlist_time::quantum()) + , m_cur_ts(*this, "m_cur_ts", 0) + , m_fb_sync(*this, "FB_sync") + , m_Q_sync(*this, "Q_sync") + , m_sort(sort) { connect_post_start(m_fb_sync, m_Q_sync); - - save(NLNAME(m_last_step)); - save(NLNAME(m_cur_ts)); - save(NLNAME(m_stat_calculations)); - save(NLNAME(m_stat_newton_raphson)); - save(NLNAME(m_stat_vsolver_calls)); - save(NLNAME(m_iterative_fail)); - save(NLNAME(m_iterative_total)); } virtual ~matrix_solver_t(); @@ -200,27 +191,27 @@ protected: template <typename T> void build_LE_RHS(); - plib::pvector_t<terms_t *> m_terms; - plib::pvector_t<analog_net_t *> m_nets; + std::vector<terms_t *> m_terms; + std::vector<analog_net_t *> m_nets; std::vector<std::unique_ptr<proxied_analog_output_t>> m_inps; - plib::pvector_t<terms_t *> m_rails_temp; - - int m_stat_calculations; - int m_stat_newton_raphson; - int m_stat_vsolver_calls; - int m_iterative_fail; - int m_iterative_total; + std::vector<terms_t *> m_rails_temp; const solver_parameters_t &m_params; + state_var<int> m_stat_calculations; + state_var<int> m_stat_newton_raphson; + state_var<int> m_stat_vsolver_calls; + state_var<int> m_iterative_fail; + state_var<int> m_iterative_total; + inline nl_double current_timestep() { return m_cur_ts; } private: - netlist_time m_last_step; - nl_double m_cur_ts; - dev_list_t m_step_devices; - dev_list_t m_dynamic_devices; + state_var<netlist_time> m_last_step; + state_var<nl_double> m_cur_ts; + std::vector<core_device_t *> m_step_devices; + std::vector<core_device_t *> m_dynamic_devices; logic_input_t m_fb_sync; logic_output_t m_Q_sync; diff --git a/src/lib/netlist/solver/nld_ms_direct.h b/src/lib/netlist/solver/nld_ms_direct.h index f8514867f6e..ec67a7c02ee 100644 --- a/src/lib/netlist/solver/nld_ms_direct.h +++ b/src/lib/netlist/solver/nld_ms_direct.h @@ -161,18 +161,18 @@ protected: template <typename T1> inline nl_ext_double &RHS(const T1 &r) { return m_A[r][N()]; } #endif - ATTR_ALIGN nl_double m_last_RHS[storage_N]; // right hand side - contains currents + nl_double m_last_RHS[storage_N]; // right hand side - contains currents private: static const std::size_t m_pitch = (((storage_N + 1) + 7) / 8) * 8; //static const std::size_t m_pitch = (((storage_N + 1) + 15) / 16) * 16; //static const std::size_t m_pitch = (((storage_N + 1) + 31) / 32) * 32; #if (NL_USE_DYNAMIC_ALLOCATION) - ATTR_ALIGN nl_ext_double * RESTRICT m_A; + nl_ext_double * RESTRICT m_A; #else - ATTR_ALIGN nl_ext_double m_A[storage_N][m_pitch]; + nl_ext_double m_A[storage_N][m_pitch]; #endif - //ATTR_ALIGN nl_ext_double m_RHSx[storage_N]; + //nl_ext_double m_RHSx[storage_N]; const unsigned m_dim; @@ -206,18 +206,14 @@ void matrix_solver_direct_t<m_N, storage_N>::vsetup(analog_net_t::list_t &nets) { terms_t * t = m_terms[k]; - if (!t->m_nzrd.contains(N())) + if (!plib::container::contains(t->m_nzrd, N())) t->m_nzrd.push_back(N()); } - save(NLNAME(m_last_RHS)); + netlist().save(*this, m_last_RHS, "m_last_RHS"); for (unsigned k = 0; k < N(); k++) - { - pstring num = plib::pfmt("{1}")(k); - - save(RHS(k), "RHS." + num); - } + netlist().save(*this, RHS(k), plib::pfmt("RHS.{1}")(k)); } diff --git a/src/lib/netlist/solver/nld_ms_direct_lu.h b/src/lib/netlist/solver/nld_ms_direct_lu.h index 47bb95c2855..9c2ab0d1cd0 100644 --- a/src/lib/netlist/solver/nld_ms_direct_lu.h +++ b/src/lib/netlist/solver/nld_ms_direct_lu.h @@ -142,15 +142,15 @@ protected: template <typename T1, typename T2> inline nl_ext_double &A(const T1 r, const T2 c) { return m_A[r][c]; } - //ATTR_ALIGN nl_double m_A[storage_N][((storage_N + 7) / 8) * 8]; - ATTR_ALIGN nl_double m_RHS[storage_N]; - ATTR_ALIGN nl_double m_last_RHS[storage_N]; // right hand side - contains currents - ATTR_ALIGN nl_double m_last_V[storage_N]; + //nl_double m_A[storage_N][((storage_N + 7) / 8) * 8]; + nl_double m_RHS[storage_N]; + nl_double m_last_RHS[storage_N]; // right hand side - contains currents + nl_double m_last_V[storage_N]; terms_t *m_rails_temp; private: - ATTR_ALIGN nl_ext_double m_A[storage_N][((storage_N + 7) / 8) * 8]; + nl_ext_double m_A[storage_N][((storage_N + 7) / 8) * 8]; const unsigned m_dim; nl_double m_lp_fact; @@ -334,10 +334,11 @@ void matrix_solver_direct_t<m_N, storage_N>::vsetup(analog_net_t::list_t &nets) t->m_nz.add(other[i]); } } - psort_list(t->m_nzrd); + std::sort(t->m_nzrd.begin(), t->m_nzrd.end()); t->m_nz.add(k); // add diagonal - psort_list(t->m_nz); + + std::sort(t->m_nz.begin(), t->m_nz.end()); } if(0) diff --git a/src/lib/netlist/solver/nld_ms_gcr.h b/src/lib/netlist/solver/nld_ms_gcr.h index f963c59be01..a9acfb0b0de 100644 --- a/src/lib/netlist/solver/nld_ms_gcr.h +++ b/src/lib/netlist/solver/nld_ms_gcr.h @@ -62,13 +62,13 @@ private: { plib::postringstream t; csc_private(t); - plib::hash_functor<pstring> h(t.str()); + std::hash<pstring> h; - return plib::pfmt("nl_gcr_{1:x}_{2}")(h())(mat.nz_num); + return plib::pfmt("nl_gcr_{1:x}_{2}")(h( t.str() ))(mat.nz_num); } unsigned m_dim; - plib::pvector_t<int> m_term_cr[storage_N]; + std::vector<int> m_term_cr[storage_N]; mat_cr_t<storage_N> mat; nl_double m_A[storage_N * storage_N]; @@ -243,8 +243,8 @@ int matrix_solver_GCR_t<m_N, storage_N>::vsolve_non_dynamic(const bool newton_ra { const unsigned iN = this->N(); - ATTR_ALIGN nl_double RHS[storage_N]; - ATTR_ALIGN nl_double new_V[storage_N]; + nl_double RHS[storage_N]; + nl_double new_V[storage_N]; for (unsigned i=0, e=mat.nz_num; i<e; i++) m_A[i] = 0.0; diff --git a/src/lib/netlist/solver/nld_ms_gmres.h b/src/lib/netlist/solver/nld_ms_gmres.h index e4c42b2e098..040453d99da 100644 --- a/src/lib/netlist/solver/nld_ms_gmres.h +++ b/src/lib/netlist/solver/nld_ms_gmres.h @@ -48,7 +48,7 @@ private: int solve_ilu_gmres(nl_double * RESTRICT x, const nl_double * RESTRICT rhs, const unsigned restart_max, const unsigned mr, nl_double accuracy); - plib::pvector_t<int> m_term_cr[storage_N]; + std::vector<int> m_term_cr[storage_N]; bool m_use_iLU_preconditioning; bool m_use_more_precise_stop_condition; @@ -125,8 +125,8 @@ int matrix_solver_GMRES_t<m_N, storage_N>::vsolve_non_dynamic(const bool newton_ */ //nz_num = 0; - ATTR_ALIGN nl_double RHS[storage_N]; - ATTR_ALIGN nl_double new_V[storage_N]; + nl_double RHS[storage_N]; + nl_double new_V[storage_N]; for (unsigned i=0, e=mat.nz_num; i<e; i++) m_A[i] = 0.0; diff --git a/src/lib/netlist/solver/nld_ms_sm.h b/src/lib/netlist/solver/nld_ms_sm.h index 7ed72bcd575..fe8414ec57d 100644 --- a/src/lib/netlist/solver/nld_ms_sm.h +++ b/src/lib/netlist/solver/nld_ms_sm.h @@ -90,19 +90,19 @@ protected: template <typename T1, typename T2> inline nl_ext_double &lAinv(const T1 &r, const T2 &c) { return m_lAinv[r][c]; } - ATTR_ALIGN nl_double m_last_RHS[storage_N]; // right hand side - contains currents + nl_double m_last_RHS[storage_N]; // right hand side - contains currents private: static const std::size_t m_pitch = ((( storage_N) + 7) / 8) * 8; - ATTR_ALIGN nl_ext_double m_A[storage_N][m_pitch]; - ATTR_ALIGN nl_ext_double m_Ainv[storage_N][m_pitch]; - ATTR_ALIGN nl_ext_double m_W[storage_N][m_pitch]; - ATTR_ALIGN nl_ext_double m_RHS[storage_N]; // right hand side - contains currents + nl_ext_double m_A[storage_N][m_pitch]; + nl_ext_double m_Ainv[storage_N][m_pitch]; + nl_ext_double m_W[storage_N][m_pitch]; + nl_ext_double m_RHS[storage_N]; // right hand side - contains currents - ATTR_ALIGN nl_ext_double m_lA[storage_N][m_pitch]; - ATTR_ALIGN nl_ext_double m_lAinv[storage_N][m_pitch]; + nl_ext_double m_lA[storage_N][m_pitch]; + nl_ext_double m_lAinv[storage_N][m_pitch]; - //ATTR_ALIGN nl_ext_double m_RHSx[storage_N]; + //nl_ext_double m_RHSx[storage_N]; const unsigned m_dim; @@ -128,15 +128,10 @@ void matrix_solver_sm_t<m_N, storage_N>::vsetup(analog_net_t::list_t &nets) matrix_solver_t::setup_base(nets); - - save(NLNAME(m_last_RHS)); + netlist().save(*this, m_last_RHS, "m_last_RHS"); for (unsigned k = 0; k < N(); k++) - { - pstring num = plib::pfmt("{1}")(k); - - save(RHS(k), "RHS." + num); - } + netlist().save(*this, RHS(k), plib::pfmt("RHS.{1}")(k)); } diff --git a/src/lib/netlist/solver/nld_ms_sor.h b/src/lib/netlist/solver/nld_ms_sor.h index a198fa6bf57..cf8dc8de5bf 100644 --- a/src/lib/netlist/solver/nld_ms_sor.h +++ b/src/lib/netlist/solver/nld_ms_sor.h @@ -29,7 +29,7 @@ public: matrix_solver_SOR_t(netlist_t &anetlist, const pstring &name, const solver_parameters_t *params, int size) : matrix_solver_direct_t<m_N, storage_N>(anetlist, name, matrix_solver_t::ASCENDING, params, size) - , m_lp_fact(0) + , m_lp_fact(*this, "m_lp_fact", 0) { } @@ -39,7 +39,7 @@ public: virtual int vsolve_non_dynamic(const bool newton_raphson) override; private: - nl_double m_lp_fact; + state_var<nl_double> m_lp_fact; }; // ---------------------------------------------------------------------------------------- @@ -51,7 +51,6 @@ template <unsigned m_N, unsigned storage_N> void matrix_solver_SOR_t<m_N, storage_N>::vsetup(analog_net_t::list_t &nets) { matrix_solver_direct_t<m_N, storage_N>::vsetup(nets); - this->save(NLNAME(m_lp_fact)); } template <unsigned m_N, unsigned storage_N> @@ -71,10 +70,10 @@ int matrix_solver_SOR_t<m_N, storage_N>::vsolve_non_dynamic(const bool newton_ra const nl_double ws = this->m_params.m_sor; - ATTR_ALIGN nl_double w[storage_N]; - ATTR_ALIGN nl_double one_m_w[storage_N]; - ATTR_ALIGN nl_double RHS[storage_N]; - ATTR_ALIGN nl_double new_V[storage_N]; + nl_double w[storage_N]; + nl_double one_m_w[storage_N]; + nl_double RHS[storage_N]; + nl_double new_V[storage_N]; for (unsigned k = 0; k < iN; k++) { diff --git a/src/lib/netlist/solver/nld_ms_sor_mat.h b/src/lib/netlist/solver/nld_ms_sor_mat.h index 8fa871d83f4..781e6bb4eaa 100644 --- a/src/lib/netlist/solver/nld_ms_sor_mat.h +++ b/src/lib/netlist/solver/nld_ms_sor_mat.h @@ -32,10 +32,11 @@ public: matrix_solver_SOR_mat_t(netlist_t &anetlist, const pstring &name, const solver_parameters_t *params, int size) : matrix_solver_direct_t<m_N, storage_N>(anetlist, name, matrix_solver_t::DESCENDING, params, size) - , m_omega(params->m_sor) - , m_lp_fact(0) - , m_gs_fail(0) - , m_gs_total(0) + , m_Vdelta(*this, "m_Vdelta", 0.0) + , m_omega(*this, "m_omega", params->m_sor) + , m_lp_fact(*this, "m_lp_fact", 0) + , m_gs_fail(*this, "m_gs_fail", 0) + , m_gs_total(*this, "m_gs_total", 0) { } @@ -46,12 +47,12 @@ public: virtual int vsolve_non_dynamic(const bool newton_raphson) override; private: - nl_double m_Vdelta[storage_N]; + state_var<nl_double[storage_N]> m_Vdelta; - nl_double m_omega; - nl_double m_lp_fact; - int m_gs_fail; - int m_gs_total; + state_var<nl_double> m_omega; + state_var<nl_double> m_lp_fact; + state_var<int> m_gs_fail; + state_var<int> m_gs_total; }; // ---------------------------------------------------------------------------------------- @@ -62,11 +63,6 @@ template <unsigned m_N, unsigned storage_N> void matrix_solver_SOR_mat_t<m_N, storage_N>::vsetup(analog_net_t::list_t &nets) { matrix_solver_direct_t<m_N, storage_N>::vsetup(nets); - this->save(NLNAME(m_omega)); - this->save(NLNAME(m_lp_fact)); - this->save(NLNAME(m_gs_fail)); - this->save(NLNAME(m_gs_total)); - this->save(NLNAME(m_Vdelta)); } #if 0 @@ -127,7 +123,7 @@ int matrix_solver_SOR_mat_t<m_N, storage_N>::vsolve_non_dynamic(const bool newto */ - ATTR_ALIGN nl_double new_v[storage_N] = { 0.0 }; + nl_double new_v[storage_N] = { 0.0 }; const unsigned iN = this->N(); matrix_solver_t::build_LE_A<matrix_solver_SOR_mat_t>(); diff --git a/src/lib/netlist/solver/nld_ms_w.h b/src/lib/netlist/solver/nld_ms_w.h index 19c84ef80bc..294b2c4ccf4 100644 --- a/src/lib/netlist/solver/nld_ms_w.h +++ b/src/lib/netlist/solver/nld_ms_w.h @@ -95,26 +95,26 @@ protected: template <typename T1, typename T2> inline nl_ext_double &lA(const T1 &r, const T2 &c) { return m_lA[r][c]; } - ATTR_ALIGN nl_double m_last_RHS[storage_N]; // right hand side - contains currents + nl_double m_last_RHS[storage_N]; // right hand side - contains currents private: static const std::size_t m_pitch = ((( storage_N) + 7) / 8) * 8; - ATTR_ALIGN nl_ext_double m_A[storage_N][m_pitch]; - ATTR_ALIGN nl_ext_double m_Ainv[storage_N][m_pitch]; - ATTR_ALIGN nl_ext_double m_W[storage_N][m_pitch]; - ATTR_ALIGN nl_ext_double m_RHS[storage_N]; // right hand side - contains currents + nl_ext_double m_A[storage_N][m_pitch]; + nl_ext_double m_Ainv[storage_N][m_pitch]; + nl_ext_double m_W[storage_N][m_pitch]; + nl_ext_double m_RHS[storage_N]; // right hand side - contains currents - ATTR_ALIGN nl_ext_double m_lA[storage_N][m_pitch]; + nl_ext_double m_lA[storage_N][m_pitch]; /* temporary */ - ATTR_ALIGN nl_double H[storage_N][m_pitch] ; + nl_double H[storage_N][m_pitch] ; unsigned rows[storage_N]; unsigned cols[storage_N][m_pitch]; unsigned colcount[storage_N]; unsigned m_cnt; - //ATTR_ALIGN nl_ext_double m_RHSx[storage_N]; + //nl_ext_double m_RHSx[storage_N]; const unsigned m_dim; @@ -137,15 +137,10 @@ void matrix_solver_w_t<m_N, storage_N>::vsetup(analog_net_t::list_t &nets) matrix_solver_t::setup_base(nets); - - save(NLNAME(m_last_RHS)); + netlist().save(*this, m_last_RHS, "m_last_RHS"); for (unsigned k = 0; k < N(); k++) - { - pstring num = plib::pfmt("{1}")(k); - - save(RHS(k), "RHS." + num); - } + netlist().save(*this, RHS(k), plib::pfmt("RHS.{1}")(k)); } diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp index 0a9d6360dc8..3f4b39b77cb 100644 --- a/src/lib/netlist/solver/nld_solver.cpp +++ b/src/lib/netlist/solver/nld_solver.cpp @@ -67,12 +67,12 @@ void terms_t::add(terminal_t *term, int net_other, bool sorted) { if (m_net_other[i] > net_other) { - m_term.insert_at(i, term); - m_net_other.insert_at(i, net_other); - m_gt.insert_at(i, 0.0); - m_go.insert_at(i, 0.0); - m_Idr.insert_at(i, 0.0); - m_other_curanalog.insert_at(i, nullptr); + plib::container::insert_at(m_term, i, term); + plib::container::insert_at(m_net_other, i, net_other); + plib::container::insert_at(m_gt, i, 0.0); + plib::container::insert_at(m_go, i, 0.0); + plib::container::insert_at(m_Idr, i, 0.0); + plib::container::insert_at(m_other_curanalog, i, nullptr); return; } } @@ -89,7 +89,7 @@ void terms_t::set_pointers() for (unsigned i = 0; i < count(); i++) { m_term[i]->set_ptrs(&m_gt[i], &m_go[i], &m_Idr[i]); - m_other_curanalog[i] = &m_term[i]->m_otherterm->net().m_cur_Analog; + m_other_curanalog[i] = m_term[i]->m_otherterm->net().m_cur_Analog.ptr(); } } @@ -135,10 +135,10 @@ void matrix_solver_t::setup_base(analog_net_t::list_t &nets) { case terminal_t::TERMINAL: if (p->device().is_timestep()) - if (!m_step_devices.contains(&p->device())) + if (!plib::container::contains(m_step_devices, &p->device())) m_step_devices.push_back(&p->device()); if (p->device().is_dynamic()) - if (!m_dynamic_devices.contains(&p->device())) + if (!plib::container::contains(m_dynamic_devices, &p->device())) m_dynamic_devices.push_back(&p->device()); { terminal_t *pterm = dynamic_cast<terminal_t *>(p); @@ -257,13 +257,13 @@ void matrix_solver_t::setup_matrix() t->m_nz.clear(); for (unsigned i = 0; i < t->m_railstart; i++) - if (!t->m_nz.contains(other[i])) + if (!plib::container::contains(t->m_nz, other[i])) t->m_nz.push_back(other[i]); t->m_nz.push_back(k); // add diagonal /* and sort */ - plib::sort_list(t->m_nz); + std::sort(t->m_nz.begin(), t->m_nz.end()); } /* create a list of non zero elements right of the diagonal @@ -281,22 +281,21 @@ void matrix_solver_t::setup_matrix() else { t->m_nzrd = m_terms[k-1]->m_nzrd; - unsigned j=0; - while(j < t->m_nzrd.size()) + for (auto j = t->m_nzrd.begin(); j != t->m_nzrd.end(); ) { - if (t->m_nzrd[j] < k + 1) - t->m_nzrd.remove_at(j); + if (*j < k + 1) + j = t->m_nzrd.erase(j); else - j++; + ++j; } } for (unsigned i = 0; i < t->m_railstart; i++) - if (!t->m_nzrd.contains(other[i]) && other[i] >= (int) (k + 1)) + if (!plib::container::contains(t->m_nzrd, other[i]) && other[i] >= (int) (k + 1)) t->m_nzrd.push_back(other[i]); /* and sort */ - plib::sort_list(t->m_nzrd); + std::sort(t->m_nzrd.begin(), t->m_nzrd.end()); } /* create a list of non zero elements below diagonal k @@ -324,7 +323,7 @@ void matrix_solver_t::setup_matrix() if (touched[row][k]) { ops++; - if (!m_terms[k]->m_nzbd.contains(row)) + if (!plib::container::contains(m_terms[k]->m_nzbd, row)) m_terms[k]->m_nzbd.push_back(row); for (unsigned col = k + 1; col < iN; col++) if (touched[k][col]) @@ -353,13 +352,13 @@ void matrix_solver_t::setup_matrix() { pstring num = plib::pfmt("{1}")(k); - save(m_terms[k]->m_last_V, "lastV." + num); - save(m_terms[k]->m_DD_n_m_1, "m_DD_n_m_1." + num); - save(m_terms[k]->m_h_n_m_1, "m_h_n_m_1." + num); + netlist().save(*this, m_terms[k]->m_last_V, "lastV." + num); + netlist().save(*this, m_terms[k]->m_DD_n_m_1, "m_DD_n_m_1." + num); + netlist().save(*this, m_terms[k]->m_h_n_m_1, "m_h_n_m_1." + num); - save(m_terms[k]->go(),"GO" + num, m_terms[k]->count()); - save(m_terms[k]->gt(),"GT" + num, m_terms[k]->count()); - save(m_terms[k]->Idr(),"IDR" + num , m_terms[k]->count()); + netlist().save(*this, m_terms[k]->go(),"GO" + num, m_terms[k]->count()); + netlist().save(*this, m_terms[k]->gt(),"GT" + num, m_terms[k]->count()); + netlist().save(*this, m_terms[k]->Idr(),"IDR" + num , m_terms[k]->count()); } for (unsigned k=0; k<iN; k++) @@ -404,7 +403,7 @@ void matrix_solver_t::update_forced() if (m_params.m_dynamic && has_timestep_devices()) { m_Q_sync.net().toggle_new_Q(); - m_Q_sync.net().reschedule_in_queue(netlist_time(m_params.m_min_timestep)); + m_Q_sync.net().reschedule_in_queue(netlist_time::from_double(m_params.m_min_timestep)); } } @@ -536,7 +535,7 @@ netlist_time matrix_solver_t::compute_next_timestep() } //if (new_solver_timestep > 10.0 * hn) // new_solver_timestep = 10.0 * hn; - return netlist_time(new_solver_timestep); + return netlist_time::from_double(new_solver_timestep); } @@ -552,11 +551,11 @@ void matrix_solver_t::log_stats() log().verbose(" has {1} elements", this->has_timestep_devices() ? "timestep" : "no timestep"); log().verbose(" {1:6.3} average newton raphson loops", (double) this->m_stat_newton_raphson / (double) this->m_stat_vsolver_calls); log().verbose(" {1:10} invocations ({2:6} Hz) {3:10} gs fails ({4:6.2} %) {5:6.3} average", - this->m_stat_calculations, - this->m_stat_calculations * 10 / (int) (this->netlist().time().as_double() * 10.0), - this->m_iterative_fail, - 100.0 * (double) this->m_iterative_fail / (double) this->m_stat_calculations, - (double) this->m_iterative_total / (double) this->m_stat_calculations); + this->m_stat_calculations(), + this->m_stat_calculations() * 10 / (int) (this->netlist().time().as_double() * 10.0), + this->m_iterative_fail(), + 100.0 * (double) this->m_iterative_fail() / (double) this->m_stat_calculations(), + (double) this->m_iterative_total() / (double) this->m_stat_calculations()); } } @@ -629,7 +628,7 @@ NETLIB_UPDATE(solver) if (!m_Q_step.net().is_queued()) { m_Q_step.net().toggle_new_Q(); - m_Q_step.net().push_to_queue(netlist_time(m_params.m_max_timestep)); + m_Q_step.net().push_to_queue(netlist_time::from_double(m_params.m_max_timestep)); } } @@ -698,14 +697,14 @@ std::unique_ptr<matrix_solver_t> NETLIB_NAME(solver)::create_solver(int size, co void NETLIB_NAME(solver)::post_start() { - plib::pvector_t<analog_net_t::list_t> groups; + std::vector<analog_net_t::list_t> groups; const bool use_specific = true; m_params.m_pivot = m_pivot.Value(); m_params.m_accuracy = m_accuracy.Value(); m_params.m_gs_loops = m_gs_loops.Value(); m_params.m_nr_loops = m_nr_loops.Value(); - m_params.m_nt_sync_delay = netlist_time(m_sync_delay.Value()); + m_params.m_nt_sync_delay = netlist_time::from_double(m_sync_delay.Value()); m_params.m_lte = m_lte.Value(); m_params.m_sor = m_sor.Value(); diff --git a/src/lib/netlist/tools/nl_convert.cpp b/src/lib/netlist/tools/nl_convert.cpp index 145de96aa38..545377cc494 100644 --- a/src/lib/netlist/tools/nl_convert.cpp +++ b/src/lib/netlist/tools/nl_convert.cpp @@ -11,26 +11,6 @@ #include "nl_convert.h" -template<typename Class> -static plib::pvector_t<int> bubble(const plib::pvector_t<Class> &sl) -{ - plib::pvector_t<int> ret; - for (unsigned i=0; i<sl.size(); i++) - ret.push_back(i); - - for(unsigned i=0; i < sl.size(); i++) - { - for(unsigned j=i+1; j < sl.size(); j++) - { - if(sl[ret[i]]->name() > sl[ret[j]]->name()) - { - std::swap(ret[i], ret[j]); - } - } - } - return ret; -} - /*------------------------------------------------- convert - convert a spice netlist -------------------------------------------------*/ @@ -38,7 +18,7 @@ static plib::pvector_t<int> bubble(const plib::pvector_t<Class> &sl) void nl_convert_base_t::add_pin_alias(const pstring &devname, const pstring &name, const pstring &alias) { pstring pname = devname + "." + name; - m_pins.add(pname, plib::make_unique<pin_alias_t>(pname, devname + "." + alias)); + m_pins.insert({pname, plib::make_unique<pin_alias_t>(pname, devname + "." + alias)}); } void nl_convert_base_t::add_ext_alias(const pstring &alias) @@ -73,13 +53,14 @@ void nl_convert_base_t::add_device(const pstring &atype, const pstring &aname) void nl_convert_base_t::add_term(pstring netname, pstring termname) { net_t * net = nullptr; - if (m_nets.contains(netname)) + auto idx = m_nets.find(netname); + if (idx != m_nets.end()) net = m_nets[netname].get(); else { auto nets = std::make_shared<net_t>(netname); net = nets.get(); - m_nets.add(netname, nets); + m_nets.insert({netname, nets}); } /* if there is a pin alias, translate ... */ @@ -102,7 +83,12 @@ void nl_convert_base_t::dump_nl() if (net->terminals().size() == 1) net->set_no_export(); } - plib::pvector_t<int> sorted = bubble(m_devs); + + std::vector<int> sorted; + for (unsigned i=0; i < m_devs.size(); i++) + sorted.push_back(i); + std::sort(sorted.begin(), sorted.end(), plib::indexed_compare<std::vector<std::shared_ptr<dev_t>>>(m_devs)); + for (std::size_t i=0; i<m_devs.size(); i++) { std::size_t j = sorted[i]; @@ -118,9 +104,9 @@ void nl_convert_base_t::dump_nl() m_devs[j]->name().cstr()); } // print nets - for (std::size_t i=0; i<m_nets.size(); i++) + for (auto & i : m_nets) { - net_t * net = m_nets.value_at(i).get(); + net_t * net = i.second.get(); if (!net->is_no_export()) { //printf("Net {}\n", net->name().cstr()); diff --git a/src/lib/netlist/tools/nl_convert.h b/src/lib/netlist/tools/nl_convert.h index 40d339e0934..a2e0dc99ecb 100644 --- a/src/lib/netlist/tools/nl_convert.h +++ b/src/lib/netlist/tools/nl_convert.h @@ -130,10 +130,10 @@ private: plib::postringstream m_buf; - plib::pvector_t<std::shared_ptr<dev_t>> m_devs; - plib::hashmap_t<pstring, std::shared_ptr<net_t> > m_nets; - plib::pvector_t<pstring> m_ext_alias; - plib::hashmap_t<pstring, std::shared_ptr<pin_alias_t>> m_pins; + std::vector<std::shared_ptr<dev_t>> m_devs; + std::unordered_map<pstring, std::shared_ptr<net_t> > m_nets; + std::vector<pstring> m_ext_alias; + std::unordered_map<pstring, std::shared_ptr<pin_alias_t>> m_pins; static unit_t m_units[]; diff --git a/src/lib/util/tagmap.h b/src/lib/util/tagmap.h deleted file mode 100644 index ee4f16b96e3..00000000000 --- a/src/lib/util/tagmap.h +++ /dev/null @@ -1,96 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - tagmap.h - - Simple tag->object mapping functions. - -***************************************************************************/ - -#pragma once - -#ifndef __TAGMAP_H__ -#define __TAGMAP_H__ - -#include "osdcore.h" -#include "coretmpl.h" -#include <string> -#include <utility> -#include <unordered_map> - -//************************************************************************** -// CONSTANTS -//************************************************************************** - -enum tagmap_error -{ - TMERR_NONE, - TMERR_DUPLICATE -}; - -// ======================> tagged_list - -class add_exception -{ -public: - add_exception(const char *tag) : m_tag(tag) { } - const char *tag() const { return m_tag.c_str(); } -private: - std::string m_tag; -}; - -// a tagged_list is a class that maintains a list of objects that can be quickly looked up by tag -template<class _ElementType> -class tagged_list -{ - // we don't support deep copying - tagged_list(const tagged_list &); - tagged_list &operator=(const tagged_list &); - -public: - // construction - tagged_list() { } - - // simple getters - _ElementType *first() const { return m_list.first(); } - _ElementType *last() const { return m_list.last(); } - int count() const { return m_list.count(); } - bool empty() const { return m_list.empty(); } - - // range iterators - using auto_iterator = typename simple_list<_ElementType>::auto_iterator; - auto_iterator begin() const { return m_list.begin(); } - auto_iterator end() const { return m_list.end(); } - - // remove (free) all objects in the list, leaving an empty list - void reset() { m_list.reset(); m_map.clear(); } - - // add the given object to the head of the list - _ElementType &prepend(const char *tag, _ElementType &object) - { - if (!m_map.insert(std::make_pair(tag, &object)).second) - throw add_exception(tag); - return m_list.prepend(object); - } - - // add the given object to the tail of the list - _ElementType &append(const char *tag, _ElementType &object) - { - if (!m_map.insert(std::make_pair(tag, &object)).second) - throw add_exception(tag); - return m_list.append(object); - } - - // operations by tag - void remove(const char *tag) { auto search = m_map.find(tag); if (search != m_map.end()) { m_list.remove(*search->second); m_map.erase(search); } } - _ElementType *find(const char *tag) const { auto search = m_map.find(tag); return (search == m_map.end()) ? nullptr : search->second; } - -private: - // internal state - simple_list<_ElementType> m_list; - std::unordered_map<std::string,_ElementType *> m_map; -}; - - -#endif /* __TAGMAP_H__ */ diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt index 5ce96a88e5f..46ce6839c70 100644 --- a/src/mame/arcade.flt +++ b/src/mame/arcade.flt @@ -301,6 +301,7 @@ dfruit.cpp dgpix.cpp dietgo.cpp discoboy.cpp +divebomb.cpp diverboy.cpp djboy.cpp djmain.cpp diff --git a/src/mame/audio/aztarac.cpp b/src/mame/audio/aztarac.cpp index f30484842c5..74a1b32bcdc 100644 --- a/src/mame/audio/aztarac.cpp +++ b/src/mame/audio/aztarac.cpp @@ -21,7 +21,7 @@ WRITE16_MEMBER(aztarac_state::sound_w) if (ACCESSING_BITS_0_7) { data &= 0xff; - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_sound_status ^= 0x21; if (m_sound_status & 0x20) m_audiocpu->set_input_line(0, HOLD_LINE); @@ -32,7 +32,7 @@ READ8_MEMBER(aztarac_state::snd_command_r) { m_sound_status |= 0x01; m_sound_status &= ~0x20; - return soundlatch_byte_r(space,offset); + return m_soundlatch->read(space,offset); } READ8_MEMBER(aztarac_state::snd_status_r) diff --git a/src/mame/audio/dcs.cpp b/src/mame/audio/dcs.cpp index 17446242bda..75972ebf0cf 100644 --- a/src/mame/audio/dcs.cpp +++ b/src/mame/audio/dcs.cpp @@ -1949,7 +1949,10 @@ TIMER_DEVICE_CALLBACK_MEMBER( dcs_audio_device::dcs_irq ) /* copy the current data into the buffer */ { int count = m_size / (2*(m_incs ? m_incs : 1)); - INT16 buffer[0x400]; + // sf2049se was having overflow issues with fixed size of 0x400 buffer (m_size==0xb40, count=0x5a0). + //INT16 buffer[0x400]; + std::unique_ptr<INT16[]> buffer; + buffer = std::make_unique<INT16[]>(count); int i; for (i = 0; i < count; i++) @@ -1959,7 +1962,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( dcs_audio_device::dcs_irq ) } if (m_channels) - dmadac_transfer(&m_dmadac[0], m_channels, 1, m_channels, count / m_channels, buffer); + dmadac_transfer(&m_dmadac[0], m_channels, 1, m_channels, count / m_channels, buffer.get()); } /* check for wrapping */ diff --git a/src/mame/audio/gottlieb.cpp b/src/mame/audio/gottlieb.cpp index 38b3fc013ea..5f5fc4cad69 100644 --- a/src/mame/audio/gottlieb.cpp +++ b/src/mame/audio/gottlieb.cpp @@ -902,7 +902,7 @@ static ADDRESS_MAP_START( gottlieb_sound_r2_map, AS_PROGRAM, 8, gottlieb_sound_r AM_RANGE(0x0000, 0x03ff) AM_MIRROR(0x3c00) AM_RAM AM_RANGE(0x4000, 0x4001) AM_MIRROR(0x3ffe) AM_WRITE(dac_w) AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x3fff) AM_READ(audio_data_r) - AM_RANGE(0xe000, 0xffff) AM_MIRROR(0x2000) AM_ROM + AM_RANGE(0xc000, 0xdfff) AM_MIRROR(0x2000) AM_ROM ADDRESS_MAP_END diff --git a/src/mame/audio/irem.cpp b/src/mame/audio/irem.cpp index 57c28493622..d06d9d35ad5 100644 --- a/src/mame/audio/irem.cpp +++ b/src/mame/audio/irem.cpp @@ -455,11 +455,11 @@ static MACHINE_CONFIG_FRAGMENT( irem_audio_base ) MCFG_NETLIST_SETUP(kidniki) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MCFG_NETLIST_LOGIC_INPUT("snd_nl", "ibd", "I_BD0.IN", 0, 1) - MCFG_NETLIST_LOGIC_INPUT("snd_nl", "isd", "I_SD0.IN", 0, 1) - MCFG_NETLIST_LOGIC_INPUT("snd_nl", "ich", "I_CH0.IN", 0, 1) - MCFG_NETLIST_LOGIC_INPUT("snd_nl", "ioh", "I_OH0.IN", 0, 1) - MCFG_NETLIST_LOGIC_INPUT("snd_nl", "sinh", "SINH.IN", 0, 1) + MCFG_NETLIST_LOGIC_INPUT("snd_nl", "ibd", "I_BD0.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("snd_nl", "isd", "I_SD0.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("snd_nl", "ich", "I_CH0.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("snd_nl", "ioh", "I_OH0.IN", 0) + MCFG_NETLIST_LOGIC_INPUT("snd_nl", "sinh", "SINH.IN", 0) MCFG_NETLIST_STREAM_INPUT("snd_nl", 0, "R_AY45M_A.R") MCFG_NETLIST_STREAM_INPUT("snd_nl", 1, "R_AY45M_B.R") diff --git a/src/mame/audio/midway.cpp b/src/mame/audio/midway.cpp index 4aea1c337ad..daae8982b37 100644 --- a/src/mame/audio/midway.cpp +++ b/src/mame/audio/midway.cpp @@ -131,7 +131,7 @@ WRITE8_MEMBER(midway_ssio_device::ioport_write) { int which = offset >> 2; if (!m_custom_output[which].isnull()) - m_custom_output[which](space, offset, data & m_custom_output_mask[which], 0xff); + m_custom_output[which](space, offset & 4, data & m_custom_output_mask[which], 0xff); } diff --git a/src/mame/audio/midway.h b/src/mame/audio/midway.h index 7b672b13724..a66953c7d7a 100644 --- a/src/mame/audio/midway.h +++ b/src/mame/audio/midway.h @@ -282,7 +282,7 @@ private: #define SSIO_INPUT_PORTS(ssio) \ AM_RANGE(0x00, 0x04) AM_MIRROR(0x18) AM_DEVREAD(ssio, midway_ssio_device, ioport_read) \ AM_RANGE(0x07, 0x07) AM_MIRROR(0x18) AM_DEVREAD(ssio, midway_ssio_device, read) \ - AM_RANGE(0x00, 0x07) AM_MIRROR(0x03) AM_DEVWRITE(ssio, midway_ssio_device, ioport_write) \ + AM_RANGE(0x00, 0x07) AM_DEVWRITE(ssio, midway_ssio_device, ioport_write) \ AM_RANGE(0x1c, 0x1f) AM_DEVWRITE(ssio, midway_ssio_device, write) diff --git a/src/mame/audio/vboy.cpp b/src/mame/audio/vboy.cpp index f6b77630522..f8c21cee315 100644 --- a/src/mame/audio/vboy.cpp +++ b/src/mame/audio/vboy.cpp @@ -372,8 +372,10 @@ void vboysnd_device::sound_stream_update(sound_stream &stream, stream_sample_t * // scale to 16 bits note_left = (note_left << 5) | ((note_left >> 6) & 0x1f); note_right = (note_right << 5) | ((note_right >> 6) & 0x1f); - if (note_left < -32767) note_left = -32767; if (note_left > 32767) note_left = 32767; - if (note_right < -32767) note_right = -32767; if (note_right > 32767) note_right = 32767; + if (note_left < -32767) note_left = -32767; + if (note_left > 32767) note_left = 32767; + if (note_right < -32767) note_right = -32767; + if (note_right > 32767) note_right = 32767; *(outL++) = ((INT16)note_left); *(outR++) = ((INT16)note_right); diff --git a/src/mame/drivers/40love.cpp b/src/mame/drivers/40love.cpp index fe81b18233a..d209e7c3c44 100644 --- a/src/mame/drivers/40love.cpp +++ b/src/mame/drivers/40love.cpp @@ -201,7 +201,7 @@ M4300049A (relabeled J1100004A/K1100010A) 1x m5m5517 z80c -a17_14 protection processor. 28 Pin Motorolla 15-00011-01 DA68235 (Labeled 8909) +a17_14 protection processor. 28 Pin Motorola 15-00011-01 DA68235 (Labeled 8909) Next to MB14241 Rom Daughterboard @@ -245,7 +245,7 @@ void fortyl_state::device_timer(emu_timer &timer, device_timer_id id, int param, WRITE8_MEMBER(fortyl_state::sound_command_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); synchronize(TIMER_NMI_CALLBACK, data); } @@ -747,7 +747,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, fortyl_state ) AM_RANGE(0xca00, 0xca0d) AM_DEVWRITE("msm", msm5232_device, write) AM_RANGE(0xcc00, 0xcc00) AM_WRITE(sound_control_0_w) AM_RANGE(0xce00, 0xce00) AM_WRITE(sound_control_1_w) - AM_RANGE(0xd800, 0xd800) AM_READ(soundlatch_byte_r) AM_WRITE(to_main_w) + AM_RANGE(0xd800, 0xd800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(to_main_w) AM_RANGE(0xda00, 0xda00) AM_READNOP AM_WRITE(nmi_enable_w) /* unknown read */ AM_RANGE(0xdc00, 0xdc00) AM_WRITE(nmi_disable_w) AM_RANGE(0xde00, 0xde00) AM_READNOP AM_DEVWRITE("dac", dac_device, write_signed8) /* signed 8-bit DAC - unknown read */ @@ -1069,6 +1069,8 @@ static MACHINE_CONFIG_START( 40love, fortyl_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, 2000000) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(fortyl_state, sound_control_2_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(fortyl_state, sound_control_3_w)) @@ -1126,6 +1128,8 @@ static MACHINE_CONFIG_START( undoukai, fortyl_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, 2000000) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(fortyl_state, sound_control_2_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(fortyl_state, sound_control_3_w)) diff --git a/src/mame/drivers/4enlinea.cpp b/src/mame/drivers/4enlinea.cpp index f2ad0702acf..eb1072550bb 100644 --- a/src/mame/drivers/4enlinea.cpp +++ b/src/mame/drivers/4enlinea.cpp @@ -298,8 +298,8 @@ void isa8_cga_4enlinea_device::device_start() m_vram.resize(m_vram_size); //m_isa->install_device(0x3bf, 0x3bf, 0, 0, nullptr, write8_delegate( FUNC(isa8_cga_4enlinea_device::_4enlinea_mode_control_w), this ) ); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_cga_4enlinea_device::_4enlinea_io_read), this ), write8_delegate( FUNC(isa8_cga_device::io_write), this ) ); - m_isa->install_bank(0x8000, 0xbfff, 0, 0, "bank1", &m_vram[0]); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_cga_4enlinea_device::_4enlinea_io_read), this ), write8_delegate( FUNC(isa8_cga_device::io_write), this ) ); + m_isa->install_bank(0x8000, 0xbfff, "bank1", &m_vram[0]); /* Initialise the cga palette */ int i; diff --git a/src/mame/drivers/8080bw.cpp b/src/mame/drivers/8080bw.cpp index 5b6f72e22cf..1894ebbac57 100644 --- a/src/mame/drivers/8080bw.cpp +++ b/src/mame/drivers/8080bw.cpp @@ -1237,12 +1237,32 @@ INPUT_PORTS_END /* */ /*******************************************************/ +READ8_MEMBER(_8080bw_state::rollingc_scattered_colorram_r) +{ + return m_scattered_colorram[(offset & 0x1f) | ((offset & 0x1f00) >> 3)]; +} + +WRITE8_MEMBER(_8080bw_state::rollingc_scattered_colorram_w) +{ + m_scattered_colorram[(offset & 0x1f) | ((offset & 0x1f00) >> 3)] = data; +} + +READ8_MEMBER(_8080bw_state::rollingc_scattered_colorram2_r) +{ + return m_scattered_colorram2[(offset & 0x1f) | ((offset & 0x1f00) >> 3)]; +} + +WRITE8_MEMBER(_8080bw_state::rollingc_scattered_colorram2_w) +{ + m_scattered_colorram2[(offset & 0x1f) | ((offset & 0x1f00) >> 3)] = data; +} + static ADDRESS_MAP_START( rollingc_map, AS_PROGRAM, 8, _8080bw_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x2000, 0x3fff) AM_RAM AM_SHARE("main_ram") AM_RANGE(0x4000, 0x5fff) AM_ROM - AM_RANGE(0xa000, 0xbfff) AM_MIRROR(0x00e0) AM_RAM AM_SHARE("colorram") - AM_RANGE(0xe000, 0xffff) AM_MIRROR(0x00e0) AM_RAM AM_SHARE("colorram2") + AM_RANGE(0xa000, 0xbfff) AM_READWRITE(rollingc_scattered_colorram_r, rollingc_scattered_colorram_w) + AM_RANGE(0xe000, 0xffff) AM_READWRITE(rollingc_scattered_colorram2_r, rollingc_scattered_colorram2_w) ADDRESS_MAP_END @@ -1271,6 +1291,16 @@ static INPUT_PORTS_START( rollingc ) PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW1:4" ) INPUT_PORTS_END +MACHINE_START_MEMBER(_8080bw_state,rollingc) +{ + m_scattered_colorram = std::make_unique<UINT8 []>(0x400); + m_scattered_colorram2 = std::make_unique<UINT8 []>(0x400); + save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x400); + save_pointer(&m_scattered_colorram2[0], "m_scattered_colorram2", 0x400); + + MACHINE_START_CALL_MEMBER(mw8080bw); +} + static MACHINE_CONFIG_DERIVED_CLASS( rollingc, mw8080bw_root, _8080bw_state ) /* basic machine hardware */ @@ -1290,6 +1320,8 @@ static MACHINE_CONFIG_DERIVED_CLASS( rollingc, mw8080bw_root, _8080bw_state ) /* sound hardware */ MCFG_FRAGMENT_ADD(invaders_samples_audio) + + MCFG_MACHINE_START_OVERRIDE(_8080bw_state,rollingc) MACHINE_CONFIG_END @@ -1300,11 +1332,22 @@ MACHINE_CONFIG_END /* */ /*******************************************************/ + +READ8_MEMBER(_8080bw_state::schaser_scattered_colorram_r) +{ + return m_scattered_colorram[(offset & 0x1f) | ((offset & 0x1f80) >> 2)]; +} + +WRITE8_MEMBER(_8080bw_state::schaser_scattered_colorram_w) +{ + m_scattered_colorram[(offset & 0x1f) | ((offset & 0x1f80) >> 2)] = data; +} + static ADDRESS_MAP_START( schaser_map, AS_PROGRAM, 8, _8080bw_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x2000, 0x3fff) AM_RAM AM_SHARE("main_ram") AM_RANGE(0x4000, 0x5fff) AM_ROM - AM_RANGE(0xc000, 0xdfff) AM_MIRROR(0x0060) AM_RAM AM_SHARE("colorram") + AM_RANGE(0xc000, 0xdfff) AM_READWRITE(schaser_scattered_colorram_r, schaser_scattered_colorram_w) ADDRESS_MAP_END @@ -1385,6 +1428,8 @@ INPUT_PORTS_END MACHINE_START_MEMBER(_8080bw_state,schaser) { + m_scattered_colorram = std::make_unique<UINT8 []>(0x800); + save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800); MACHINE_START_CALL_MEMBER(schaser_sh); MACHINE_START_CALL_MEMBER(extra_8080bw_vh); MACHINE_START_CALL_MEMBER(mw8080bw); @@ -1515,7 +1560,7 @@ static MACHINE_CONFIG_DERIVED_CLASS( schasercv, mw8080bw_root, _8080bw_state ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(schaser_map) MCFG_CPU_IO_MAP(schasercv_io_map) - MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw) + MCFG_MACHINE_START_OVERRIDE(_8080bw_state, schaser) /* add shifter */ MCFG_MB14241_ADD("mb14241") @@ -1558,7 +1603,7 @@ static ADDRESS_MAP_START( sflush_map, AS_PROGRAM, 8, _8080bw_state ) AM_RANGE(0x801a, 0x801a) AM_WRITENOP AM_RANGE(0x801c, 0x801c) AM_WRITENOP AM_RANGE(0x801d, 0x801d) AM_WRITENOP - AM_RANGE(0xa000, 0xbfff) AM_MIRROR(0x0060) AM_RAM AM_SHARE("colorram") + AM_RANGE(0xa000, 0xbfff) AM_READWRITE(schaser_scattered_colorram_r, schaser_scattered_colorram_w) AM_RANGE(0xd800, 0xffff) AM_ROM ADDRESS_MAP_END @@ -1592,13 +1637,21 @@ static INPUT_PORTS_START( sflush ) INPUT_PORTS_END +MACHINE_START_MEMBER(_8080bw_state,sflush) +{ + m_scattered_colorram = std::make_unique<UINT8 []>(0x800); + save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800); + + MACHINE_START_CALL_MEMBER(mw8080bw); +} + static MACHINE_CONFIG_DERIVED_CLASS( sflush, mw8080bw_root, _8080bw_state ) /* basic machine hardware */ MCFG_CPU_REPLACE("maincpu",M6800,1500000) // ? MCFG_CPU_PROGRAM_MAP(sflush_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", _8080bw_state, irq0_line_hold) - MCFG_MACHINE_START_OVERRIDE(_8080bw_state,mw8080bw) + MCFG_MACHINE_START_OVERRIDE(_8080bw_state,sflush) /* add shifter */ MCFG_MB14241_ADD("mb14241") @@ -1744,6 +1797,7 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( lupin3a, lupin3 ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(schaser_map) + MCFG_MACHINE_START_OVERRIDE(_8080bw_state,sflush) /* video hardware */ MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE_DRIVER(_8080bw_state, screen_update_lupin3) @@ -1772,6 +1826,8 @@ INTERRUPT_GEN_MEMBER(_8080bw_state::polaris_interrupt) MACHINE_START_MEMBER(_8080bw_state,polaris) { + m_scattered_colorram = std::make_unique<UINT8 []>(0x800); + save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800); save_item(NAME(m_polaris_cloud_speed)); save_item(NAME(m_polaris_cloud_pos)); @@ -3494,6 +3550,22 @@ ROM_START( sicv ) // likely not the first sicv version... ROM_LOAD( "cv02.2", 0x0400, 0x0400, CRC(8263da38) SHA1(2e7c769d129e6f8a1a31eba1e02777bb94ac32b2) ) ROM_END +ROM_START( sicv1 ) // Original Taito board AA017742B - data match for sicv, just smaller program roms (2708s vs. 2716s) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "cv11.s1", 0x0000, 0x0400, CRC(309d4582) SHA1(e60a1a696111502c115ee00d84cd418c85aba9af) ) + ROM_LOAD( "cv12.r1", 0x0400, 0x0400, CRC(70153e09) SHA1(b75068b7738aa232f75272c539fca04b3d0c2c4a) ) + ROM_LOAD( "cv13.np1", 0x0800, 0x0400, CRC(2ca24fee) SHA1(4b516ebd5a777b001443159233d89fc0a331f756) ) + ROM_FILL( 0x0c00, 0x0400, 0xff ) /* rom socket at M1 is unpopulated */ + ROM_FILL( 0x1000, 0x0400, 0xff ) /* rom socket at L1 is unpopulated */ + ROM_LOAD( "cv14.jk1", 0x1400, 0x0400, CRC(556d9a97) SHA1(fb792e981658d79d1c801b01f06345c237e9e803) ) + ROM_LOAD( "cv15.i1", 0x1800, 0x0400, CRC(ac520cf5) SHA1(47281256083d64a2754b2045c252e74fe5b71153) ) + ROM_LOAD( "cv16.g1", 0x1c00, 0x0400, CRC(285cfb59) SHA1(53eab8ed07dc9ca107e2e91b4556b9424a073530) ) + + ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */ + ROM_LOAD( "cv01.1", 0x0000, 0x0400, CRC(037e16ac) SHA1(d585030aaff428330c91ae94d7cd5c96ebdd67dd) ) + ROM_LOAD( "cv02.2", 0x0400, 0x0400, CRC(8263da38) SHA1(2e7c769d129e6f8a1a31eba1e02777bb94ac32b2) ) +ROM_END + ROM_START( sisv1 ) // rev 1, this version may or may not really exist (may have been test/prototype only?) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "sv01.36", 0x0000, 0x0400, CRC(d0c32d72) SHA1(b3bd950b1ba940fbeb5d95e55113ed8f4c311434) ) @@ -4773,7 +4845,8 @@ GAME( 1978, sisv3, invaders, invaders, sitv, driver_device, 0, ROT270 GAME( 1978, sisv, invaders, invaders, sitv, driver_device, 0, ROT270, "Taito", "Space Invaders (SV Version rev 4)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAMEL(1978, sitv1, invaders, invaders, sitv, driver_device, 0, ROT270, "Taito", "Space Invaders (TV Version rev 1)", MACHINE_SUPPORTS_SAVE, layout_invaders ) GAMEL(1978, sitv, invaders, invaders, sitv, driver_device, 0, ROT270, "Taito", "Space Invaders (TV Version rev 2)", MACHINE_SUPPORTS_SAVE, layout_invaders ) -GAME( 1979, sicv, invaders, invadpt2, sicv, driver_device, 0, ROT270, "Taito", "Space Invaders (CV Version)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1979, sicv, invaders, invadpt2, sicv, driver_device, 0, ROT270, "Taito", "Space Invaders (CV Version, larger roms)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1979, sicv1, invaders, invadpt2, sicv, driver_device, 0, ROT270, "Taito", "Space Invaders (CV Version, smaller roms)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAMEL(1978, invadrmr, invaders, invaders, invadrmr, driver_device, 0, ROT270, "Taito / Model Racing", "Space Invaders (Model Racing)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg? GAMEL(1978, invaderl, invaders, invaders, sicv, driver_device, 0, ROT270, "Taito / Logitec", "Space Invaders (Logitec)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg? GAMEL(1978, spcewars, invaders, spcewars, spcewars, driver_device, 0, ROT270, "Taito / Sanritsu", "Space War (Sanritsu)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg? diff --git a/src/mame/drivers/abc1600.cpp b/src/mame/drivers/abc1600.cpp index 98db925672a..f7db95b7640 100644 --- a/src/mame/drivers/abc1600.cpp +++ b/src/mame/drivers/abc1600.cpp @@ -46,7 +46,6 @@ */ #include "includes/abc1600.h" -#include "machine/watchdog.h" #include "softlist.h" @@ -845,9 +844,6 @@ static MACHINE_CONFIG_START( abc1600, abc1600_state ) MCFG_CPU_PROGRAM_MAP(abc1600_mem) MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(abc1600_state,abc1600_int_ack) - //MCFG_WATCHDOG_ADD("watchdog") - //MCFG_WATCHDOG_TIME_INIT(attotime::from_msec(1600)) // XTAL_64MHz/8/10/20000/8/8 - // video hardware MCFG_ABC1600_MOVER_ADD() @@ -951,12 +947,11 @@ MACHINE_CONFIG_END ROM_START( abc1600 ) ROM_REGION( 0x71c, "plds", 0 ) - ROM_LOAD( "1020 6490349-01.8b", 0x104, 0x104, CRC(1fa065eb) SHA1(20a95940e39fa98e97e59ea1e548ac2e0c9a3444) ) // expansion bus strobes - ROM_LOAD( "1021 6490350-01.5d", 0x208, 0x104, CRC(96f6f44b) SHA1(12d1cd153dcc99d1c4a6c834122f370d49723674) ) // interrupt encoder and ROM/RAM control - ROM_LOAD( "1023 6490352-01.11e", 0x410, 0x104, CRC(a2f350ac) SHA1(77e08654a197080fa2111bc3031cd2c7699bf82b) ) // interrupt acknowledge - ROM_LOAD( "1024 6490353-01.12e", 0x514, 0x104, CRC(67f1328a) SHA1(b585495fe14a7ae2fbb29f722dca106d59325002) ) // expansion bus timing and control - ROM_LOAD( "1025 6490354-01.6e", 0x618, 0x104, CRC(9bda0468) SHA1(ad373995dcc18532274efad76fa80bd13c23df25) ) // DMA transfer - //ROM_LOAD( "pal16r4.10c", 0x71c, 0x104, NO_DUMP ) // SCC read/write, mentioned in the preliminary service manual, but not present on the PCB + ROM_LOAD( "1020 6490349-01.8b", 0x104, 0x104, CRC(1fa065eb) SHA1(20a95940e39fa98e97e59ea1e548ac2e0c9a3444) ) // PAL16L8A expansion bus strobes + ROM_LOAD( "1021 6490350-01.5d", 0x208, 0x104, CRC(96f6f44b) SHA1(12d1cd153dcc99d1c4a6c834122f370d49723674) ) // PAL16L8 interrupt encoder and ROM/RAM control + ROM_LOAD( "1023 6490352-01.11e", 0x410, 0x104, CRC(a2f350ac) SHA1(77e08654a197080fa2111bc3031cd2c7699bf82b) ) // PAL16R6 interrupt acknowledge + ROM_LOAD( "1024 6490353-01.12e", 0x514, 0x104, CRC(67f1328a) SHA1(b585495fe14a7ae2fbb29f722dca106d59325002) ) // PAL16R4 expansion bus timing and control + ROM_LOAD( "1025 6490354-01.6e", 0x618, 0x104, CRC(9bda0468) SHA1(ad373995dcc18532274efad76fa80bd13c23df25) ) // PAL16R4 DMA transfer ROM_END diff --git a/src/mame/drivers/abc80x.cpp b/src/mame/drivers/abc80x.cpp index e79cef36f63..e02e5fdf0ec 100644 --- a/src/mame/drivers/abc80x.cpp +++ b/src/mame/drivers/abc80x.cpp @@ -330,7 +330,7 @@ void abc806_state::bankswitch() program.install_read_bank(0x7000, 0x77ff, bank_name); program.unmap_write(0x7000, 0x77ff); - program.install_readwrite_handler(0x7800, 0x7fff, 0, 0, READ8_DELEGATE(abc806_state, charram_r), WRITE8_DELEGATE(abc806_state, charram_w)); + program.install_readwrite_handler(0x7800, 0x7fff, READ8_DELEGATE(abc806_state, charram_r), WRITE8_DELEGATE(abc806_state, charram_w)); membank(bank_name)->set_entry(0); break; @@ -365,7 +365,7 @@ void abc806_state::bankswitch() if (start_addr == 0x7000) { program.install_readwrite_bank(0x7000, 0x77ff, bank_name); - program.install_readwrite_handler(0x7800, 0x7fff, 0, 0, READ8_DELEGATE(abc806_state, charram_r), WRITE8_DELEGATE(abc806_state, charram_w)); + program.install_readwrite_handler(0x7800, 0x7fff, READ8_DELEGATE(abc806_state, charram_r), WRITE8_DELEGATE(abc806_state, charram_w)); } else { @@ -562,10 +562,10 @@ static ADDRESS_MAP_START( abc806_io, AS_IO, 8, abc806_state ) AM_RANGE(0x07, 0x07) AM_MIRROR(0xff18) AM_DEVREAD(ABCBUS_TAG, abcbus_slot_t, rst_r) AM_WRITE(hrc_w) AM_RANGE(0x20, 0x23) AM_MIRROR(0xff0c) AM_DEVREADWRITE(Z80DART_TAG, z80dart_device, ba_cd_r, ba_cd_w) AM_RANGE(0x31, 0x31) AM_MIRROR(0xff00) AM_DEVREAD(MC6845_TAG, mc6845_device, register_r) - AM_RANGE(0x34, 0x34) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_READWRITE(mai_r, mao_w) + AM_RANGE(0x34, 0x34) AM_SELECT(0xff00) AM_READWRITE(mai_r, mao_w) AM_RANGE(0x35, 0x35) AM_MIRROR(0xff00) AM_READWRITE(ami_r, amo_w) AM_RANGE(0x36, 0x36) AM_MIRROR(0xff00) AM_READWRITE(sti_r, sto_w) - AM_RANGE(0x37, 0x37) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_READWRITE(cli_r, sso_w) + AM_RANGE(0x37, 0x37) AM_SELECT(0xff00) AM_READWRITE(cli_r, sso_w) AM_RANGE(0x38, 0x38) AM_MIRROR(0xff00) AM_DEVWRITE(MC6845_TAG, mc6845_device, address_w) AM_RANGE(0x39, 0x39) AM_MIRROR(0xff00) AM_DEVWRITE(MC6845_TAG, mc6845_device, register_w) AM_RANGE(0x40, 0x43) AM_MIRROR(0xff1c) AM_DEVREADWRITE(Z80SIO_TAG, z80sio2_device, ba_cd_r, ba_cd_w) @@ -1413,11 +1413,37 @@ ROM_START( abc802 ) ROMX_LOAD( "abc 32-31.14f", 0x6000, 0x2000, CRC(fc8be7a8) SHA1(a1d4cb45cf5ae21e636dddfa70c99bfd2050ad60), ROM_BIOS(3) ) ROM_SYSTEM_BIOS( 3, "mica620", "MICA DOS v.20 (1984-03-02)" ) ROMX_LOAD( "mica820.14f", 0x6000, 0x2000, CRC(edf998af) SHA1(daae7e1ff6ef3e0ddb83e932f324c56f4a98f79b), ROM_BIOS(4) ) + ROM_SYSTEM_BIOS( 4, "luxnet01", "LUXNET 01" ) + ROMX_LOAD( "322n01.14f", 0x6000, 0x2000, CRC(0911bc92) SHA1(bf58b3be40ce07638eb265aa2dd97c5562a0c41b), ROM_BIOS(5) ) + ROM_SYSTEM_BIOS( 5, "luxnet02", "LUXNET 02" ) + ROMX_LOAD( "322n02.14f", 0x6000, 0x2000, CRC(2384baec) SHA1(8ae0371242c201913b2d33a75f670d2bccf29582), ROM_BIOS(6) ) ROM_REGION( 0x1000, MC6845_TAG, 0 ) ROM_LOAD( "abc t02-1.3g", 0x0000, 0x1000, CRC(4d54eed8) SHA1(04cb5fc5f3d7ba9b9a5ae0ec94241d1fe83647f7) ) // 64 90191-01 ROM_REGION( 0x400, "plds", 0 ) + /* + 1 CLK + 2 CUR + 3 FC + 4 IHS + 5 LL + 6 ATE + 7 ATD + 8 AT0 + 9 AT1 + 10 GND + 11 GND + 12 >O1 + 13 >O0 + 14 + 15 + 16 >RI + 17 >RG + 18 INV + 19 >D + 20 Vcc + */ ROM_LOAD( "abc p2-1.2g", 0x000, 0x400, NO_DUMP ) // PAL16R4 ROM_END @@ -1443,6 +1469,8 @@ ROM_START( abc806 ) ROMX_LOAD( "mica2006.2k", 0x6000, 0x1000, CRC(58bc2aa8) SHA1(0604bd2396f7d15fcf3d65888b4b673f554037c0), ROM_BIOS(3) ) ROM_SYSTEM_BIOS( 3, "catnet", "CAT-NET" ) ROMX_LOAD( "cmd8_5.2k", 0x6000, 0x1000, CRC(25430ef7) SHA1(03a36874c23c215a19b0be14ad2f6b3b5fb2c839), ROM_BIOS(4) ) + ROM_SYSTEM_BIOS( 4, "luxnet", "LUXNET" ) + ROMX_LOAD( "ln806.2k", 0x6000, 0x1000, CRC(034b5991) SHA1(ba7f8653f4e516687a4399abef450e361f2bfd20), ROM_BIOS(5) ) ROM_LOAD_OPTIONAL( "abc 76-11.2j", 0x7000, 0x1000, CRC(3eb5f6a1) SHA1(02d4e38009c71b84952eb3b8432ad32a98a7fe16) ) // Options-PROM ABC 76-11 "64 90238-02" ROM_LOAD( "abc 76-xx.2j", 0x7000, 0x1000, CRC(b364cc49) SHA1(9a2c373778856a31902cdbd2ae3362c200a38e24) ) // Enhanced Options-PROM @@ -1464,7 +1492,7 @@ ROM_START( abc806 ) //ROM_REGION( 0x200, "v60", 0 ) //ROM_LOAD( "60 90319-01.7e", 0x000, 0x200, NO_DUMP ) // "V60" 7621 (82S131), HR vertical timing 60Hz - ROM_REGION( 0x400, "att_hand", 0 ) + //ROM_REGION( 0x400, "att_hand", 0 ) /* 1 E6P (RAD A8) 2 THP (chargen A12) @@ -1491,12 +1519,56 @@ ROM_START( abc806 ) 23 E5P (RAD A7) 24 Vcc */ - ROM_LOAD( "60 90225-01.11c", 0x000, 0x400, NO_DUMP ) // "VIDEO ATTRIBUTE" 40033A (?) + //ROM_LOAD( "60 90225-01.11c", 0x000, 0x400, NO_DUMP ) // "VIDEO ATTRIBUTE" 40033A (?) ROM_REGION( 0x104, "abc_p3", 0 ) + /* + 1 12MHz + 2 DOT + 3 RTF + 4 GTF + 5 BTF + 6 RTB + 7 GTB + 8 BTB + 9 SFG + 10 GND + 11 GND + 12 RFG + 13 GFG + 14 >YL + 15 >BL + 16 >GL + 17 >RL + 18 BFG + 19 >FGE + 20 Vcc + */ ROM_LOAD( "60 90239-01.1b", 0x000, 0x104, CRC(f3d0ba00) SHA1(bcc0ee26ecac0028aef6bf5cb308133b509bb360) ) // "ABC P3-11" PAL16R4, color encoder ROM_REGION( 0x104, "abc_p4", 0 ) + /* + 1 I3 + 2 A15 + 3 A14 + 4 A13 + 5 A12 + 6 A11 + 7 MIL + 8 EME + 9 ENL + 10 GND + 11 XML + 12 >ROMD + 13 HRAL + 14 HRBL + 15 KDL + 16 >HRE + 17 RKDL + 18 MUX + 19 >RAMD + 20 Vcc + */ ROM_LOAD( "60 90240-01.2d", 0x000, 0x104, CRC(3cc5518d) SHA1(343cf951d01c9d361b695bb4e80eaadf0820b6bc) ) // "ABC P4-11" PAL16L8, memory mapper ROM_END diff --git a/src/mame/drivers/aerofgt.cpp b/src/mame/drivers/aerofgt.cpp index d61597ad1ec..6794f8bf8e0 100644 --- a/src/mame/drivers/aerofgt.cpp +++ b/src/mame/drivers/aerofgt.cpp @@ -65,7 +65,6 @@ Verification still needed for the other PCBs. #include "cpu/z80/z80.h" #include "sound/2610intf.h" #include "sound/3812intf.h" -#include "sound/okim6295.h" #include "includes/aerofgt.h" WRITE16_MEMBER(aerofgt_state::sound_command_w) @@ -73,7 +72,7 @@ WRITE16_MEMBER(aerofgt_state::sound_command_w) if (ACCESSING_BITS_0_7) { m_pending_command = 1; - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -83,7 +82,7 @@ WRITE16_MEMBER(aerofgt_state::turbofrc_sound_command_w) if (ACCESSING_BITS_8_15) { m_pending_command = 1; - soundlatch_byte_w(space, offset, (data >> 8) & 0xff); + m_soundlatch->write(space, offset, (data >> 8) & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -92,7 +91,7 @@ WRITE16_MEMBER(aerofgt_state::aerfboot_soundlatch_w) { if(ACCESSING_BITS_8_15) { - soundlatch_byte_w(space, 0, (data >> 8) & 0xff); + m_soundlatch->write(space, 0, (data >> 8) & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -134,6 +133,18 @@ WRITE8_MEMBER(aerofgt_state::aerfboot_okim6295_banking_w) membank("okibank")->set_entry(data & 0x3); } +WRITE8_MEMBER(aerofgt_state::karatblzbl_d7759_write_port_0_w) +{ + m_upd7759->port_w(space, 0, data); + m_upd7759->start_w(0); + m_upd7759->start_w(1); +} + +WRITE8_MEMBER(aerofgt_state::karatblzbl_d7759_reset_w) +{ + m_upd7759->reset_w(data & 0x80); +} + static ADDRESS_MAP_START( pspikes_map, AS_PROGRAM, 16, aerofgt_state ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM /* work RAM */ @@ -385,7 +396,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( turbofrc_sound_portmap, AS_IO, 8, aerofgt_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_WRITE(aerofgt_sh_bankswitch_w) - AM_RANGE(0x14, 0x14) AM_READ(soundlatch_byte_r) AM_WRITE(pending_command_clear_w) + AM_RANGE(0x14, 0x14) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(pending_command_clear_w) AM_RANGE(0x18, 0x1b) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) ADDRESS_MAP_END @@ -394,7 +405,7 @@ static ADDRESS_MAP_START( aerofgt_sound_portmap, AS_IO, 8, aerofgt_state ) AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) AM_RANGE(0x04, 0x04) AM_WRITE(aerofgt_sh_bankswitch_w) AM_RANGE(0x08, 0x08) AM_WRITE(pending_command_clear_w) - AM_RANGE(0x0c, 0x0c) AM_READ(soundlatch_byte_r) + AM_RANGE(0x0c, 0x0c) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( aerfboot_sound_map, AS_PROGRAM, 8, aerofgt_state ) @@ -402,7 +413,7 @@ static ADDRESS_MAP_START( aerfboot_sound_map, AS_PROGRAM, 8, aerofgt_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x9000, 0x9000) AM_WRITE(aerfboot_okim6295_banking_w) AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( wbbc97_sound_map, AS_PROGRAM, 8, aerofgt_state ) @@ -411,12 +422,21 @@ static ADDRESS_MAP_START( wbbc97_sound_map, AS_PROGRAM, 8, aerofgt_state ) AM_RANGE(0xf800, 0xf800) AM_DEVREADWRITE("oki", okim6295_device, read, write) AM_RANGE(0xf810, 0xf811) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0xfc00, 0xfc00) AM_NOP - AM_RANGE(0xfc20, 0xfc20) AM_READ(soundlatch_byte_r) + AM_RANGE(0xfc20, 0xfc20) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( karatblzbl_sound_map, AS_PROGRAM, 8, aerofgt_state ) - AM_RANGE(0x0000, 0x77ff) AM_ROM - AM_RANGE(0x7800, 0x7fff) AM_RAM + AM_RANGE(0x0000, 0xefff) AM_ROM + AM_RANGE(0xf000, 0xf7ff) AM_RAM + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) //AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( karatblzbl_sound_portmap, AS_IO, 8, aerofgt_state ) + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("ymsnd", ym3812_device, status_port_r, control_port_w) + AM_RANGE(0x20, 0x20) AM_DEVWRITE("ymsnd", ym3812_device, write_port_w) + AM_RANGE(0x40, 0x40) AM_WRITE(karatblzbl_d7759_write_port_0_w) + AM_RANGE(0x80, 0x80) AM_WRITE(karatblzbl_d7759_reset_w) ADDRESS_MAP_END static ADDRESS_MAP_START( oki_map, AS_0, 8, aerofgt_state ) //only for aerfboot for now @@ -1349,6 +1369,8 @@ static MACHINE_CONFIG_START( pspikes, aerofgt_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) @@ -1505,6 +1527,8 @@ static MACHINE_CONFIG_START( karatblz, aerofgt_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_8MHz ) /* verified on pcb */ MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) @@ -1522,6 +1546,7 @@ static MACHINE_CONFIG_START( karatblzbl, aerofgt_state ) MCFG_CPU_ADD("audiocpu",Z80,8000000/2) /* 4 MHz ??? */ MCFG_CPU_PROGRAM_MAP(karatblzbl_sound_map) + MCFG_CPU_IO_MAP(karatblzbl_sound_portmap) MCFG_MACHINE_START_OVERRIDE(aerofgt_state,common) MCFG_MACHINE_RESET_OVERRIDE(aerofgt_state,common) @@ -1550,11 +1575,20 @@ static MACHINE_CONFIG_START( karatblzbl, aerofgt_state ) MCFG_VSYSTEM_SPR2_GFXDECODE("gfxdecode") MCFG_VIDEO_START_OVERRIDE(aerofgt_state,karatblz) + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") /* sound hardware */ - //MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") // breaks savestate + + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2) + MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - // NEC D7759c + YM???? + MCFG_SOUND_ADD("upd", UPD7759, UPD7759_STANDARD_CLOCK) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) MACHINE_CONFIG_END static MACHINE_CONFIG_START( spinlbrk, aerofgt_state ) @@ -1601,6 +1635,8 @@ static MACHINE_CONFIG_START( spinlbrk, aerofgt_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_8MHz) /* verified on pcb */ MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) @@ -1652,6 +1688,8 @@ static MACHINE_CONFIG_START( turbofrc, aerofgt_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_8MHz) /* verified on pcb */ MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) @@ -1704,6 +1742,8 @@ static MACHINE_CONFIG_START( aerofgtb, aerofgt_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) @@ -1751,6 +1791,8 @@ static MACHINE_CONFIG_START( aerofgt, aerofgt_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_8MHz) /* verified on pcb */ MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) @@ -1791,6 +1833,8 @@ static MACHINE_CONFIG_START( aerfboot, aerofgt_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", 1056000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -1864,6 +1908,8 @@ static MACHINE_CONFIG_START( wbbc97, aerofgt_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, 3579545) MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -2466,7 +2512,7 @@ ROM_END Karate Blazers (bootleg) CPU : MC68000 -SND : Z80 + NEC D7759c + YM???? (no number on chip) +SND : Z80 + NEC D7759c + YM3812 (no number on chip, but ROM is the same as streetsm, which uses a YM3812) */ @@ -2478,7 +2524,7 @@ ROM_START( karatblzbl ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "2.u80", 0x00000, 0x10000, CRC(ca4b171e) SHA1(a05fd81f68759a09be3ec09f38d7c9364dfb6c14) ) - ROM_REGION( 0x20000, "samples", 0 ) // D7759c data + ROM_REGION( 0x20000, "upd", 0 ) // D7759c data ROM_LOAD( "1.u88", 0x00000, 0x20000, CRC(47db1605) SHA1(ae00e633eb98567f04ff97e3d63e04e049d955ec) ) ROM_REGION( 0x80000, "gfx1", 0 ) @@ -2774,7 +2820,7 @@ GAME( 1991, karatblz, 0, karatblz, karatblz, driver_device, 0, ROT0, "V GAME( 1991, karatblza,karatblz, karatblz, karatblz, driver_device, 0, ROT0, "Video System Co.", "Karate Blazers (World, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) GAME( 1991, karatblzu,karatblz, karatblz, karatblz, driver_device, 0, ROT0, "Video System Co.", "Karate Blazers (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) GAME( 1991, karatblzj,karatblz, karatblz, karatblz, driver_device, 0, ROT0, "Video System Co.", "Toushin Blazers (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) -GAME( 1991, karatblzbl,karatblz,karatblzbl,karatblz,driver_device, 0, ROT0, "bootleg", "Karate Blazers (bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_NO_SOUND ) +GAME( 1991, karatblzbl,karatblz,karatblzbl,karatblz,driver_device, 0, ROT0, "bootleg", "Karate Blazers (bootleg with Street Smart sound hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND ) GAME( 1991, turbofrc, 0, turbofrc, turbofrc, driver_device, 0, ROT270, "Video System Co.", "Turbo Force (old revision)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // there's also an undumped Turbo Force (new revision). Most notable thing in there is the points value of the rocks in level 6 (5.000 versus 500). diff --git a/src/mame/drivers/alg.cpp b/src/mame/drivers/alg.cpp index d580cabd040..bf1ceeebc50 100644 --- a/src/mame/drivers/alg.cpp +++ b/src/mame/drivers/alg.cpp @@ -408,7 +408,7 @@ ROM_START( maddoga ) ROM_LOAD16_BYTE( "maddog_02.dat", 0x000001, 0x10000, CRC(f64014ec) SHA1(d343a2cb5d8992153b8c916f39b11d3db736543d)) DISK_REGION( "laserdisc" ) - DISK_IMAGE_READONLY( "maddog", 0, NO_DUMP ) + DISK_IMAGE_READONLY( "maddoga", 0, SHA1(a05ef13979882e0964d030169789ac4f58db10d0) ) ROM_END diff --git a/src/mame/drivers/amspdwy.cpp b/src/mame/drivers/amspdwy.cpp index 9a846b1dc95..5609c40ad8a 100644 --- a/src/mame/drivers/amspdwy.cpp +++ b/src/mame/drivers/amspdwy.cpp @@ -71,7 +71,7 @@ READ8_MEMBER(amspdwy_state::amspdwy_sound_r) WRITE8_MEMBER(amspdwy_state::amspdwy_sound_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -109,7 +109,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( amspdwy_sound_map, AS_PROGRAM, 8, amspdwy_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM // AM_RANGE(0x8000, 0x8000) AM_WRITENOP // ? writes 0 at start - AM_RANGE(0x9000, 0x9000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x9000, 0x9000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0xc000, 0xdfff) AM_RAM AM_RANGE(0xffff, 0xffff) AM_READNOP // ??? IY = FFFF at the start ? @@ -277,6 +277,8 @@ static MACHINE_CONFIG_START( amspdwy, amspdwy_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", 3000000) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) diff --git a/src/mame/drivers/angelkds.cpp b/src/mame/drivers/angelkds.cpp index 53175d2cadd..cff59cbc908 100644 --- a/src/mame/drivers/angelkds.cpp +++ b/src/mame/drivers/angelkds.cpp @@ -438,11 +438,6 @@ READ8_MEMBER(angelkds_state::angelkds_sub_sound_r) } -WRITE_LINE_MEMBER(angelkds_state::irqhandler) -{ - m_subcpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - /*** Graphics Decoding all the 8x8 tiles are in one format, the 16x16 sprites in another @@ -555,7 +550,7 @@ static MACHINE_CONFIG_START( angelkds, angelkds_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ym1", YM2203, XTAL_4MHz) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(angelkds_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("sub", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.65) MCFG_SOUND_ROUTE(1, "mono", 0.65) MCFG_SOUND_ROUTE(2, "mono", 0.65) diff --git a/src/mame/drivers/apf.cpp b/src/mame/drivers/apf.cpp index 67cb9b78f0b..039c6bb2175 100644 --- a/src/mame/drivers/apf.cpp +++ b/src/mame/drivers/apf.cpp @@ -308,7 +308,7 @@ WRITE8_MEMBER( apf_state::serial_w) static ADDRESS_MAP_START( apfm1000_map, AS_PROGRAM, 8, apf_state ) AM_RANGE(0x0000, 0x03ff) AM_MIRROR(0x1c00) AM_RAM AM_SHARE("videoram") - AM_RANGE(0x2000, 0x3fff) AM_MIRROR(0x1ffc) AM_DEVREADWRITE("pia0", pia6821_device, read, write) + AM_RANGE(0x2000, 0x2003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE("pia0", pia6821_device, read, write) AM_RANGE(0x4000, 0x4fff) AM_MIRROR(0x1000) AM_ROM AM_REGION("roms", 0) AM_RANGE(0x6800, 0x7fff) AM_NOP // BASIC accesses ROM here too, but this is installed at machine_start AM_RANGE(0x8000, 0x9fff) AM_DEVREAD("cartslot", apf_cart_slot_device, read_rom) @@ -317,7 +317,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( apfimag_map, AS_PROGRAM, 8, apf_state ) AM_IMPORT_FROM(apfm1000_map) - AM_RANGE(0x6000, 0x63ff) AM_MIRROR(0x03fc) AM_DEVREADWRITE("pia1", pia6821_device, read, write) + AM_RANGE(0x6000, 0x6003) AM_MIRROR(0x03fc) AM_DEVREADWRITE("pia1", pia6821_device, read, write) // These need to be confirmed, disk does not work AM_RANGE(0x6400, 0x64ff) AM_READWRITE(serial_r, serial_w) AM_RANGE(0x6500, 0x6503) AM_DEVREADWRITE("fdc", fd1771_t, read, write) diff --git a/src/mame/drivers/apollo.cpp b/src/mame/drivers/apollo.cpp index 01a1d524c2f..741b105ed03 100644 --- a/src/mame/drivers/apollo.cpp +++ b/src/mame/drivers/apollo.cpp @@ -443,8 +443,8 @@ WRITE32_MEMBER(apollo_state::ram_with_parity_w){ // no more than 192 read/write handlers may be used // see table_assign_handler in memory.c if (parity_error_handler_install_counter < 40) { - //memory_install_read32_handler(space, ram_base_address+offset*4, ram_base_address+offset*4+3, 0xffffffff, 0, ram_with_parity_r); - space.install_read_handler(ram_base_address+offset*4, ram_base_address+offset*4+3, 0xffffffff,0,read32_delegate(FUNC(apollo_state::ram_with_parity_r),this)); + //memory_install_read32_handler(space, ram_base_address+offset*4, ram_base_address+offset*4+3, ram_with_parity_r); + space.install_read_handler(ram_base_address+offset*4, ram_base_address+offset*4+3, read32_delegate(FUNC(apollo_state::ram_with_parity_r),this)); parity_error_handler_is_installed = 1; parity_error_handler_install_counter++; } @@ -455,8 +455,8 @@ WRITE32_MEMBER(apollo_state::ram_with_parity_w){ // uninstall not supported, reinstall previous read handler instead - // memory_install_rom(space, ram_base_address, ram_end_address, 0xffffffff, 0, messram_ptr.v); - space.install_rom(ram_base_address,ram_end_address,0xffffffff,0,&m_messram_ptr[0]); + // memory_install_rom(space, ram_base_address, ram_end_address, messram_ptr.v); + space.install_rom(ram_base_address,ram_end_address,&m_messram_ptr[0]); parity_error_handler_is_installed = 0; parity_error_byte_mask = 0; @@ -950,8 +950,8 @@ void apollo_state::machine_start(){ MACHINE_START_CALL_MEMBER(apollo); // install nop handlers for unmapped ISA bus addresses - m_isa->install16_device(0, ATBUS_IO_END, 0, 0, read16_delegate(FUNC(apollo_state::apollo_atbus_unmap_io_r), this), write16_delegate(FUNC(apollo_state::apollo_atbus_unmap_io_w), this)); - m_isa->install_memory(0, ATBUS_MEMORY_END, 0, 0, read8_delegate(FUNC(apollo_state::apollo_atbus_unmap_r), this), write8_delegate(FUNC(apollo_state::apollo_atbus_unmap_w), this)); + m_isa->install16_device(0, ATBUS_IO_END, read16_delegate(FUNC(apollo_state::apollo_atbus_unmap_io_r), this), write16_delegate(FUNC(apollo_state::apollo_atbus_unmap_io_w), this)); + m_isa->install_memory(0, ATBUS_MEMORY_END, read8_delegate(FUNC(apollo_state::apollo_atbus_unmap_r), this), write8_delegate(FUNC(apollo_state::apollo_atbus_unmap_w), this)); } /*************************************************************************** diff --git a/src/mame/drivers/apricot.cpp b/src/mame/drivers/apricot.cpp index 946fa1d15fb..6425fcde01e 100644 --- a/src/mame/drivers/apricot.cpp +++ b/src/mame/drivers/apricot.cpp @@ -346,7 +346,7 @@ WRITE_LINE_MEMBER( apricot_state::i8086_lock_w ) static ADDRESS_MAP_START( apricot_mem, AS_PROGRAM, 16, apricot_state ) AM_RANGE(0x00000, 0x3ffff) AM_RAMBANK("ram") AM_RANGE(0xf0000, 0xf0fff) AM_MIRROR(0x7000) AM_RAM AM_SHARE("screen_buffer") - AM_RANGE(0xfc000, 0xfffff) AM_MIRROR(0x4000) AM_ROM AM_REGION("bootstrap", 0) + AM_RANGE(0xf8000, 0xfbfff) AM_MIRROR(0x4000) AM_ROM AM_REGION("bootstrap", 0) ADDRESS_MAP_END static ADDRESS_MAP_START( apricot_io, AS_IO, 16, apricot_state ) diff --git a/src/mame/drivers/aquarius.cpp b/src/mame/drivers/aquarius.cpp index ecf84ec762f..6d491ffe290 100644 --- a/src/mame/drivers/aquarius.cpp +++ b/src/mame/drivers/aquarius.cpp @@ -219,7 +219,7 @@ static ADDRESS_MAP_START( aquarius_io, AS_IO, 8, aquarius_state ) AM_RANGE(0xfc, 0xfc) AM_MIRROR(0xff00) AM_READWRITE(cassette_r, cassette_w) AM_RANGE(0xfd, 0xfd) AM_MIRROR(0xff00) AM_READWRITE(vsync_r, mapper_w) AM_RANGE(0xfe, 0xfe) AM_MIRROR(0xff00) AM_READWRITE(printer_r, printer_w) - AM_RANGE(0xff, 0xff) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_READWRITE(keyboard_r, scrambler_w) + AM_RANGE(0xff, 0xff) AM_SELECT(0xff00) AM_READWRITE(keyboard_r, scrambler_w) ADDRESS_MAP_END diff --git a/src/mame/drivers/aristmk5.cpp b/src/mame/drivers/aristmk5.cpp index 58ee4af5364..afcf9106e49 100644 --- a/src/mame/drivers/aristmk5.cpp +++ b/src/mame/drivers/aristmk5.cpp @@ -47,7 +47,7 @@ goldprmd: checks if a "keyboard IRQ" fires (IRQ status B bit 6), it seems a serial port with data on it, returns an External Video Crystal Error (bp 3400278) - dmdtouch: + dimtouch: bp 3400640: checks 2MByte DRAM - writes from 0x1000 to 0x100000, with 0x400 bytes index increment and 0xfb data increment - writes from 0x100000 to 0x200000, with 0x400 bytes index increment and 0xfb data increment @@ -655,132 +655,7 @@ ROM_START( aristmk5 ) ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -ROM_START( reelrock ) - ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "0100779v.u7", 0x000000, 0x80000, CRC(b60af34f) SHA1(1143380b765db234b3871c0fe04736472fde7de4) ) - ROM_LOAD32_WORD( "0100779v.u11", 0x000002, 0x80000, CRC(57e341d0) SHA1(9b0d50763bb74ca5fe404c9cd526633721cf6677) ) - ROM_LOAD32_WORD( "0100779v.u8", 0x100000, 0x80000, CRC(57eec667) SHA1(5f3888d75f48b6148f451d7ebb7f99e1a0939f3c) ) - ROM_LOAD32_WORD( "0100779v.u12", 0x100002, 0x80000, CRC(4ac20679) SHA1(0ac732ffe6a33806e4a06e87ec875a3e1314e06b) ) - - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) -ROM_END - -ROM_START( indiandr ) - ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "0100845v.u7", 0x000000, 0x80000, CRC(0c924a3e) SHA1(499b4ae601e53173e3ba5f400a40e5ae7bbaa043) ) - ROM_LOAD32_WORD( "0100845v.u11", 0x000002, 0x80000, CRC(e371dc0f) SHA1(a01ab7fb63a19c144f2c465ecdfc042695124bdf) ) - ROM_LOAD32_WORD( "0100845v.u8", 0x100000, 0x80000, CRC(1c6bfb47) SHA1(7f751cb499a6185a0ab64eeec511583ceeee6ee8) ) - ROM_LOAD32_WORD( "0100845v.u12", 0x100002, 0x80000, CRC(4bbe67f6) SHA1(928f88387da66697f1de54f086531f600f80a15e) ) - - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) -ROM_END - -ROM_START( dolphntr ) - ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "0200424v.u7", 0x000000, 0x80000, CRC(5dd88306) SHA1(ee8ec7d123d057e8df9be0e8dadecea7dab7aafd) ) - ROM_LOAD32_WORD( "0200424v.u11", 0x000002, 0x80000, CRC(bcb732ea) SHA1(838300914846c6e740780e5a24b9db7304a8a88d) ) - - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) -ROM_END - -ROM_START( dolphtra ) - ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "0100424v.u7", 0x000000, 0x80000, CRC(657faef7) SHA1(09e1f9d461e855c10cf8b825ef83dd3e7db65b43) ) - ROM_LOAD32_WORD( "0100424v.u11", 0x000002, 0x80000, CRC(65aa46ec) SHA1(3ad4270efbc2e947097d94a3258a544d79a1d599) ) - ROM_LOAD32_WORD( "0100424v.u8", 0x100000, 0x80000, CRC(e77868ad) SHA1(3345da120075bc0da47bac0a4840790693382620) ) - ROM_LOAD32_WORD( "0100424v.u12", 0x100002, 0x80000, CRC(6abd9309) SHA1(c405a13f5bfe447c1ab20d92e140e4fb145920d4) ) - - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) -ROM_END - -ROM_START( qotn ) - ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "0200439v.u7", 0x000000, 0x80000, CRC(d476a893) SHA1(186d6fb1830c33976f2d3c96e4f045ece885dc63) ) - ROM_LOAD32_WORD( "0200439v.u11", 0x000002, 0x80000, CRC(8b0d7205) SHA1(ffa03f1c9332a1a7443eb91b0ded56e7cd9e3cee) ) - ROM_LOAD32_WORD( "0200439v.u8", 0x100000, 0x80000, CRC(9b996ef1) SHA1(72489e9a0ee5c34f7cad3d121bcd08e09ef72360) ) - ROM_LOAD32_WORD( "0200439v.u12", 0x100002, 0x80000, CRC(2a0f7feb) SHA1(27c89dadf759e6c892121650758c44ec50990cb6) ) - - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) -ROM_END - -// MV4091 - 10 Credit Multiplier / 9 Line Multiline. -// QUEEN OF THE NILE - NSW/ACT B - 13/05/97. -// Marked as GHG409102 -// All devices are 27c4002 instead of 27c4096. -// Even when it's a NSW/ACT, the program seems to be for US-Export platforms... -ROM_START( qotna ) - ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "mv4091_qotn.u7", 0x000000, 0x80000, CRC(a00ab2cf) SHA1(eb3120fe4b1d0554c224c7646e727e86fd35975e) ) - ROM_LOAD32_WORD( "mv4091_qotn.u11", 0x000002, 0x80000, CRC(c4a35337) SHA1(d469ed154caed1f0a4cf89e67d852924c95172ed) ) - ROM_LOAD32_WORD( "mv4091_qotn.u8", 0x100000, 0x80000, CRC(16a629e1) SHA1(0dee11a2f1b2068a86b3e0b6c01d115555a657c9) ) - ROM_LOAD32_WORD( "mv4091_qotn.u12", 0x100002, 0x80000, CRC(7871a846) SHA1(ac1d741092afda842e1864f1a7a14137a9ee46d9) ) - - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) -ROM_END - -ROM_START( swthrt2v ) - ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "01j01986.u7", 0x000000, 0x80000, CRC(f51b2faa) SHA1(dbcfdbee92af5f89a8a2611bbc687ee0cc907642) ) - ROM_LOAD32_WORD( "01j01986.u11", 0x000002, 0x80000, CRC(bd7ead91) SHA1(9f775428a4aa0b0a8ee17aed9be620edc2020c5e) ) - - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) -ROM_END - -ROM_START( enchfrst ) - ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "0400122v.u7", 0x000000, 0x80000, CRC(b5829b27) SHA1(f6f84c8dc524dcee95e37b93ead9090903bdca4f) ) - ROM_LOAD32_WORD( "0400122v.u11", 0x000002, 0x80000, CRC(7a97adc8) SHA1(b52f7fdc7edf9ad92351154c01b8003c0576ed94) ) - - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) -ROM_END - -ROM_START( margmgc ) - ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "01j00101.u7", 0x000000, 0x80000, CRC(eee7ebaf) SHA1(bad0c08578877f84325c07d51c6ed76c40b70720) ) - ROM_LOAD32_WORD( "01j00101.u11", 0x000002, 0x80000, CRC(4901a166) SHA1(8afe6f08b4ac5c17744dff73939c4bc93124fdf1) ) - ROM_LOAD32_WORD( "01j00101.u8", 0x100000, 0x80000, CRC(b0d78efe) SHA1(bc8b345290f4d31c6553f1e2700bc8324b4eeeac) ) - ROM_LOAD32_WORD( "01j00101.u12", 0x100002, 0x80000, CRC(90ff59a8) SHA1(c9e342db2b5e8c3f45efa8496bc369385046e920) ) - ROM_LOAD32_WORD( "01j00101.u9", 0x200000, 0x80000, CRC(1f0ca910) SHA1(be7a2f395eae09a29faf99ba34551fbc38f20fdb) ) - ROM_LOAD32_WORD( "01j00101.u13", 0x200002, 0x80000, CRC(3f702945) SHA1(a6c9a848d059c1e564fdc5a65bf8c9600853edfa) ) - - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) -ROM_END // 0200751V - 10 Credit Multiplier / 20 Line Multiline. // ADONIS - NSW/ACT A - 25/05/98 Revision: 10 602/9. @@ -792,9 +667,7 @@ ROM_START( adonis ) ROM_LOAD32_WORD( "0200751v.u12", 0x100002, 0x80000, CRC(443a7b6d) SHA1(c19a1c50fb8774826a1e12adacba8bbfce320891) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_REGION( 0x100, "eeproms", 0 ) @@ -809,6 +682,7 @@ ROM_START( adonis ) ROM_LOAD( "gal20v8b.u65", 0x0000, 0x0001, NO_DUMP ) /* 28-Lead PLCC package. Unable to read */ ROM_END + // 0100751V - 10 Credit Multiplier / 20 Line Multiline. // ADONIS - NSW/ACT A - 25/05/98 Revision: 9 602/9. ROM_START( adonisa ) @@ -819,9 +693,7 @@ ROM_START( adonisa ) ROM_LOAD32_WORD( "0100751v.u12", 0x100002, 0x80000, CRC(77090858) SHA1(76ebc15b26f378ac95276f0aa26d077e3646a6f1) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_REGION( 0x100, "eeproms", 0 ) @@ -836,1349 +708,1600 @@ ROM_START( adonisa ) ROM_LOAD( "gal20v8b.u65", 0x0000, 0x0001, NO_DUMP ) /* 28-Lead PLCC package. Unable to read */ ROM_END -// 630 - 10 Credit Multiplier / 9 Line Multiline. -// The Chariot Challenge - NSW/ACT - A - 10/08/98. -// 04J00714 -ROM_START( chariotc ) + +// MV4124/1 - 5,10,25,50 Credit Multiplier / 20 Line Multiline. +// Adonis [Reel Game] - Export B - 31/07/01. +// Marked as BHG1508. +ROM_START( adonisu ) + ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "04j00714_chariot_challenge.u7", 0x000000, 0x80000, CRC(2f3a1af7) SHA1(e1448116a81687cb79dd380dfbc8decf1f83e649) ) - ROM_LOAD32_WORD( "04j00714_chariot_challenge.u11", 0x000002, 0x80000, CRC(ef4f49e8) SHA1(8ff21f679a55cdfebcf22c109dfd3b41773293bd) ) - ROM_LOAD32_WORD( "04j00714_chariot_challenge.u8", 0x100000, 0x80000, CRC(fa24cfde) SHA1(1725c38a8a15915d8aa8e59afef9ce1d6e8d01c5) ) - ROM_LOAD32_WORD( "04j00714_chariot_challenge.u12", 0x100002, 0x80000, CRC(b8d4a5ec) SHA1(097e44cdb30b9aafd7f5358c8f0cdd130ec0615e) ) + ROM_LOAD32_WORD( "bhg1508.u7", 0x000000, 0x80000, CRC(ed6254d7) SHA1(d2b790fdd7f5fc7b78fcfc4c96d0fc272ccf8da6) ) + ROM_LOAD32_WORD( "bhg1508.u11", 0x000002, 0x80000, CRC(1f629286) SHA1(bce380a6a76c77bc790436bd6f94474a1db0c231) ) + ROM_LOAD32_WORD( "bhg1508.u8", 0x100000, 0x80000, CRC(b756c96d) SHA1(494df20090d415e83d599023203c13273e7925ad) ) + ROM_LOAD32_WORD( "bhg1508.u12", 0x100002, 0x80000, CRC(1d3b6b8f) SHA1(1ddcfd7323cc7e79d3e39d913fdb5cf5cd53d56d) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -ROM_START( wtiger ) + +ROM_START( adonisce ) + ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "0200954v.u7", 0x000000, 0x80000, CRC(752e54c5) SHA1(9317544a7cf2d9bf29347d31fe72331fc3d018ef) ) - ROM_LOAD32_WORD( "0200954v.u11", 0x000002, 0x80000, CRC(38e888b1) SHA1(acc857eb2be19140bbb58d70583e08f24807b9f2) ) + ROM_LOAD32_WORD("0201005v.u11", 0x0000002, 0x0080000, CRC(309b0b55) SHA1(669568031d305b29395345a26a5d004d83881433) ) + ROM_LOAD32_WORD("0201005v.u12", 0x0100002, 0x0080000, CRC(8b675dff) SHA1(275579d21be51e6ca01be7c57018e142d1d40875) ) + ROM_LOAD32_WORD("0201005v.u13", 0x0200002, 0x0080000, CRC(e005a7e8) SHA1(cbb313f5d1d04c5a441b3f92b7a90a281ddb4885) ) + ROM_LOAD32_WORD("0201005v.u7", 0x0000000, 0x0080000, CRC(32149323) SHA1(abfc6a8518a39528db3700c2cb558e925ceeda6d) ) + ROM_LOAD32_WORD("0201005v.u8", 0x0100000, 0x0080000, CRC(e9185e3c) SHA1(99609a152a55246d0f5377f943deec47e68fb9fc) ) + ROM_LOAD32_WORD("0201005v.u9", 0x0200000, 0x0080000, CRC(c2e973e7) SHA1(e89bdaa56b0c3c7bd77c8141421f76be9ff2e71b) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -/****************** Touchscreen games and New Zealand games ******************/ -ROM_START( dmdtouch ) +ROM_START( baddog ) + ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "0400433v.u7", 0x000000, 0x80000, CRC(71b19365) SHA1(5a8ba1806af544d33e9acbcbbc0555805b4074e6) ) - ROM_LOAD32_WORD( "0400433v.u11", 0x000002, 0x80000, CRC(3d836342) SHA1(b015a4ba998b39ed86cdb6247c9c7f1365641b59) ) - ROM_LOAD32_WORD( "0400433v.u8", 0x100000, 0x80000, CRC(971bbf63) SHA1(082f81115209c7089c76fb207248da3c347a080b) ) - ROM_LOAD32_WORD( "0400433v.u12", 0x100002, 0x80000, CRC(9e0d08e2) SHA1(38b10f7c37f1cefe9271549073dc0a4fed409aec) ) + ROM_LOAD32_WORD("0200428v.u7", 0x0000000, 0x0080000, CRC(25aa8109) SHA1(cf4521b3d447812d2d9dbfdab9fe0cec71cdeb2e) ) + ROM_LOAD32_WORD("0200428v.u11", 0x0000002, 0x0080000, CRC(774ff977) SHA1(5ce1aa8b7598b4bc8e5fa44de1c03b5f2851f5de) ) + ROM_LOAD32_WORD("0200428v.u8", 0x0100000, 0x0080000, CRC(e52a279a) SHA1(4a3a080d840d8a894ec0ba0250a566831377f0f8) ) + ROM_LOAD32_WORD("0200428v.u12", 0x0100002, 0x0080000, CRC(562aa123) SHA1(825a2d23321b636a3ff2565b2b72df3b97bd0ec8) ) + ROM_LOAD32_WORD("0200428v.u9", 0x0200000, 0x0080000, CRC(66d5a7f7) SHA1(1a1f845a97677c43ff1090231434ae9d3d36ab4c) ) + ROM_LOAD32_WORD("0200428v.u13", 0x0200002, 0x0080000, CRC(883b2ec3) SHA1(5b431d8c9c8eabca65ab22dcf2bdb22d49445bb1) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASEFF ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -ROM_START( geishanz ) + +ROM_START( blackpnt ) + ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "0101408v.u7", 0x000000, 0x80000, CRC(ebdde248) SHA1(83f4f4deb5c6f5b33ae066d50e043a24cb0cbfe0) ) - ROM_LOAD32_WORD( "0101408v.u11", 0x000002, 0x80000, CRC(2f9e7cd4) SHA1(e9498879c9ca66740856c00fda0416f5d9f7c823) ) - ROM_LOAD32_WORD( "0101408v.u8", 0x100000, 0x80000, CRC(87e41b1b) SHA1(029687aeaed701e0f4b8da9d1d60a5a0a9445518) ) - ROM_LOAD32_WORD( "0101408v.u12", 0x100002, 0x80000, CRC(255f2368) SHA1(eb955452e1ed8d9d4f30f3372d7321f01d3654d3) ) - ROM_LOAD32_WORD( "0101408v.u9", 0x200000, 0x80000, CRC(5f161953) SHA1(d07353d006811813b94cb022857f49c4906fd87b) ) - ROM_LOAD32_WORD( "0101408v.u13", 0x200002, 0x80000, CRC(5ef6323e) SHA1(82a720d814ca06c6d286c59bbf325d9a1034375a) ) + ROM_LOAD32_WORD("0200818v.u11", 0x0000002, 0x0080000, CRC(de3358d3) SHA1(4f290940d8af9fe8d404802d5cecfd2d098eff12) ) + ROM_LOAD32_WORD("0200818v.u12", 0x0100002, 0x0080000, CRC(bb2bf7bb) SHA1(f88208238a69fc79e33af17f39e25cd2857d7172) ) + ROM_LOAD32_WORD("0200818v.u7", 0x0000000, 0x0080000, CRC(eed76145) SHA1(6a40a6ba2ce320a37b086dc4916c92c8e38c065e) ) + ROM_LOAD32_WORD("0200818v.u8", 0x0100000, 0x0080000, CRC(58ddfb50) SHA1(c2152e65fa119136b7944b69e650310db78e62a8) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -/*********************** US and Export games (requires set chips) ***********************/ -// 559/2 - 10 Credit Multiplier / 9 Line Multiline. -// Mine, Mine, Mine - Export E - 14/02/96. -// All devices are 27c4002 instead of 27c4096. -ROM_START( minemine ) +ROM_START( bootsctn ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "mine_export.u7", 0x000000, 0x80000, CRC(41bc3714) SHA1(5a8f7d24a6a697524af7997dcedd214fcaf48768) ) - ROM_LOAD32_WORD( "mine_export.u11", 0x000002, 0x80000, CRC(75803b10) SHA1(2ff3d966da2992ddcc7e229d979cc1ee623b4900) ) - ROM_LOAD32_WORD( "mine_export.u8", 0x100000, 0x80000, CRC(0a3e2baf) SHA1(b9ab989cf383cd6ea0aa1ead137558a1a6f5901d) ) - ROM_LOAD32_WORD( "mine_export.u12", 0x100002, 0x80000, CRC(26c01532) SHA1(ec68ad44b703609c7bc27275f8d9250a16d9067c) ) + ROM_LOAD32_WORD("0100812v.u10", 0x0300000, 0x0080000, CRC(b574c12d) SHA1(3b1d1d00ef3eae23493e2b0381ab80490af510d4) ) + ROM_LOAD32_WORD("0100812v.u11", 0x0000002, 0x0080000, CRC(df066d27) SHA1(310422c78e93ce9f1f58b4a58a59bc2eba5c502a) ) + ROM_LOAD32_WORD("0100812v.u12", 0x0100002, 0x0080000, CRC(87ddc7ef) SHA1(91473d8fd266a909fa8d4ec3df3a61861c6e9f4c) ) + ROM_LOAD32_WORD("0100812v.u13", 0x0200002, 0x0080000, CRC(fca82ee7) SHA1(bb70f2e04047a58b697dca536b95f9bbcc295a8a) ) + ROM_LOAD32_WORD("0100812v.u14", 0x0300002, 0x0080000, CRC(75b9b89e) SHA1(08d487b3722f2ea5d2d18c78f571a44c78616dbe) ) + ROM_LOAD32_WORD("0100812v.u7", 0x0000000, 0x0080000, CRC(f8e12462) SHA1(82a25757b2146204b86e557b8f1c45280e0668a8) ) + ROM_LOAD32_WORD("0100812v.u8", 0x0100000, 0x0080000, CRC(08e8de8d) SHA1(913d3e51821d8885affd2750c18d1000629b79d9) ) + ROM_LOAD32_WORD("0100812v.u9", 0x0200000, 0x0080000, CRC(a1ca5f2b) SHA1(c8fc6aff0c3819370339143966ec76910e40c671) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// 602/1 - 10 Credit Multiplier / 9 Line Multiline. -// Dolphin Treasure - Export B - 06/12/96. + +// MV4098 - 10 Credit Multiplier / 9 Line Multiline. +// BOOT SCOOTIN' - Export A - 25/08/99. // All devices are 27c4002 instead of 27c4096. -ROM_START( dolphtre ) +// Marked as GHG101202 and 92.767% +ROM_START( bootsctnu ) + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD( "ghg101202.u7", 0x000000, 0x80000, CRC(ca26f31e) SHA1(e8da31cc8d12bf8a28f1ca4d796259ae9010f8af) ) // 92.767% + ROM_LOAD32_WORD( "ghg101202.u11", 0x000002, 0x80000, CRC(61da1767) SHA1(83d4df1060975f03f291b9119c0d2b8debb0fb60) ) // 92.767% + ROM_LOAD32_WORD( "ghg101202.u8", 0x100000, 0x80000, CRC(9ae4d616) SHA1(60d4d36f75685dfe21f914fa4682cd6a64fcfa58) ) // base + ROM_LOAD32_WORD( "ghg101202.u12", 0x100002, 0x80000, CRC(2c50c083) SHA1(ae3b01200d152df9b2966b5308c71e9d1ad43d78) ) // base + ROM_LOAD32_WORD( "ghg101202.u9", 0x200000, 0x80000, CRC(c0a4920d) SHA1(d2c6d259d2e067b6e5ad72a6ef164aac7d72bc5a) ) // base + ROM_LOAD32_WORD( "ghg101202.u13", 0x200002, 0x80000, CRC(55716d82) SHA1(5b9982a49201842e9551a9c763a6babbb47a863e) ) // base + ROM_LOAD32_WORD( "ghg101202.u10", 0x300000, 0x80000, CRC(3ecdf7ee) SHA1(9d658a22da737daafdf6cb0d49009796036d04b1) ) // base + ROM_LOAD32_WORD( "ghg101202.u14", 0x300002, 0x80000, CRC(18934c51) SHA1(f7c9c95c687dbfe89747e7877157fde37bc1119e) ) // base + + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END + + +ROM_START( bumblbug ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "dolphin_treasure_export.u7", 0x000000, 0x80000, CRC(97e3e4d0) SHA1(211b9b9e0f25dfaf9d1dfe1d3d88592522aa6f07) ) - ROM_LOAD32_WORD( "dolphin_treasure_export.u11", 0x000002, 0x80000, CRC(de221eb5) SHA1(0e550e90b7fd5670f3f3a8589239c342ed70dc3d) ) - ROM_LOAD32_WORD( "dolphin_treasure_export.u8", 0x100000, 0x80000, CRC(cb3ca8b6) SHA1(dba8bdaa406c07870f95241466359e39a012a70b) ) - ROM_LOAD32_WORD( "dolphin_treasure_export.u12", 0x100002, 0x80000, CRC(8ee1c2d3) SHA1(e6ecaaac0cb4518ecc0d36532ab532f46e3e628b) ) + ROM_LOAD32_WORD("0200510v.u11", 0x0000002, 0x0080000, CRC(5d888245) SHA1(bbbe61e09bebd5fcb79f060d5caee15100c9a685) ) + ROM_LOAD32_WORD("0200510v.u7", 0x0000000, 0x0080000, CRC(d4cfce73) SHA1(735c385779afe55e521dbfe9ebfdc55fe3346349) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// 603(a) - 3,5,10,25,50 Credit Multiplier / 20 Line Multiline. -// Cash Chameleon 100cm - Export B - 06/12/96. -// Marked as DHG4078. -ROM_START( cashcham ) + +ROM_START( bumblbugql ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "dhg4078_cash_chameleon.u7", 0x000000, 0x80000, CRC(cb407a19) SHA1(d98421d6548e48b413f6dfcab4e240e98fcc9a69) ) - ROM_LOAD32_WORD( "dhg4078_cash_chameleon.u11", 0x000002, 0x80000, CRC(94d73843) SHA1(ab236750c67e7fff3af831f1d03f45c45f280fd1) ) - ROM_LOAD32_WORD( "dhg4078_cash_chameleon.u8", 0x100000, 0x80000, CRC(4cae8a5d) SHA1(3232461afd75ce71f8a2cb4ac7e9a3caeb8aabcd) ) - ROM_LOAD32_WORD( "dhg4078_cash_chameleon.u12", 0x100002, 0x80000, CRC(39e17f0b) SHA1(25a0364fa45e4e78d6c365b0739606e71597bd71) ) + ROM_LOAD32_WORD( "0200456v.u7", 0x000000, 0x80000, CRC(f04dd78b) SHA1(443057fc3e02406d46cf68f95e85e5a0fd8e7b1e) ) + ROM_LOAD32_WORD( "0200456v.u11", 0x000002, 0x80000, CRC(3b50b21b) SHA1(7c20d1bfb82cdd19c046a545ae251e3560b8f00d) ) + ROM_LOAD32_WORD( "0200456v.u8", 0x100000, 0x80000, CRC(da86d682) SHA1(b1aa739215f1f0967d6a03060d9a2f10115c0b03) ) + ROM_LOAD32_WORD( "0200456v.u12", 0x100002, 0x80000, CRC(9f0d7615) SHA1(1453b1476510e1dd68bc14feba72dc59b9dfe676) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// MV4033 - 10 Credit Multiplier / 9 Line Multiline. -// Enchanted Forest - Export B - 10/02/97. -// Marked as 94.97% + +// 593 - 10 Credit Multiplier / 9 Line Multiline. +// Bumble Bugs - Export D - 05/07/97. // All devices are 27c4002 instead of 27c4096. -ROM_START( enchfore ) +// Marked as CHG047903 and 92.691% +ROM_START( bumblbugu ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "jhg041503_enchanted_forest.u7", 0x000000, 0x80000, CRC(cae1fb55) SHA1(386913ddf9be406f46aab06cf3e27c3c38a4d52d) ) // 94.97% - ROM_LOAD32_WORD( "jhg041503_enchanted_forest.u11", 0x000002, 0x80000, CRC(a71b7b3c) SHA1(26c3438398b6a3cc9946a1cd1c92d317a8e2738e) ) // 94.97% - ROM_LOAD32_WORD( "jhg041503_enchanted_forest.u8", 0x100000, 0x80000, CRC(002dec6c) SHA1(fb3f4ce9cd8cd9e0e3133376ed014db83db041c5) ) // base - ROM_LOAD32_WORD( "jhg041503_enchanted_forest.u12", 0x100002, 0x80000, CRC(c968471f) SHA1(9d54a5c396e6f83690db2fcb7ddcc8a47a7dd777) ) // base + ROM_LOAD32_WORD( "chg047903.u7", 0x000000, 0x80000, CRC(ec605a36) SHA1(114e0840cfbd0c64645a5a33065db85462a0ba2d) ) // 92.691% + ROM_LOAD32_WORD( "chg047903.u11", 0x000002, 0x80000, CRC(17b154bd) SHA1(efdf307670a3d74f7980fec2d2197d837d4c26e2) ) // 92.691% + ROM_LOAD32_WORD( "chg047903.u8", 0x100000, 0x80000, CRC(e0c01d01) SHA1(9153129fd348a97da7cccf002e5d03e4b4db9264) ) // base + ROM_LOAD32_WORD( "chg047903.u12", 0x100002, 0x80000, CRC(28700d5d) SHA1(87a583cd487da6cb4c2da5f62297f0e577269fae) ) // base ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// MV4033 - 10 Credit Multiplier / 9 Line Multiline. -// Magic Garden - Export B - 10/02/97. -// Marked as AHG1211 and 88.26% -ROM_START( mgarden ) + +ROM_START( buttdeli ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "ahg1211-99_magic_garden.u7", 0x000000, 0x80000, CRC(4fe50505) SHA1(6cde87a8a6748af792a1fb101829491367bd4487) ) - ROM_LOAD32_WORD( "ahg1211-99_magic_garden.u11", 0x000002, 0x80000, CRC(723ffeee) SHA1(9eab33c9dbf656489914e539a28da5ae289e8df7) ) - ROM_LOAD32_WORD( "ahg1211-99_magic_garden.u8", 0x100000, 0x80000, CRC(a315ca28) SHA1(0309789362a945d592ee2eda912e4fc2e6ea5be6) ) - ROM_LOAD32_WORD( "ahg1211-99_magic_garden.u12", 0x100002, 0x80000, CRC(4b252c2c) SHA1(8be41fb2b8f8d2829c18ea123a02f3e61c136206) ) + ROM_LOAD32_WORD("0200143v.u11", 0x0000002, 0x0080000, CRC(1ddf8732) SHA1(dc09db14c251699fdd46068f18ad6214e8752939) ) + ROM_LOAD32_WORD("0200143v.u12", 0x0100002, 0x0080000, CRC(0d58cf28) SHA1(aa65b7ee88b5bc872008a46e60bd49d9e5eda153) ) + ROM_LOAD32_WORD("0200143v.u7", 0x0000000, 0x0080000, CRC(7f69cdfc) SHA1(1241741d21334df10d60080555824a87eae93db3) ) + ROM_LOAD32_WORD("0200143v.u8", 0x0100000, 0x0080000, CRC(24d8135e) SHA1(1bc69e9927afe0300d15a49ca06ae527774b295a) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -ROM_START( goldprmd ) + +ROM_START( cashcat ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "goldprmd.u7", 0x000000, 0x80000, CRC(2fbed80c) SHA1(fb0d97cb2be96da37c487fc3aef06c6120efdb46) ) - ROM_LOAD32_WORD( "goldprmd.u11", 0x000002, 0x80000, CRC(ec9c183c) SHA1(e405082ee779c4fee103fb7384469c9d6afbc95b) ) - ROM_LOAD32_WORD( "goldprmd.u8", 0x100000, 0x80000, CRC(3cd7d8e5) SHA1(ae83a7c335564c398330d43295997b8ca547c92d) ) - ROM_LOAD32_WORD( "goldprmd.u12", 0x100002, 0x80000, CRC(8bbf45d0) SHA1(f58f28e7cc4ac225197959566d81973b5aa0e836) ) + ROM_LOAD32_WORD("0300863v.u11", 0x0000002, 0x0080000, CRC(e60e8bd1) SHA1(ffaa7be8968047b9ee54a117d273a14cbca41028) ) + ROM_LOAD32_WORD("0300863v.u12", 0x0100002, 0x0080000, CRC(f930fc07) SHA1(cb3fdbd5b87af7b14067f7999740470d3cf434df) ) + ROM_LOAD32_WORD("0300863v.u7", 0x0000000, 0x0080000, CRC(de0f0202) SHA1(994f6c47b1e2e0e133853dc69b189752104486e4) ) + ROM_LOAD32_WORD("0300863v.u8", 0x0100000, 0x0080000, CRC(37d41d35) SHA1(c959b787383d6f91d20e18f37a38a965407a9ff0) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// 602/2 - 10 Credit Multiplier / 20 Line Multiline. -// QUEEN OF THE NILE - NSW/ACT - B - 13/05/97. -// Marked as AHG1206-99, Golden Pyramids, and 87.928% -// Queen of The Nile and Golden Pyramids are -// both the same game with different title. -ROM_START( goldpyra ) + +ROM_START( cashcham ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "ahg1206-99_golden_pyramids.u7", 0x000000, 0x80000, CRC(e6c80f67) SHA1(901cf8f8fd46c1c4a70e1954d2d2d88e7acd07a8) ) - ROM_LOAD32_WORD( "ahg1206-99_golden_pyramids.u11", 0x000002, 0x80000, CRC(3cc221ea) SHA1(a71d16b818110f5b632e996e9f2fcb8be17b2aee) ) - ROM_LOAD32_WORD( "ahg1206-99_golden_pyramids.u8", 0x100000, 0x80000, CRC(df1ffb31) SHA1(1cf9d008b1f8fdb06ba050c97dae79f272c8063c) ) - ROM_LOAD32_WORD( "ahg1206-99_golden_pyramids.u12", 0x100002, 0x80000, CRC(d2c8f786) SHA1(a9efa35c8f2833a2b77f092398ca959d5fe6194e) ) + ROM_LOAD32_WORD("0100438v.u11", 0x0000002, 0x0080000, CRC(64921874) SHA1(5aa6a0d6e29f5e400e275f27b6adfbef595fe83a) ) + ROM_LOAD32_WORD("0100438v.u12", 0x0100002, 0x0080000, CRC(7ae3b5db) SHA1(238698b72f529ac4fb292d08267069d1da01b43b) ) + ROM_LOAD32_WORD("0100438v.u7", 0x0000000, 0x0080000, CRC(c942ef22) SHA1(4f56674f749602ae928832f98a641e680af8989b) ) + ROM_LOAD32_WORD("0100438v.u8", 0x0100000, 0x0080000, CRC(a8868277) SHA1(e199448a0a920219dc15443813061653b94d6d3a) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// 569/8 - 10 Credit Multiplier / 9 Line Multiline. -// Wild Cougar - Export D - 19/05/97. -// All devices are 27c4002 instead of 27c4096. -ROM_START( wldcougr ) + +// 603(a) - 3,5,10,25,50 Credit Multiplier / 20 Line Multiline. +// Cash Chameleon 100cm - Export B - 06/12/96. +// Marked as DHG4078. +ROM_START( cashchamu ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "wild_cougar_export.u7", 0x000000, 0x80000, CRC(7ada053f) SHA1(5102b0b9db505454624750a3fd6db455682538f3) ) - ROM_LOAD32_WORD( "wild_cougar_export.u11", 0x000002, 0x80000, CRC(69a78695) SHA1(1ed89cf38dc85f752449a858cd9558bed235af58) ) - ROM_LOAD32_WORD( "wild_cougar_export.u8", 0x100000, 0x80000, CRC(496b0295) SHA1(237183a192ad9b4bc133014cc83149d4a7062785) ) - ROM_LOAD32_WORD( "wild_cougar_export.u12", 0x100002, 0x80000, CRC(fe2bafdc) SHA1(e8b454db44a532d75b3aff323855340695688f0f) ) + ROM_LOAD32_WORD( "dhg4078-99.u7", 0x000000, 0x80000, CRC(cb407a19) SHA1(d98421d6548e48b413f6dfcab4e240e98fcc9a69) ) + ROM_LOAD32_WORD( "dhg4078-99.u11", 0x000002, 0x80000, CRC(94d73843) SHA1(ab236750c67e7fff3af831f1d03f45c45f280fd1) ) + ROM_LOAD32_WORD( "dhg4078-99.u8", 0x100000, 0x80000, CRC(4cae8a5d) SHA1(3232461afd75ce71f8a2cb4ac7e9a3caeb8aabcd) ) + ROM_LOAD32_WORD( "dhg4078-99.u12", 0x100002, 0x80000, CRC(39e17f0b) SHA1(25a0364fa45e4e78d6c365b0739606e71597bd71) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// 593 - 10 Credit Multiplier / 9 Line Multiline. -// Bumble Bugs - Export D - 05/07/97. -// All devices are 27c4002 instead of 27c4096. -// Marked as CHG029604 and 92.691% -ROM_START( bumblbug ) + +ROM_START( cashcra5 ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "bumble_bugs_export.u7", 0x000000, 0x80000, CRC(ec605a36) SHA1(114e0840cfbd0c64645a5a33065db85462a0ba2d) ) // 92.691% - ROM_LOAD32_WORD( "bumble_bugs_export.u11", 0x000002, 0x80000, CRC(17b154bd) SHA1(efdf307670a3d74f7980fec2d2197d837d4c26e2) ) // 92.691% - ROM_LOAD32_WORD( "bumble_bugs_export.u8", 0x100000, 0x80000, CRC(e0c01d01) SHA1(9153129fd348a97da7cccf002e5d03e4b4db9264) ) // base - ROM_LOAD32_WORD( "bumble_bugs_export.u12", 0x100002, 0x80000, CRC(28700d5d) SHA1(87a583cd487da6cb4c2da5f62297f0e577269fae) ) // base + ROM_LOAD32_WORD("0300467v.u7", 0x0000000, 0x0080000, CRC(b0ff2aae) SHA1(b05667ffe952cae7a6581398552db6e47921090e) ) + ROM_LOAD32_WORD("0300467v.u11", 0x0000002, 0x0080000, CRC(25a18efa) SHA1(0ee4f6cc66322397dbde53af2149f5fb35d788df) ) + ROM_LOAD32_WORD("0300467v.u8", 0x0100000, 0x0080000, CRC(d4e7b4ba) SHA1(147a1ed5cdcbb84466a8024ad7e0778f85374489) ) + ROM_LOAD32_WORD("0300467v.u12", 0x0100002, 0x0080000, CRC(570c7f8a) SHA1(7c9527e0b37970b7960c723727c3c650a48e8125) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END + + +// 630 - 10 Credit Multiplier / 9 Line Multiline. +// The Chariot Challenge - NSW/ACT - A - 10/08/98. +// 04J00714 +ROM_START( chariotc ) + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD( "04j00714.u7", 0x000000, 0x80000, CRC(2f3a1af7) SHA1(e1448116a81687cb79dd380dfbc8decf1f83e649) ) + ROM_LOAD32_WORD( "04j00714.u11", 0x000002, 0x80000, CRC(ef4f49e8) SHA1(8ff21f679a55cdfebcf22c109dfd3b41773293bd) ) + ROM_LOAD32_WORD( "04j00714.u8", 0x100000, 0x80000, CRC(fa24cfde) SHA1(1725c38a8a15915d8aa8e59afef9ce1d6e8d01c5) ) + ROM_LOAD32_WORD( "04j00714.u12", 0x100002, 0x80000, CRC(b8d4a5ec) SHA1(097e44cdb30b9aafd7f5358c8f0cdd130ec0615e) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// 586/7(b) - 10 Credit Multiplier / 9 Line Multiline. -// Penguin Pays - Export B - 14/07/97. -// All devices are 27c4002 instead of 27c4096. -ROM_START( pengpays ) + +ROM_START( chariotca ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "penguin_pays_export.u7", 0x000000, 0x80000, CRC(19d75260) SHA1(798472b1b5d8f5ca99d8bfe57e99a76686f0aa3f) ) - ROM_LOAD32_WORD( "penguin_pays_export.u11", 0x000002, 0x80000, CRC(2b010813) SHA1(a383997308881a3ac35de56fe10e3852fa89fdf6) ) - ROM_LOAD32_WORD( "penguin_pays_export.u8", 0x100000, 0x80000, CRC(6aeaebc8) SHA1(6f70b14e9f4e9940512bd6e89bc9ccbfe1f4a81f) ) - ROM_LOAD32_WORD( "penguin_pays_export.u12", 0x100002, 0x80000, CRC(d959a048) SHA1(92f69090d599f95b48e79213e5b7d486e083d8f4) ) + ROM_LOAD32_WORD("0100787v.u11", 0x0000002, 0x0080000, CRC(bcbf9de9) SHA1(191ce749fe0d29b2783fb78d9338a00d65104daa) ) + ROM_LOAD32_WORD("0100787v.u12", 0x0100002, 0x0080000, CRC(b44cf571) SHA1(04447820e015425493cade5611b3eb2f21e48c2e) ) + ROM_LOAD32_WORD("0100787v.u7", 0x0000000, 0x0080000, CRC(845f9913) SHA1(df6121290b30ff4a9c2d0e690cf8e7797e9a8612) ) + ROM_LOAD32_WORD("0100787v.u8", 0x0100000, 0x0080000, CRC(a3a74ecb) SHA1(52b3a41573a9fa1de05ce01a858e400f80e595b8) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// 577/3 - 10 Credit Multiplier / 9 Line Multiline. -// Tropical Delight - Export D - 24/09/97. -// Marked as PHG0625-02 and 92.25%. -// All devices are 27c4002 instead of 27c4096. -ROM_START( trpdlght ) + +ROM_START( checkma5 ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "phg0625-02_tropical_delight.u7", 0x000000, 0x80000, CRC(3d06765f) SHA1(737d714e4ec48eb6283489f745dd305e7d70dad2) ) // 92.25% - ROM_LOAD32_WORD( "phg0625-02_tropical_delight.u11", 0x000002, 0x80000, CRC(3963a3de) SHA1(fc2b06af3d1eba87407425dc4296a8b602952775) ) // 92.25% - ROM_LOAD32_WORD( "phg0625-02_tropical_delight.u8", 0x100000, 0x80000, CRC(d4858407) SHA1(acf6776f19448648a26aaf53fcb4bc227c546033) ) // base - ROM_LOAD32_WORD( "phg0625-02_tropical_delight.u12", 0x100002, 0x80000, CRC(852e433e) SHA1(17ec568edbabe3ee8649b26f4c5d0f501494f823) ) // base + ROM_LOAD32_WORD("01j00681.u11", 0x0000002, 0x0080000, CRC(5fb7bfb3) SHA1(2ad8b3c4753d19f9e3254ef3f4059951d7a111b4) ) + ROM_LOAD32_WORD("01j00681.u12", 0x0100002, 0x0080000, CRC(b538bcbc) SHA1(cda404f9b16e7e76a33c208f62a5ac9c5e02aac4) ) + ROM_LOAD32_WORD("01j00681.u13", 0x0200002, 0x0080000, CRC(ad12a718) SHA1(0c36729cb8da800668f533f65fcc870f5dfc0f6a) ) + ROM_LOAD32_WORD("01j00681.u7", 0x0000000, 0x0080000, CRC(059b940e) SHA1(f637508dafbd37169429c495a893addbc6d28834) ) + ROM_LOAD32_WORD("01j00681.u8", 0x0100000, 0x0080000, CRC(6912cc4a) SHA1(9469a6a0d2fd39d85655a8c7bc0668752f5f11fa) ) + ROM_LOAD32_WORD("01j00681.u9", 0x0200000, 0x0080000, CRC(53a573f0) SHA1(d51d698dcec273d157319200ad1c215e930b96ce) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// 596 - 10 Credit Multiplier / 9 Line Multiline. (touch) -// Chicken - Export C - 23/02/98. -// Marked as RHG0730, 92.588% and 'touch' -// All devices are 27c4002 instead of 27c4096. -ROM_START( chickena ) + +ROM_START( chickna5 ) + ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "rhg0730_chicken.u7", 0x000000, 0x80000, CRC(ca196b37) SHA1(6b204204c1574439ccea1b6145d867a73bad304f) ) // 92.588% - ROM_LOAD32_WORD( "rhg0730_chicken.u11", 0x000002, 0x80000, CRC(b0d7be28) SHA1(6998dce808bf7970500b9e1ce6efed3940ee2d63) ) // 92.588% - ROM_LOAD32_WORD( "rhg0730_chicken.u8", 0x100000, 0x80000, CRC(80e3e34c) SHA1(3ad73c5fc21c4d9647ea514bf367073bbeb981a9) ) // base - ROM_LOAD32_WORD( "rhg0730_chicken.u12", 0x100002, 0x80000, CRC(63d5ec8e) SHA1(dca76342ecee6843e6fc656aafc8ee2e4d19fd65) ) // base - ROM_LOAD32_WORD( "rhg0730_chicken.u9", 0x200000, 0x80000, CRC(662ff210) SHA1(bbd2410fa2cd67e327981c3b2e16342fb9393401) ) // base - ROM_LOAD32_WORD( "rhg0730_chicken.u13", 0x200002, 0x80000, CRC(c3cef8ae) SHA1(4e65787d61387b511972e514047528495e1de11c) ) // base - ROM_LOAD32_WORD( "rhg0730_chicken.u10", 0x300000, 0x80000, CRC(8b3f7d6b) SHA1(7f1a04556c448976145652b05b690142376764d4) ) // base - ROM_LOAD32_WORD( "rhg0730_chicken.u14", 0x300002, 0x80000, CRC(240f7759) SHA1(1fa5ba0185b027101dae207ec5d28b07d3d73fc2) ) // base + ROM_LOAD32_WORD("0100351v.u11", 0x0000002, 0x0080000, CRC(65423867) SHA1(992bb4f717f79233d1300d248b145f95a627cff2) ) + ROM_LOAD32_WORD("0100351v.u12", 0x0100002, 0x0080000, CRC(77b5d777) SHA1(f03afeaff08c9216e714f1e4bcc50292ba87ace4) ) + ROM_LOAD32_WORD("0100351v.u13", 0x0200002, 0x0080000, CRC(88a1ccae) SHA1(e242f48f99044b4fdf1bf36d8e105df09f94aa50) ) + ROM_LOAD32_WORD("0100351v.u7", 0x0000000, 0x0080000, CRC(be69c21c) SHA1(8b546727b5972f33d077db0a64aa41a7fde6d417) ) + ROM_LOAD32_WORD("0100351v.u8", 0x0100000, 0x0080000, CRC(3161c16f) SHA1(8f2b14ec8ba5c9da80a226d2ce5a7e5256c8cbb4) ) + ROM_LOAD32_WORD("0100351v.u9", 0x0200000, 0x0080000, CRC(5506777b) SHA1(42512577056e1caefbea0e74879780c56787af13) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// MV4061 - 5 Credit Multiplier / 5 Line Multiline. -// Sweethearts II - Export - A - 29/06/98. -// Marked as PHG0742 and 92.252% + +// 596 - 10 Credit Multiplier / 9 Line Multiline. (touch) +// Chicken - Export C - 23/02/98. +// Marked as RHG0730, 92.588% and 'touch' // All devices are 27c4002 instead of 27c4096. -ROM_START( swheart2 ) - ARISTOCRAT_MK5_BIOS +ROM_START( chickna5u ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "phg0742_sweet_heart_2.u7", 0x000000, 0x80000, CRC(d6f83014) SHA1(7c6902d67157a04bdbbfc7c7d8ae1e22befd840f) ) - ROM_LOAD32_WORD( "phg0742_sweet_heart_2.u11", 0x000002, 0x80000, CRC(3fa6e538) SHA1(958461a54e57c4622151bbcde3de8f4ff3f9ec0a) ) - ROM_LOAD32_WORD( "phg0742_sweet_heart_2.u8", 0x100000, 0x80000, CRC(916409f7) SHA1(d5c3cb7afac14a27f4722528a3dac4b4f2d41580) ) - ROM_LOAD32_WORD( "phg0742_sweet_heart_2.u12", 0x100002, 0x80000, CRC(92f92875) SHA1(bdb24974c2bf7bfb772c34a02a20e97df9293c0c) ) + ROM_LOAD32_WORD( "rhg073003.u7", 0x000000, 0x80000, CRC(ca196b37) SHA1(6b204204c1574439ccea1b6145d867a73bad304f) ) // 92.588% + ROM_LOAD32_WORD( "rhg073003.u11", 0x000002, 0x80000, CRC(b0d7be28) SHA1(6998dce808bf7970500b9e1ce6efed3940ee2d63) ) // 92.588% + ROM_LOAD32_WORD( "rhg073003.u8", 0x100000, 0x80000, CRC(80e3e34c) SHA1(3ad73c5fc21c4d9647ea514bf367073bbeb981a9) ) // base + ROM_LOAD32_WORD( "rhg073003.u12", 0x100002, 0x80000, CRC(63d5ec8e) SHA1(dca76342ecee6843e6fc656aafc8ee2e4d19fd65) ) // base + ROM_LOAD32_WORD( "rhg073003.u9", 0x200000, 0x80000, CRC(662ff210) SHA1(bbd2410fa2cd67e327981c3b2e16342fb9393401) ) // base + ROM_LOAD32_WORD( "rhg073003.u13", 0x200002, 0x80000, CRC(c3cef8ae) SHA1(4e65787d61387b511972e514047528495e1de11c) ) // base + ROM_LOAD32_WORD( "rhg073003.u10", 0x300000, 0x80000, CRC(8b3f7d6b) SHA1(7f1a04556c448976145652b05b690142376764d4) ) // base + ROM_LOAD32_WORD( "rhg073003.u14", 0x300002, 0x80000, CRC(240f7759) SHA1(1fa5ba0185b027101dae207ec5d28b07d3d73fc2) ) // base ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// MV4084/1 - 10 Credit Multiplier / 9 Line Multiline. -// THE GAMBLER - Export A - 30/10/98. -// Marked as EHG0916 and 92.268%. -// All devices are 27c4002 instead of 27c4096. -ROM_START( thgamblr ) + +ROM_START( coralrc2 ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "ehg0916_the_gambler.u7", 0x000000, 0x80000, CRC(7524c954) SHA1(0a895d1e2d09a2c873bbbbeb37bc59c25f3c577c) ) // 92.268% - ROM_LOAD32_WORD( "ehg0916_the_gambler.u11", 0x000002, 0x80000, CRC(f29a6932) SHA1(17761218a04d36a599c987b4e13c0e3f46b7793f) ) // 92.268% - ROM_LOAD32_WORD( "ehg0916_the_gambler.u8", 0x100000, 0x80000, CRC(e2221fdf) SHA1(8a7b2d5de68ae66fe1915a6faac6277249e3fb53) ) // base - ROM_LOAD32_WORD( "ehg0916_the_gambler.u12", 0x100002, 0x80000, CRC(ebe957f9) SHA1(539945ec9beafe2c83051208370588fce2334f16) ) // base + ROM_LOAD32_WORD("0100919v.u11", 0x0000002, 0x0080000, CRC(8cd17e90) SHA1(c6d6a29e62ca6e1b278a2e1d1b358e10ca2de4ed) ) + ROM_LOAD32_WORD("0100919v.u12", 0x0100002, 0x0080000, CRC(9ea140b5) SHA1(11f6b9ab60117f236b464c9dbc939dfb8f240359) ) + ROM_LOAD32_WORD("0100919v.u7", 0x0000000, 0x0080000, CRC(02c430c3) SHA1(f4bae1aa5437af1df2a04f700da044bc4fb652b7) ) + ROM_LOAD32_WORD("0100919v.u8", 0x0100000, 0x0080000, CRC(1ee9557c) SHA1(3bee295509d4b0c11ce41a7a20ba91230b7cb4ca) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// MV4098 - 10 Credit Multiplier / 9 Line Multiline. -// BOOT SCOOTIN' - Export A - 25/08/99. -// All devices are 27c4002 instead of 27c4096. -// Marked as GHG1012 and 92.767% -ROM_START( bootsctn ) + +ROM_START( cuckoo ) + ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "ghg1012_boot_scootin.u7", 0x000000, 0x80000, CRC(ca26f31e) SHA1(e8da31cc8d12bf8a28f1ca4d796259ae9010f8af) ) // 92.767% - ROM_LOAD32_WORD( "ghg1012_boot_scootin.u11", 0x000002, 0x80000, CRC(61da1767) SHA1(83d4df1060975f03f291b9119c0d2b8debb0fb60) ) // 92.767% - ROM_LOAD32_WORD( "ghg1012_boot_scootin.u8", 0x100000, 0x80000, CRC(9ae4d616) SHA1(60d4d36f75685dfe21f914fa4682cd6a64fcfa58) ) // base - ROM_LOAD32_WORD( "ghg1012_boot_scootin.u12", 0x100002, 0x80000, CRC(2c50c083) SHA1(ae3b01200d152df9b2966b5308c71e9d1ad43d78) ) // base - ROM_LOAD32_WORD( "ghg1012_boot_scootin.u9", 0x200000, 0x80000, CRC(c0a4920d) SHA1(d2c6d259d2e067b6e5ad72a6ef164aac7d72bc5a) ) // base - ROM_LOAD32_WORD( "ghg1012_boot_scootin.u13", 0x200002, 0x80000, CRC(55716d82) SHA1(5b9982a49201842e9551a9c763a6babbb47a863e) ) // base - ROM_LOAD32_WORD( "ghg1012_boot_scootin.u10", 0x300000, 0x80000, CRC(3ecdf7ee) SHA1(9d658a22da737daafdf6cb0d49009796036d04b1) ) // base - ROM_LOAD32_WORD( "ghg1012_boot_scootin.u14", 0x300002, 0x80000, CRC(18934c51) SHA1(f7c9c95c687dbfe89747e7877157fde37bc1119e) ) // base + ROM_LOAD32_WORD("0200753v.u7", 0x0000000, 0x0080000, CRC(5c7ef84a) SHA1(59563a076ecf391ac1779e0dcd530a1ea158a4e3) ) + ROM_LOAD32_WORD("0200753v.u11", 0x0000002, 0x0080000, CRC(a69c1416) SHA1(7fe57a194bf29346c039dfac1326f3ee5080e630) ) + ROM_LOAD32_WORD("0200753v.u8", 0x0100000, 0x0080000, CRC(a7b4242c) SHA1(4e6961e9b3267d17b93075c41a691a8033a34d90) ) + ROM_LOAD32_WORD("0200753v.u12", 0x0100002, 0x0080000, CRC(cb706eb7) SHA1(cbd6235ca7a29c78ef2cb659d9c21466ed39b360) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END + // MV4104 3,5,10,20,25,50 Credit Multiplier / 9-20 Line Multiline. // CUCKOO - Export C - 02/02/00. // All devices are 27c4002 instead of 27c4096. -ROM_START( cuckoo ) +ROM_START( cuckoou ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "mv4104_cuckoo.u7", 0x000000, 0x80000, CRC(0bd17338) SHA1(b8f467bdf8d76533a2b7d44fe93be414f25a3c31) ) - ROM_LOAD32_WORD( "mv4104_cuckoo.u11", 0x000002, 0x80000, CRC(4c407deb) SHA1(57589e61a376ddff99cd420eb47bf8c902c6a249) ) - ROM_LOAD32_WORD( "mv4104_cuckoo.u8", 0x100000, 0x80000, CRC(33f52052) SHA1(89cbfe588d91244adff4c520fa94962d69ff20bf) ) - ROM_LOAD32_WORD( "mv4104_cuckoo.u12", 0x100002, 0x80000, CRC(00bb7597) SHA1(f4d6b21091e320a82d59477469340633b001ed0d) ) + ROM_LOAD32_WORD( "chg1195.u7", 0x000000, 0x80000, CRC(0bd17338) SHA1(b8f467bdf8d76533a2b7d44fe93be414f25a3c31) ) + ROM_LOAD32_WORD( "chg1195.u11", 0x000002, 0x80000, CRC(4c407deb) SHA1(57589e61a376ddff99cd420eb47bf8c902c6a249) ) + ROM_LOAD32_WORD( "chg1195.u8", 0x100000, 0x80000, CRC(33f52052) SHA1(89cbfe588d91244adff4c520fa94962d69ff20bf) ) + ROM_LOAD32_WORD( "chg1195.u12", 0x100002, 0x80000, CRC(00bb7597) SHA1(f4d6b21091e320a82d59477469340633b001ed0d) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// MV4115 - 5,10,20 Credit Multiplier / 9 Line Multiline. -// Magic Mask [Reel Game] - Export A - 09/05/2000. -ROM_START( magicmsk ) + +ROM_START( dstbloom ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "magicmsk.u7", 0x000000, 0x80000, CRC(17317eb9) SHA1(3ddb8d61f23461c3194af534928164550208bbee) ) - ROM_LOAD32_WORD( "magicmsk.u11", 0x000002, 0x80000, CRC(42af4b3f) SHA1(5d88951f77782ff3861b6550ace076662a0b45aa) ) - ROM_LOAD32_WORD( "magicmsk.u8", 0x100000, 0x80000, CRC(23aefb5a) SHA1(ba4488754794f75f53b9c81b74b6ccd992c64acc) ) - ROM_LOAD32_WORD( "magicmsk.u12", 0x100002, 0x80000, CRC(6829a7bf) SHA1(97eed83763d0ec5e753d6ad194e906b1307c4940) ) + ROM_LOAD32_WORD("0200111v.u11", 0x0000002, 0x0080000, CRC(ed4e8dca) SHA1(1953033e570634cbcf8cd11194c14c57ffc6be53) ) + ROM_LOAD32_WORD("0200111v.u12", 0x0100002, 0x0080000, CRC(0ad41815) SHA1(131efc6ed45d8f44a667bd30380c9e37c64f2c42) ) + ROM_LOAD32_WORD("0200111v.u7", 0x0000000, 0x0080000, CRC(fbfaa3fe) SHA1(3f915261503fc97eb556422e9ccdac81372c04cc) ) + ROM_LOAD32_WORD("0200111v.u8", 0x0100000, 0x0080000, CRC(cc0d567c) SHA1(c4da3d0c0c4420a9f8fbb6403db983b3e27d4b50) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// MV4115 - 5,10,20 Credit Multiplier / 9 Line Multiline. -// Magic Mask [Reel Game] - Export A - 09/05/2000. -// Alternate set with identical description, but way different -// than the parent. All devices are 27c4002 instead of 27c4096. -// -// romcmp magicmsk.zip magicmska.zip -// 4 and 4 files -// magicmsk.u12 mv4115_magic_mask.u12 21.547699% -// magicmsk.u8 mv4115_magic_mask.u8 21.138954% -// magicmsk.u11 mv4115_magic_mask.u11 17.786026% -// magicmsk.u7 mv4115_magic_mask.u7 16.893578% -ROM_START( magicmska ) + +ROM_START( diamdove ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "mv4115_magic_mask.u7", 0x000000, 0x80000, CRC(452a19c9) SHA1(aab1f4ccfc6cdb382f7a0e85491614cc58811a08) ) - ROM_LOAD32_WORD( "mv4115_magic_mask.u11", 0x000002, 0x80000, CRC(c57601f3) SHA1(1616a424b41ad6fea6383a08d5352e8240433374) ) - ROM_LOAD32_WORD( "mv4115_magic_mask.u8", 0x100000, 0x80000, CRC(607d7447) SHA1(064dbfe8b52eebe1be7a41735da3fa01eacd1686) ) - ROM_LOAD32_WORD( "mv4115_magic_mask.u12", 0x100002, 0x80000, CRC(cf4cd569) SHA1(408edcd746587d249c4286f7a99f33ad94214f7c) ) + ROM_LOAD32_WORD("0101018v.u11", 0x0000002, 0x0080000, CRC(ff4c684a) SHA1(6598c24a8717b8e624e387f000c584ec3b10a8cd) ) + ROM_LOAD32_WORD("0101018v.u12", 0x0100002, 0x0080000, CRC(62209e81) SHA1(68383068de2e030467c3f3ac16459ae2f3b2cce6) ) + ROM_LOAD32_WORD("0101018v.u13", 0x0200002, 0x0080000, CRC(952a850f) SHA1(66da391af532f9ef531d10995c96a90eb71cd09a) ) + ROM_LOAD32_WORD("0101018v.u7", 0x0000000, 0x0080000, CRC(2ebb3704) SHA1(42567d873d6ab9221d09e5449fa57b557677d2ab) ) + ROM_LOAD32_WORD("0101018v.u8", 0x0100000, 0x0080000, CRC(daa55b3b) SHA1(7aa96a51a3ea9f96c38d08e486eccc54ca4396a3) ) + ROM_LOAD32_WORD("0101018v.u9", 0x0200000, 0x0080000, CRC(2254f0e9) SHA1(5bccd65e7e616e1f6ed08a0c84862cb13f9f7098) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// US003 - Multi credit / Multi line. -// Margarita Magic [Reel Game] - NSW/ACT - A - 07/07/2000. -// EHG1559 - This is a twenty-line game. -// The playlines are 1, 5, 10, 15 and 20. -// For 20 credit per line the max bet is 400 -ROM_START( marmagic ) + +ROM_START( dimtouch ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "ehg1559_margarita_magic.u7", 0x000000, 0x80000, CRC(eab62e8f) SHA1(b125f9a9dc1c82886490d3807e883a7b4e1453a5) ) - ROM_LOAD32_WORD( "ehg1559_margarita_magic.u11", 0x000002, 0x80000, CRC(0b3c6a11) SHA1(05be4a4d070358600273d5dd4f6b4b37fee47105) ) - ROM_LOAD32_WORD( "ehg1559_margarita_magic.u8", 0x100000, 0x80000, CRC(db05591e) SHA1(8af241bbd4f744c66fb78fdaf739d9c8bc2580c0) ) - ROM_LOAD32_WORD( "ehg1559_margarita_magic.u12", 0x100002, 0x80000, CRC(b4458167) SHA1(d1e2040910ad748e58eaccd18ab0569b794b4d97) ) - ROM_LOAD32_WORD( "ehg1559_margarita_magic.u9", 0x200000, 0x80000, CRC(fc69523a) SHA1(c01b3c905b01671307bc5439d00f4454d0286b20) ) - ROM_LOAD32_WORD( "ehg1559_margarita_magic.u13", 0x200002, 0x80000, CRC(0cd174df) SHA1(707168fc3bef6c200ae6455c170b7c3e73502965) ) + ROM_LOAD32_WORD( "0400433v.u7", 0x000000, 0x80000, CRC(71b19365) SHA1(5a8ba1806af544d33e9acbcbbc0555805b4074e6) ) + ROM_LOAD32_WORD( "0400433v.u11", 0x000002, 0x80000, CRC(3d836342) SHA1(b015a4ba998b39ed86cdb6247c9c7f1365641b59) ) + ROM_LOAD32_WORD( "0400433v.u8", 0x100000, 0x80000, CRC(971bbf63) SHA1(082f81115209c7089c76fb207248da3c347a080b) ) + ROM_LOAD32_WORD( "0400433v.u12", 0x100002, 0x80000, CRC(9e0d08e2) SHA1(38b10f7c37f1cefe9271549073dc0a4fed409aec) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASEFF ) ROM_END -// MV4124/1 - 5,10,25,50 Credit Multiplier / 20 Line Multiline. -// Adonis [Reel Game] - Export B - 31/07/01. -// Marked as BHG1284. -ROM_START( adonise ) - ARISTOCRAT_MK5_BIOS + +ROM_START( dolphntr ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "bhg1284_mv4124_adonis.u7", 0x000000, 0x80000, CRC(ed6254d7) SHA1(d2b790fdd7f5fc7b78fcfc4c96d0fc272ccf8da6) ) - ROM_LOAD32_WORD( "bhg1284_mv4124_adonis.u11", 0x000002, 0x80000, CRC(1f629286) SHA1(bce380a6a76c77bc790436bd6f94474a1db0c231) ) - ROM_LOAD32_WORD( "bhg1284_mv4124_adonis.u8", 0x100000, 0x80000, CRC(b756c96d) SHA1(494df20090d415e83d599023203c13273e7925ad) ) - ROM_LOAD32_WORD( "bhg1284_mv4124_adonis.u12", 0x100002, 0x80000, CRC(1d3b6b8f) SHA1(1ddcfd7323cc7e79d3e39d913fdb5cf5cd53d56d) ) + ROM_LOAD32_WORD( "0200424v.u7", 0x000000, 0x80000, CRC(5dd88306) SHA1(ee8ec7d123d057e8df9be0e8dadecea7dab7aafd) ) + ROM_LOAD32_WORD( "0200424v.u11", 0x000002, 0x80000, CRC(bcb732ea) SHA1(838300914846c6e740780e5a24b9db7304a8a88d) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// MV4137 - 5,10,25,50 Credit Multiplier / 20 Line Multiline. -// Koala Mint [Reel Game] - Export A - 12/09/01. -// Marked as CHG1573. -ROM_START( koalamnt ) + +ROM_START( dolphntra ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "chg1573_koala_mint.u7", 0x000000, 0x80000, CRC(fa690af0) SHA1(9e1e5171e9da602c025bfb2aefad397a537794cb) ) - ROM_LOAD32_WORD( "chg1573_koala_mint.u11", 0x000002, 0x80000, CRC(c33bed43) SHA1(2c8f35ca08b4d6ac56de5ab7c2515f34e04cf6c8) ) - ROM_LOAD32_WORD( "chg1573_koala_mint.u8", 0x100000, 0x80000, CRC(4aeb2e54) SHA1(74002cd12d93352310a864a2ed434c7f43d26534) ) // base - ROM_LOAD32_WORD( "chg1573_koala_mint.u12", 0x100002, 0x80000, CRC(2bf5786f) SHA1(f0693bbd2e6d2e110535205a1ad0b73a0ebd2f53) ) // base - ROM_LOAD32_WORD( "chg1573_koala_mint.u9", 0x200000, 0x80000, CRC(1a2650e7) SHA1(55a8604ef19836880f53d44a035a49b009acbb5a) ) // base - ROM_LOAD32_WORD( "chg1573_koala_mint.u13", 0x200002, 0x80000, CRC(51c78f63) SHA1(ef51e45d67a5684c35150747c186493258cb4549) ) // base - ROM_LOAD32_WORD( "chg1573_koala_mint.u10", 0x300000, 0x80000, CRC(a0fb61fe) SHA1(2a77ed082bc6829905f83a3cb3c4c120fa4ba0f9) ) // base - ROM_LOAD32_WORD( "chg1573_koala_mint.u14", 0x300002, 0x80000, CRC(5e4776e9) SHA1(d44851cbfaa054cd5675a841a3089a8f4fdc8421) ) // base + ROM_LOAD32_WORD( "0100424v.u7", 0x000000, 0x80000, CRC(657faef7) SHA1(09e1f9d461e855c10cf8b825ef83dd3e7db65b43) ) + ROM_LOAD32_WORD( "0100424v.u11", 0x000002, 0x80000, CRC(65aa46ec) SHA1(3ad4270efbc2e947097d94a3258a544d79a1d599) ) + ROM_LOAD32_WORD( "0100424v.u8", 0x100000, 0x80000, CRC(e77868ad) SHA1(3345da120075bc0da47bac0a4840790693382620) ) + ROM_LOAD32_WORD( "0100424v.u12", 0x100002, 0x80000, CRC(6abd9309) SHA1(c405a13f5bfe447c1ab20d92e140e4fb145920d4) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// MV4115/3 - 20 Line Multiline / 3,5,10,20,25,50 Credit Multiplier. -// Party Gras - Export B - 06/02/2001. -// Marked as BHG1284 and 'touch'. -ROM_START( prtygras ) + +ROM_START( dolphntrb ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "bhg1284_party_grass.u7", 0x000000, 0x80000, CRC(02ed0631) SHA1(ae2c89c876a030d325ec94490d293deba772630e) ) - ROM_LOAD32_WORD( "bhg1284_party_grass.u11", 0x000002, 0x80000, CRC(7ac80cd9) SHA1(70e910784a1e1ea8820005082e76223a85a3c346) ) - ROM_LOAD32_WORD( "bhg1284_party_grass.u8", 0x100000, 0x80000, CRC(28774b9a) SHA1(ebdd738a73ffa7c5238640f4d7956751f7bb6243) ) - ROM_LOAD32_WORD( "bhg1284_party_grass.u12", 0x100002, 0x80000, CRC(942835c1) SHA1(fefc509311716559ac6b836a56b2c981907d499b) ) + ROM_LOAD32_WORD("0100388v.u11", 0x0000002, 0x0080000, CRC(8e391b67) SHA1(4b7a7295d3a96e26bf1958eb30af0b6582a5e5a6) ) + ROM_LOAD32_WORD("0100388v.u12", 0x0100002, 0x0080000, CRC(1a1fbbcf) SHA1(6e3772dcccd9b5958bec3bfac9af22b2eabca32e) ) + ROM_LOAD32_WORD("0100388v.u7", 0x0000000, 0x0080000, CRC(7463b5f6) SHA1(89e5cf8143d0b4ed54aa2c9bd8840f0aba19322e) ) + ROM_LOAD32_WORD("0100388v.u8", 0x0100000, 0x0080000, CRC(195bec0f) SHA1(86bdc53e682476c2d90c5e51d4bccdc048d22e7f) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -// MV4115/6 - 9/20 Line Multiline Multiplier. -// Party Gras [Reel Game] - Export A - 10/11/2001. + +// 602/1 - 10 Credit Multiplier / 9 Line Multiline. +// Dolphin Treasure - Export B - 06/12/96. // All devices are 27c4002 instead of 27c4096. -ROM_START( partygrs ) +ROM_START( dolphntru ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD( "mv4115-6_party_gras.u7", 0x000000, 0x80000, CRC(53047385) SHA1(efe50e8785047986513f2de63d2425ba80417481) ) - ROM_LOAD32_WORD( "mv4115-6_party_gras.u11", 0x000002, 0x80000, CRC(f8bd9f7f) SHA1(a8c67a644f9090890e8f33e620fe0bb4633bd6e8) ) - ROM_LOAD32_WORD( "mv4115-6_party_gras.u8", 0x100000, 0x80000, CRC(0b98a0fa) SHA1(c9ada21e39472f28cd9b8ec19be7235410ad3e7a) ) - ROM_LOAD32_WORD( "mv4115-6_party_gras.u12", 0x100002, 0x80000, CRC(00d1395c) SHA1(d9a66d6cdb5aa4f583d8c23306b1416646cbde93) ) + ROM_LOAD32_WORD( "fhg407702.u7", 0x000000, 0x80000, CRC(97e3e4d0) SHA1(211b9b9e0f25dfaf9d1dfe1d3d88592522aa6f07) ) + ROM_LOAD32_WORD( "fhg407702.u11", 0x000002, 0x80000, CRC(de221eb5) SHA1(0e550e90b7fd5670f3f3a8589239c342ed70dc3d) ) + ROM_LOAD32_WORD( "fhg407702.u8", 0x100000, 0x80000, CRC(cb3ca8b6) SHA1(dba8bdaa406c07870f95241466359e39a012a70b) ) + ROM_LOAD32_WORD( "fhg407702.u12", 0x100002, 0x80000, CRC(8ee1c2d3) SHA1(e6ecaaac0cb4518ecc0d36532ab532f46e3e628b) ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -#define ROM_END_REGIONS \ - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ \ - ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) \ - ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) \ +ROM_START( dynajack ) + ARISTOCRAT_MK5_BIOS + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD("01j00081.u11", 0x0000002, 0x0080000, CRC(5a0147ae) SHA1(f2135b2525eb50a03a8f6360e7edb92bf0b88740) ) + ROM_LOAD32_WORD("01j00081.u12", 0x0100002, 0x0080000, CRC(beee94ff) SHA1(fad0d3506d10330840d3e5fcdfd7f0aa20041969) ) + ROM_LOAD32_WORD("01j00081.u13", 0x0200002, 0x0080000, CRC(d204ff9c) SHA1(8ac5533928fb3ca247dc85cea67da45a6743f732) ) + ROM_LOAD32_WORD("01j00081.u7", 0x0000000, 0x0080000, CRC(73783ecf) SHA1(280b4da540b405959f31c2eebbf87ab635d21c06) ) + ROM_LOAD32_WORD("01j00081.u8", 0x0100000, 0x0080000, CRC(e686eab2) SHA1(6eb18adda82357ff84f77e9334733094430dfdc6) ) + ROM_LOAD32_WORD("01j00081.u9", 0x0200000, 0x0080000, CRC(28a45170) SHA1(d7bb8e4dd24e3a3acf44e7fc40e49ebee5c15ec9) ) + + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) ROM_END -ROM_START( badbog ) +ROM_START( eldorda5 ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Bad_Bog_1of6.u7", 0x0000000, 0x0080000, CRC(25aa8109) SHA1(cf4521b3d447812d2d9dbfdab9fe0cec71cdeb2e) ) - ROM_LOAD32_WORD("Bad_Bog_2of6.u11", 0x0000002, 0x0080000, CRC(774ff977) SHA1(5ce1aa8b7598b4bc8e5fa44de1c03b5f2851f5de) ) - ROM_LOAD32_WORD("Bad_Bog_3of6.u8", 0x0100000, 0x0080000, CRC(e52a279a) SHA1(4a3a080d840d8a894ec0ba0250a566831377f0f8) ) - ROM_LOAD32_WORD("Bad_Bog_4of6.u12", 0x0100002, 0x0080000, CRC(562aa123) SHA1(825a2d23321b636a3ff2565b2b72df3b97bd0ec8) ) - ROM_LOAD32_WORD("Bad_Bog_5of6.u9", 0x0200000, 0x0080000, CRC(66d5a7f7) SHA1(1a1f845a97677c43ff1090231434ae9d3d36ab4c) ) - ROM_LOAD32_WORD("Bad_Bog_6of6.u13", 0x0200002, 0x0080000, CRC(883b2ec3) SHA1(5b431d8c9c8eabca65ab22dcf2bdb22d49445bb1) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0100652v.u11", 0x0000002, 0x0080000, CRC(35233cf8) SHA1(e02477526f2f9e2663c1876f543d138b2caf28df) ) + ROM_LOAD32_WORD("0100652v.u7", 0x0000000, 0x0080000, CRC(d9afe87c) SHA1(577ea5da9c4e93a393711a0c7361365301f4241e) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END +ROM_START( eforsta5 ) + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD( "0400122v.u7", 0x000000, 0x80000, CRC(b5829b27) SHA1(f6f84c8dc524dcee95e37b93ead9090903bdca4f) ) + ROM_LOAD32_WORD( "0400122v.u11", 0x000002, 0x80000, CRC(7a97adc8) SHA1(b52f7fdc7edf9ad92351154c01b8003c0576ed94) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( blackpnt ) + +// MV4033 - 10 Credit Multiplier / 9 Line Multiline. +// Enchanted Forest - Export B - 10/02/97. +// Marked as 94.97% +// All devices are 27c4002 instead of 27c4096. +ROM_START( eforsta5u ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Black Panther NSW.u11", 0x0000002, 0x0080000, CRC(de3358d3) SHA1(4f290940d8af9fe8d404802d5cecfd2d098eff12) ) - ROM_LOAD32_WORD("Black Panther NSW.u12", 0x0100002, 0x0080000, CRC(bb2bf7bb) SHA1(f88208238a69fc79e33af17f39e25cd2857d7172) ) - ROM_LOAD32_WORD("Black Panther NSW.u7", 0x0000000, 0x0080000, CRC(eed76145) SHA1(6a40a6ba2ce320a37b086dc4916c92c8e38c065e) ) - ROM_LOAD32_WORD("Black Panther NSW.u8", 0x0100000, 0x0080000, CRC(58ddfb50) SHA1(c2152e65fa119136b7944b69e650310db78e62a8) ) -ROM_END_REGIONS + ROM_LOAD32_WORD( "jhg041503.u7", 0x000000, 0x80000, CRC(cae1fb55) SHA1(386913ddf9be406f46aab06cf3e27c3c38a4d52d) ) // 94.97% + ROM_LOAD32_WORD( "jhg041503.u11", 0x000002, 0x80000, CRC(a71b7b3c) SHA1(26c3438398b6a3cc9946a1cd1c92d317a8e2738e) ) // 94.97% + ROM_LOAD32_WORD( "jhg041503.u8", 0x100000, 0x80000, CRC(002dec6c) SHA1(fb3f4ce9cd8cd9e0e3133376ed014db83db041c5) ) // base + ROM_LOAD32_WORD( "jhg041503.u12", 0x100002, 0x80000, CRC(c968471f) SHA1(9d54a5c396e6f83690db2fcb7ddcc8a47a7dd777) ) // base + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( bootscot ) +ROM_START( fortellr ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Boot Scootin'.u10", 0x0300000, 0x0080000, CRC(b574c12d) SHA1(3b1d1d00ef3eae23493e2b0381ab80490af510d4) ) - ROM_LOAD32_WORD("Boot Scootin'.u11", 0x0000002, 0x0080000, CRC(df066d27) SHA1(310422c78e93ce9f1f58b4a58a59bc2eba5c502a) ) - ROM_LOAD32_WORD("Boot Scootin'.u12", 0x0100002, 0x0080000, CRC(87ddc7ef) SHA1(91473d8fd266a909fa8d4ec3df3a61861c6e9f4c) ) - ROM_LOAD32_WORD("Boot Scootin'.u13", 0x0200002, 0x0080000, CRC(fca82ee7) SHA1(bb70f2e04047a58b697dca536b95f9bbcc295a8a) ) - ROM_LOAD32_WORD("Boot Scootin'.u14", 0x0300002, 0x0080000, CRC(75b9b89e) SHA1(08d487b3722f2ea5d2d18c78f571a44c78616dbe) ) - ROM_LOAD32_WORD("Boot Scootin'.u7", 0x0000000, 0x0080000, CRC(f8e12462) SHA1(82a25757b2146204b86e557b8f1c45280e0668a8) ) - ROM_LOAD32_WORD("Boot Scootin'.u8", 0x0100000, 0x0080000, CRC(08e8de8d) SHA1(913d3e51821d8885affd2750c18d1000629b79d9) ) - ROM_LOAD32_WORD("Boot Scootin'.u9", 0x0200000, 0x0080000, CRC(a1ca5f2b) SHA1(c8fc6aff0c3819370339143966ec76910e40c671) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("01j00131.u10", 0x0300000, 0x0080000, CRC(f2790419) SHA1(8720c37cc678e7c5666c67b9998fbb460a8aad90) ) + ROM_LOAD32_WORD("01j00131.u11", 0x0000002, 0x0080000, CRC(faab1283) SHA1(6200fc2047c4052e4fc3c2d28b26cd9ff67a08be) ) + ROM_LOAD32_WORD("01j00131.u12", 0x0100002, 0x0080000, CRC(fe5af3ac) SHA1(f08fe353c871ac4375f0fa25bf15f2638b33a370) ) + ROM_LOAD32_WORD("01j00131.u13", 0x0200002, 0x0080000, CRC(d0dd6627) SHA1(ea855da1759a27936615400993b381609071d66c) ) + ROM_LOAD32_WORD("01j00131.u14", 0x0300002, 0x0080000, CRC(507bbe10) SHA1(01b1982c02a00b60aa39ee1b408d653365f728d4) ) + ROM_LOAD32_WORD("01j00131.u7", 0x0000000, 0x0080000, CRC(78394106) SHA1(aedfb98d7aa515eebabf378edb9c43e01bcba010) ) + ROM_LOAD32_WORD("01j00131.u8", 0x0100000, 0x0080000, CRC(7ce4ba38) SHA1(43b57e4dc96851f58d95e4f1b99d08f559e27f6a) ) + ROM_LOAD32_WORD("01j00131.u9", 0x0200000, 0x0080000, CRC(a43cd994) SHA1(759fecc809ca1b038d782b173d5638d9be165f9a) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( bumbugs ) +// MV4084/1 - 10 Credit Multiplier / 9 Line Multiline. +// THE GAMBLER - Export A - 30/10/98. +// Marked as EHG0916 and 92.268%. +// All devices are 27c4002 instead of 27c4096. +ROM_START( gambler ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Bumble Bugs.u11", 0x0000002, 0x0080000, CRC(5d888245) SHA1(bbbe61e09bebd5fcb79f060d5caee15100c9a685) ) - ROM_LOAD32_WORD("Bumble Bugs.u7", 0x0000000, 0x0080000, CRC(d4cfce73) SHA1(735c385779afe55e521dbfe9ebfdc55fe3346349) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD( "ehg091602.u7", 0x000000, 0x80000, CRC(7524c954) SHA1(0a895d1e2d09a2c873bbbbeb37bc59c25f3c577c) ) // 92.268% + ROM_LOAD32_WORD( "ehg091602.u11", 0x000002, 0x80000, CRC(f29a6932) SHA1(17761218a04d36a599c987b4e13c0e3f46b7793f) ) // 92.268% + ROM_LOAD32_WORD( "ehg091602.u8", 0x100000, 0x80000, CRC(e2221fdf) SHA1(8a7b2d5de68ae66fe1915a6faac6277249e3fb53) ) // base + ROM_LOAD32_WORD( "ehg091602.u12", 0x100002, 0x80000, CRC(ebe957f9) SHA1(539945ec9beafe2c83051208370588fce2334f16) ) // base + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( butdeli ) - ARISTOCRAT_MK5_BIOS +ROM_START( geisha ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Butterfly Delight.u11", 0x0000002, 0x0080000, CRC(1ddf8732) SHA1(dc09db14c251699fdd46068f18ad6214e8752939) ) - ROM_LOAD32_WORD("Butterfly Delight.u12", 0x0100002, 0x0080000, CRC(0d58cf28) SHA1(aa65b7ee88b5bc872008a46e60bd49d9e5eda153) ) - ROM_LOAD32_WORD("Butterfly Delight.u7", 0x0000000, 0x0080000, CRC(7f69cdfc) SHA1(1241741d21334df10d60080555824a87eae93db3) ) - ROM_LOAD32_WORD("Butterfly Delight.u8", 0x0100000, 0x0080000, CRC(24d8135e) SHA1(1bc69e9927afe0300d15a49ca06ae527774b295a) ) -ROM_END_REGIONS + ROM_LOAD32_WORD( "0101408v.u7", 0x000000, 0x80000, CRC(ebdde248) SHA1(83f4f4deb5c6f5b33ae066d50e043a24cb0cbfe0) ) + ROM_LOAD32_WORD( "0101408v.u11", 0x000002, 0x80000, CRC(2f9e7cd4) SHA1(e9498879c9ca66740856c00fda0416f5d9f7c823) ) + ROM_LOAD32_WORD( "0101408v.u8", 0x100000, 0x80000, CRC(87e41b1b) SHA1(029687aeaed701e0f4b8da9d1d60a5a0a9445518) ) + ROM_LOAD32_WORD( "0101408v.u12", 0x100002, 0x80000, CRC(255f2368) SHA1(eb955452e1ed8d9d4f30f3372d7321f01d3654d3) ) + ROM_LOAD32_WORD( "0101408v.u9", 0x200000, 0x80000, CRC(5f161953) SHA1(d07353d006811813b94cb022857f49c4906fd87b) ) + ROM_LOAD32_WORD( "0101408v.u13", 0x200002, 0x80000, CRC(5ef6323e) SHA1(82a720d814ca06c6d286c59bbf325d9a1034375a) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( cashchm ) +ROM_START( genmagi ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("CASHCHAMELEON.u11", 0x0000002, 0x0080000, CRC(64921874) SHA1(5aa6a0d6e29f5e400e275f27b6adfbef595fe83a) ) - ROM_LOAD32_WORD("CASHCHAMELEON.u12", 0x0100002, 0x0080000, CRC(7ae3b5db) SHA1(238698b72f529ac4fb292d08267069d1da01b43b) ) - ROM_LOAD32_WORD("CASHCHAMELEON.u7", 0x0000000, 0x0080000, CRC(c942ef22) SHA1(4f56674f749602ae928832f98a641e680af8989b) ) - ROM_LOAD32_WORD("CASHCHAMELEON.u8", 0x0100000, 0x0080000, CRC(a8868277) SHA1(e199448a0a920219dc15443813061653b94d6d3a) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0200894v.u10", 0x0300000, 0x0080000, CRC(ea460e72) SHA1(4546e04cc04239528c93e22532db08fccebda8a8) ) + ROM_LOAD32_WORD("0200894v.u11", 0x0000002, 0x0080000, CRC(88c304a3) SHA1(013d5d1d62b356ce5cdf0c9b036c4ca09f191668) ) + ROM_LOAD32_WORD("0200894v.u12", 0x0100002, 0x0080000, CRC(44adc422) SHA1(81256ddebb29fbd69cab8e642faac39635dd1739) ) + ROM_LOAD32_WORD("0200894v.u13", 0x0200002, 0x0080000, CRC(26f51647) SHA1(e980c021d8e2d295ba2d50446b36b85f42d3f318) ) + ROM_LOAD32_WORD("0200894v.u14", 0x0300002, 0x0080000, CRC(52092ffb) SHA1(6ed591a510e9186588470ec745caf8001712012e) ) + ROM_LOAD32_WORD("0200894v.u7", 0x0000000, 0x0080000, CRC(20ec3b50) SHA1(400ad7f86077184fee63690060fe2a51ba888e1b) ) + ROM_LOAD32_WORD("0200894v.u8", 0x0100000, 0x0080000, CRC(341bac7b) SHA1(67df39b8070f6d9afd183b04239d9e2844d588c5) ) + ROM_LOAD32_WORD("0200894v.u9", 0x0200000, 0x0080000, CRC(ce051dbd) SHA1(433717c5689dc865c1e42669a50e138eae017362) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( cashcroa ) +ROM_START( gnomeatw ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("cash_crop_1of4.u7", 0x0000000, 0x0080000, CRC(b0ff2aae) SHA1(b05667ffe952cae7a6581398552db6e47921090e) ) - ROM_LOAD32_WORD("cash_crop_2of4.u11", 0x0000002, 0x0080000, CRC(25a18efa) SHA1(0ee4f6cc66322397dbde53af2149f5fb35d788df) ) - ROM_LOAD32_WORD("cash_crop_3of4.u8", 0x0100000, 0x0080000, CRC(d4e7b4ba) SHA1(147a1ed5cdcbb84466a8024ad7e0778f85374489) ) - ROM_LOAD32_WORD("cash_crop_4of4.u12", 0x0100002, 0x0080000, CRC(570c7f8a) SHA1(7c9527e0b37970b7960c723727c3c650a48e8125) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD("0100767v.u11", 0x0000002, 0x0080000, CRC(737d7178) SHA1(df788eea23b15415adc94543476b6ad982c4d79b) ) + ROM_LOAD32_WORD("0100767v.u12", 0x0100002, 0x0080000, CRC(49eb3869) SHA1(d98fe385c667872f26d656a3240f557a70ba924f) ) + ROM_LOAD32_WORD("0100767v.u7", 0x0000000, 0x0080000, CRC(a5d3825e) SHA1(4ce7466eff770a2c6c3c5de620a14e05bb9fb406) ) + ROM_LOAD32_WORD("0100767v.u8", 0x0100000, 0x0080000, CRC(fe59ec8b) SHA1(b43778b51a0d695c179fa63ce45a47b9f550fb97) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( chkrun ) +ROM_START( goldpyr ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Chicken Run.u11", 0x0000002, 0x0080000, CRC(65423867) SHA1(992bb4f717f79233d1300d248b145f95a627cff2) ) - ROM_LOAD32_WORD("Chicken Run.u12", 0x0100002, 0x0080000, CRC(77b5d777) SHA1(f03afeaff08c9216e714f1e4bcc50292ba87ace4) ) - ROM_LOAD32_WORD("Chicken Run.u13", 0x0200002, 0x0080000, CRC(88a1ccae) SHA1(e242f48f99044b4fdf1bf36d8e105df09f94aa50) ) - ROM_LOAD32_WORD("Chicken Run.u7", 0x0000000, 0x0080000, CRC(be69c21c) SHA1(8b546727b5972f33d077db0a64aa41a7fde6d417) ) - ROM_LOAD32_WORD("Chicken Run.u8", 0x0100000, 0x0080000, CRC(3161c16f) SHA1(8f2b14ec8ba5c9da80a226d2ce5a7e5256c8cbb4) ) - ROM_LOAD32_WORD("Chicken Run.u9", 0x0200000, 0x0080000, CRC(5506777b) SHA1(42512577056e1caefbea0e74879780c56787af13) ) -ROM_END_REGIONS + ROM_LOAD32_WORD( "ahg120503.u7", 0x000000, 0x80000, CRC(2fbed80c) SHA1(fb0d97cb2be96da37c487fc3aef06c6120efdb46) ) + ROM_LOAD32_WORD( "ahg120503.u11", 0x000002, 0x80000, CRC(ec9c183c) SHA1(e405082ee779c4fee103fb7384469c9d6afbc95b) ) + ROM_LOAD32_WORD( "ahg120503.u8", 0x100000, 0x80000, CRC(3cd7d8e5) SHA1(ae83a7c335564c398330d43295997b8ca547c92d) ) + ROM_LOAD32_WORD( "ahg120503.u12", 0x100002, 0x80000, CRC(8bbf45d0) SHA1(f58f28e7cc4ac225197959566d81973b5aa0e836) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END +// 602/2 - 10 Credit Multiplier / 20 Line Multiline. +// QUEEN OF THE NILE - NSW/ACT - B - 13/05/97. +// Marked as AHG1206-99, Golden Pyramids, and 87.928% +// Queen of The Nile and Golden Pyramids are +// both the same game with different title. +ROM_START( goldpyra ) + ARISTOCRAT_MK5_BIOS + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD( "ahg1206-99.u7", 0x000000, 0x80000, CRC(e6c80f67) SHA1(901cf8f8fd46c1c4a70e1954d2d2d88e7acd07a8) ) + ROM_LOAD32_WORD( "ahg1206-99.u11", 0x000002, 0x80000, CRC(3cc221ea) SHA1(a71d16b818110f5b632e996e9f2fcb8be17b2aee) ) + ROM_LOAD32_WORD( "ahg1206-99.u8", 0x100000, 0x80000, CRC(df1ffb31) SHA1(1cf9d008b1f8fdb06ba050c97dae79f272c8063c) ) + ROM_LOAD32_WORD( "ahg1206-99.u12", 0x100002, 0x80000, CRC(d2c8f786) SHA1(a9efa35c8f2833a2b77f092398ca959d5fe6194e) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( coralr2v ) +ROM_START( goldenra ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Coral Riches 2.u11", 0x0000002, 0x0080000, CRC(8cd17e90) SHA1(c6d6a29e62ca6e1b278a2e1d1b358e10ca2de4ed) ) - ROM_LOAD32_WORD("Coral Riches 2.u12", 0x0100002, 0x0080000, CRC(9ea140b5) SHA1(11f6b9ab60117f236b464c9dbc939dfb8f240359) ) - ROM_LOAD32_WORD("Coral Riches 2.u7", 0x0000000, 0x0080000, CRC(02c430c3) SHA1(f4bae1aa5437af1df2a04f700da044bc4fb652b7) ) - ROM_LOAD32_WORD("Coral Riches 2.u8", 0x0100000, 0x0080000, CRC(1ee9557c) SHA1(3bee295509d4b0c11ce41a7a20ba91230b7cb4ca) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0101164v.u7", 0x0000000, 0x0080000, CRC(2f75d5f7) SHA1(d7f6ecff7cf759d80733b6d3f224caa5128be0b7) ) + ROM_LOAD32_WORD("0101164v.u11", 0x0000002, 0x0080000, CRC(06a871c7) SHA1(95464d74c2295196e367e34efb816acedcd71265) ) + ROM_LOAD32_WORD("0101164v.u8", 0x0100000, 0x0080000, CRC(940eabd7) SHA1(8d41b3fa27c827a7671b095618ac53750e6017f6) ) + ROM_LOAD32_WORD("0101164v.u12", 0x0100002, 0x0080000, CRC(21c4a2d2) SHA1(77a24a5f98aad090223d301919645b5011667c28) ) + ROM_LOAD32_WORD("0101164v.u9", 0x0200000, 0x0080000, CRC(b1cac0e7) SHA1(87f393a75c09e96a7fb893a767edcc81044e4fe3) ) + ROM_LOAD32_WORD("0101164v.u13", 0x0200002, 0x0080000, CRC(8f62ccc5) SHA1(5105313192ab8dfd522b921c70b8b03a8a61ac63) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( cuckooa ) +ROM_START( incasun ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Cuckoo_1of4.u7", 0x0000000, 0x0080000, CRC(5c7ef84a) SHA1(59563a076ecf391ac1779e0dcd530a1ea158a4e3) ) - ROM_LOAD32_WORD("Cuckoo_2of4.u11", 0x0000002, 0x0080000, CRC(a69c1416) SHA1(7fe57a194bf29346c039dfac1326f3ee5080e630) ) - ROM_LOAD32_WORD("Cuckoo_3of4.u8", 0x0100000, 0x0080000, CRC(a7b4242c) SHA1(4e6961e9b3267d17b93075c41a691a8033a34d90) ) - ROM_LOAD32_WORD("Cuckoo_4of4.u12", 0x0100002, 0x0080000, CRC(cb706eb7) SHA1(cbd6235ca7a29c78ef2cb659d9c21466ed39b360) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0100872v.u11", 0x0000002, 0x0080000, CRC(f51b411d) SHA1(fbbd587c90cd49bb36653cbd1948bc52f8396a41) ) + ROM_LOAD32_WORD("0100872v.u12", 0x0100002, 0x0080000, CRC(0fa00c41) SHA1(79139834d5437b37346322bf632904c473e3463a) ) + ROM_LOAD32_WORD("0100872v.u13", 0x0200002, 0x0080000, CRC(00407593) SHA1(4c759fe3267b1782ae84d8ed9134295dfaa0faaf) ) + ROM_LOAD32_WORD("0100872v.u7", 0x0000000, 0x0080000, CRC(180e098b) SHA1(48782c46a344dba0aaad407d0d4a432da091b0f5) ) + ROM_LOAD32_WORD("0100872v.u8", 0x0100000, 0x0080000, CRC(0c19f5ec) SHA1(95d7c9308b30b5193816e95c4276829612040298) ) + ROM_LOAD32_WORD("0100872v.u9", 0x0200000, 0x0080000, CRC(c82da820) SHA1(98a2710b1f793a7ee1070f89c66d49ce55e4156e) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( dstblom ) +ROM_START( incasunsp ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Desert Bloom.u11", 0x0000002, 0x0080000, CRC(ed4e8dca) SHA1(1953033e570634cbcf8cd11194c14c57ffc6be53) ) - ROM_LOAD32_WORD("Desert Bloom.u12", 0x0100002, 0x0080000, CRC(0ad41815) SHA1(131efc6ed45d8f44a667bd30380c9e37c64f2c42) ) - ROM_LOAD32_WORD("Desert Bloom.u7", 0x0000000, 0x0080000, CRC(fbfaa3fe) SHA1(3f915261503fc97eb556422e9ccdac81372c04cc) ) - ROM_LOAD32_WORD("Desert Bloom.u8", 0x0100000, 0x0080000, CRC(cc0d567c) SHA1(c4da3d0c0c4420a9f8fbb6403db983b3e27d4b50) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("sp__0100872v.u11", 0x0000002, 0x0080000, CRC(f221ac71) SHA1(c2c1f8703e9a41e5c4d5ebfeac57e220a64e9657) ) + ROM_LOAD32_WORD("sp__0100872v.u12", 0x0100002, 0x0080000, CRC(6633e701) SHA1(02e691c7d18901e70bf8c4e4aa6f856e153f05d4) ) + ROM_LOAD32_WORD("sp__0100872v.u13", 0x0200002, 0x0080000, CRC(6d66c6b4) SHA1(2106f2ede58bd4d09334e32a1553f02a154bb767) ) + ROM_LOAD32_WORD("sp__0100872v.u7", 0x0000000, 0x0080000, CRC(62919753) SHA1(0f0d186260a64b8b45671f68abf497586264793e) ) + ROM_LOAD32_WORD("sp__0100872v.u8", 0x0100000, 0x0080000, CRC(6610599f) SHA1(6d787ae58e2de2b3379a25f394c15434d4e2a8c1) ) + ROM_LOAD32_WORD("sp__0100872v.u9", 0x0200000, 0x0080000, CRC(b6035aa7) SHA1(e96e802cda6f20caf523203f2032a88488bdfb65) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( dmddove ) +ROM_START( incasunnz ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Diamond Dove.u11", 0x0000002, 0x0080000, CRC(ff4c684a) SHA1(6598c24a8717b8e624e387f000c584ec3b10a8cd) ) - ROM_LOAD32_WORD("Diamond Dove.u12", 0x0100002, 0x0080000, CRC(62209e81) SHA1(68383068de2e030467c3f3ac16459ae2f3b2cce6) ) - ROM_LOAD32_WORD("Diamond Dove.u13", 0x0200002, 0x0080000, CRC(952a850f) SHA1(66da391af532f9ef531d10995c96a90eb71cd09a) ) - ROM_LOAD32_WORD("Diamond Dove.u7", 0x0000000, 0x0080000, CRC(2ebb3704) SHA1(42567d873d6ab9221d09e5449fa57b557677d2ab) ) - ROM_LOAD32_WORD("Diamond Dove.u8", 0x0100000, 0x0080000, CRC(daa55b3b) SHA1(7aa96a51a3ea9f96c38d08e486eccc54ca4396a3) ) - ROM_LOAD32_WORD("Diamond Dove.u9", 0x0200000, 0x0080000, CRC(2254f0e9) SHA1(5bccd65e7e616e1f6ed08a0c84862cb13f9f7098) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0101108v.u11", 0x0000002, 0x0080000, CRC(2ff86b76) SHA1(c491ca19320bd3e15199b3ca1fcf36a70e386daa) ) + ROM_LOAD32_WORD("0101108v.u12", 0x0100002, 0x0080000, CRC(d91114c5) SHA1(fa88c70d81ff5e4df539b873803376e79eb6a479) ) + ROM_LOAD32_WORD("0101108v.u13", 0x0200002, 0x0080000, CRC(472f4097) SHA1(5ebe72b138cdc67989db17c82979eeddc60a081e) ) + ROM_LOAD32_WORD("0101108v.u7", 0x0000000, 0x0080000, CRC(1e7be5ca) SHA1(333b7665fab8f60fb60e9d3b44de96725763ca17) ) + ROM_LOAD32_WORD("0101108v.u8", 0x0100000, 0x0080000, CRC(3eb64fc9) SHA1(31f7d56443091da211c45dddb97375305c3cfeae) ) + ROM_LOAD32_WORD("0101108v.u9", 0x0200000, 0x0080000, CRC(6da340db) SHA1(4d7528aa27561185a7d53a0c44a4e95e40aadc26) ) + + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END +ROM_START( indrema5 ) + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD( "0100845v.u7", 0x000000, 0x80000, CRC(0c924a3e) SHA1(499b4ae601e53173e3ba5f400a40e5ae7bbaa043) ) + ROM_LOAD32_WORD( "0100845v.u11", 0x000002, 0x80000, CRC(e371dc0f) SHA1(a01ab7fb63a19c144f2c465ecdfc042695124bdf) ) + ROM_LOAD32_WORD( "0100845v.u8", 0x100000, 0x80000, CRC(1c6bfb47) SHA1(7f751cb499a6185a0ab64eeec511583ceeee6ee8) ) + ROM_LOAD32_WORD( "0100845v.u12", 0x100002, 0x80000, CRC(4bbe67f6) SHA1(928f88387da66697f1de54f086531f600f80a15e) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( drawpka ) +ROM_START( kgalah ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("M Draw Free Poker Game.u11", 0x0000002, 0x0080000, CRC(ac8503fa) SHA1(30640a9c01239173c7430a46dcd2e2b28024c0cf) ) - ROM_LOAD32_WORD("M Draw Free Poker Game.u12", 0x0100002, 0x0080000, CRC(cd0dfdf5) SHA1(7bcf77c1bcd023b4ab08cef329dcf39dc2ca09d6) ) - ROM_LOAD32_WORD("M Draw Free Poker Game.u13", 0x0200002, 0x0080000, CRC(0d6f7ec5) SHA1(0a80257eb464e50292554f45583f3d7b85de2bc3) ) - ROM_LOAD32_WORD("M Draw Free Poker Game.u7", 0x0000000, 0x0080000, CRC(7570eb03) SHA1(0fded55ee2d12cfae96e2910c68a131cd89147a0) ) - ROM_LOAD32_WORD("M Draw Free Poker Game.u8", 0x0100000, 0x0080000, CRC(8c54bd65) SHA1(5870558f8b96fca2c355ccc6ffc09fc4684d141c) ) - ROM_LOAD32_WORD("M Draw Free Poker Game.u9", 0x0200000, 0x0080000, CRC(10b96156) SHA1(1f89e0d8d210d2fd7e0b78b0205eb626d7c39542) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0200536v.u11", 0x0000002, 0x0080000, CRC(2b52a5e2) SHA1(0c852c6672a46f269f1407db0dd1825a51f242cc) ) + ROM_LOAD32_WORD("0200536v.u12", 0x0100002, 0x0080000, CRC(15d5bfb4) SHA1(7c48dabfd83cc30fe2ffd0b4de63fbc9dc56ee2f) ) + ROM_LOAD32_WORD("0200536v.u7", 0x0000000, 0x0080000, CRC(9333543a) SHA1(dbbd59de046c35e70e71836b342eb5ecf4799575) ) + ROM_LOAD32_WORD("0200536v.u8", 0x0100000, 0x0080000, CRC(08bea3b7) SHA1(9a5d8cf60c9643061dede926a04006a9a674fd8f) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( dyjack ) - ARISTOCRAT_MK5_BIOS +// MV4137 - 5,10,25,50 Credit Multiplier / 20 Line Multiline. +// Koala Mint [Reel Game] - Export A - 12/09/01. +// Marked as CHG1573. +ROM_START( koalamnt ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Dynamite Jack.u11", 0x0000002, 0x0080000, CRC(5a0147ae) SHA1(f2135b2525eb50a03a8f6360e7edb92bf0b88740) ) - ROM_LOAD32_WORD("Dynamite Jack.u12", 0x0100002, 0x0080000, CRC(beee94ff) SHA1(fad0d3506d10330840d3e5fcdfd7f0aa20041969) ) - ROM_LOAD32_WORD("Dynamite Jack.u13", 0x0200002, 0x0080000, CRC(d204ff9c) SHA1(8ac5533928fb3ca247dc85cea67da45a6743f732) ) - ROM_LOAD32_WORD("Dynamite Jack.u7", 0x0000000, 0x0080000, CRC(73783ecf) SHA1(280b4da540b405959f31c2eebbf87ab635d21c06) ) - ROM_LOAD32_WORD("Dynamite Jack.u8", 0x0100000, 0x0080000, CRC(e686eab2) SHA1(6eb18adda82357ff84f77e9334733094430dfdc6) ) - ROM_LOAD32_WORD("Dynamite Jack.u9", 0x0200000, 0x0080000, CRC(28a45170) SHA1(d7bb8e4dd24e3a3acf44e7fc40e49ebee5c15ec9) ) -ROM_END_REGIONS + ROM_LOAD32_WORD( "chg1573_koala_mint.u7", 0x000000, 0x80000, CRC(fa690af0) SHA1(9e1e5171e9da602c025bfb2aefad397a537794cb) ) + ROM_LOAD32_WORD( "chg1573_koala_mint.u11", 0x000002, 0x80000, CRC(c33bed43) SHA1(2c8f35ca08b4d6ac56de5ab7c2515f34e04cf6c8) ) + ROM_LOAD32_WORD( "chg1573_koala_mint.u8", 0x100000, 0x80000, CRC(4aeb2e54) SHA1(74002cd12d93352310a864a2ed434c7f43d26534) ) // base + ROM_LOAD32_WORD( "chg1573_koala_mint.u12", 0x100002, 0x80000, CRC(2bf5786f) SHA1(f0693bbd2e6d2e110535205a1ad0b73a0ebd2f53) ) // base + ROM_LOAD32_WORD( "chg1573_koala_mint.u9", 0x200000, 0x80000, CRC(1a2650e7) SHA1(55a8604ef19836880f53d44a035a49b009acbb5a) ) // base + ROM_LOAD32_WORD( "chg1573_koala_mint.u13", 0x200002, 0x80000, CRC(51c78f63) SHA1(ef51e45d67a5684c35150747c186493258cb4549) ) // base + ROM_LOAD32_WORD( "chg1573_koala_mint.u10", 0x300000, 0x80000, CRC(a0fb61fe) SHA1(2a77ed082bc6829905f83a3cb3c4c120fa4ba0f9) ) // base + ROM_LOAD32_WORD( "chg1573_koala_mint.u14", 0x300002, 0x80000, CRC(5e4776e9) SHA1(d44851cbfaa054cd5675a841a3089a8f4fdc8421) ) // base + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( eldora ) +ROM_START( kookabuk ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("El Dorado.u11", 0x0000002, 0x0080000, CRC(35233cf8) SHA1(e02477526f2f9e2663c1876f543d138b2caf28df) ) - ROM_LOAD32_WORD("El Dorado.u7", 0x0000000, 0x0080000, CRC(d9afe87c) SHA1(577ea5da9c4e93a393711a0c7361365301f4241e) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0100677v.u7", 0x0000000, 0x0080000, CRC(b2fdf0e8) SHA1(0dd002cfad2fa4f217a0c67066d098f4cd3ba319) ) + ROM_LOAD32_WORD("0100677v.u11", 0x0000002, 0x0080000, CRC(e8ab9afc) SHA1(4c3beefeafc6ac9d4538254bb5e01c12b35db922) ) + ROM_LOAD32_WORD("0100677v.u8", 0x0100000, 0x0080000, CRC(f5a45c57) SHA1(a452a7359af6d5fde2c37946ee68807152f07d39) ) + ROM_LOAD32_WORD("0100677v.u12", 0x0100002, 0x0080000, CRC(b2f2fd15) SHA1(9614f3ae6e82a40ecf44090d0b8d7bd8b6b1f830) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END +ROM_START( locoloot ) + ARISTOCRAT_MK5_BIOS + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD("0100472v.u11", 0x0000002, 0x0080000, CRC(21332a1a) SHA1(76a4c30d1c9624984175e9bd117c68c9204f01df) ) + ROM_LOAD32_WORD("0100472v.u7", 0x0000000, 0x0080000, CRC(4f02763c) SHA1(302cea5fb157f65fc907f123ef42a0a38cc707ac) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( fortela ) +ROM_START( locolootnz ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Fortune_Teller.u10", 0x0300000, 0x0080000, CRC(f2790419) SHA1(8720c37cc678e7c5666c67b9998fbb460a8aad90) ) - ROM_LOAD32_WORD("Fortune_Teller.u11", 0x0000002, 0x0080000, CRC(faab1283) SHA1(6200fc2047c4052e4fc3c2d28b26cd9ff67a08be) ) - ROM_LOAD32_WORD("Fortune_Teller.u12", 0x0100002, 0x0080000, CRC(fe5af3ac) SHA1(f08fe353c871ac4375f0fa25bf15f2638b33a370) ) - ROM_LOAD32_WORD("Fortune_Teller.u13", 0x0200002, 0x0080000, CRC(d0dd6627) SHA1(ea855da1759a27936615400993b381609071d66c) ) - ROM_LOAD32_WORD("Fortune_Teller.u14", 0x0300002, 0x0080000, CRC(507bbe10) SHA1(01b1982c02a00b60aa39ee1b408d653365f728d4) ) - ROM_LOAD32_WORD("Fortune_Teller.u7", 0x0000000, 0x0080000, CRC(78394106) SHA1(aedfb98d7aa515eebabf378edb9c43e01bcba010) ) - ROM_LOAD32_WORD("Fortune_Teller.u8", 0x0100000, 0x0080000, CRC(7ce4ba38) SHA1(43b57e4dc96851f58d95e4f1b99d08f559e27f6a) ) - ROM_LOAD32_WORD("Fortune_Teller.u9", 0x0200000, 0x0080000, CRC(a43cd994) SHA1(759fecc809ca1b038d782b173d5638d9be165f9a) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0600725v.u11", 0x0000002, 0x0080000, CRC(93b0bde3) SHA1(06cb79482f8a94e1a504eead9cdf6da41cba1fb9) ) + ROM_LOAD32_WORD("0600725v.u12", 0x0100002, 0x0080000, CRC(29f03505) SHA1(c173167f43cc2eef0e063118e03bc37a87188391) ) + ROM_LOAD32_WORD("0600725v.u7", 0x0000000, 0x0080000, CRC(164dd049) SHA1(c99c56af72cb1eb69591cb8f7bacbd06bdb6494d) ) + ROM_LOAD32_WORD("0600725v.u8", 0x0100000, 0x0080000, CRC(8cb449ce) SHA1(2372cf126c2c95d9637b0a761dfc7ea223f0aa54) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( genmagi ) +ROM_START( lonewolf ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("GENIEMAGIC.u10", 0x0300000, 0x0080000, CRC(ea460e72) SHA1(4546e04cc04239528c93e22532db08fccebda8a8) ) - ROM_LOAD32_WORD("GENIEMAGIC.u11", 0x0000002, 0x0080000, CRC(88c304a3) SHA1(013d5d1d62b356ce5cdf0c9b036c4ca09f191668) ) - ROM_LOAD32_WORD("GENIEMAGIC.u12", 0x0100002, 0x0080000, CRC(44adc422) SHA1(81256ddebb29fbd69cab8e642faac39635dd1739) ) - ROM_LOAD32_WORD("GENIEMAGIC.u13", 0x0200002, 0x0080000, CRC(26f51647) SHA1(e980c021d8e2d295ba2d50446b36b85f42d3f318) ) - ROM_LOAD32_WORD("GENIEMAGIC.u14", 0x0300002, 0x0080000, CRC(52092ffb) SHA1(6ed591a510e9186588470ec745caf8001712012e) ) - ROM_LOAD32_WORD("GENIEMAGIC.u7", 0x0000000, 0x0080000, CRC(20ec3b50) SHA1(400ad7f86077184fee63690060fe2a51ba888e1b) ) - ROM_LOAD32_WORD("GENIEMAGIC.u8", 0x0100000, 0x0080000, CRC(341bac7b) SHA1(67df39b8070f6d9afd183b04239d9e2844d588c5) ) - ROM_LOAD32_WORD("GENIEMAGIC.u9", 0x0200000, 0x0080000, CRC(ce051dbd) SHA1(433717c5689dc865c1e42669a50e138eae017362) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0100587v.u11", 0x0000002, 0x0080000, CRC(0ed6fb6b) SHA1(a2baa4154fe762e2c1b40a97b2d27265df8b5dab) ) + ROM_LOAD32_WORD("0100587v.u7", 0x0000000, 0x0080000, CRC(15024eae) SHA1(7101125aa8531c75f9d80fe357013d09dbb0fec9) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( gnomatw ) +// MV4033 - 10 Credit Multiplier / 9 Line Multiline. +// Magic Garden - Export B - 10/02/97. +// Marked as AHG1211 and 88.26% +ROM_START( mgarden ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Gnome The World.u11", 0x0000002, 0x0080000, CRC(737d7178) SHA1(df788eea23b15415adc94543476b6ad982c4d79b) ) - ROM_LOAD32_WORD("Gnome The World.u12", 0x0100002, 0x0080000, CRC(49eb3869) SHA1(d98fe385c667872f26d656a3240f557a70ba924f) ) - ROM_LOAD32_WORD("Gnome The World.u7", 0x0000000, 0x0080000, CRC(a5d3825e) SHA1(4ce7466eff770a2c6c3c5de620a14e05bb9fb406) ) - ROM_LOAD32_WORD("Gnome The World.u8", 0x0100000, 0x0080000, CRC(fe59ec8b) SHA1(b43778b51a0d695c179fa63ce45a47b9f550fb97) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD( "ahg1211-99.u7", 0x000000, 0x80000, CRC(4fe50505) SHA1(6cde87a8a6748af792a1fb101829491367bd4487) ) + ROM_LOAD32_WORD( "ahg1211-99.u11", 0x000002, 0x80000, CRC(723ffeee) SHA1(9eab33c9dbf656489914e539a28da5ae289e8df7) ) + ROM_LOAD32_WORD( "ahg1211-99.u8", 0x100000, 0x80000, CRC(a315ca28) SHA1(0309789362a945d592ee2eda912e4fc2e6ea5be6) ) + ROM_LOAD32_WORD( "ahg1211-99.u12", 0x100002, 0x80000, CRC(4b252c2c) SHA1(8be41fb2b8f8d2829c18ea123a02f3e61c136206) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( goldra ) +// MV4115 - 5,10,20 Credit Multiplier / 9 Line Multiline. +// Magic Mask [Reel Game] - Export A - 09/05/2000. +ROM_START( magimask ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Golden_Ra_1of6.u7", 0x0000000, 0x0080000, CRC(2f75d5f7) SHA1(d7f6ecff7cf759d80733b6d3f224caa5128be0b7) ) - ROM_LOAD32_WORD("Golden_Ra_2of6.u11", 0x0000002, 0x0080000, CRC(06a871c7) SHA1(95464d74c2295196e367e34efb816acedcd71265) ) - ROM_LOAD32_WORD("Golden_Ra_3of6.u8", 0x0100000, 0x0080000, CRC(940eabd7) SHA1(8d41b3fa27c827a7671b095618ac53750e6017f6) ) - ROM_LOAD32_WORD("Golden_Ra_4of6.u12", 0x0100002, 0x0080000, CRC(21c4a2d2) SHA1(77a24a5f98aad090223d301919645b5011667c28) ) - ROM_LOAD32_WORD("Golden_Ra_5of6.u9", 0x0200000, 0x0080000, CRC(b1cac0e7) SHA1(87f393a75c09e96a7fb893a767edcc81044e4fe3) ) - ROM_LOAD32_WORD("Golden_Ra_6of6.u13", 0x0200002, 0x0080000, CRC(8f62ccc5) SHA1(5105313192ab8dfd522b921c70b8b03a8a61ac63) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD( "dhg1309.u7", 0x000000, 0x80000, CRC(17317eb9) SHA1(3ddb8d61f23461c3194af534928164550208bbee) ) + ROM_LOAD32_WORD( "dhg1309.u11", 0x000002, 0x80000, CRC(42af4b3f) SHA1(5d88951f77782ff3861b6550ace076662a0b45aa) ) + ROM_LOAD32_WORD( "dhg1309.u8", 0x100000, 0x80000, CRC(23aefb5a) SHA1(ba4488754794f75f53b9c81b74b6ccd992c64acc) ) + ROM_LOAD32_WORD( "dhg1309.u12", 0x100002, 0x80000, CRC(6829a7bf) SHA1(97eed83763d0ec5e753d6ad194e906b1307c4940) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( hrttrhb ) +// MV4115 - 5,10,20 Credit Multiplier / 9 Line Multiline. +// Magic Mask [Reel Game] - Export A - 09/05/2000. +// Alternate set with identical description, but way different +// than the parent. All devices are 27c4002 instead of 27c4096. +// +// romcmp magicmsk.zip magicmska.zip +// 4 and 4 files +// dhg1309.u12 ahg1548.u12 21.547699% +// dhg1309.u8 ahg1548.u8 21.138954% +// dhg1309.u11 ahg1548.u11 17.786026% +// dhg1309.u7 ahg1548.u7 16.893578% +ROM_START( magimaska ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Heart Throb.u11", 0x0000002, 0x0080000, CRC(bde067d7) SHA1(cbf2cbd0644f1daeb5c3cd08d72f3d7aafe521ec) ) - ROM_LOAD32_WORD("Heart Throb.u7", 0x0000000, 0x0080000, CRC(de4d6d77) SHA1(959ffb7d06359870e07cb9d761f0bc0480c45e0c) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD( "ahg1548.u7", 0x000000, 0x80000, CRC(452a19c9) SHA1(aab1f4ccfc6cdb382f7a0e85491614cc58811a08) ) + ROM_LOAD32_WORD( "ahg1548.u11", 0x000002, 0x80000, CRC(c57601f3) SHA1(1616a424b41ad6fea6383a08d5352e8240433374) ) + ROM_LOAD32_WORD( "ahg1548.u8", 0x100000, 0x80000, CRC(607d7447) SHA1(064dbfe8b52eebe1be7a41735da3fa01eacd1686) ) + ROM_LOAD32_WORD( "ahg1548.u12", 0x100002, 0x80000, CRC(cf4cd569) SHA1(408edcd746587d249c4286f7a99f33ad94214f7c) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( incsun ) +ROM_START( magtcha5 ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("INCASUN_NSW.u11", 0x0000002, 0x0080000, CRC(f51b411d) SHA1(fbbd587c90cd49bb36653cbd1948bc52f8396a41) ) - ROM_LOAD32_WORD("INCASUN_NSW.u12", 0x0100002, 0x0080000, CRC(0fa00c41) SHA1(79139834d5437b37346322bf632904c473e3463a) ) - ROM_LOAD32_WORD("INCASUN_NSW.u13", 0x0200002, 0x0080000, CRC(00407593) SHA1(4c759fe3267b1782ae84d8ed9134295dfaa0faaf) ) - ROM_LOAD32_WORD("INCASUN_NSW.u7", 0x0000000, 0x0080000, CRC(180e098b) SHA1(48782c46a344dba0aaad407d0d4a432da091b0f5) ) - ROM_LOAD32_WORD("INCASUN_NSW.u8", 0x0100000, 0x0080000, CRC(0c19f5ec) SHA1(95d7c9308b30b5193816e95c4276829612040298) ) - ROM_LOAD32_WORD("INCASUN_NSW.u9", 0x0200000, 0x0080000, CRC(c82da820) SHA1(98a2710b1f793a7ee1070f89c66d49ce55e4156e) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0200455v.u11", 0x0000002, 0x0080000, CRC(614984e4) SHA1(e95d576993e8d9c0964899a7d5556c8e62d79242) ) + ROM_LOAD32_WORD("0200455v.u12", 0x0100002, 0x0080000, CRC(f54c18db) SHA1(85bcc202f7425b3b7ef456c1c2db5a22648068a8) ) + ROM_LOAD32_WORD("0200455v.u13", 0x0200002, 0x0080000, CRC(cfd2a86e) SHA1(66891a1b0e85ad7146b733f4b5d806db789d8821) ) + ROM_LOAD32_WORD("0200455v.u7", 0x0000000, 0x0080000, CRC(9fa3ee86) SHA1(ce7546b8d1dbf90eb8f4f8d3255dc1c215c966a7) ) + ROM_LOAD32_WORD("0200455v.u8", 0x0100000, 0x0080000, CRC(d7faf84d) SHA1(d2e49787d177767671fab64a723e1af619ce9ad2) ) + ROM_LOAD32_WORD("0200455v.u9", 0x0200000, 0x0080000, CRC(0e140453) SHA1(8b516fe598c7e754a471246effa1185845495640) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END +ROM_START( marmagic ) + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD( "01j00101.u7", 0x000000, 0x80000, CRC(eee7ebaf) SHA1(bad0c08578877f84325c07d51c6ed76c40b70720) ) + ROM_LOAD32_WORD( "01j00101.u11", 0x000002, 0x80000, CRC(4901a166) SHA1(8afe6f08b4ac5c17744dff73939c4bc93124fdf1) ) + ROM_LOAD32_WORD( "01j00101.u8", 0x100000, 0x80000, CRC(b0d78efe) SHA1(bc8b345290f4d31c6553f1e2700bc8324b4eeeac) ) + ROM_LOAD32_WORD( "01j00101.u12", 0x100002, 0x80000, CRC(90ff59a8) SHA1(c9e342db2b5e8c3f45efa8496bc369385046e920) ) + ROM_LOAD32_WORD( "01j00101.u9", 0x200000, 0x80000, CRC(1f0ca910) SHA1(be7a2f395eae09a29faf99ba34551fbc38f20fdb) ) + ROM_LOAD32_WORD( "01j00101.u13", 0x200002, 0x80000, CRC(3f702945) SHA1(a6c9a848d059c1e564fdc5a65bf8c9600853edfa) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( kookabk ) - ARISTOCRAT_MK5_BIOS +// US003 - Multi credit / Multi line. +// Margarita Magic [Reel Game] - NSW/ACT - A - 07/07/2000. +// EHG1559 - This is a twenty-line game. +// The playlines are 1, 5, 10, 15 and 20. +// For 20 credit per line the max bet is 400 +ROM_START( marmagicu ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Kooka_Bucks_1of4.u7", 0x0000000, 0x0080000, CRC(b2fdf0e8) SHA1(0dd002cfad2fa4f217a0c67066d098f4cd3ba319) ) - ROM_LOAD32_WORD("Kooka_Bucks_2of4.u11", 0x0000002, 0x0080000, CRC(e8ab9afc) SHA1(4c3beefeafc6ac9d4538254bb5e01c12b35db922) ) - ROM_LOAD32_WORD("Kooka_Bucks_3of4.u8", 0x0100000, 0x0080000, CRC(f5a45c57) SHA1(a452a7359af6d5fde2c37946ee68807152f07d39) ) - ROM_LOAD32_WORD("Kooka_Bucks_4of4.u12", 0x0100002, 0x0080000, CRC(b2f2fd15) SHA1(9614f3ae6e82a40ecf44090d0b8d7bd8b6b1f830) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD( "ehg1559.u7", 0x000000, 0x80000, CRC(eab62e8f) SHA1(b125f9a9dc1c82886490d3807e883a7b4e1453a5) ) + ROM_LOAD32_WORD( "ehg1559.u11", 0x000002, 0x80000, CRC(0b3c6a11) SHA1(05be4a4d070358600273d5dd4f6b4b37fee47105) ) + ROM_LOAD32_WORD( "ehg1559.u8", 0x100000, 0x80000, CRC(db05591e) SHA1(8af241bbd4f744c66fb78fdaf739d9c8bc2580c0) ) + ROM_LOAD32_WORD( "ehg1559.u12", 0x100002, 0x80000, CRC(b4458167) SHA1(d1e2040910ad748e58eaccd18ab0569b794b4d97) ) + ROM_LOAD32_WORD( "ehg1559.u9", 0x200000, 0x80000, CRC(fc69523a) SHA1(c01b3c905b01671307bc5439d00f4454d0286b20) ) + ROM_LOAD32_WORD( "ehg1559.u13", 0x200002, 0x80000, CRC(0cd174df) SHA1(707168fc3bef6c200ae6455c170b7c3e73502965) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( locoloot ) +// 559/2 - 10 Credit Multiplier / 9 Line Multiline. +// Mine, Mine, Mine - Export E - 14/02/96. +// All devices are 27c4002 instead of 27c4096. +ROM_START( minemine ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Loco Loot.u11", 0x0000002, 0x0080000, CRC(21332a1a) SHA1(76a4c30d1c9624984175e9bd117c68c9204f01df) ) - ROM_LOAD32_WORD("Loco Loot.u7", 0x0000000, 0x0080000, CRC(4f02763c) SHA1(302cea5fb157f65fc907f123ef42a0a38cc707ac) ) -ROM_END_REGIONS + ROM_LOAD32_WORD( "vhg0416-99.u7", 0x000000, 0x80000, CRC(41bc3714) SHA1(5a8f7d24a6a697524af7997dcedd214fcaf48768) ) + ROM_LOAD32_WORD( "vhg0416-99.u11", 0x000002, 0x80000, CRC(75803b10) SHA1(2ff3d966da2992ddcc7e229d979cc1ee623b4900) ) + ROM_LOAD32_WORD( "vhg0416-99.u8", 0x100000, 0x80000, CRC(0a3e2baf) SHA1(b9ab989cf383cd6ea0aa1ead137558a1a6f5901d) ) + ROM_LOAD32_WORD( "vhg0416-99.u12", 0x100002, 0x80000, CRC(26c01532) SHA1(ec68ad44b703609c7bc27275f8d9250a16d9067c) ) + + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( lonwolf ) +ROM_START( monmouse ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Lone Wolf.u11", 0x0000002, 0x0080000, CRC(0ed6fb6b) SHA1(a2baa4154fe762e2c1b40a97b2d27265df8b5dab) ) - ROM_LOAD32_WORD("Lone Wolf.u7", 0x0000000, 0x0080000, CRC(15024eae) SHA1(7101125aa8531c75f9d80fe357013d09dbb0fec9) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0400469v.u11", 0x0000002, 0x0080000, CRC(ac2243ea) SHA1(27c31e5102defa4f3982875b30a67e89af40d4ff) ) + ROM_LOAD32_WORD("0400469v.u12", 0x0100002, 0x0080000, CRC(72d992ed) SHA1(94560305dacbe776ddc95114ad5e5ffaa234937c) ) + ROM_LOAD32_WORD("0400469v.u7", 0x0000000, 0x0080000, CRC(7f7972b6) SHA1(25991f476f55cd1eddc8e63af9c472c1d7e83481) ) + ROM_LOAD32_WORD("0400469v.u8", 0x0100000, 0x0080000, CRC(a10a4bff) SHA1(e6b36542dab8a3405579b333a125a6d3fd801b50) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( mgctouc ) +ROM_START( montree ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Magic Touch.u11", 0x0000002, 0x0080000, CRC(614984e4) SHA1(e95d576993e8d9c0964899a7d5556c8e62d79242) ) - ROM_LOAD32_WORD("Magic Touch.u12", 0x0100002, 0x0080000, CRC(f54c18db) SHA1(85bcc202f7425b3b7ef456c1c2db5a22648068a8) ) - ROM_LOAD32_WORD("Magic Touch.u13", 0x0200002, 0x0080000, CRC(cfd2a86e) SHA1(66891a1b0e85ad7146b733f4b5d806db789d8821) ) - ROM_LOAD32_WORD("Magic Touch.u7", 0x0000000, 0x0080000, CRC(9fa3ee86) SHA1(ce7546b8d1dbf90eb8f4f8d3255dc1c215c966a7) ) - ROM_LOAD32_WORD("Magic Touch.u8", 0x0100000, 0x0080000, CRC(d7faf84d) SHA1(d2e49787d177767671fab64a723e1af619ce9ad2) ) - ROM_LOAD32_WORD("Magic Touch.u9", 0x0200000, 0x0080000, CRC(0e140453) SHA1(8b516fe598c7e754a471246effa1185845495640) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD("0201397v.u11", 0x0000002, 0x0080000, CRC(7a03e436) SHA1(016e6e36f7ca6f4c3b427cf98a1415ef6aa57225) ) + ROM_LOAD32_WORD("0201397v.u12", 0x0100002, 0x0080000, CRC(b11f51d0) SHA1(1579a24d470f418713334259368c7a4e35e8b5d3) ) + ROM_LOAD32_WORD("0201397v.u13", 0x0200002, 0x0080000, CRC(e1f23c3f) SHA1(fe74c219c738625257fb62806e271a60075aaa07) ) + ROM_LOAD32_WORD("0201397v.u7", 0x0000000, 0x0080000, CRC(982a0078) SHA1(163c15aebd2be623c0f2c7641360336399bc1f4f) ) + ROM_LOAD32_WORD("0201397v.u8", 0x0100000, 0x0080000, CRC(878b6419) SHA1(572d6a10cbf2b96e9afee4b3f32e9ad1ce7eabbb) ) + ROM_LOAD32_WORD("0201397v.u9", 0x0200000, 0x0080000, CRC(816fda3f) SHA1(d5eb7572a93e2a4681a2b1db7f302c5528f1c1c3) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( monmous ) +ROM_START( mountmon ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("MONEYMOUSE.u11", 0x0000002, 0x0080000, CRC(ac2243ea) SHA1(27c31e5102defa4f3982875b30a67e89af40d4ff) ) - ROM_LOAD32_WORD("MONEYMOUSE.u12", 0x0100002, 0x0080000, CRC(72d992ed) SHA1(94560305dacbe776ddc95114ad5e5ffaa234937c) ) - ROM_LOAD32_WORD("MONEYMOUSE.u7", 0x0000000, 0x0080000, CRC(7f7972b6) SHA1(25991f476f55cd1eddc8e63af9c472c1d7e83481) ) - ROM_LOAD32_WORD("MONEYMOUSE.u8", 0x0100000, 0x0080000, CRC(a10a4bff) SHA1(e6b36542dab8a3405579b333a125a6d3fd801b50) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD("0100294v.u11", 0x0000002, 0x0080000, CRC(4fb2a4dc) SHA1(23895b701387f7442a31969989d21cefe2a25efd) ) + ROM_LOAD32_WORD("0100294v.u7", 0x0000000, 0x0080000, CRC(b84342af) SHA1(e27e65730ddc897b01e8875a4da3ea2d6db2b858) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( moutmon ) +ROM_START( multidrw ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Mountain Money.u11", 0x0000002, 0x0080000, CRC(4fb2a4dc) SHA1(23895b701387f7442a31969989d21cefe2a25efd) ) - ROM_LOAD32_WORD("Mountain Money.u7", 0x0000000, 0x0080000, CRC(b84342af) SHA1(e27e65730ddc897b01e8875a4da3ea2d6db2b858) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0200956v.u11", 0x0000002, 0x0080000, CRC(ac8503fa) SHA1(30640a9c01239173c7430a46dcd2e2b28024c0cf) ) + ROM_LOAD32_WORD("0200956v.u12", 0x0100002, 0x0080000, CRC(cd0dfdf5) SHA1(7bcf77c1bcd023b4ab08cef329dcf39dc2ca09d6) ) + ROM_LOAD32_WORD("0200956v.u13", 0x0200002, 0x0080000, CRC(0d6f7ec5) SHA1(0a80257eb464e50292554f45583f3d7b85de2bc3) ) + ROM_LOAD32_WORD("0200956v.u7", 0x0000000, 0x0080000, CRC(7570eb03) SHA1(0fded55ee2d12cfae96e2910c68a131cd89147a0) ) + ROM_LOAD32_WORD("0200956v.u8", 0x0100000, 0x0080000, CRC(8c54bd65) SHA1(5870558f8b96fca2c355ccc6ffc09fc4684d141c) ) + ROM_LOAD32_WORD("0200956v.u9", 0x0200000, 0x0080000, CRC(10b96156) SHA1(1f89e0d8d210d2fd7e0b78b0205eb626d7c39542) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( mystgrd ) +ROM_START( mystgard ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) ROM_LOAD32_WORD("Mystic Garden.u11", 0x0000002, 0x0080000, CRC(6e618fc5) SHA1(a02e7ca2433cf8128d74792833d9708a3ba5df4b) ) ROM_LOAD32_WORD("Mystic Garden.u7", 0x0000000, 0x0080000, CRC(28d15442) SHA1(ee33017f3efcf688a43ea1d7f2b74b4b9a6d2cae) ) -ROM_END_REGIONS - - + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END ROM_START( orchidms ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Orchid Mist.u11", 0x0000002, 0x0080000, CRC(fe79410b) SHA1(c91a0ce0cf87db518f910e9f47cabdcb91dc5496) ) - ROM_LOAD32_WORD("Orchid Mist.u12", 0x0100002, 0x0080000, CRC(165a762d) SHA1(8487d2e32bd2fab5a9114380ba2be6d34b097b11) ) - ROM_LOAD32_WORD("Orchid Mist.u7", 0x0000000, 0x0080000, CRC(5d18ae22) SHA1(c10f7a83f51cfe75653ace8066b7dedf07e91b28) ) - ROM_LOAD32_WORD("Orchid Mist.u8", 0x0100000, 0x0080000, CRC(09ec43e3) SHA1(947ed0982a148e6906666378e8c82315d40237d7) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD("0100275v.u11", 0x0000002, 0x0080000, CRC(fe79410b) SHA1(c91a0ce0cf87db518f910e9f47cabdcb91dc5496) ) + ROM_LOAD32_WORD("0100275v.u12", 0x0100002, 0x0080000, CRC(165a762d) SHA1(8487d2e32bd2fab5a9114380ba2be6d34b097b11) ) + ROM_LOAD32_WORD("0100275v.u7", 0x0000000, 0x0080000, CRC(5d18ae22) SHA1(c10f7a83f51cfe75653ace8066b7dedf07e91b28) ) + ROM_LOAD32_WORD("0100275v.u8", 0x0100000, 0x0080000, CRC(09ec43e3) SHA1(947ed0982a148e6906666378e8c82315d40237d7) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( oscarar ) +ROM_START( oscara5 ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Oscar.u11", 0x0000002, 0x0080000, CRC(11394e80) SHA1(1c6e7e954a6118e04da9d761fef8ec00c46d2af8) ) - ROM_LOAD32_WORD("Oscar.u7", 0x0000000, 0x0080000, CRC(930bdc00) SHA1(36b1a289abebc7cce64e767e201d8f8f7fe80cf2) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0200348v.u11", 0x0000002, 0x0080000, CRC(11394e80) SHA1(1c6e7e954a6118e04da9d761fef8ec00c46d2af8) ) + ROM_LOAD32_WORD("0200348v.u7", 0x0000000, 0x0080000, CRC(930bdc00) SHA1(36b1a289abebc7cce64e767e201d8f8f7fe80cf2) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END ROM_START( pantmag ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Panther Magic 200.u11", 0x0000002, 0x0080000, CRC(0914594c) SHA1(b1bc1302847e3ea3c4ed96ae17047da031e5ca1a) ) - ROM_LOAD32_WORD("Panther Magic 200.u12", 0x0100002, 0x0080000, CRC(eae75fa9) SHA1(576c8cf98ad4032bbdde12162e2c1bdd10056762) ) - ROM_LOAD32_WORD("Panther Magic 200.u7", 0x0000000, 0x0080000, CRC(6383899d) SHA1(df96af7cb580565715da6e78b83e7ba6832028e7) ) - ROM_LOAD32_WORD("Panther Magic 200.u8", 0x0100000, 0x0080000, CRC(db840d1b) SHA1(26ff790cd21f2005ae3a3e879ef07b87c8ae0020) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0101046v.u11", 0x0000002, 0x0080000, CRC(0914594c) SHA1(b1bc1302847e3ea3c4ed96ae17047da031e5ca1a) ) + ROM_LOAD32_WORD("0101046v.u12", 0x0100002, 0x0080000, CRC(eae75fa9) SHA1(576c8cf98ad4032bbdde12162e2c1bdd10056762) ) + ROM_LOAD32_WORD("0101046v.u7", 0x0000000, 0x0080000, CRC(6383899d) SHA1(df96af7cb580565715da6e78b83e7ba6832028e7) ) + ROM_LOAD32_WORD("0101046v.u8", 0x0100000, 0x0080000, CRC(db840d1b) SHA1(26ff790cd21f2005ae3a3e879ef07b87c8ae0020) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( peaflut ) +// MV4115/6 - 9/20 Line Multiline Multiplier. +// Party Gras [Reel Game] - Export A - 10/11/2001. +// All devices are 27c4002 instead of 27c4096. +ROM_START( partygrs ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("PEACOCKFLUTTER.u11", 0x0000002, 0x0080000, CRC(3134818c) SHA1(6fe158608b5da648fafd20cbcd213e6f2dc2104c) ) - ROM_LOAD32_WORD("PEACOCKFLUTTER.u12", 0x0100002, 0x0080000, CRC(2d96c449) SHA1(af98a864b9ed3f95227fd0d6edc6a38c0544c93f) ) - ROM_LOAD32_WORD("PEACOCKFLUTTER.u7", 0x0000000, 0x0080000, CRC(e4497f35) SHA1(7030aba6c17fc391564385f5669e07edc94dca61) ) - ROM_LOAD32_WORD("PEACOCKFLUTTER.u8", 0x0100000, 0x0080000, CRC(f239ca62) SHA1(53e3e2a4d62ceb9e921606e3670470c09e82118f) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD( "ahg1567.u7", 0x000000, 0x80000, CRC(53047385) SHA1(efe50e8785047986513f2de63d2425ba80417481) ) + ROM_LOAD32_WORD( "ahg1567.u11", 0x000002, 0x80000, CRC(f8bd9f7f) SHA1(a8c67a644f9090890e8f33e620fe0bb4633bd6e8) ) + ROM_LOAD32_WORD( "ahg1567.u8", 0x100000, 0x80000, CRC(0b98a0fa) SHA1(c9ada21e39472f28cd9b8ec19be7235410ad3e7a) ) + ROM_LOAD32_WORD( "ahg1567.u12", 0x100002, 0x80000, CRC(00d1395c) SHA1(d9a66d6cdb5aa4f583d8c23306b1416646cbde93) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( pengpay ) +// MV4115/3 - 20 Line Multiline / 3,5,10,20,25,50 Credit Multiplier. +// Party Gras - Export B - 06/02/2001. +// Marked as BHG1284 and 'touch'. +ROM_START( partygrsa ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Penguin_Pays.u11", 0x0000002, 0x0080000, CRC(82fc4e23) SHA1(54e7698c4deed7202da8f178698ecdcf85f3f640) ) - ROM_LOAD32_WORD("Penguin_Pays.u12", 0x0100002, 0x0080000, CRC(90864742) SHA1(f6491e4fbce5d642b9d0224118923b56625338b1) ) - ROM_LOAD32_WORD("Penguin_Pays.u7", 0x0000000, 0x0080000, CRC(47145744) SHA1(74a186a15537d8b05ce23f37c53f351e8058b0b2) ) - ROM_LOAD32_WORD("Penguin_Pays.u8", 0x0100000, 0x0080000, CRC(8d37d7bf) SHA1(9c9b86cce9492f9de346e5a6944e2f0c5da6b9b1) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD( "bhg1284.u7", 0x000000, 0x80000, CRC(02ed0631) SHA1(ae2c89c876a030d325ec94490d293deba772630e) ) + ROM_LOAD32_WORD( "bhg1284.u11", 0x000002, 0x80000, CRC(7ac80cd9) SHA1(70e910784a1e1ea8820005082e76223a85a3c346) ) + ROM_LOAD32_WORD( "bhg1284.u8", 0x100000, 0x80000, CRC(28774b9a) SHA1(ebdd738a73ffa7c5238640f4d7956751f7bb6243) ) + ROM_LOAD32_WORD( "bhg1284.u12", 0x100002, 0x80000, CRC(942835c1) SHA1(fefc509311716559ac6b836a56b2c981907d499b) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( przfigha ) +ROM_START( peaflut ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("PRIZEFIGHT.u11", 0x0000002, 0x0080000, CRC(e1bf20d7) SHA1(bcc308b884433b3ebd890fafa667235a9fb7876c) ) - ROM_LOAD32_WORD("PRIZEFIGHT.u12", 0x0100002, 0x0080000, CRC(b4797555) SHA1(695aa6c40145fd9856821288680a24d316b7d4cd) ) - ROM_LOAD32_WORD("PRIZEFIGHT.u13", 0x0200002, 0x0080000, CRC(c16197d5) SHA1(716c4afdf2acde10ff09ad90b03bc5e689f0a737) ) - ROM_LOAD32_WORD("PRIZEFIGHT.u7", 0x0000000, 0x0080000, CRC(2b1a9678) SHA1(c75de4c76cd934df746040d0515694d92e2fc145) ) - ROM_LOAD32_WORD("PRIZEFIGHT.u8", 0x0100000, 0x0080000, CRC(92b68d43) SHA1(74ba55d6c7016de26692138d194f57f016feb938) ) - ROM_LOAD32_WORD("PRIZEFIGHT.u9", 0x0200000, 0x0080000, CRC(b3163b0c) SHA1(e9aac4acb31a9af194626b25517aa7c169fe40bf) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD("02j00011.u11", 0x0000002, 0x0080000, CRC(3134818c) SHA1(6fe158608b5da648fafd20cbcd213e6f2dc2104c) ) + ROM_LOAD32_WORD("02j00011.u12", 0x0100002, 0x0080000, CRC(2d96c449) SHA1(af98a864b9ed3f95227fd0d6edc6a38c0544c93f) ) + ROM_LOAD32_WORD("02j00011.u7", 0x0000000, 0x0080000, CRC(e4497f35) SHA1(7030aba6c17fc391564385f5669e07edc94dca61) ) + ROM_LOAD32_WORD("02j00011.u8", 0x0100000, 0x0080000, CRC(f239ca62) SHA1(53e3e2a4d62ceb9e921606e3670470c09e82118f) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( qncsh ) +ROM_START( pengpay ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("queensofcash.u11", 0x0000002, 0x0080000, CRC(5001567e) SHA1(eadde9750856a7920e06955adc0db46082da655a) ) - ROM_LOAD32_WORD("queensofcash.u12", 0x0100002, 0x0080000, CRC(bfedb3fc) SHA1(e115db94b8ee7babb29e31e64b96d181f5c6491b) ) - ROM_LOAD32_WORD("queensofcash.u7", 0x0000000, 0x0080000, CRC(591c96eb) SHA1(acd6f02206086d710a92401c618f715b3646d78a) ) - ROM_LOAD32_WORD("queensofcash.u8", 0x0100000, 0x0080000, CRC(31ed5795) SHA1(8238da7c87195339d34cf24b3e0a7f3bf53d2b8a) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD("0200460v.u11", 0x0000002, 0x0080000, CRC(82fc4e23) SHA1(54e7698c4deed7202da8f178698ecdcf85f3f640) ) + ROM_LOAD32_WORD("0200460v.u12", 0x0100002, 0x0080000, CRC(90864742) SHA1(f6491e4fbce5d642b9d0224118923b56625338b1) ) + ROM_LOAD32_WORD("0200460v.u7", 0x0000000, 0x0080000, CRC(47145744) SHA1(74a186a15537d8b05ce23f37c53f351e8058b0b2) ) + ROM_LOAD32_WORD("0200460v.u8", 0x0100000, 0x0080000, CRC(8d37d7bf) SHA1(9c9b86cce9492f9de346e5a6944e2f0c5da6b9b1) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( sumospin ) +ROM_START( pengpaya ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Sumo Spins.u11", 0x0000002, 0x0080000, CRC(919999fe) SHA1(3d800df5e0abed04c76928b04973ea7c7b02e5d1) ) - ROM_LOAD32_WORD("Sumo Spins.u12", 0x0100002, 0x0080000, CRC(ba3eede2) SHA1(708a25af0908a1aa874b3ca4897816c65b0c9178) ) - ROM_LOAD32_WORD("Sumo Spins.u7", 0x0000000, 0x0080000, CRC(c3ec9f97) SHA1(62c886cc794de4b915533729c5ea5a71a4b59108) ) - ROM_LOAD32_WORD("Sumo Spins.u8", 0x0100000, 0x0080000, CRC(eb47f317) SHA1(43ead31e788cce1aa03011f634e939489d965144) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD("0200357v.u11", 0x0000002, 0x0080000, CRC(7dd73770) SHA1(14a2edf8cd33280464f979976486e1a9ae73cef5) ) + ROM_LOAD32_WORD("0200357v.u12", 0x0100002, 0x0080000, CRC(123cbe90) SHA1(b51b84f79e0822a1be71485bbad514ab9fa55622) ) + ROM_LOAD32_WORD("0200357v.u7", 0x0000000, 0x0080000, CRC(cb21de26) SHA1(5a730f08db4d91b18f0b5a1f489f1d982b08edcc) ) + ROM_LOAD32_WORD("0200357v.u8", 0x0100000, 0x0080000, CRC(aa95406b) SHA1(fbec024dd210757a79a5ea4def79f88fed971e71) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( sbucks3 ) +ROM_START( pengpayb ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("SUPERBUCKS3.u11", 0x0000002, 0x0080000, CRC(a810782c) SHA1(5d59b464c44ec32b2b977f8326c8bf3424a61e07) ) - ROM_LOAD32_WORD("SUPERBUCKS3.u12", 0x0100002, 0x0080000, CRC(a585172d) SHA1(3c74efb11285ff78ce76a7e8af2f936d3dc31290) ) - ROM_LOAD32_WORD("SUPERBUCKS3.u7", 0x0000000, 0x0080000, CRC(e056c7db) SHA1(7a555583f750d8275b2ffd25a0efbe370a5ac43c) ) - ROM_LOAD32_WORD("SUPERBUCKS3.u8", 0x0100000, 0x0080000, CRC(2ff83479) SHA1(2f0c6c12e115a5592c29e806a946817a4f1b89a3) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0200359v.u11", 0x0000002, 0x0080000, CRC(c0f20ef7) SHA1(4df3aa337a2d4dd8ef29f4839b003c96fe1df526) ) + ROM_LOAD32_WORD("0200359v.u12", 0x0100002, 0x0080000, CRC(d2882682) SHA1(dd42edca8ef9d28dd5b16fe8132f8e0fb3c85979) ) + ROM_LOAD32_WORD("0200359v.u7", 0x0000000, 0x0080000, CRC(f51c4e02) SHA1(fca30b3ce0d063966df1e878338596d050664695) ) + ROM_LOAD32_WORD("0200359v.u8", 0x0100000, 0x0080000, CRC(23ea514d) SHA1(bcb83a8d768b078a03260a00fa09a4e2350c568c) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( tretrva ) +// 586/7(b) - 10 Credit Multiplier / 9 Line Multiline. +// Penguin Pays - Export B - 14/07/97. +// All devices are 27c4002 instead of 27c4096. +ROM_START( pengpayu ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Treasure Trove.u11", 0x0000002, 0x0080000, CRC(020a588d) SHA1(4759bef22017fb4c47c87adb6ca7253fdb6bca6b) ) - ROM_LOAD32_WORD("Treasure Trove.u12", 0x0100002, 0x0080000, CRC(715f53cb) SHA1(364c35fc2d36180c13127c8004a8729126f68db1) ) - ROM_LOAD32_WORD("Treasure Trove.u7", 0x0000000, 0x0080000, CRC(07a8b338) SHA1(7508d7d0e3494d355cb773165b240ba876a60eec) ) - ROM_LOAD32_WORD("Treasure Trove.u8", 0x0100000, 0x0080000, CRC(89a042e7) SHA1(0f95cfd42ce7130176d42c6bbdf8ff22a6662894) ) -ROM_END_REGIONS + ROM_LOAD32_WORD( "bhi041703.u7", 0x000000, 0x80000, CRC(19d75260) SHA1(798472b1b5d8f5ca99d8bfe57e99a76686f0aa3f) ) + ROM_LOAD32_WORD( "bhi041703.u11", 0x000002, 0x80000, CRC(2b010813) SHA1(a383997308881a3ac35de56fe10e3852fa89fdf6) ) + ROM_LOAD32_WORD( "bhi041703.u8", 0x100000, 0x80000, CRC(6aeaebc8) SHA1(6f70b14e9f4e9940512bd6e89bc9ccbfe1f4a81f) ) + ROM_LOAD32_WORD( "bhi041703.u12", 0x100002, 0x80000, CRC(d959a048) SHA1(92f69090d599f95b48e79213e5b7d486e083d8f4) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( triptrea ) +ROM_START( petshop ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Triple Treat.u11", 0x0000002, 0x0080000, CRC(fbc125b8) SHA1(55dbc3a236804f4a8d26be8e49c29fa5943c5bd6) ) - ROM_LOAD32_WORD("Triple Treat.u12", 0x0100002, 0x0080000, CRC(5df3854a) SHA1(2b5175835c587caccafb73a1a5c8abf8f8463cf4) ) - ROM_LOAD32_WORD("Triple Treat.u13", 0x0200002, 0x0080000, CRC(0a0b0ce1) SHA1(41a4d613cf1828df1832c087f0bc18d31076f056) ) - ROM_LOAD32_WORD("Triple Treat.u7", 0x0000000, 0x0080000, CRC(7bc25bba) SHA1(d5f7c3a4bc3c652f57ee4cdbc883ec82069365d1) ) - ROM_LOAD32_WORD("Triple Treat.u8", 0x0100000, 0x0080000, CRC(ef976f78) SHA1(d2c89e8d3bf6af112a99354133f308a5aabad46e) ) - ROM_LOAD32_WORD("Triple Treat.u9", 0x0200000, 0x0080000, CRC(776fbfd2) SHA1(27820dbc6ee1424706aea9c4574da117636fef17) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0100679v.u11", 0x0000002, 0x007fffd, BAD_DUMP CRC(bfaa9216) SHA1(19f1c7de05ff7f5f9f370be00cf8f0635e966809) ) // wrong size! + ROM_LOAD32_WORD("0100679v.u12", 0x0100002, 0x0080000, CRC(2cd12986) SHA1(b6b0bd6dd8c964498edc3763cb5c450795042a8d) ) + ROM_LOAD32_WORD("0100679v.u7", 0x0000000, 0x0080000, CRC(cf4a24fa) SHA1(b510de9199d16ba7319e1b692d7c6c09fcb735dc) ) + ROM_LOAD32_WORD("0100679v.u8", 0x0100000, 0x0080000, CRC(bb9f7519) SHA1(fa311f1ec74c3b52e2feed36d7b7dc6a12336abe) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( trjhrs ) +ROM_START( przfight ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("TROJANHORSE.u11", 0x0000002, 0x0080000, CRC(8c04ed89) SHA1(6727da3a457841e893e27bc8f10d4bb58a61f338) ) - ROM_LOAD32_WORD("TROJANHORSE.u12", 0x0100002, 0x0080000, CRC(1eb021a4) SHA1(3195eb5923da018b6c2dac10b70c47aef54dca35) ) - ROM_LOAD32_WORD("TROJANHORSE.u13", 0x0200002, 0x0080000, CRC(b6d1ceb6) SHA1(b41200620aaa905697ac73b4c86496a53f070ed3) ) - ROM_LOAD32_WORD("TROJANHORSE.u7", 0x0000000, 0x0080000, CRC(7be0caf5) SHA1(b83fba7eb4624b3dc56f763b48b7c45fe31f3396) ) - ROM_LOAD32_WORD("TROJANHORSE.u8", 0x0100000, 0x0080000, CRC(246d3693) SHA1(8c8b893c21e9a486fd36677d7157787bf5d6237b) ) - ROM_LOAD32_WORD("TROJANHORSE.u9", 0x0200000, 0x0080000, CRC(15dee624) SHA1(d678ef7c25419342a1512fab84394e99309009ec) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD("0100299v.u11", 0x0000002, 0x0080000, CRC(e1bf20d7) SHA1(bcc308b884433b3ebd890fafa667235a9fb7876c) ) + ROM_LOAD32_WORD("0100299v.u12", 0x0100002, 0x0080000, CRC(b4797555) SHA1(695aa6c40145fd9856821288680a24d316b7d4cd) ) + ROM_LOAD32_WORD("0100299v.u13", 0x0200002, 0x0080000, CRC(c16197d5) SHA1(716c4afdf2acde10ff09ad90b03bc5e689f0a737) ) + ROM_LOAD32_WORD("0100299v.u7", 0x0000000, 0x0080000, CRC(2b1a9678) SHA1(c75de4c76cd934df746040d0515694d92e2fc145) ) + ROM_LOAD32_WORD("0100299v.u8", 0x0100000, 0x0080000, CRC(92b68d43) SHA1(74ba55d6c7016de26692138d194f57f016feb938) ) + ROM_LOAD32_WORD("0100299v.u9", 0x0200000, 0x0080000, CRC(b3163b0c) SHA1(e9aac4acb31a9af194626b25517aa7c169fe40bf) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END +ROM_START( qcash ) + ARISTOCRAT_MK5_BIOS + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD("0100706v.u11", 0x0000002, 0x0080000, CRC(5001567e) SHA1(eadde9750856a7920e06955adc0db46082da655a) ) + ROM_LOAD32_WORD("0100706v.u12", 0x0100002, 0x0080000, CRC(bfedb3fc) SHA1(e115db94b8ee7babb29e31e64b96d181f5c6491b) ) + ROM_LOAD32_WORD("0100706v.u7", 0x0000000, 0x0080000, CRC(591c96eb) SHA1(acd6f02206086d710a92401c618f715b3646d78a) ) + ROM_LOAD32_WORD("0100706v.u8", 0x0100000, 0x0080000, CRC(31ed5795) SHA1(8238da7c87195339d34cf24b3e0a7f3bf53d2b8a) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( wildbill ) +ROM_START( qnile ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Wild Bill.u11", 0x0000002, 0x0080000, CRC(57b3c340) SHA1(4f95ed7fed697cf2bfbde8215f6e35768cf20334) ) - ROM_LOAD32_WORD("Wild Bill.u7", 0x0000000, 0x0080000, CRC(e3117ab7) SHA1(c13912f524f1c1d373adb6382ceddd1bc18f7f02) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0100439v.u11", 0x0000002, 0x0080000, CRC(ca4fe491) SHA1(2bd799f95c9a5afb7c96305bf56413ba864a26dd) ) + ROM_LOAD32_WORD("0100439v.u12", 0x0100002, 0x0080000, CRC(bdcec4eb) SHA1(ef3658460263cd2e68e10015efdc016ad705213e) ) + ROM_LOAD32_WORD("0100439v.u7", 0x0000000, 0x0080000, CRC(f359afcf) SHA1(a8cbaea899f0108a179c58ec97241a57227afa79) ) + ROM_LOAD32_WORD("0100439v.u8", 0x0100000, 0x0080000, CRC(80efde3a) SHA1(1fac1b150c5c8c52a4caaa01c4571a0e7033278d) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( wldcoug ) +ROM_START( qnilea ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Wild Cougar.u11", 0x0000002, 0x0080000, CRC(6a5f2c41) SHA1(1365e083d44a373c2d4f17e8e61ec716ffb6d2d5) ) - ROM_LOAD32_WORD("Wild Cougar.u12", 0x0100002, 0x0080000, CRC(85bb41a7) SHA1(335f29f10f216e202b93b46a376958c3f5271461) ) - ROM_LOAD32_WORD("Wild Cougar.u7", 0x0000000, 0x0080000, CRC(47154679) SHA1(21749fbaa60f9bf1db43bdd272e6628ae73bf759) ) - ROM_LOAD32_WORD("Wild Cougar.u8", 0x0100000, 0x0080000, CRC(c262d098) SHA1(87940bd0aef6cb0f5ff21ccda4b209eef8e97eb1) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD("0300440v.u11", 0x0000002, 0x0080000, CRC(b5b76fb0) SHA1(40cb57e168f7884d64f6779e4e3b532c69df63b8) ) + ROM_LOAD32_WORD("0300440v.u12", 0x0100002, 0x0080000, CRC(52bd3694) SHA1(bcfa3054c7577f7a1653b756828d048a5f1776e7) ) + ROM_LOAD32_WORD("0300440v.u7", 0x0000000, 0x0080000, CRC(0076da68) SHA1(ed301c102e88d5b637144ed32042da46780e5b34) ) + ROM_LOAD32_WORD("0300440v.u8", 0x0100000, 0x0080000, CRC(a6b856a2) SHA1(2a9ea01f64fa56dea86b0cd25e19dace34c17d0f) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( chariotca ) - ARISTOCRAT_MK5_BIOS +ROM_START( qnileb ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("u11", 0x0000002, 0x0080000, CRC(bcbf9de9) SHA1(191ce749fe0d29b2783fb78d9338a00d65104daa) ) - ROM_LOAD32_WORD("u12", 0x0100002, 0x0080000, CRC(b44cf571) SHA1(04447820e015425493cade5611b3eb2f21e48c2e) ) - ROM_LOAD32_WORD("u7", 0x0000000, 0x0080000, CRC(845f9913) SHA1(df6121290b30ff4a9c2d0e690cf8e7797e9a8612) ) - ROM_LOAD32_WORD("u8", 0x0100000, 0x0080000, CRC(a3a74ecb) SHA1(52b3a41573a9fa1de05ce01a858e400f80e595b8) ) -ROM_END_REGIONS + ROM_LOAD32_WORD( "0200439v.u7", 0x000000, 0x80000, CRC(d476a893) SHA1(186d6fb1830c33976f2d3c96e4f045ece885dc63) ) + ROM_LOAD32_WORD( "0200439v.u11", 0x000002, 0x80000, CRC(8b0d7205) SHA1(ffa03f1c9332a1a7443eb91b0ded56e7cd9e3cee) ) + ROM_LOAD32_WORD( "0200439v.u8", 0x100000, 0x80000, CRC(9b996ef1) SHA1(72489e9a0ee5c34f7cad3d121bcd08e09ef72360) ) + ROM_LOAD32_WORD( "0200439v.u12", 0x100002, 0x80000, CRC(2a0f7feb) SHA1(27c89dadf759e6c892121650758c44ec50990cb6) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( chkmatar ) - ARISTOCRAT_MK5_BIOS +ROM_START( qnilec ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("u11", 0x0000002, 0x0080000, CRC(5fb7bfb3) SHA1(2ad8b3c4753d19f9e3254ef3f4059951d7a111b4) ) - ROM_LOAD32_WORD("u12", 0x0100002, 0x0080000, CRC(b538bcbc) SHA1(cda404f9b16e7e76a33c208f62a5ac9c5e02aac4) ) - ROM_LOAD32_WORD("u13", 0x0200002, 0x0080000, CRC(ad12a718) SHA1(0c36729cb8da800668f533f65fcc870f5dfc0f6a) ) - ROM_LOAD32_WORD("u7", 0x0000000, 0x0080000, CRC(059b940e) SHA1(f637508dafbd37169429c495a893addbc6d28834) ) - ROM_LOAD32_WORD("u8", 0x0100000, 0x0080000, CRC(6912cc4a) SHA1(9469a6a0d2fd39d85655a8c7bc0668752f5f11fa) ) - ROM_LOAD32_WORD("u9", 0x0200000, 0x0080000, CRC(53a573f0) SHA1(d51d698dcec273d157319200ad1c215e930b96ce) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD( "0300439v.u7", 0x000000, 0x80000, CRC(63f9129e) SHA1(a513fd47d3ca4fe007730a06e5f6ffc2891dc74f) ) + ROM_LOAD32_WORD( "0300439v.u11", 0x000002, 0x80000, CRC(7217c3af) SHA1(518c3d79758e3253f937cf73da9398fa812bf4bc) ) + ROM_LOAD32_WORD( "0300439v.u8", 0x100000, 0x80000, CRC(90c92bf8) SHA1(bbc558ffb5a883c9f4ff9dc3362c4081990c970d) ) + ROM_LOAD32_WORD( "0300439v.u12", 0x100002, 0x80000, CRC(eec01bb4) SHA1(146fdce6b32a21659dc775e4a5f3bb027bd09825) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( kgalah ) - ARISTOCRAT_MK5_BIOS +// MV4091 - 10 Credit Multiplier / 9 Line Multiline. +// QUEEN OF THE NILE - NSW/ACT B - 13/05/97. +// Marked as GHG409102 +// All devices are 27c4002 instead of 27c4096. +// Even when it's a NSW/ACT, the program seems to be for US-Export platforms... +ROM_START( qnileu ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("u11", 0x0000002, 0x0080000, CRC(2b52a5e2) SHA1(0c852c6672a46f269f1407db0dd1825a51f242cc) ) - ROM_LOAD32_WORD("u12", 0x0100002, 0x0080000, CRC(15d5bfb4) SHA1(7c48dabfd83cc30fe2ffd0b4de63fbc9dc56ee2f) ) - ROM_LOAD32_WORD("u7", 0x0000000, 0x0080000, CRC(9333543a) SHA1(dbbd59de046c35e70e71836b342eb5ecf4799575) ) - ROM_LOAD32_WORD("u8", 0x0100000, 0x0080000, CRC(08bea3b7) SHA1(9a5d8cf60c9643061dede926a04006a9a674fd8f) ) -ROM_END_REGIONS + ROM_LOAD32_WORD( "ghg409102.u7", 0x000000, 0x80000, CRC(a00ab2cf) SHA1(eb3120fe4b1d0554c224c7646e727e86fd35975e) ) + ROM_LOAD32_WORD( "ghg409102.u11", 0x000002, 0x80000, CRC(c4a35337) SHA1(d469ed154caed1f0a4cf89e67d852924c95172ed) ) + ROM_LOAD32_WORD( "ghg409102.u8", 0x100000, 0x80000, CRC(16a629e1) SHA1(0dee11a2f1b2068a86b3e0b6c01d115555a657c9) ) + ROM_LOAD32_WORD( "ghg409102.u12", 0x100002, 0x80000, CRC(7871a846) SHA1(ac1d741092afda842e1864f1a7a14137a9ee46d9) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END +ROM_START( qnilemax ) + ARISTOCRAT_MK5_BIOS + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD("0401072v.u10", 0x0300000, 0x0080000, CRC(8491dbc4) SHA1(f0d4e470f0774a6aac168334390c116fd3d1075e) ) + ROM_LOAD32_WORD("0401072v.u11", 0x0000002, 0x0080000, CRC(6ae3872f) SHA1(f8c1b31e4ebd4833dcc2b7cfff25f6473ad78f4e) ) + ROM_LOAD32_WORD("0401072v.u12", 0x0100002, 0x0080000, CRC(65cea496) SHA1(4b827e2707c259717bf759e76dca1c96efada926) ) + ROM_LOAD32_WORD("0401072v.u13", 0x0200002, 0x0080000, CRC(1b77bbd0) SHA1(c93d2f844032631d9594d02fa6ac41e21025a8ea) ) + ROM_LOAD32_WORD("0401072v.u14", 0x0300002, 0x0080000, CRC(4fbccf72) SHA1(97d6bb400caf78cb673a324d48d2580f1bbb1acd) ) + ROM_LOAD32_WORD("0401072v.u7", 0x0000000, 0x0080000, CRC(4ac2a82e) SHA1(3fc50e97ad48c57e21a37fbb6142152c72055ad4) ) + ROM_LOAD32_WORD("0401072v.u8", 0x0100000, 0x0080000, CRC(abbbf1de) SHA1(5efd88213180846ad8347e017e5ccee5b80b95d0) ) + ROM_LOAD32_WORD("0401072v.u9", 0x0200000, 0x0080000, CRC(750150eb) SHA1(a9ffe0b0bb2ef83a696fa568b0264d27bc650120) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( qonilea ) +ROM_START( rainwrce ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("QUEENOFTHENILE.u11", 0x0000002, 0x0080000, CRC(ca4fe491) SHA1(2bd799f95c9a5afb7c96305bf56413ba864a26dd) ) - ROM_LOAD32_WORD("QUEENOFTHENILE.u12", 0x0100002, 0x0080000, CRC(bdcec4eb) SHA1(ef3658460263cd2e68e10015efdc016ad705213e) ) - ROM_LOAD32_WORD("QUEENOFTHENILE.u7", 0x0000000, 0x0080000, CRC(f359afcf) SHA1(a8cbaea899f0108a179c58ec97241a57227afa79) ) - ROM_LOAD32_WORD("QUEENOFTHENILE.u8", 0x0100000, 0x0080000, CRC(80efde3a) SHA1(1fac1b150c5c8c52a4caaa01c4571a0e7033278d) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0101332v.u10", 0x0300000, 0x0080000, CRC(39f5861f) SHA1(c614ebe2c324d5c3fff32379300f2869fba49d39) ) + ROM_LOAD32_WORD("0101332v.u11", 0x0000002, 0x0080000, CRC(4170c68d) SHA1(bc00af27bcc176f8d9c9fd0ec1a7139e28f85113) ) + ROM_LOAD32_WORD("0101332v.u12", 0x0100002, 0x0080000, CRC(b8afd281) SHA1(2d73b5af667d36e8b29e9fc3cc62f220daeffbb9) ) + ROM_LOAD32_WORD("0101332v.u13", 0x0200002, 0x0080000, CRC(36debb0e) SHA1(4aaa495f74dfb13aa1dc47f3a8af8e54496c1ab8) ) + ROM_LOAD32_WORD("0101332v.u14", 0x0300002, 0x0080000, CRC(92274626) SHA1(fae8d89efba9bf3d171bfe484015d009786ce40d) ) + ROM_LOAD32_WORD("0101332v.u7", 0x0000000, 0x0080000, CRC(68d9bf78) SHA1(6170ea26ebc732abbc26ba1da35a081c8aa8d154) ) + ROM_LOAD32_WORD("0101332v.u8", 0x0100000, 0x0080000, CRC(98ebea6f) SHA1(2d78cec777581a87bb4b84e7acd183b237c83e52) ) + ROM_LOAD32_WORD("0101332v.u9", 0x0200000, 0x0080000, CRC(eb7d7af6) SHA1(a11e8029b0d5ef9bb8c51fea4e9f0a051cdb2eaf) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END +ROM_START( reelrock ) + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD( "0100779v.u7", 0x000000, 0x80000, CRC(b60af34f) SHA1(1143380b765db234b3871c0fe04736472fde7de4) ) + ROM_LOAD32_WORD( "0100779v.u11", 0x000002, 0x80000, CRC(57e341d0) SHA1(9b0d50763bb74ca5fe404c9cd526633721cf6677) ) + ROM_LOAD32_WORD( "0100779v.u8", 0x100000, 0x80000, CRC(57eec667) SHA1(5f3888d75f48b6148f451d7ebb7f99e1a0939f3c) ) + ROM_LOAD32_WORD( "0100779v.u12", 0x100002, 0x80000, CRC(4ac20679) SHA1(0ac732ffe6a33806e4a06e87ec875a3e1314e06b) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( qonileb ) +ROM_START( retrsam ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("u11", 0x0000002, 0x0080000, CRC(b5b76fb0) SHA1(40cb57e168f7884d64f6779e4e3b532c69df63b8) ) - ROM_LOAD32_WORD("u12", 0x0100002, 0x0080000, CRC(52bd3694) SHA1(bcfa3054c7577f7a1653b756828d048a5f1776e7) ) - ROM_LOAD32_WORD("u7", 0x0000000, 0x0080000, CRC(0076da68) SHA1(ed301c102e88d5b637144ed32042da46780e5b34) ) - ROM_LOAD32_WORD("u8", 0x0100000, 0x0080000, CRC(a6b856a2) SHA1(2a9ea01f64fa56dea86b0cd25e19dace34c17d0f) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0400549v.u11", 0x0000002, 0x0080000, CRC(b91f5d4c) SHA1(8116166a759405b97797b4acb2cc3e139bd12de7) ) + ROM_LOAD32_WORD("0400549v.u12", 0x0100002, 0x0080000, CRC(fdf22d5b) SHA1(664fa003a350c0a3b515b7c384d32176158c2d3e) ) + ROM_LOAD32_WORD("v0400549v.u7", 0x0000000, 0x0080000, CRC(129be82c) SHA1(487639b7d42d6d35a9c48b44d26667c269b5b633) ) + ROM_LOAD32_WORD("0400549v.u8", 0x0100000, 0x0080000, CRC(8d0e61a8) SHA1(254b106e71a0888b0456afd8d63006d72c0ba292) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( rwarhl ) +ROM_START( retrsama ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("u10", 0x0300000, 0x0080000, CRC(39f5861f) SHA1(c614ebe2c324d5c3fff32379300f2869fba49d39) ) - ROM_LOAD32_WORD("u11", 0x0000002, 0x0080000, CRC(4170c68d) SHA1(bc00af27bcc176f8d9c9fd0ec1a7139e28f85113) ) - ROM_LOAD32_WORD("u12", 0x0100002, 0x0080000, CRC(b8afd281) SHA1(2d73b5af667d36e8b29e9fc3cc62f220daeffbb9) ) - ROM_LOAD32_WORD("u13", 0x0200002, 0x0080000, CRC(36debb0e) SHA1(4aaa495f74dfb13aa1dc47f3a8af8e54496c1ab8) ) - ROM_LOAD32_WORD("u14", 0x0300002, 0x0080000, CRC(92274626) SHA1(fae8d89efba9bf3d171bfe484015d009786ce40d) ) - ROM_LOAD32_WORD("u7", 0x0000000, 0x0080000, CRC(68d9bf78) SHA1(6170ea26ebc732abbc26ba1da35a081c8aa8d154) ) - ROM_LOAD32_WORD("u8", 0x0100000, 0x0080000, CRC(98ebea6f) SHA1(2d78cec777581a87bb4b84e7acd183b237c83e52) ) - ROM_LOAD32_WORD("u9", 0x0200000, 0x0080000, CRC(eb7d7af6) SHA1(a11e8029b0d5ef9bb8c51fea4e9f0a051cdb2eaf) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0200549v.u11", 0x0000002, 0x0080000, CRC(e662404b) SHA1(f0da3384c81d01ec17d24b2191d3a0b0eaf48d12) ) + ROM_LOAD32_WORD("0200549v.u7", 0x0000000, 0x0080000, CRC(e60859a1) SHA1(0be0114a87a21b955dfe24d01547e2d93dcb4f2c) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( retrsam ) +ROM_START( retrsamb ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("u11", 0x0000002, 0x0080000, CRC(b91f5d4c) SHA1(8116166a759405b97797b4acb2cc3e139bd12de7) ) - ROM_LOAD32_WORD("u12", 0x0100002, 0x0080000, CRC(fdf22d5b) SHA1(664fa003a350c0a3b515b7c384d32176158c2d3e) ) - ROM_LOAD32_WORD("u7", 0x0000000, 0x0080000, CRC(129be82c) SHA1(487639b7d42d6d35a9c48b44d26667c269b5b633) ) - ROM_LOAD32_WORD("u8", 0x0100000, 0x0080000, CRC(8d0e61a8) SHA1(254b106e71a0888b0456afd8d63006d72c0ba292) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0200506v.u11", 0x0000002, 0x0080000, CRC(99f61822) SHA1(88a726a5c9cae3a7d3120cb9013ca4d38ef8c560) ) + ROM_LOAD32_WORD("0200506v.u7", 0x0000000, 0x0080000, CRC(acb913c1) SHA1(eb008b2b3d06f769f1ea1c75b52334e468c5f13c) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( unicornd ) + +ROM_START( sumospin ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("unicorndreaming.u11", 0x0000002, 0x0080000, CRC(b45885f1) SHA1(e32d4afce4e3e62a324173252f559909ea97fe3a) ) - ROM_LOAD32_WORD("unicorndreaming.u12", 0x0100002, 0x0080000, CRC(14afdeda) SHA1(1eb2a297e903dc1a0683425b37669e0af4ae4218) ) - ROM_LOAD32_WORD("unicorndreaming.u7", 0x0000000, 0x0080000, CRC(d785d1b3) SHA1(4aa7c61036dd5fe1cdbc6c39a89881f88f3dd148) ) - ROM_LOAD32_WORD("unicorndreaming.u8", 0x0100000, 0x0080000, CRC(6ba8f7eb) SHA1(bd5b15e22e713095f580b4c371d39af4af9e3289) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0200606v.u11", 0x0000002, 0x0080000, CRC(919999fe) SHA1(3d800df5e0abed04c76928b04973ea7c7b02e5d1) ) + ROM_LOAD32_WORD("0200606v.u12", 0x0100002, 0x0080000, CRC(ba3eede2) SHA1(708a25af0908a1aa874b3ca4897816c65b0c9178) ) + ROM_LOAD32_WORD("0200606v.u7", 0x0000000, 0x0080000, CRC(c3ec9f97) SHA1(62c886cc794de4b915533729c5ea5a71a4b59108) ) + ROM_LOAD32_WORD("0200606v.u8", 0x0100000, 0x0080000, CRC(eb47f317) SHA1(43ead31e788cce1aa03011f634e939489d965144) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( dolptra ) +ROM_START( sbuk2 ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Dolphin Treasure 90.u11", 0x0000002, 0x0080000, CRC(8e391b67) SHA1(4b7a7295d3a96e26bf1958eb30af0b6582a5e5a6) ) - ROM_LOAD32_WORD("Dolphin Treasure 90.u12", 0x0100002, 0x0080000, CRC(1a1fbbcf) SHA1(6e3772dcccd9b5958bec3bfac9af22b2eabca32e) ) - ROM_LOAD32_WORD("Dolphin Treasure 90.u7", 0x0000000, 0x0080000, CRC(7463b5f6) SHA1(89e5cf8143d0b4ed54aa2c9bd8840f0aba19322e) ) - ROM_LOAD32_WORD("Dolphin Treasure 90.u8", 0x0100000, 0x0080000, CRC(195bec0f) SHA1(86bdc53e682476c2d90c5e51d4bccdc048d22e7f) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0400501v.u11", 0x0000002, 0x0080000, CRC(f1b51a61) SHA1(8e9fcb071f704122e13333094828a41974646792) ) + ROM_LOAD32_WORD("0400501v.u12", 0x0100002, 0x0080000, CRC(f9b65d2b) SHA1(f519fc284aaa08d3619e4d88e92e690320cf5432) ) + ROM_LOAD32_WORD("0400501v.u7", 0x0000000, 0x0080000, CRC(f025775d) SHA1(71a94f6f17fa7cdcd997b0117b8f4afe21606a69) ) + ROM_LOAD32_WORD("0400501v.u8", 0x0100000, 0x0080000, CRC(03912f4e) SHA1(48bdcd2160e05261b7d834c53e1d483acaad098f) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( penpay20 ) +ROM_START( sbuk3 ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Penguin Pays 20 lines.u11", 0x0000002, 0x0080000, CRC(7dd73770) SHA1(14a2edf8cd33280464f979976486e1a9ae73cef5) ) - ROM_LOAD32_WORD("Penguin Pays 20 lines.u12", 0x0100002, 0x0080000, CRC(123cbe90) SHA1(b51b84f79e0822a1be71485bbad514ab9fa55622) ) - ROM_LOAD32_WORD("Penguin Pays 20 lines.u7", 0x0000000, 0x0080000, CRC(cb21de26) SHA1(5a730f08db4d91b18f0b5a1f489f1d982b08edcc) ) - ROM_LOAD32_WORD("Penguin Pays 20 lines.u8", 0x0100000, 0x0080000, CRC(aa95406b) SHA1(fbec024dd210757a79a5ea4def79f88fed971e71) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0200711v.u11", 0x0000002, 0x0080000, CRC(a810782c) SHA1(5d59b464c44ec32b2b977f8326c8bf3424a61e07) ) + ROM_LOAD32_WORD("0200711v.u12", 0x0100002, 0x0080000, CRC(a585172d) SHA1(3c74efb11285ff78ce76a7e8af2f936d3dc31290) ) + ROM_LOAD32_WORD("0200711v.u7", 0x0000000, 0x0080000, CRC(e056c7db) SHA1(7a555583f750d8275b2ffd25a0efbe370a5ac43c) ) + ROM_LOAD32_WORD("0200711v.u8", 0x0100000, 0x0080000, CRC(2ff83479) SHA1(2f0c6c12e115a5592c29e806a946817a4f1b89a3) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( penpaya ) +ROM_START( swhr2 ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("PPAYSEPROM.u11", 0x0000002, 0x0080000, CRC(c0f20ef7) SHA1(4df3aa337a2d4dd8ef29f4839b003c96fe1df526) ) - ROM_LOAD32_WORD("PPAYSEPROM.u12", 0x0100002, 0x0080000, CRC(d2882682) SHA1(dd42edca8ef9d28dd5b16fe8132f8e0fb3c85979) ) - ROM_LOAD32_WORD("PPAYSEPROM.u7", 0x0000000, 0x0080000, CRC(f51c4e02) SHA1(fca30b3ce0d063966df1e878338596d050664695) ) - ROM_LOAD32_WORD("PPAYSEPROM.u8", 0x0100000, 0x0080000, CRC(23ea514d) SHA1(bcb83a8d768b078a03260a00fa09a4e2350c568c) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0200004v.u11", 0x0000002, 0x0080000, CRC(bde067d7) SHA1(cbf2cbd0644f1daeb5c3cd08d72f3d7aafe521ec) ) + ROM_LOAD32_WORD("0200004v.u7", 0x0000000, 0x0080000, CRC(de4d6d77) SHA1(959ffb7d06359870e07cb9d761f0bc0480c45e0c) ) + + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( adonishl ) +// MV4061 - 5 Credit Multiplier / 5 Line Multiline. +// Sweethearts II - Export - A - 29/06/98. +// Marked as PHG0742 and 92.252% +// All devices are 27c4002 instead of 27c4096. +ROM_START( swhr2u ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("u11", 0x0000002, 0x0080000, CRC(309b0b55) SHA1(669568031d305b29395345a26a5d004d83881433) ) - ROM_LOAD32_WORD("u12", 0x0100002, 0x0080000, CRC(8b675dff) SHA1(275579d21be51e6ca01be7c57018e142d1d40875) ) - ROM_LOAD32_WORD("u13", 0x0200002, 0x0080000, CRC(e005a7e8) SHA1(cbb313f5d1d04c5a441b3f92b7a90a281ddb4885) ) - ROM_LOAD32_WORD("u7", 0x0000000, 0x0080000, CRC(32149323) SHA1(abfc6a8518a39528db3700c2cb558e925ceeda6d) ) - ROM_LOAD32_WORD("u8", 0x0100000, 0x0080000, CRC(e9185e3c) SHA1(99609a152a55246d0f5377f943deec47e68fb9fc) ) - ROM_LOAD32_WORD("u9", 0x0200000, 0x0080000, CRC(c2e973e7) SHA1(e89bdaa56b0c3c7bd77c8141421f76be9ff2e71b) ) -ROM_END_REGIONS + ROM_LOAD32_WORD( "phg074202.u7", 0x000000, 0x80000, CRC(d6f83014) SHA1(7c6902d67157a04bdbbfc7c7d8ae1e22befd840f) ) + ROM_LOAD32_WORD( "phg074202.u11", 0x000002, 0x80000, CRC(3fa6e538) SHA1(958461a54e57c4622151bbcde3de8f4ff3f9ec0a) ) + ROM_LOAD32_WORD( "phg074202.u8", 0x100000, 0x80000, CRC(916409f7) SHA1(d5c3cb7afac14a27f4722528a3dac4b4f2d41580) ) + ROM_LOAD32_WORD( "phg074202.u12", 0x100002, 0x80000, CRC(92f92875) SHA1(bdb24974c2bf7bfb772c34a02a20e97df9293c0c) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( goldphm ) - ARISTOCRAT_MK5_BIOS +ROM_START( swhr2v ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Golden Pyramid Hyper Max.u10", 0x0300000, 0x0080000, CRC(8491dbc4) SHA1(f0d4e470f0774a6aac168334390c116fd3d1075e) ) - ROM_LOAD32_WORD("Golden Pyramid Hyper Max.u11", 0x0000002, 0x0080000, CRC(6ae3872f) SHA1(f8c1b31e4ebd4833dcc2b7cfff25f6473ad78f4e) ) - ROM_LOAD32_WORD("Golden Pyramid Hyper Max.u12", 0x0100002, 0x0080000, CRC(65cea496) SHA1(4b827e2707c259717bf759e76dca1c96efada926) ) - ROM_LOAD32_WORD("Golden Pyramid Hyper Max.u13", 0x0200002, 0x0080000, CRC(1b77bbd0) SHA1(c93d2f844032631d9594d02fa6ac41e21025a8ea) ) - ROM_LOAD32_WORD("Golden Pyramid Hyper Max.u14", 0x0300002, 0x0080000, CRC(4fbccf72) SHA1(97d6bb400caf78cb673a324d48d2580f1bbb1acd) ) - ROM_LOAD32_WORD("Golden Pyramid Hyper Max.u7", 0x0000000, 0x0080000, CRC(4ac2a82e) SHA1(3fc50e97ad48c57e21a37fbb6142152c72055ad4) ) - ROM_LOAD32_WORD("Golden Pyramid Hyper Max.u8", 0x0100000, 0x0080000, CRC(abbbf1de) SHA1(5efd88213180846ad8347e017e5ccee5b80b95d0) ) - ROM_LOAD32_WORD("Golden Pyramid Hyper Max.u9", 0x0200000, 0x0080000, CRC(750150eb) SHA1(a9ffe0b0bb2ef83a696fa568b0264d27bc650120) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD( "01j01986.u7", 0x000000, 0x80000, CRC(f51b2faa) SHA1(dbcfdbee92af5f89a8a2611bbc687ee0cc907642) ) + ROM_LOAD32_WORD( "01j01986.u11", 0x000002, 0x80000, CRC(bd7ead91) SHA1(9f775428a4aa0b0a8ee17aed9be620edc2020c5e) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( petshopa ) +ROM_START( topbana ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Pet Shop.u11", 0x0000002, 0x007fffd, BAD_DUMP CRC(bfaa9216) SHA1(19f1c7de05ff7f5f9f370be00cf8f0635e966809) ) // wrong size! - ROM_LOAD32_WORD("Pet Shop.u12", 0x0100002, 0x0080000, CRC(2cd12986) SHA1(b6b0bd6dd8c964498edc3763cb5c450795042a8d) ) - ROM_LOAD32_WORD("Pet Shop.u7", 0x0000000, 0x0080000, CRC(cf4a24fa) SHA1(b510de9199d16ba7319e1b692d7c6c09fcb735dc) ) - ROM_LOAD32_WORD("Pet Shop.u8", 0x0100000, 0x0080000, CRC(bb9f7519) SHA1(fa311f1ec74c3b52e2feed36d7b7dc6a12336abe) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0100550v.u11", 0x0000002, 0x007fffa, BAD_DUMP CRC(140a73bc) SHA1(3fd88797b6310f5849e901d032fbeb8a2d8604fb) ) // This is a bad .u8 from Indian Dream, not proper Top Banana .u11!! + ROM_LOAD32_WORD("0100550v.u7", 0x0000000, 0x0080000, CRC(1f60241c) SHA1(3a6207d9c919319fc10b6de63bc030f8d335588e) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( retsam20 ) +ROM_START( trstrove ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Return of The Samura.u11", 0x0000002, 0x0080000, CRC(e662404b) SHA1(f0da3384c81d01ec17d24b2191d3a0b0eaf48d12) ) - ROM_LOAD32_WORD("Return of The Samura.u7", 0x0000000, 0x0080000, CRC(e60859a1) SHA1(0be0114a87a21b955dfe24d01547e2d93dcb4f2c) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("01j00161.u11", 0x0000002, 0x0080000, CRC(020a588d) SHA1(4759bef22017fb4c47c87adb6ca7253fdb6bca6b) ) + ROM_LOAD32_WORD("01j00161.u12", 0x0100002, 0x0080000, CRC(715f53cb) SHA1(364c35fc2d36180c13127c8004a8729126f68db1) ) + ROM_LOAD32_WORD("01j00161.u7", 0x0000000, 0x0080000, CRC(07a8b338) SHA1(7508d7d0e3494d355cb773165b240ba876a60eec) ) + ROM_LOAD32_WORD("01j00161.u8", 0x0100000, 0x0080000, CRC(89a042e7) SHA1(0f95cfd42ce7130176d42c6bbdf8ff22a6662894) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( retsam5 ) +ROM_START( tritreat ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Return of The Samura 9.u11", 0x0000002, 0x0080000, CRC(99f61822) SHA1(88a726a5c9cae3a7d3120cb9013ca4d38ef8c560) ) - ROM_LOAD32_WORD("Return of The Samura 9.u7", 0x0000000, 0x0080000, CRC(acb913c1) SHA1(eb008b2b3d06f769f1ea1c75b52334e468c5f13c) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0201692v.u11", 0x0000002, 0x0080000, CRC(fbc125b8) SHA1(55dbc3a236804f4a8d26be8e49c29fa5943c5bd6) ) + ROM_LOAD32_WORD("0201692v.u12", 0x0100002, 0x0080000, CRC(5df3854a) SHA1(2b5175835c587caccafb73a1a5c8abf8f8463cf4) ) + ROM_LOAD32_WORD("0201692v.u13", 0x0200002, 0x0080000, CRC(0a0b0ce1) SHA1(41a4d613cf1828df1832c087f0bc18d31076f056) ) + ROM_LOAD32_WORD("0201692v.u7", 0x0000000, 0x0080000, CRC(7bc25bba) SHA1(d5f7c3a4bc3c652f57ee4cdbc883ec82069365d1) ) + ROM_LOAD32_WORD("0201692v.u8", 0x0100000, 0x0080000, CRC(ef976f78) SHA1(d2c89e8d3bf6af112a99354133f308a5aabad46e) ) + ROM_LOAD32_WORD("0201692v.u9", 0x0200000, 0x0080000, CRC(776fbfd2) SHA1(27820dbc6ee1424706aea9c4574da117636fef17) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END +ROM_START( trojhors ) + ARISTOCRAT_MK5_BIOS + ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) + ROM_LOAD32_WORD("01j00851.u11", 0x0000002, 0x0080000, CRC(8c04ed89) SHA1(6727da3a457841e893e27bc8f10d4bb58a61f338) ) + ROM_LOAD32_WORD("01j00851.u12", 0x0100002, 0x0080000, CRC(1eb021a4) SHA1(3195eb5923da018b6c2dac10b70c47aef54dca35) ) + ROM_LOAD32_WORD("01j00851.u13", 0x0200002, 0x0080000, CRC(b6d1ceb6) SHA1(b41200620aaa905697ac73b4c86496a53f070ed3) ) + ROM_LOAD32_WORD("01j00851.u7", 0x0000000, 0x0080000, CRC(7be0caf5) SHA1(b83fba7eb4624b3dc56f763b48b7c45fe31f3396) ) + ROM_LOAD32_WORD("01j00851.u8", 0x0100000, 0x0080000, CRC(246d3693) SHA1(8c8b893c21e9a486fd36677d7157787bf5d6237b) ) + ROM_LOAD32_WORD("01j00851.u9", 0x0200000, 0x0080000, CRC(15dee624) SHA1(d678ef7c25419342a1512fab84394e99309009ec) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( supbuk2 ) +// 577/3 - 10 Credit Multiplier / 9 Line Multiline. +// Tropical Delight - Export D - 24/09/97. +// Marked as PHG062502 and 92.25%. +// All devices are 27c4002 instead of 27c4096. +ROM_START( trpdlght ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Super Bucks 2.u11", 0x0000002, 0x0080000, CRC(f1b51a61) SHA1(8e9fcb071f704122e13333094828a41974646792) ) - ROM_LOAD32_WORD("Super Bucks 2.u12", 0x0100002, 0x0080000, CRC(f9b65d2b) SHA1(f519fc284aaa08d3619e4d88e92e690320cf5432) ) - ROM_LOAD32_WORD("Super Bucks 2.u7", 0x0000000, 0x0080000, CRC(f025775d) SHA1(71a94f6f17fa7cdcd997b0117b8f4afe21606a69) ) - ROM_LOAD32_WORD("Super bucks 2.u8", 0x0100000, 0x0080000, CRC(03912f4e) SHA1(48bdcd2160e05261b7d834c53e1d483acaad098f) ) -ROM_END_REGIONS - - + ROM_LOAD32_WORD( "phg062502.u7", 0x000000, 0x80000, CRC(3d06765f) SHA1(737d714e4ec48eb6283489f745dd305e7d70dad2) ) // 92.25% + ROM_LOAD32_WORD( "phg062502.u11", 0x000002, 0x80000, CRC(3963a3de) SHA1(fc2b06af3d1eba87407425dc4296a8b602952775) ) // 92.25% + ROM_LOAD32_WORD( "phg062502.u8", 0x100000, 0x80000, CRC(d4858407) SHA1(acf6776f19448648a26aaf53fcb4bc227c546033) ) // base + ROM_LOAD32_WORD( "phg062502.u12", 0x100002, 0x80000, CRC(852e433e) SHA1(17ec568edbabe3ee8649b26f4c5d0f501494f823) ) // base + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( topbana ) +ROM_START( unicornd ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Top Banana.u11", 0x0000002, 0x007fffa, BAD_DUMP CRC(140a73bc) SHA1(3fd88797b6310f5849e901d032fbeb8a2d8604fb) ) - ROM_LOAD32_WORD("Top Banana.u7", 0x0000000, 0x0080000, CRC(1f60241c) SHA1(3a6207d9c919319fc10b6de63bc030f8d335588e) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0100791v.u11", 0x0000002, 0x0080000, CRC(b45885f1) SHA1(e32d4afce4e3e62a324173252f559909ea97fe3a) ) + ROM_LOAD32_WORD("0100791v.u12", 0x0100002, 0x0080000, CRC(14afdeda) SHA1(1eb2a297e903dc1a0683425b37669e0af4ae4218) ) + ROM_LOAD32_WORD("0100791v.u7", 0x0000000, 0x0080000, CRC(d785d1b3) SHA1(4aa7c61036dd5fe1cdbc6c39a89881f88f3dd148) ) + ROM_LOAD32_WORD("0100791v.u8", 0x0100000, 0x0080000, CRC(6ba8f7eb) SHA1(bd5b15e22e713095f580b4c371d39af4af9e3289) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( wldamz1 ) +ROM_START( wamazon ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Wild Amazon.u11", 0x0000002, 0x0080000, CRC(54b2a375) SHA1(635fde5c678b908fa58c0e04ba9b7a84fac1f7fe) ) - ROM_LOAD32_WORD("Wild Amazon.u7", 0x0000000, 0x0080000, CRC(bfa21358) SHA1(6b76656401b3dbbace8d4335951468b9885fc7f0) ) - ROM_LOAD32_WORD("Wild Amazon.u8", 0x0100000, 0x0080000, CRC(4e39f128) SHA1(91d3c6a9e5c30275c3f8967dde55214df097f2ba) ) - ROM_LOAD32_WORD("Wild Amazon.u12", 0x0100002, 0x0080000, CRC(2cd12986) SHA1(b6b0bd6dd8c964498edc3763cb5c450795042a8d) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0200285v.u11", 0x0000002, 0x0080000, CRC(54b2a375) SHA1(635fde5c678b908fa58c0e04ba9b7a84fac1f7fe) ) + ROM_LOAD32_WORD("0200285v.u7", 0x0000000, 0x0080000, CRC(bfa21358) SHA1(6b76656401b3dbbace8d4335951468b9885fc7f0) ) + ROM_LOAD32_WORD("0200285v.u8", 0x0100000, 0x0080000, CRC(4e39f128) SHA1(91d3c6a9e5c30275c3f8967dde55214df097f2ba) ) + ROM_LOAD32_WORD("0200285v.u12", 0x0100002, 0x0080000, CRC(2cd12986) SHA1(b6b0bd6dd8c964498edc3763cb5c450795042a8d) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( wldamz3 ) +ROM_START( wamazona ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Wild Amazon.u11", 0x0000002, 0x0080000, CRC(2e24756a) SHA1(247db8316e7815be7524aefc43a5756fad84779a) ) - ROM_LOAD32_WORD("Wild Amazon.u7", 0x0000000, 0x0080000, CRC(44576def) SHA1(3396460444ceb394c9c88e5fc37ccedcfc4b179c) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0200507v.u11", 0x0000002, 0x0080000, CRC(2e24756a) SHA1(247db8316e7815be7524aefc43a5756fad84779a) ) + ROM_LOAD32_WORD("0200507v.u7", 0x0000000, 0x0080000, CRC(44576def) SHA1(3396460444ceb394c9c88e5fc37ccedcfc4b179c) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( wldthg ) +ROM_START( wildbill ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("WILDTHING.u11", 0x0000002, 0x0080000, CRC(61d22f2e) SHA1(b836e5afbd5bb14ae68e100a6042f1953ed57a21) ) - ROM_LOAD32_WORD("WILDTHING.u12", 0x0100002, 0x0080000, CRC(450a4f4f) SHA1(e59fb3260755a125c47ff6c1a042a48b0eace72d) ) - ROM_LOAD32_WORD("WILDTHING.u7", 0x0000000, 0x0080000, CRC(eb402ffb) SHA1(49ef6ca2503a6e785f62cb29e505e5c2ba019e37) ) - ROM_LOAD32_WORD("WILDTHING.u8", 0x0100000, 0x0080000, CRC(f21153b8) SHA1(24830b3939a8568b0d5b59d4fdbd2d9e7b46a6d7) ) -ROM_END_REGIONS + ROM_LOAD32_WORD("0100297v.u11", 0x0000002, 0x0080000, CRC(57b3c340) SHA1(4f95ed7fed697cf2bfbde8215f6e35768cf20334) ) + ROM_LOAD32_WORD("0100297v.u7", 0x0000000, 0x0080000, CRC(e3117ab7) SHA1(c13912f524f1c1d373adb6382ceddd1bc18f7f02) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( cshcat ) +ROM_START( wcougar ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Cash Cat NZ.u11", 0x0000002, 0x0080000, CRC(e60e8bd1) SHA1(ffaa7be8968047b9ee54a117d273a14cbca41028) ) - ROM_LOAD32_WORD("Cash Cat NZ.u12", 0x0100002, 0x0080000, CRC(f930fc07) SHA1(cb3fdbd5b87af7b14067f7999740470d3cf434df) ) - ROM_LOAD32_WORD("Cash Cat NZ.u7", 0x0000000, 0x0080000, CRC(de0f0202) SHA1(994f6c47b1e2e0e133853dc69b189752104486e4) ) - ROM_LOAD32_WORD("Cash Cat NZ.u8", 0x0100000, 0x0080000, CRC(37d41d35) SHA1(c959b787383d6f91d20e18f37a38a965407a9ff0) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0100167v.u11", 0x0000002, 0x0080000, CRC(6a5f2c41) SHA1(1365e083d44a373c2d4f17e8e61ec716ffb6d2d5) ) + ROM_LOAD32_WORD("0100167v.u12", 0x0100002, 0x0080000, CRC(85bb41a7) SHA1(335f29f10f216e202b93b46a376958c3f5271461) ) + ROM_LOAD32_WORD("0100167v.u7", 0x0000000, 0x0080000, CRC(47154679) SHA1(21749fbaa60f9bf1db43bdd272e6628ae73bf759) ) + ROM_LOAD32_WORD("0100167v.u8", 0x0100000, 0x0080000, CRC(c262d098) SHA1(87940bd0aef6cb0f5ff21ccda4b209eef8e97eb1) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( incanz ) +// 569/8 - 10 Credit Multiplier / 9 Line Multiline. +// Wild Cougar - Export D - 19/05/97. +// All devices are 27c4002 instead of 27c4096. +ROM_START( wcougaru ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("INCASUN NZ.u11", 0x0000002, 0x0080000, CRC(2ff86b76) SHA1(c491ca19320bd3e15199b3ca1fcf36a70e386daa) ) - ROM_LOAD32_WORD("INCASUN NZ.u12", 0x0100002, 0x0080000, CRC(d91114c5) SHA1(fa88c70d81ff5e4df539b873803376e79eb6a479) ) - ROM_LOAD32_WORD("INCASUN NZ.u13", 0x0200002, 0x0080000, CRC(472f4097) SHA1(5ebe72b138cdc67989db17c82979eeddc60a081e) ) - ROM_LOAD32_WORD("INCASUN NZ.u7", 0x0000000, 0x0080000, CRC(1e7be5ca) SHA1(333b7665fab8f60fb60e9d3b44de96725763ca17) ) - ROM_LOAD32_WORD("INCASUN NZ.u8", 0x0100000, 0x0080000, CRC(3eb64fc9) SHA1(31f7d56443091da211c45dddb97375305c3cfeae) ) - ROM_LOAD32_WORD("INCASUN NZ.u9", 0x0200000, 0x0080000, CRC(6da340db) SHA1(4d7528aa27561185a7d53a0c44a4e95e40aadc26) ) -ROM_END_REGIONS + ROM_LOAD32_WORD( "nhg029604.u7", 0x000000, 0x80000, CRC(7ada053f) SHA1(5102b0b9db505454624750a3fd6db455682538f3) ) + ROM_LOAD32_WORD( "nhg029604.u11", 0x000002, 0x80000, CRC(69a78695) SHA1(1ed89cf38dc85f752449a858cd9558bed235af58) ) + ROM_LOAD32_WORD( "nhg029604.u8", 0x100000, 0x80000, CRC(496b0295) SHA1(237183a192ad9b4bc133014cc83149d4a7062785) ) + ROM_LOAD32_WORD( "nhg029604.u12", 0x100002, 0x80000, CRC(fe2bafdc) SHA1(e8b454db44a532d75b3aff323855340695688f0f) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( loconz ) +ROM_START( wthing ) ARISTOCRAT_MK5_BIOS ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("Loco Loot NZ.u11", 0x0000002, 0x0080000, CRC(93b0bde3) SHA1(06cb79482f8a94e1a504eead9cdf6da41cba1fb9) ) - ROM_LOAD32_WORD("Loco Loot NZ.u12", 0x0100002, 0x0080000, CRC(29f03505) SHA1(c173167f43cc2eef0e063118e03bc37a87188391) ) - ROM_LOAD32_WORD("Loco Loot NZ.u7", 0x0000000, 0x0080000, CRC(164dd049) SHA1(c99c56af72cb1eb69591cb8f7bacbd06bdb6494d) ) - ROM_LOAD32_WORD("Loco Loot NZ.u8", 0x0100000, 0x0080000, CRC(8cb449ce) SHA1(2372cf126c2c95d9637b0a761dfc7ea223f0aa54) ) -ROM_END_REGIONS - + ROM_LOAD32_WORD("0101158v.u11", 0x0000002, 0x0080000, CRC(61d22f2e) SHA1(b836e5afbd5bb14ae68e100a6042f1953ed57a21) ) + ROM_LOAD32_WORD("0101158v.u12", 0x0100002, 0x0080000, CRC(450a4f4f) SHA1(e59fb3260755a125c47ff6c1a042a48b0eace72d) ) + ROM_LOAD32_WORD("0101158v.u7", 0x0000000, 0x0080000, CRC(eb402ffb) SHA1(49ef6ca2503a6e785f62cb29e505e5c2ba019e37) ) + ROM_LOAD32_WORD("0101158v.u8", 0x0100000, 0x0080000, CRC(f21153b8) SHA1(24830b3939a8568b0d5b59d4fdbd2d9e7b46a6d7) ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END -ROM_START( mtreenz ) - ARISTOCRAT_MK5_BIOS +ROM_START( wtiger ) ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF ) - ROM_LOAD32_WORD("MONEYTREE NZ.u11", 0x0000002, 0x0080000, CRC(7a03e436) SHA1(016e6e36f7ca6f4c3b427cf98a1415ef6aa57225) ) - ROM_LOAD32_WORD("MONEYTREE NZ.u12", 0x0100002, 0x0080000, CRC(b11f51d0) SHA1(1579a24d470f418713334259368c7a4e35e8b5d3) ) - ROM_LOAD32_WORD("MONEYTREE NZ.u13", 0x0200002, 0x0080000, CRC(e1f23c3f) SHA1(fe74c219c738625257fb62806e271a60075aaa07) ) - ROM_LOAD32_WORD("MONEYTREE NZ.u7", 0x0000000, 0x0080000, CRC(982a0078) SHA1(163c15aebd2be623c0f2c7641360336399bc1f4f) ) - ROM_LOAD32_WORD("MONEYTREE NZ.u8", 0x0100000, 0x0080000, CRC(878b6419) SHA1(572d6a10cbf2b96e9afee4b3f32e9ad1ce7eabbb) ) - ROM_LOAD32_WORD("MONEYTREE NZ.u9", 0x0200000, 0x0080000, CRC(816fda3f) SHA1(d5eb7572a93e2a4681a2b1db7f302c5528f1c1c3) ) -ROM_END_REGIONS + ROM_LOAD32_WORD( "0200954v.u7", 0x000000, 0x80000, CRC(752e54c5) SHA1(9317544a7cf2d9bf29347d31fe72331fc3d018ef) ) + ROM_LOAD32_WORD( "0200954v.u11", 0x000002, 0x80000, CRC(38e888b1) SHA1(acc857eb2be19140bbb58d70583e08f24807b9f2) ) + + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */ + ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 ) + ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 ) +ROM_END + /************************* @@ -2188,114 +2311,115 @@ ROM_END_REGIONS #define MACHINE_FLAGS MACHINE_NOT_WORKING|MACHINE_IMPERFECT_SOUND|MACHINE_IMPERFECT_GRAPHICS // YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS -GAME( 1995, aristmk5, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "MKV Set/Clear Chips (USA)", MACHINE_FLAGS|MACHINE_IS_BIOS_ROOT ) +GAME( 1995, aristmk5, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "MKV Set/Clear Chips (USA)", MACHINE_FLAGS|MACHINE_IS_BIOS_ROOT ) // Dates listed below are for the combination (reel layout), not release dates -GAME( 1995, enchfrst, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Enchanted Forest (0400122V, Local)", MACHINE_FLAGS ) // 570/3, E - 23/06/95 -GAME( 1995, swthrt2v, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Sweet Hearts II (01J01986, Venezuela)", MACHINE_FLAGS ) // 577/1, C - 07/09/95 -GAME( 1996, minemine, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Mine, Mine, Mine (Export)", MACHINE_FLAGS ) // 559/2, E - 14/02/96 -GAME( 1996, dolphntr, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Dolphin Treasure (0200424V, NSW/ACT)", MACHINE_FLAGS ) // 602/1, B - 06/12/96, Rev 3 -GAME( 1996, dolphtra, dolphntr, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Dolphin Treasure (0100424V, NSW/ACT)", MACHINE_FLAGS ) // 602/1, B - 06/12/96, Rev 1.24.4.0 -GAME( 1996, dolphtre, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Dolphin Treasure (Export)", MACHINE_FLAGS ) // 602/1, B - 06/12/96 -GAME( 1996, cashcham, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cash Chameleon (Export)", MACHINE_FLAGS ) // 603(a), B - 06/12/96 -GAME( 1997, enchfore, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Enchanted Forest (MV4033, Export, 94.97%)", MACHINE_FLAGS ) // MV4033, B - 10/02/97 -GAME( 1997, mgarden, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Magic Garden (AHG1211, Export, 88.26%)", MACHINE_FLAGS ) // MV4033, B - 10/02/97 -GAME( 1997, goldprmd, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Golden Pyramids (MV4091, USA)", MACHINE_FLAGS ) // MV4091, B - 13/05/97 -GAME( 1997, goldpyra, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Golden Pyramids (AHG1206-99, NSW/ACT, 87.928%)", MACHINE_FLAGS ) // 602/2, B - 13/05/97 -GAME( 1997, qotn, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queen of the Nile (0200439V, NSW/ACT)", MACHINE_FLAGS ) // 602/4, B - 13/05/97 -GAME( 1997, qotna, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queen of the Nile (MV4091, NSW/ACT)", MACHINE_FLAGS ) // MV4091, B - 13/05/97 (US-Export HW?) -GAME( 1997, wldcougr, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Cougar (Export)", MACHINE_FLAGS ) // 569/8, D - 19/05/97 -GAME( 1997, dmdtouch, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Diamond Touch (0400433V, Local)", MACHINE_FLAGS ) // 604, E - 30/06/97 -GAME( 1997, bumblbug, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Bumble Bugs (Export, 92.691%)", MACHINE_FLAGS ) // 593, D - 05/07/97 -GAME( 1997, pengpays, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pays (Export)", MACHINE_FLAGS ) // 586/7(b) B - 14/07/97 -GAME( 1997, trpdlght, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Tropical Delight (PHG0625-02, Export, 92.25%)", MACHINE_FLAGS ) // 577/3, D - 24/09/97 -GAME( 1998, chickena, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Chicken (RHG0730, Export, 92.588%, touch)", MACHINE_FLAGS ) // 596, C - 23/02/98 -GAME( 1998, adonis, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Adonis (0200751V, NSW/ACT)", MACHINE_FLAGS ) // 602/9, A - 25/05/98, Rev 10 -GAME( 1998, adonisa, adonis, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Adonis (0100751V, NSW/ACT)", MACHINE_FLAGS ) // 602/9, A - 25/05/98, Rev 9 -GAME( 1998, swheart2, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Sweet Hearts II (PHG0742, Export, 92.252%)", MACHINE_FLAGS ) // MV4061, A - 29/06/98 -GAME( 1998, reelrock, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Reelin-n-Rockin (0100779V, Local)", MACHINE_FLAGS ) // 628, A - 13/07/98 -GAME( 1998, thgamblr, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "The Gambler (EHG0916, Export, 92.268%)", MACHINE_FLAGS ) // MV4084/1, A - 30/10/98 -GAME( 1998, indiandr, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Indian Dreaming (0100845V, Local)", MACHINE_FLAGS ) // 628/1, B - 15/12/98 -GAME( 1998, chariotc, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "The Chariot Challenge (04J00714, NSW/ACT)", MACHINE_FLAGS ) // 630, A - 10/08/98, Rev 12 -GAME( 1999, wtiger, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "White Tiger Classic (0200954V, NSW/ACT)", MACHINE_FLAGS ) // 638/1, B - 08/07/99 -GAME( 1999, bootsctn, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Boot Scootin' (Export, 92.767%)", MACHINE_FLAGS ) // MV4098, A - 25/08/99 -GAME( 2000, cuckoo, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cuckoo (MV4104, Export)", MACHINE_FLAGS ) // MV4104, C - 02/02/00 -GAME( 2000, magicmsk, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Magic Mask (MV4115, Export, set 1)", MACHINE_FLAGS ) // MV4115, A - 09/05/00 -GAME( 2000, magicmska, magicmsk, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Magic Mask (MV4115, Export, set 2)", MACHINE_FLAGS ) // MV4115, A - 09/05/00 -GAME( 2000, margmgc, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Margarita Magic (01J00101, NSW/ACT)", MACHINE_FLAGS ) // JB005, A - 07/07/00 -GAME( 2000, marmagic, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Margarita Magic (EHG1559, NSW/ACT)", MACHINE_FLAGS ) // US003, A - 07/07/00 -GAME( 2001, prtygras, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Party Gras (MV4115/3, Export, touch)", MACHINE_FLAGS ) // MV4115/3, B - 06/02/01 -GAME( 2001, geishanz, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Geisha (0101408V, New Zealand)", MACHINE_FLAGS ) // MV4127, A - 05/03/01 -GAME( 2001, adonise, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Adonis (MV4124/1, Export)", MACHINE_FLAGS ) // MV4124/1, B - 31/07/01 -GAME( 2001, koalamnt, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Koala Mint (MV4137, Export)", MACHINE_FLAGS ) // MV4137, A - 12/09/01 -GAME( 2001, partygrs, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Party Gras (MV4115/6, Export)", MACHINE_FLAGS ) // MV4115/6, A - 10/11/01 - -GAME( 199?, badbog, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Bad Bog Draw Poker", MACHINE_FLAGS ) -GAME( 199?, blackpnt, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Black Panther (Aristocrat)", MACHINE_FLAGS ) -GAME( 199?, bootscot, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Boot Scootin", MACHINE_FLAGS ) -GAME( 199?, bumbugs, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Bumble Bugs", MACHINE_FLAGS ) -GAME( 199?, butdeli, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Butterfly Delight", MACHINE_FLAGS ) -GAME( 199?, cashchm, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cash Chameleon", MACHINE_FLAGS ) -GAME( 199?, cashcroa, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cash Crop", MACHINE_FLAGS ) -GAME( 199?, chkrun, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Chicken Run", MACHINE_FLAGS ) -GAME( 199?, coralr2v, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Coral Riches 2", MACHINE_FLAGS ) -GAME( 199?, cuckooa, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cuckoo", MACHINE_FLAGS ) -GAME( 199?, dstblom, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Desert Bloom", MACHINE_FLAGS ) -GAME( 199?, dmddove, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Diamond Dove", MACHINE_FLAGS ) -GAME( 199?, drawpka, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Draw Poker", MACHINE_FLAGS ) -GAME( 199?, dyjack, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Dynamite Jack", MACHINE_FLAGS ) -GAME( 199?, eldora, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "El Dorado", MACHINE_FLAGS ) -GAME( 199?, fortela, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Fortune Teller", MACHINE_FLAGS ) -GAME( 199?, genmagi, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Genie Magic", MACHINE_FLAGS ) -GAME( 199?, gnomatw, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Gnome Around The World", MACHINE_FLAGS ) -GAME( 199?, goldra, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Golden Ra", MACHINE_FLAGS ) -GAME( 199?, hrttrhb, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Heart Throb", MACHINE_FLAGS ) -GAME( 199?, incsun, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Inca Sun", MACHINE_FLAGS ) -GAME( 199?, kookabk, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Kooka Bucks", MACHINE_FLAGS ) -GAME( 199?, locoloot, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Loco Loot", MACHINE_FLAGS ) -GAME( 199?, lonwolf, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Lone Wolf", MACHINE_FLAGS ) -GAME( 199?, mgctouc, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Magic Touch", MACHINE_FLAGS ) -GAME( 199?, monmous, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Money Mouse", MACHINE_FLAGS ) -GAME( 199?, moutmon, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Mountain Money", MACHINE_FLAGS ) -GAME( 199?, mystgrd, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Mystic Garden", MACHINE_FLAGS ) -GAME( 199?, orchidms, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Orchid Mist", MACHINE_FLAGS ) -GAME( 199?, oscarar, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Oscar", MACHINE_FLAGS ) -GAME( 199?, pantmag, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Panther Magic", MACHINE_FLAGS ) -GAME( 199?, peaflut, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Peacock Flutter", MACHINE_FLAGS ) -GAME( 199?, pengpay, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pays", MACHINE_FLAGS ) -GAME( 199?, przfigha, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Prize Fight", MACHINE_FLAGS ) -GAME( 199?, qncsh, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queens of Cash", MACHINE_FLAGS ) -GAME( 199?, sumospin, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Sumo Spins", MACHINE_FLAGS ) -GAME( 199?, sbucks3, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Superbucks 3", MACHINE_FLAGS ) -GAME( 199?, tretrva, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Treasure Trove", MACHINE_FLAGS ) -GAME( 199?, triptrea, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Triple Treat", MACHINE_FLAGS ) -GAME( 199?, trjhrs, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Trojan Horse", MACHINE_FLAGS ) -GAME( 199?, wildbill, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Bill", MACHINE_FLAGS ) -GAME( 199?, wldcoug, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Cougar", MACHINE_FLAGS ) -GAME( 199?, chariotca, chariotc, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Chariot Challenge (0100787V)", MACHINE_FLAGS ) -GAME( 199?, chkmatar, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Checkmate (01J00681)", MACHINE_FLAGS ) -GAME( 199?, kgalah, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "King Galah (0200536V)", MACHINE_FLAGS ) -GAME( 199?, qonilea, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queen Of The Nile (0100439V)", MACHINE_FLAGS ) -GAME( 199?, qonileb, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queen Of The Nile (0300440V)", MACHINE_FLAGS ) -GAME( 199?,rwarhl, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Rainbow Warrior Hyperlink (0101332V)", MACHINE_FLAGS ) -GAME( 199?, retrsam, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Return Of The Samurai (0400549V)", MACHINE_FLAGS ) -GAME( 199?, unicornd, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Unicorn Dreaming", MACHINE_FLAGS ) - -GAME( 199?, dolptra, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Dolphin Treasure (alt)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, penpay20, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pays (20 Line)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, penpaya, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pays (alt)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, adonishl, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Adonis Hyperlink", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) - -GAME( 199?, goldphm, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Golden Pyramid Hyper Max", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, petshopa, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Pet Shop", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, retsam20, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Return of The Samura 20line", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, retsam5, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Return of The Samura 5line", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, supbuk2, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Superbucks 2", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, topbana, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Top Banana", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, wldamz1, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Amazon (1 Line)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, wldamz3, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Amazon (3 Lines)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, wldthg, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Thing", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, cshcat, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cash Cat (NZ)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, incanz, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Inca Sun (NZ)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, loconz, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Loco Loot (NZ)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -GAME( 199?, mtreenz, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Money Tree (NZ)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +GAME( 1998, adonis, aristmk5, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Adonis (0200751V, NSW/ACT)", MACHINE_FLAGS ) // 602/9, A - 25/05/98, Rev 10 +GAME( 1998, adonisa, adonis, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Adonis (0100751V, NSW/ACT)", MACHINE_FLAGS ) // 602/9, A - 25/05/98, Rev 9 +GAME( 2001, adonisu, adonis, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Adonis (BHG1508, US)", MACHINE_FLAGS ) // MV4124/1, B - 31/07/01 +GAME( 1999, adonisce, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Adonis - Cash Express (0201005V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 602/9, C - 06/07/99 +GAME( 1996, baddog, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Bad Dog Poker (0200428V, NSW/ACT)", MACHINE_FLAGS ) // 386/56, A - 17/12/96 +GAME( 1996, blackpnt, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Black Panther (0200818V, Victoria)", MACHINE_FLAGS ) // 594/1, A - 30/07/96 +GAME( 1998, bootsctn, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Boot Scootin' (0100812V, NSW/ACT)", MACHINE_FLAGS ) // 616/1, B - 11/12/98 +GAME( 1999, bootsctnu, bootsctn, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Boot Scootin' (GHG1012-02, US)", MACHINE_FLAGS ) // MV4098, A - 25/08/99 +GAME( 1996, bumblbug, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Bumble Bugs (0200510V, NSW/ACT)", MACHINE_FLAGS ) // 593, D - 5/07/96 +GAME( 1996, bumblbugql,bumblbug, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Bumble Bugs (0200456V, Queensland)", MACHINE_FLAGS ) // 593, D - 5/07/96 +GAME( 1997, bumblbugu, bumblbug, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Bumble Bugs (CHG0479-03, US)", MACHINE_FLAGS ) // 593, D - 05/07/97 +GAME( 1995, buttdeli, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Butterfly Delight (0200143V, NSW/ACT)", MACHINE_FLAGS ) // 571/4, A - 19/12/95 +GAME( 1999, cashcat, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cash Cat (0300863V, New Zealand)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // MV4089, A - 4/1/99 +GAME( 1997, cashcham, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cash Chameleon (0100438V, NSW/ACT)", MACHINE_FLAGS ) // 603/1, C - 15/4/97 +GAME( 1996, cashchamu, cashcham, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cash Chameleon (DHG4078-99, US)", MACHINE_FLAGS ) // 603(a), B - 06/12/96 +GAME( 1997, cashcra5, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cash Crop (0300467V, NSW/ACT)", MACHINE_FLAGS ) // 607, C - 14/07/97 +GAME( 1998, chariotc, aristmk5, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "The Chariot Challenge (04J00714, NSW/ACT)", MACHINE_FLAGS ) // 630, A - 10/08/98, Rev 12 +GAME( 1998, chariotca, chariotc, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "The Chariot Challenge (0100787V, NSW/ACT)", MACHINE_FLAGS ) // 630/1, A - 10/08/98 +GAME( 2001, checkma5, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Checkmate (01J00681, NSW/ACT)", MACHINE_FLAGS ) // JB011, B - 06/07/01 +GAME( 1996, chickna5, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Chicken (0100351V, NSW/ACT)", MACHINE_FLAGS ) // 596, A - 27/08/96 +GAME( 1998, chickna5u, chickna5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Chicken (RHG0730-03, US)", MACHINE_FLAGS ) // 596, C - 23/02/98 +GAME( 1998, coralrc2, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Coral Riches II (0100919V, NSW/ACT)", MACHINE_FLAGS ) // 577/7, A - 29/12/98 +GAME( 1998, cuckoo, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cuckoo (0200753V, NSW/ACT)", MACHINE_FLAGS ) // 615/1, D - 03/07/98 +GAME( 2000, cuckoou, cuckoo, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Cuckoo (CHG1195, US)", MACHINE_FLAGS ) // MV4104, C - 02/02/00 +GAME( 1995, dstbloom, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Desert Bloom (0200111V, NSW/ACT)", MACHINE_FLAGS ) // 577/2, A - 12/10/95 +GAME( 1999, diamdove, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Diamond Dove (0101018V, NSW/ACT)", MACHINE_FLAGS ) // 640, B - 19/05/99 +GAME( 1997, dimtouch, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Diamond Touch (0400433V, NSW/ACT)", MACHINE_FLAGS ) // 604, E - 30/06/97 +GAME( 1996, dolphntr, aristmk5, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Dolphin Treasure (0200424V, NSW/ACT)", MACHINE_FLAGS ) // 602/1, B - 06/12/96, Rev 3 +GAME( 1996, dolphntra, dolphntr, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Dolphin Treasure (0100424V, NSW/ACT)", MACHINE_FLAGS ) // 602/1, B - 06/12/96, Rev 1.24.4.0 +GAME( 1996, dolphntrb, dolphntr, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Dolphin Treasure (0100388V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 602, B - 10/12/96 +GAME( 1996, dolphntru, dolphntr, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Dolphin Treasure (FHG4077-02, US)", MACHINE_FLAGS ) // 602/1, B - 06/12/96 +GAME( 2000, dynajack, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Dynamite Jack (01J00081, NSW/ACT)", MACHINE_FLAGS ) // JB004, A - 12/07/2000 +GAME( 1998, eldorda5, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "El Dorado (0100652V, NSW/ACT)", MACHINE_FLAGS ) // 623, B - 24/03/98 +GAME( 1995, eforsta5, aristmk5, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Enchanted Forest (0400122V, NSW/ACT)", MACHINE_FLAGS ) // 570/3, E - 23/06/95 +GAME( 1997, eforsta5u, eforsta5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Enchanted Forest (JHG0415-03, US)", MACHINE_FLAGS ) // MV4033, B - 10/02/97 +GAME( 2000, fortellr, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Fortune Teller (01J00131, NSW/ACT)", MACHINE_FLAGS ) // JB006, D - 24/11/2000 +GAME( 1998, gambler, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "The Gambler (EHG0916-02, US)", MACHINE_FLAGS ) // MV4084/1, A - 30/10/98 +GAME( 2001, geisha, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Geisha (0101408V, New Zealand)", MACHINE_FLAGS ) // MV4127, A - 05/03/01 +GAME( 1999, genmagi, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Genie Magic (0200894V, NSW/ACT)", MACHINE_FLAGS ) // ???, C - 15/02/99 +GAME( 1998, gnomeatw, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Gnome Around The World (0100767V, NSW/ACT)", MACHINE_FLAGS ) // 625, C - 18/12/98 +GAME( 1997, goldpyr, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Golden Pyramids (AHG1205-03, US)", MACHINE_FLAGS ) // MV4091, B - 13/05/97 +GAME( 1997, goldpyra, goldpyr, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Golden Pyramids (AHG1206-99, US)", MACHINE_FLAGS ) // 602/2, B - 13/05/97 +GAME( 2000, goldenra, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Golden Ra (0101164V, NSW/ACT)", MACHINE_FLAGS ) // 661, A - 10/04/00 +GAME( 1999, incasun, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Inca Sun (0100872V, NSW/ACT)", MACHINE_FLAGS ) // 631/3 B, B - 03/05/99 +GAME( 1999, incasunsp, incasun, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Inca Sun (0100872V, NSW/ACT, Show Program)", MACHINE_FLAGS ) // 631/3 B, B - 03/05/99 +GAME( 2000, incasunnz, incasun, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Inca Sun (0101108V, New Zealand)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // MV4113, A - 6/3/00 +GAME( 1998, indrema5, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Indian Dreaming (0100845V, NSW/ACT)", MACHINE_FLAGS ) // 628/1, B - 15/12/98 +GAME( 1995, kgalah, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "King Galah (0200536V, NSW/ACT)", MACHINE_FLAGS ) // 613/6, A - 21/07/95 +GAME( 2001, koalamnt, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Koala Mint (CHG1573, US)", MACHINE_FLAGS ) // MV4137, A - 12/09/01 +GAME( 1998, kookabuk, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Kooka Bucks (0100677V, NSW/ACT)", MACHINE_FLAGS ) // 661, A - 03/04/98 +GAME( 1997, locoloot, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Loco Loot (0100472V, NSW/ACT)", MACHINE_FLAGS ) // 599/2, C - 17/06/97 +GAME( 1998, locolootnz,locoloot, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Loco Loot (0600725V, New Zealand)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // MV4064, A - 8/7/98 +GAME( 1997, lonewolf, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Lone Wolf (0100587V, NSW/ACT)", MACHINE_FLAGS ) // 621, A - 29/10/97 +GAME( 1997, mgarden, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Magic Garden (AHG1211-99, US)", MACHINE_FLAGS ) // MV4033, B - 10/02/97 +GAME( 2000, magimask, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Magic Mask (DHG1309, US)", MACHINE_FLAGS ) // MV4115, A - 09/05/00 +GAME( 2000, magimaska, magimask, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Magic Mask (AHG1548, US)", MACHINE_FLAGS ) // MV4115, A - 09/05/00 +GAME( 1997, magtcha5, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Magic Touch (0200455V, NSW/ACT)", MACHINE_FLAGS ) // 606, A - 06/03/97 +GAME( 2000, marmagic, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Margarita Magic (01J00101, NSW/ACT)", MACHINE_FLAGS ) // JB005, A - 07/07/00 +GAME( 2000, marmagicu, marmagic, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Margarita Magic (EHG1559, US)", MACHINE_FLAGS ) // US003, A - 07/07/00 +GAME( 1996, minemine, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Mine, Mine, Mine (VHG0416-99, US)", MACHINE_FLAGS ) // 559/2, E - 14/02/96 +GAME( 1997, monmouse, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Money Mouse (0400469V, NSW/ACT)", MACHINE_FLAGS ) // 607/1, B - 08/04/97 +GAME( 2001, montree, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Money Tree (0201397V, New Zealand)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // MV4126, C - 12/04/01 +GAME( 1996, mountmon, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Mountain Money (0100294V, NSW/ACT)", MACHINE_FLAGS ) //595/3, B - 11/06/96 +GAME( 2000, multidrw, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Multidraw - Free Games (0200956V, NSW/ACT)", MACHINE_FLAGS ) // 386/64, E - 08/05/00 +GAME( 1996, mystgard, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Mystic Garden (0100275V, NSW/ACT)", MACHINE_FLAGS ) // 595/1, B - 11/06/96 +GAME( 1999, orchidms, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Orchid Mist (0200849V, NSW/ACT)", MACHINE_FLAGS ) // 601/3, C - 03/02/99 +GAME( 1996, oscara5, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Oscar (0200348V, NSW/ACT)", MACHINE_FLAGS ) // 593/2, C - 20/09/96 +GAME( 1999, pantmag, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Panther Magic (0101046V, NSW/ACT)", MACHINE_FLAGS ) // 594/7, A - 06/10/99 +GAME( 2001, partygrs, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Party Gras (AHG1567, US)", MACHINE_FLAGS ) // MV4115/6, A - 10/11/01 +GAME( 2001, partygrsa, partygrs, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Party Gras (BHG1284, US)", MACHINE_FLAGS ) // MV4115/3, B - 06/02/01 +GAME( 2000, peaflut, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Peacock Flutter (02J00011, NSW/ACT)", MACHINE_FLAGS ) // JB001, A - 10/03/00 +GAME( 1997, pengpay, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pays (0200460V, NSW/ACT)", MACHINE_FLAGS ) // 586/4(a), D - 03/06/97 +GAME( 1996, pengpaya, pengpay, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pays (0200357V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 586/4, C - 12/11/96 +GAME( 1997, pengpayb, pengpay, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pays (0200359V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 586/3(a), D - 03/06/97 +GAME( 1997, pengpayu, pengpay, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pays (BHI0417-03, US)", MACHINE_FLAGS ) // 586/7(b) B - 14/07/97 +GAME( 1998, petshop, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Pet Shop (0100679V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 618, A - 09/03/98 +GAME( 1996, przfight, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Prize Fight (0100299V, NSW/ACT)", MACHINE_FLAGS ) // 578/4, B - 08/08/96 +GAME( 1998, qcash, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queens of Cash (0100706V, NSW/ACT)", MACHINE_FLAGS ) // 603/6, C - 23/07/98 +GAME( 1997, qnile, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queen of the Nile (0100439V, NSW/ACT)", MACHINE_FLAGS ) // 602/4, B - 13/05/97 +GAME( 1997, qnilea, qnile, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queen of the Nile (0300440V, NSW/ACT)", MACHINE_FLAGS ) // 602/3, B - 13/05/97 +GAME( 1997, qnileb, qnile, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queen of the Nile (0200439V, NSW/ACT)", MACHINE_FLAGS ) // 602/4, B - 13/05/97 +GAME( 1997, qnilec, qnile, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queen of the Nile (0300439V, NSW/ACT)", MACHINE_FLAGS ) // 602/4, B - 13/05/97 +GAME( 1997, qnileu, qnile, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queen of the Nile (GHG4091-02, US)", MACHINE_FLAGS ) // MV4091, B - 13/05/97 +GAME( 1999, qnilemax, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Queen of the Nile - Maximillions (0401072V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 602/4, D - 18/06/99 +GAME( 2000, rainwrce, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Rainbow Warriors - Cash Express (0101332V, NSW/ACT)", MACHINE_FLAGS ) // 655, B - 02/03/00 +GAME( 1998, reelrock, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Reelin-n-Rockin (0100779V, NSW/ACT)", MACHINE_FLAGS ) // 628, A - 13/07/98 +GAME( 1997, retrsam, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Return of the Samurai (0400549V, NSW/ACT)", MACHINE_FLAGS ) // 608, A - 17/04/97 +GAME( 1997, retrsama, retrsam, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Return of the Samurai (0200506V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 608, A - 17/04/97 +GAME( 1997, retrsamb, retrsam, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Return of the Samurai (0200549V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 608, A - 17/04/97 +GAME( 1997, sumospin, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Sumo Spins (0200606V, NSW/ACT)", MACHINE_FLAGS ) // 622, A - 08/12/97 +GAME( 1999, sbuk2, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Super Bucks II (0400501V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 578, G - 26/07/99 +GAME( 1998, sbuk3, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Super Bucks III (0200711V, NSW/ACT)", MACHINE_FLAGS ) // 626, A - 22/04/98 +GAME( 1995, swhr2, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Sweethearts II (0200004V, NSW/ACT)", MACHINE_FLAGS ) // 577/1, C - 07/09/95 +GAME( 1998, swhr2u, swhr2, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Sweethearts II (PHG0742-02, US)", MACHINE_FLAGS ) // MV4061, A - 29/06/98 +GAME( 1995, swhr2v, swhr2, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Sweet Hearts II (01J01986, Venezuela)", MACHINE_FLAGS ) // 577/1, C - 07/09/95 +GAME( 199?, topbana, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Top Banana (0100550V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +GAME( 2000, trstrove, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Treasure Trove (01J00161, NSW/ACT)", MACHINE_FLAGS ) // JB001/3, A - 5/10/00 +GAME( 2002, tritreat, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Triple Treat (0201692V, NSW/ACT)", MACHINE_FLAGS ) // 692, A - 17/05/02 +GAME( 2001, trojhors, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Trojan Horse (01J00851, NSW/ACT)", MACHINE_FLAGS ) // JB001/5, A - 30/10/01 +GAME( 1997, trpdlght, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Tropical Delight (PHG0625-02, US)", MACHINE_FLAGS ) // 577/3, D - 24/09/97 +GAME( 1998, unicornd, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Unicorn Dreaming (0100791V, NSW/ACT)", MACHINE_FLAGS ) // 631/1, A - 31/08/98 +GAME( 1996, wamazon, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Amazon (0200285V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 506/6, A - 7/5/96 +GAME( 1996, wamazona, wamazon, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Amazon (0200507V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 506/8, A - 10/10/96 +GAME( 1996, wildbill, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Bill (0100297V, NSW/ACT)", MACHINE_FLAGS ) // 543/8, C - 15/08/96 +GAME( 1996, wcougar, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Cougar (0100167V, NSW/ACT)", MACHINE_FLAGS ) // 569/9, B - 27/2/96 +GAME( 1997, wcougaru, wcougar, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Cougar (NHG0296-04, US)", MACHINE_FLAGS ) // 569/8, D - 19/05/97 +GAME( 1999, wthing, aristmk5, aristmk5_usa, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Wild Thing (0101158V, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 608/4, B - 14/12/99 +GAME( 1999, wtiger, 0, aristmk5, aristmk5, aristmk5_state, aristmk5, ROT0, "Aristocrat", "White Tiger Classic (0200954V, NSW/ACT)", MACHINE_FLAGS ) // 638/1, B - 08/07/99 + diff --git a/src/mame/drivers/aristmk6.cpp b/src/mame/drivers/aristmk6.cpp index 505366fc554..5a192fa1d87 100644 --- a/src/mame/drivers/aristmk6.cpp +++ b/src/mame/drivers/aristmk6.cpp @@ -2057,7 +2057,7 @@ ROM_START( prophecy ) ROM_END -ROM_START( qnile ) +ROM_START( qnilea6 ) ARISTMK6_BIOS ROM_REGION( 0x2000000, "game_rom", ROMREGION_ERASEFF) ROM_LOAD32_WORD("3j011111.u72", 0x0800002, 0x0400000, CRC(491f4ef2) SHA1(fbaa64d9603900de44642f95fb9f7ee15e138669) ) @@ -2359,7 +2359,7 @@ ROM_START( sbuk5 ) ROM_END -ROM_START( swhr2 ) +ROM_START( swhr2a6 ) ARISTMK6_BIOS ROM_REGION( 0x2000000, "game_rom", ROMREGION_ERASEFF) ROM_LOAD32_WORD("0151183.u73", 0x0000002, 0x0400000, CRC(17f0dbe2) SHA1(7f1f0936e1cf528ee794e8925c40b063d1a77729) ) @@ -2950,7 +2950,7 @@ GAME( 2001, pompeia6, aristmk6, aristmk6, aristmk6, driver_device, 0, RO GAME( 2002, pompeia6u,pompeia6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Pompeii (0251010, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // US008, A - 04/03/02 GAME( 2005, prideaf, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Pride of Africa (10208511, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 628/9, J - 06/12/05 GAME( 2004, prophecy, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Prophecy (20173411, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 734, B - 10/08/04 -GAME( 2005, qnile, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Queen of the Nile (3J011111, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // JB027, C - 16/02/05 +GAME( 2005, qnilea6, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Queen of the Nile (3J011111, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // JB027, C - 16/02/05 GAME( 2001, qnilese, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Queen of the Nile Special Edition (10102811, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 683, A - 06/12/01 GAME( 2002, qnilejc, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Queen of the Nile Special Edition - Jackpot Carnival (20123911, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 683/1, A - 21/10/02 GAME( 2002, qnilejcsp, qnilejc, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Queen of the Nile Special Edition - Jackpot Carnival (20123911, NSW/ACT, Show Program)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 683/1, A - 21/10/02 @@ -2980,7 +2980,7 @@ GAME( 2003, sunmoon, aristmk6, aristmk6, aristmk6, driver_device, 0, RO GAME( 200?, sunmonbb, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Sun & Moon - Bank Buster (0153028, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // MV4173/2, (no data) GAME( 2003, sunqndol, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Sun Queen - Dollar Storm (0451327, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // MV2070/1, B - 11/24/03 GAME( 2005, sbuk5, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Super Bucks V (20203611, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 794, A - 03/08/05 -GAME( 2005, swhr2, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Sweethearts II (0151183, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // US169, A - 7/5/05 +GAME( 2005, swhr2a6, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Sweethearts II (0151183, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // US169, A - 7/5/05 GAME( 2002, swh2ld, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Sweethearts II - Lucky Devil (10119811, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 712, C - 16/10/02 GAME( 2006, tahitim, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Tahiti Magic (10238911, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 765/2, C - 07/12/06 GAME( 2002, thaiprnc, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Thai Princess (10119321, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 707, A - 17/09/02 diff --git a/src/mame/drivers/ashnojoe.cpp b/src/mame/drivers/ashnojoe.cpp index 18b4496d6fb..8116bfb4439 100644 --- a/src/mame/drivers/ashnojoe.cpp +++ b/src/mame/drivers/ashnojoe.cpp @@ -69,7 +69,7 @@ Dips: Easy (A) -> Difficult (D) -Game is controled with 4-direction lever and two buttons +Game is controlled with 4-direction lever and two buttons Coin B is not used *************************************************************************/ @@ -78,7 +78,6 @@ Coin B is not used #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" #include "sound/2203intf.h" -#include "sound/msm5205.h" #include "includes/ashnojoe.h" READ16_MEMBER(ashnojoe_state::fake_4a00a_r) @@ -93,7 +92,7 @@ WRITE16_MEMBER(ashnojoe_state::ashnojoe_soundlatch_w) if (ACCESSING_BITS_0_7) { m_soundlatch_status = 1; - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); } } @@ -128,7 +127,7 @@ WRITE8_MEMBER(ashnojoe_state::adpcm_w) READ8_MEMBER(ashnojoe_state::sound_latch_r) { m_soundlatch_status = 0; - return soundlatch_byte_r(space, 0); + return m_soundlatch->read(space, 0); } READ8_MEMBER(ashnojoe_state::sound_latch_status_r) @@ -271,12 +270,6 @@ static GFXDECODE_START( ashnojoe ) GFXDECODE_ENTRY( "gfx5", 0, tiles16x16_layout, 0, 0x100 ) GFXDECODE_END - -WRITE_LINE_MEMBER(ashnojoe_state::ym2203_irq_handler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - WRITE8_MEMBER(ashnojoe_state::ym2203_write_a) { /* This gets called at 8910 startup with 0xff before the 5205 exists, causing a crash */ @@ -349,8 +342,10 @@ static MACHINE_CONFIG_START( ashnojoe, ashnojoe_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, 4000000) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(ashnojoe_state, ym2203_irq_handler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(ashnojoe_state, ym2203_write_a)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(ashnojoe_state, ym2203_write_b)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.1) diff --git a/src/mame/drivers/astrocde.cpp b/src/mame/drivers/astrocde.cpp index 89bb2b7e725..73b32d70563 100644 --- a/src/mame/drivers/astrocde.cpp +++ b/src/mame/drivers/astrocde.cpp @@ -615,28 +615,28 @@ ADDRESS_MAP_END *************************************/ static ADDRESS_MAP_START( port_map, AS_IO, 8, astrocde_state ) - AM_RANGE(0x0000, 0x0019) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) + AM_RANGE(0x0000, 0x0019) AM_SELECT(0xff00) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) ADDRESS_MAP_END static ADDRESS_MAP_START( port_map_mono_pattern, AS_IO, 8, astrocde_state ) - AM_RANGE(0x0000, 0x0019) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) + AM_RANGE(0x0000, 0x0019) AM_SELECT(0xff00) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) AM_RANGE(0x0078, 0x007e) AM_MIRROR(0xff00) AM_WRITE(astrocade_pattern_board_w) AM_RANGE(0xa55b, 0xa55b) AM_WRITE(protected_ram_enable_w) ADDRESS_MAP_END static ADDRESS_MAP_START( port_map_stereo_pattern, AS_IO, 8, astrocde_state ) - AM_RANGE(0x0000, 0x0019) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) - AM_RANGE(0x0050, 0x0058) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_DEVWRITE("astrocade2", astrocade_device, astrocade_sound_w) + AM_RANGE(0x0000, 0x0019) AM_SELECT(0xff00) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) + AM_RANGE(0x0050, 0x0058) AM_SELECT(0xff00) AM_DEVWRITE("astrocade2", astrocade_device, astrocade_sound_w) AM_RANGE(0x0078, 0x007e) AM_MIRROR(0xff00) AM_WRITE(astrocade_pattern_board_w) AM_RANGE(0xa55b, 0xa55b) AM_WRITE(protected_ram_enable_w) ADDRESS_MAP_END static ADDRESS_MAP_START( port_map_16col_pattern, AS_IO, 8, astrocde_state ) - AM_RANGE(0x0000, 0x0019) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) - AM_RANGE(0x0050, 0x0058) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_DEVWRITE("astrocade2", astrocade_device, astrocade_sound_w) + AM_RANGE(0x0000, 0x0019) AM_SELECT(0xff00) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) + AM_RANGE(0x0050, 0x0058) AM_SELECT(0xff00) AM_DEVWRITE("astrocade2", astrocade_device, astrocade_sound_w) AM_RANGE(0x0078, 0x007e) AM_MIRROR(0xff00) AM_WRITE(astrocade_pattern_board_w) AM_RANGE(0x00bf, 0x00bf) AM_MIRROR(0xff00) AM_WRITE(profpac_page_select_w) AM_RANGE(0x00c3, 0x00c3) AM_MIRROR(0xff00) AM_READ(profpac_intercept_r) @@ -647,7 +647,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( port_map_16col_pattern_nosound, AS_IO, 8, astrocde_state ) - AM_RANGE(0x0000, 0x0019) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) + AM_RANGE(0x0000, 0x0019) AM_SELECT(0xff00) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) AM_RANGE(0x0078, 0x007e) AM_MIRROR(0xff00) AM_WRITE(astrocade_pattern_board_w) AM_RANGE(0x00bf, 0x00bf) AM_MIRROR(0xff00) AM_WRITE(profpac_page_select_w) AM_RANGE(0x00c3, 0x00c3) AM_MIRROR(0xff00) AM_READ(profpac_intercept_r) @@ -1688,48 +1688,48 @@ ROM_END DRIVER_INIT_MEMBER(astrocde_state,seawolf2) { m_video_config = 0x00; - m_maincpu->space(AS_IO).install_write_handler(0x40, 0x40, 0, 0xff18, write8_delegate(FUNC(astrocde_state::seawolf2_sound_1_w), this)); - m_maincpu->space(AS_IO).install_write_handler(0x41, 0x41, 0, 0xff18, write8_delegate(FUNC(astrocde_state::seawolf2_sound_2_w), this)); - m_maincpu->space(AS_IO).install_write_handler(0x42, 0x43, 0, 0xff18, write8_delegate(FUNC(astrocde_state::seawolf2_lamps_w), this)); + m_maincpu->space(AS_IO).install_write_handler(0x40, 0x40, 0, 0xff18, 0, write8_delegate(FUNC(astrocde_state::seawolf2_sound_1_w), this)); + m_maincpu->space(AS_IO).install_write_handler(0x41, 0x41, 0, 0xff18, 0, write8_delegate(FUNC(astrocde_state::seawolf2_sound_2_w), this)); + m_maincpu->space(AS_IO).install_write_handler(0x42, 0x43, 0, 0xff18, 0, write8_delegate(FUNC(astrocde_state::seawolf2_lamps_w), this)); } DRIVER_INIT_MEMBER(astrocde_state,ebases) { m_video_config = AC_SOUND_PRESENT | AC_MONITOR_BW; - m_maincpu->space(AS_IO).install_write_handler(0x20, 0x20, 0, 0xff07, write8_delegate(FUNC(astrocde_state::ebases_coin_w), this)); - m_maincpu->space(AS_IO).install_write_handler(0x28, 0x28, 0, 0xff07, write8_delegate(FUNC(astrocde_state::ebases_trackball_select_w), this)); + m_maincpu->space(AS_IO).install_write_handler(0x20, 0x20, 0, 0xff07, 0, write8_delegate(FUNC(astrocde_state::ebases_coin_w), this)); + m_maincpu->space(AS_IO).install_write_handler(0x28, 0x28, 0, 0xff07, 0, write8_delegate(FUNC(astrocde_state::ebases_trackball_select_w), this)); } DRIVER_INIT_MEMBER(astrocde_state,spacezap) { m_video_config = AC_SOUND_PRESENT | AC_MONITOR_BW; - m_maincpu->space(AS_IO).install_read_handler(0x13, 0x13, 0x03ff, 0xff00, read8_delegate(FUNC(astrocde_state::spacezap_io_r), this)); + m_maincpu->space(AS_IO).install_read_handler(0x13, 0x13, 0, 0xfc00, 0x0300, read8_delegate(FUNC(astrocde_state::spacezap_io_r), this)); } DRIVER_INIT_MEMBER(astrocde_state,wow) { m_video_config = AC_SOUND_PRESENT | AC_LIGHTPEN_INTS | AC_STARS; - m_maincpu->space(AS_IO).install_read_handler(0x15, 0x15, 0x0fff, 0xff00, read8_delegate(FUNC(astrocde_state::wow_io_r), this)); - m_maincpu->space(AS_IO).install_read_handler(0x17, 0x17, 0xffff, 0xff00, read8_delegate(FUNC(astrocde_state::wow_speech_r), this)); + m_maincpu->space(AS_IO).install_read_handler(0x15, 0x15, 0, 0xf000, 0x0f00, read8_delegate(FUNC(astrocde_state::wow_io_r), this)); + m_maincpu->space(AS_IO).install_read_handler(0x17, 0x17, 0, 0x0000, 0xff00, read8_delegate(FUNC(astrocde_state::wow_speech_r), this)); } DRIVER_INIT_MEMBER(astrocde_state,gorf) { m_video_config = AC_SOUND_PRESENT | AC_LIGHTPEN_INTS | AC_STARS; - m_maincpu->space(AS_IO).install_read_handler(0x15, 0x15, 0x0fff, 0xff00, read8_delegate(FUNC(astrocde_state::gorf_io_1_r), this)); - m_maincpu->space(AS_IO).install_read_handler(0x16, 0x16, 0x0fff, 0xff00, read8_delegate(FUNC(astrocde_state::gorf_io_2_r), this)); - m_maincpu->space(AS_IO).install_read_handler(0x17, 0x17, 0xffff, 0xff00, read8_delegate(FUNC(astrocde_state::gorf_speech_r), this)); + m_maincpu->space(AS_IO).install_read_handler(0x15, 0x15, 0, 0xf000, 0x0f00, read8_delegate(FUNC(astrocde_state::gorf_io_1_r), this)); + m_maincpu->space(AS_IO).install_read_handler(0x16, 0x16, 0, 0xf000, 0x0f00, read8_delegate(FUNC(astrocde_state::gorf_io_2_r), this)); + m_maincpu->space(AS_IO).install_read_handler(0x17, 0x17, 0, 0x0000, 0xff00, read8_delegate(FUNC(astrocde_state::gorf_speech_r), this)); } DRIVER_INIT_MEMBER(astrocde_state,robby) { m_video_config = AC_SOUND_PRESENT; - m_maincpu->space(AS_IO).install_read_handler(0x15, 0x15, 0x0fff, 0xff00, read8_delegate(FUNC(astrocde_state::robby_io_r), this)); + m_maincpu->space(AS_IO).install_read_handler(0x15, 0x15, 0, 0xf000, 0x0f00, read8_delegate(FUNC(astrocde_state::robby_io_r), this)); } @@ -1738,8 +1738,8 @@ DRIVER_INIT_MEMBER(astrocde_state,profpac) address_space &iospace = m_maincpu->space(AS_IO); m_video_config = AC_SOUND_PRESENT; - iospace.install_read_handler(0x14, 0x14, 0x0fff, 0xff00, read8_delegate(FUNC(astrocde_state::profpac_io_1_r), this)); - iospace.install_read_handler(0x15, 0x15, 0x77ff, 0xff00, read8_delegate(FUNC(astrocde_state::profpac_io_2_r), this)); + iospace.install_read_handler(0x14, 0x14, 0, 0xf000, 0x0f00, read8_delegate(FUNC(astrocde_state::profpac_io_1_r), this)); + iospace.install_read_handler(0x15, 0x15, 0, 0x8800, 0x7700, read8_delegate(FUNC(astrocde_state::profpac_io_2_r), this)); /* configure banking */ m_bank8000->configure_entries(0, 4, memregion("banks")->base() + 0x4000, 0x8000); @@ -1752,10 +1752,10 @@ DRIVER_INIT_MEMBER(astrocde_state,demndrgn) address_space &iospace = m_maincpu->space(AS_IO); m_video_config = 0x00; - iospace.install_read_handler(0x14, 0x14, 0x1fff, 0xff00, read8_delegate(FUNC(astrocde_state::demndrgn_io_r), this)); - iospace.install_read_port(0x1c, 0x1c, 0x0000, 0xff00, "FIREX"); - iospace.install_read_port(0x1d, 0x1d, 0x0000, 0xff00, "FIREY"); - iospace.install_write_handler(0x97, 0x97, 0x0000, 0xff00, write8_delegate(FUNC(astrocde_state::demndrgn_sound_w), this)); + iospace.install_read_handler(0x14, 0x14, 0, 0xe000, 0x1f00, read8_delegate(FUNC(astrocde_state::demndrgn_io_r), this)); + iospace.install_read_port(0x1c, 0x1c, 0xff00, "FIREX"); + iospace.install_read_port(0x1d, 0x1d, 0xff00, "FIREY"); + iospace.install_write_handler(0x97, 0x97, 0, 0xff00, 0x0000, write8_delegate(FUNC(astrocde_state::demndrgn_sound_w), this)); /* configure banking */ m_bank8000->configure_entries(0, 4, memregion("banks")->base() + 0x4000, 0x8000); @@ -1768,15 +1768,15 @@ DRIVER_INIT_MEMBER(astrocde_state,tenpindx) address_space &iospace = m_maincpu->space(AS_IO); m_video_config = 0x00; - iospace.install_read_port(0x60, 0x60, 0x0000, 0xff00, "P60"); - iospace.install_read_port(0x61, 0x61, 0x0000, 0xff00, "P61"); - iospace.install_read_port(0x62, 0x62, 0x0000, 0xff00, "P62"); - iospace.install_read_port(0x63, 0x63, 0x0000, 0xff00, "P63"); - iospace.install_read_port(0x64, 0x64, 0x0000, 0xff00, "P64"); - iospace.install_write_handler(0x65, 0x66, 0x0000, 0xff00, write8_delegate(FUNC(astrocde_state::tenpindx_lamp_w), this)); - iospace.install_write_handler(0x67, 0x67, 0x0000, 0xff00, write8_delegate(FUNC(astrocde_state::tenpindx_counter_w), this)); - iospace.install_write_handler(0x68, 0x68, 0x0000, 0xff00, write8_delegate(FUNC(astrocde_state::tenpindx_lights_w), this)); - iospace.install_write_handler(0x97, 0x97, 0x0000, 0xff00, write8_delegate(FUNC(astrocde_state::tenpindx_sound_w), this)); + iospace.install_read_port(0x60, 0x60, 0xff00, "P60"); + iospace.install_read_port(0x61, 0x61, 0xff00, "P61"); + iospace.install_read_port(0x62, 0x62, 0xff00, "P62"); + iospace.install_read_port(0x63, 0x63, 0xff00, "P63"); + iospace.install_read_port(0x64, 0x64, 0xff00, "P64"); + iospace.install_write_handler(0x65, 0x66, 0, 0xff00, 0x0000, write8_delegate(FUNC(astrocde_state::tenpindx_lamp_w), this)); + iospace.install_write_handler(0x67, 0x67, 0, 0xff00, 0x0000, write8_delegate(FUNC(astrocde_state::tenpindx_counter_w), this)); + iospace.install_write_handler(0x68, 0x68, 0, 0xff00, 0x0000, write8_delegate(FUNC(astrocde_state::tenpindx_lights_w), this)); + iospace.install_write_handler(0x97, 0x97, 0, 0xff00, 0x0000, write8_delegate(FUNC(astrocde_state::tenpindx_sound_w), this)); /* configure banking */ m_bank8000->configure_entries(0, 4, memregion("banks")->base() + 0x4000, 0x8000); diff --git a/src/mame/drivers/astrohome.cpp b/src/mame/drivers/astrohome.cpp index 7b08a693956..6881bd86ed6 100644 --- a/src/mame/drivers/astrohome.cpp +++ b/src/mame/drivers/astrohome.cpp @@ -54,7 +54,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( astrocade_io, AS_IO, 8, astrocde_mess_state ) - AM_RANGE(0x00, 0x1f) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) + AM_RANGE(0x00, 0x1f) AM_SELECT(0xff00) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w) ADDRESS_MAP_END /************************************* diff --git a/src/mame/drivers/asuka.cpp b/src/mame/drivers/asuka.cpp index 109444c36d7..c3075697c5f 100644 --- a/src/mame/drivers/asuka.cpp +++ b/src/mame/drivers/asuka.cpp @@ -768,17 +768,6 @@ static GFXDECODE_START( asuka ) GFXDECODE_END - -/************************************************************** - SOUND -**************************************************************/ - -WRITE_LINE_MEMBER(asuka_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - - /*********************************************************** MACHINE DRIVERS ***********************************************************/ @@ -870,7 +859,7 @@ static MACHINE_CONFIG_START( bonzeadv, asuka_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(asuka_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) diff --git a/src/mame/drivers/at.cpp b/src/mame/drivers/at.cpp index 8263a879c04..f651d909f2e 100644 --- a/src/mame/drivers/at.cpp +++ b/src/mame/drivers/at.cpp @@ -152,8 +152,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( neat_io, AS_IO, 16, at_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0022, 0x0023) AM_DEVWRITE8("cs8221", cs8221_device, address_w, 0x00ff) - AM_RANGE(0x0022, 0x0023) AM_DEVREADWRITE8("cs8221", cs8221_device, data_r, data_w, 0xff00) + AM_RANGE(0x0022, 0x0023) AM_DEVICE("cs8221", cs8221_device, map) AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map) ADDRESS_MAP_END diff --git a/src/mame/drivers/atari_s1.cpp b/src/mame/drivers/atari_s1.cpp index 51e862f858d..a6a5506e0b1 100644 --- a/src/mame/drivers/atari_s1.cpp +++ b/src/mame/drivers/atari_s1.cpp @@ -112,7 +112,7 @@ static ADDRESS_MAP_START( atari_s1_map, AS_PROGRAM, 8, atari_s1_state ) AM_RANGE(0x2000, 0x204f) AM_MIRROR(0x0F80) AM_READ(switch_r) AM_WRITENOP // aavenger ROL 200B causes a spurious write AM_RANGE(0x3000, 0x3fff) AM_WRITE(audioen_w) // audio enable AM_RANGE(0x4000, 0x4fff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5080, 0x508c) AM_MIRROR(3) AM_WRITE(meter_w) // time2000 only + AM_RANGE(0x5080, 0x508f) AM_WRITE(meter_w) // time2000 only AM_RANGE(0x6000, 0x6fff) AM_WRITE(audiores_w) // audio reset AM_RANGE(0x7000, 0x7fff) AM_ROM ADDRESS_MAP_END diff --git a/src/mame/drivers/atarigx2.cpp b/src/mame/drivers/atarigx2.cpp index 5f73dfd9434..29ec3b5e588 100644 --- a/src/mame/drivers/atarigx2.cpp +++ b/src/mame/drivers/atarigx2.cpp @@ -5,6 +5,9 @@ Atari GX2 hardware driver by Aaron Giles + + Moto Frenzy protection reverse engineered by: + Morten Shearman Kirkegaard, Samuel Neves, Peter Wilhelmsen Games supported: * Space Lords (1992) @@ -12,7 +15,7 @@ * Road Riot's Revenge Rally (1993) Known bugs: - * protection devices unknown + * Unemulated protection for Space Lords and Road Riot's Revenge **************************************************************************** @@ -125,10 +128,11 @@ WRITE32_MEMBER(atarigx2_state::mo_command_w) /************************************* * - * Protection? + * Protection (non-working, legacy) * *************************************/ +/* Note: Will all eventually be handled in machine/atarixga.cpp */ WRITE32_MEMBER(atarigx2_state::atarigx2_protection_w) { @@ -143,16 +147,16 @@ WRITE32_MEMBER(atarigx2_state::atarigx2_protection_w) logerror("%06X:Protection W@%04X = %04X\n", pc, offset * 4 + 2, data); } - COMBINE_DATA(&m_protection_base[offset]); + COMBINE_DATA(&m_protection_ram[offset]); if (ACCESSING_BITS_16_31) { - m_last_write = m_protection_base[offset] >> 16; + m_last_write = m_protection_ram[offset] >> 16; m_last_write_offset = offset*2; } if (ACCESSING_BITS_0_15) { - m_last_write = m_protection_base[offset] & 0xffff; + m_last_write = m_protection_ram[offset] & 0xffff; m_last_write_offset = offset*2+1; } } @@ -1138,7 +1142,7 @@ READ32_MEMBER(atarigx2_state::atarigx2_protection_r) { 0xffffffff, 0xffff } }; - UINT32 result = m_protection_base[offset]; + UINT32 result = m_protection_ram[offset]; if (offset == 0x300) result |= 0x80000000; @@ -1175,6 +1179,12 @@ READ32_MEMBER(atarigx2_state::atarigx2_protection_r) } +READ32_MEMBER( atarigx2_state::rrreveng_prot_r ) +{ + return 0; +} + + /************************************* * * Main CPU memory handlers @@ -1185,7 +1195,6 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 32, atarigx2_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0xc80000, 0xc80fff) AM_RAM - AM_RANGE(0xca0000, 0xca0fff) AM_READWRITE(atarigx2_protection_r, atarigx2_protection_w) AM_SHARE("protection_base") AM_RANGE(0xd00000, 0xd1ffff) AM_READ(a2d_data_r) AM_RANGE(0xd20000, 0xd20fff) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0xff00ff00) AM_RANGE(0xd40000, 0xd40fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") @@ -1277,9 +1286,9 @@ static INPUT_PORTS_START( motofren ) PORT_BIT( 0x0000ffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x00ff0000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_START1 ) /* Start/fire */ - PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) /* AUX3 */ - PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) /* AUX2 */ - PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) /* AUX1 */ + PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("AUX3") + PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("AUX2") + PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("AUX1") PORT_BIT( 0xf0000000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("SERVICE") /* 68.STATUS (A2=0) */ @@ -1301,13 +1310,13 @@ static INPUT_PORTS_START( motofren ) PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("A2D0") /* A2D @ 0xD00000 */ - PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) + PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) PORT_NAME("Throttle") PORT_REVERSE PORT_START("A2D1") /* A2D @ 0xD00002 */ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("A2D2") /* A2D @ 0xD00004 */ - PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) + PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_REVERSE PORT_START("A2D3") /* A2D @ 0xD00006 */ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -1459,6 +1468,8 @@ static MACHINE_CONFIG_START( atarigx2, atarigx2_state ) MCFG_MACHINE_RESET_OVERRIDE(atarigx2_state,atarigx2) + MCFG_DEVICE_ADD("xga", ATARI_XGA, 0); + MCFG_ATARI_EEPROM_2816_ADD("eeprom") /* video hardware */ @@ -2209,6 +2220,7 @@ ROM_END DRIVER_INIT_MEMBER(atarigx2_state,spclords) { m_playfield_base = 0x000; + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xca0000, 0xca0fff, read32_delegate(FUNC(atarigx2_state::atarigx2_protection_r),this), write32_delegate(FUNC(atarigx2_state::atarigx2_protection_w),this)); } @@ -2237,22 +2249,18 @@ XMEM=68.A23*E.A22*!E.A21*68.A20 = 1101 xxxx = d0 +68.A23*E.A22*!E.A21*!68.A20*68.A19 = 1100 1xxx = c80000-cfffff +!68.A23*!E.A22*!E.A21 = 000x xxxx = 000000-1fffff */ -} - -READ32_MEMBER(atarigx2_state::rrreveng_prot_r) -{ - return 0; + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xca0000, 0xca0fff, read32_delegate(FUNC(atari_xga_device::read),&(*m_xga)), write32_delegate(FUNC(atari_xga_device::write),&(*m_xga))); } DRIVER_INIT_MEMBER(atarigx2_state,rrreveng) { m_playfield_base = 0x000; + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xca0000, 0xca0fff, read32_delegate(FUNC(atarigx2_state::atarigx2_protection_r),this), write32_delegate(FUNC(atarigx2_state::atarigx2_protection_w),this)); m_maincpu->space(AS_PROGRAM).install_read_handler(0xca0fc0, 0xca0fc3, read32_delegate(FUNC(atarigx2_state::rrreveng_prot_r),this)); } - /************************************* * * Game driver(s) @@ -2264,10 +2272,10 @@ GAME( 1992, spclordsb, spclords, atarigx2_0x400, spclords, atarigx2_state, spclo GAME( 1992, spclordsg, spclords, atarigx2_0x400, spclords, atarigx2_state, spclords, ROT0, "Atari Games", "Space Lords (rev A, German)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) GAME( 1992, spclordsa, spclords, atarigx2_0x400, spclords, atarigx2_state, spclords, ROT0, "Atari Games", "Space Lords (rev A)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) -GAME( 1992, motofren, 0, atarigx2_0x200, motofren, atarigx2_state, motofren, ROT0, "Atari Games", "Moto Frenzy", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) -GAME( 1992, motofrenmd, motofren, atarigx2_0x200, motofren, atarigx2_state, motofren, ROT0, "Atari Games", "Moto Frenzy (Mini Deluxe)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) -GAME( 1992, motofrenft, motofren, atarigx2_0x200, motofren, atarigx2_state, motofren, ROT0, "Atari Games", "Moto Frenzy (Field Test Version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) -GAME( 1992, motofrenmf, motofren, atarigx2_0x200, motofren, atarigx2_state, motofren, ROT0, "Atari Games", "Moto Frenzy (Mini Deluxe Field Test Version)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) +GAME( 1992, motofren, 0, atarigx2_0x200, motofren, atarigx2_state, motofren, ROT0, "Atari Games", "Moto Frenzy", 0 ) +GAME( 1992, motofrenmd, motofren, atarigx2_0x200, motofren, atarigx2_state, motofren, ROT0, "Atari Games", "Moto Frenzy (Mini Deluxe)", 0 ) +GAME( 1992, motofrenft, motofren, atarigx2_0x200, motofren, atarigx2_state, motofren, ROT0, "Atari Games", "Moto Frenzy (Field Test Version)", 0 ) +GAME( 1992, motofrenmf, motofren, atarigx2_0x200, motofren, atarigx2_state, motofren, ROT0, "Atari Games", "Moto Frenzy (Mini Deluxe Field Test Version)", 0 ) GAME( 1993, rrreveng, 0, atarigx2_0x400, rrreveng, atarigx2_state, rrreveng, ROT0, "Atari Games", "Road Riot's Revenge (prototype, Sep 06, 1994)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) GAME( 1993, rrrevenga, rrreveng, atarigx2_0x400, rrreveng, atarigx2_state, rrreveng, ROT0, "Atari Games", "Road Riot's Revenge (prototype, Jan 27, 1994, set 1)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/atlantis.cpp b/src/mame/drivers/atlantis.cpp index 999ead3ad41..65102eee960 100644 --- a/src/mame/drivers/atlantis.cpp +++ b/src/mame/drivers/atlantis.cpp @@ -842,8 +842,8 @@ static MACHINE_CONFIG_START( mwskins, atlantis_state ) MCFG_PALETTE_ADD_BBBBBGGGGGRRRRR("palette") /* sound hardware */ - MCFG_DEVICE_ADD("dcs", DCS2_AUDIO_DSIO, 0) - //MCFG_DEVICE_ADD("dcs", DCS2_AUDIO_DENVER, 0) + //MCFG_DEVICE_ADD("dcs", DCS2_AUDIO_DSIO, 0) + MCFG_DEVICE_ADD("dcs", DCS2_AUDIO_DENVER, 0) MCFG_DCS2_AUDIO_DRAM_IN_MB(8) MCFG_DCS2_AUDIO_POLLING_OFFSET(0) /* no place to hook :-( */ diff --git a/src/mame/drivers/atm.cpp b/src/mame/drivers/atm.cpp index 2f94d00ac3a..130e801e17a 100644 --- a/src/mame/drivers/atm.cpp +++ b/src/mame/drivers/atm.cpp @@ -127,7 +127,7 @@ static ADDRESS_MAP_START (atm_io, AS_IO, 8, atm_state ) AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, track_r, track_w) AM_MIRROR(0xff00) AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, sector_r, sector_w) AM_MIRROR(0xff00) AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, data_r, data_w) AM_MIRROR(0xff00) - AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff) + AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_SELECT(0xff00) AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, state_r, param_w) AM_MIRROR(0xff00) AM_RANGE(0x4000, 0x4000) AM_WRITE(atm_port_7ffd_w) AM_MIRROR(0x3ffd) AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("ay8912", ay8910_device, data_w) AM_MIRROR(0x3ffd) diff --git a/src/mame/drivers/attache.cpp b/src/mame/drivers/attache.cpp index 64649910a4f..00db1fcc689 100644 --- a/src/mame/drivers/attache.cpp +++ b/src/mame/drivers/attache.cpp @@ -773,7 +773,7 @@ static ADDRESS_MAP_START( attache_io , AS_IO, 8, attache_state) AM_RANGE(0xf4, 0xf7) AM_DEVREADWRITE("ctc",z80ctc_device,read,write) AM_MIRROR(0xff00) AM_RANGE(0xf8, 0xfb) AM_DEVREADWRITE("pio",z80pio_device,read_alt,write_alt) AM_MIRROR(0xff00) AM_RANGE(0xfc, 0xfd) AM_DEVICE("fdc",upd765a_device,map) AM_MIRROR(0xff00) - AM_RANGE(0xfe, 0xfe) AM_READWRITE(display_data_r, display_data_w) AM_MIRROR(0xff00) AM_MASK(0xffff) + AM_RANGE(0xfe, 0xfe) AM_READWRITE(display_data_r, display_data_w) AM_SELECT(0xff00) AM_RANGE(0xff, 0xff) AM_READWRITE(memmap_r, memmap_w) AM_MIRROR(0xff00) ADDRESS_MAP_END diff --git a/src/mame/drivers/avigo.cpp b/src/mame/drivers/avigo.cpp index 30cc63a4c32..2d27c700203 100644 --- a/src/mame/drivers/avigo.cpp +++ b/src/mame/drivers/avigo.cpp @@ -688,7 +688,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(avigo_state::avigo_1hz_timer) QUICKLOAD_LOAD_MEMBER( avigo_state,avigo) { - address_space& flash1 = m_flash1->space(0); const char *systemname = machine().system().name; UINT32 first_app_page = (0x50000>>14); int app_page; @@ -704,7 +703,7 @@ QUICKLOAD_LOAD_MEMBER( avigo_state,avigo) for (int offset=0; offset<0x4000; offset++) { - if (flash1.read_byte((app_page<<14) + offset) != 0xff) + if (m_flash1->read_raw((app_page<<14) + offset) != 0xff) { empty_page = false; break; @@ -721,10 +720,10 @@ QUICKLOAD_LOAD_MEMBER( avigo_state,avigo) logerror("Application loaded at 0x%05x-0x%05x\n", app_page<<14, (app_page<<14) + (UINT32)image.length()); // copy app file into flash memory - image.fread((UINT8*)flash1.get_read_ptr(app_page<<14), image.length()); + image.fread(m_flash1->base() + (app_page<<14), image.length()); // update the application ID - flash1.write_byte((app_page<<14) + 0x1a5, 0x80 + (app_page - (first_app_page>>14))); + m_flash1->write_raw((app_page<<14) + 0x1a5, 0x80 + (app_page - (first_app_page>>14))); // reset the CPU for allow at the Avigo OS to recognize the installed app m_warm_start = 1; diff --git a/src/mame/drivers/aztarac.cpp b/src/mame/drivers/aztarac.cpp index ba879e5f052..dcdda3ae0cf 100644 --- a/src/mame/drivers/aztarac.cpp +++ b/src/mame/drivers/aztarac.cpp @@ -173,6 +173,8 @@ static MACHINE_CONFIG_START( aztarac, aztarac_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 2000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) diff --git a/src/mame/drivers/batman.cpp b/src/mame/drivers/batman.cpp index fd02aab2453..24f7a2677ff 100644 --- a/src/mame/drivers/batman.cpp +++ b/src/mame/drivers/batman.cpp @@ -107,16 +107,16 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, batman_state ) AM_RANGE(0x260050, 0x260051) AM_MIRROR(0x11ff8e) AM_WRITE(latch_w) AM_RANGE(0x260060, 0x260061) AM_MIRROR(0x11ff8e) AM_DEVWRITE("eeprom", atari_eeprom_device, unlock_write) AM_RANGE(0x2a0000, 0x2a0001) AM_MIRROR(0x11fffe) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) - AM_RANGE(0x3e0000, 0x3e0fff) AM_MIRROR(0x100000) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - AM_RANGE(0x3effc0, 0x3effff) AM_MIRROR(0x100000) AM_DEVREADWRITE("vad", atari_vad_device, control_read, control_write) - AM_RANGE(0x3f0000, 0x3f1fff) AM_MIRROR(0x100000) AM_DEVWRITE("vad", atari_vad_device, playfield2_latched_msb_w) AM_SHARE("vad:playfield2") - AM_RANGE(0x3f2000, 0x3f3fff) AM_MIRROR(0x100000) AM_DEVWRITE("vad", atari_vad_device, playfield_latched_lsb_w) AM_SHARE("vad:playfield") - AM_RANGE(0x3f4000, 0x3f5fff) AM_MIRROR(0x100000) AM_DEVWRITE("vad", atari_vad_device, playfield_upper_w) AM_SHARE("vad:playfield_ext") - AM_RANGE(0x3f6000, 0x3f7fff) AM_MIRROR(0x100000) AM_RAM AM_SHARE("vad:mob") - AM_RANGE(0x3f8000, 0x3f8eff) AM_MIRROR(0x100000) AM_DEVWRITE("vad", atari_vad_device, alpha_w) AM_SHARE("vad:alpha") - AM_RANGE(0x3f8f00, 0x3f8f7f) AM_MIRROR(0x100000) AM_SHARE("vad:eof") - AM_RANGE(0x3f8f80, 0x3f8fff) AM_MIRROR(0x100000) AM_RAM AM_SHARE("vad:mob:slip") - AM_RANGE(0x3f0000, 0x3fffff) AM_MIRROR(0x100000) AM_RAM + AM_RANGE(0x2e0000, 0x2e0fff) AM_MIRROR(0x100000) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") + AM_RANGE(0x2effc0, 0x2effff) AM_MIRROR(0x100000) AM_DEVREADWRITE("vad", atari_vad_device, control_read, control_write) + AM_RANGE(0x2f0000, 0x2f1fff) AM_MIRROR(0x100000) AM_DEVWRITE("vad", atari_vad_device, playfield2_latched_msb_w) AM_SHARE("vad:playfield2") + AM_RANGE(0x2f2000, 0x2f3fff) AM_MIRROR(0x100000) AM_DEVWRITE("vad", atari_vad_device, playfield_latched_lsb_w) AM_SHARE("vad:playfield") + AM_RANGE(0x2f4000, 0x2f5fff) AM_MIRROR(0x100000) AM_DEVWRITE("vad", atari_vad_device, playfield_upper_w) AM_SHARE("vad:playfield_ext") + AM_RANGE(0x2f6000, 0x2f7fff) AM_MIRROR(0x100000) AM_RAM AM_SHARE("vad:mob") + AM_RANGE(0x2f8000, 0x2f8eff) AM_MIRROR(0x100000) AM_DEVWRITE("vad", atari_vad_device, alpha_w) AM_SHARE("vad:alpha") + AM_RANGE(0x2f8f00, 0x2f8f7f) AM_MIRROR(0x100000) AM_SHARE("vad:eof") + AM_RANGE(0x2f8f80, 0x2f8fff) AM_MIRROR(0x100000) AM_RAM AM_SHARE("vad:mob:slip") + AM_RANGE(0x2f0000, 0x2fffff) AM_MIRROR(0x100000) AM_RAM ADDRESS_MAP_END diff --git a/src/mame/drivers/bbcbc.cpp b/src/mame/drivers/bbcbc.cpp index 96e346aed67..52832587ec3 100644 --- a/src/mame/drivers/bbcbc.cpp +++ b/src/mame/drivers/bbcbc.cpp @@ -33,7 +33,6 @@ public: required_device<generic_slot_device> m_cart; virtual void machine_start() override; virtual void machine_reset() override; - DECLARE_WRITE_LINE_MEMBER(tms_interrupt); }; @@ -104,10 +103,6 @@ static INPUT_PORTS_START( bbcbc ) PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Play, No") PORT_CODE(KEYCODE_B) PORT_IMPULSE(1) INPUT_PORTS_END -WRITE_LINE_MEMBER(bbcbc_state::tms_interrupt) -{ - m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} static const z80_daisy_config bbcbc_daisy_chain[] = { @@ -137,7 +132,7 @@ static MACHINE_CONFIG_START( bbcbc, bbcbc_state ) MCFG_DEVICE_ADD( "tms9129", TMS9129, XTAL_10_738635MHz / 2 ) MCFG_TMS9928A_VRAM_SIZE(0x4000) - MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(bbcbc_state, tms_interrupt)) + MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", 0)) MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" ) MCFG_SCREEN_UPDATE_DEVICE( "tms9129", tms9928a_device, screen_update ) diff --git a/src/mame/drivers/bbusters.cpp b/src/mame/drivers/bbusters.cpp index 2a04e850028..a856853fc5f 100644 --- a/src/mame/drivers/bbusters.cpp +++ b/src/mame/drivers/bbusters.cpp @@ -254,7 +254,7 @@ WRITE16_MEMBER(bbusters_state::sound_cpu_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, 0, data&0xff); + m_soundlatch->write(space, 0, data&0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -375,7 +375,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, bbusters_state ) AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r) AM_WRITE(sound_status_w) + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(sound_status_w) ADDRESS_MAP_END static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, bbusters_state ) @@ -684,6 +684,8 @@ static MACHINE_CONFIG_START( bbusters, bbusters_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) @@ -723,6 +725,8 @@ static MACHINE_CONFIG_START( mechatt, bbusters_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2608, 8000000) MCFG_YM2608_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) diff --git a/src/mame/drivers/beathead.cpp b/src/mame/drivers/beathead.cpp index d39b84cd861..dff737a925c 100644 --- a/src/mame/drivers/beathead.cpp +++ b/src/mame/drivers/beathead.cpp @@ -468,8 +468,8 @@ READ32_MEMBER( beathead_state::movie_speedup_r ) DRIVER_INIT_MEMBER(beathead_state,beathead) { /* prepare the speedups */ - m_maincpu->space(AS_PROGRAM).install_read_handler(0x00000ae8, 0x00000aeb, 0, 0, read32_delegate(FUNC(beathead_state::speedup_r), this)); - m_maincpu->space(AS_PROGRAM).install_read_handler(0x00000804, 0x00000807, 0, 0, read32_delegate(FUNC(beathead_state::movie_speedup_r), this)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x00000ae8, 0x00000aeb, read32_delegate(FUNC(beathead_state::speedup_r), this)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x00000804, 0x00000807, read32_delegate(FUNC(beathead_state::movie_speedup_r), this)); m_speedup_data = m_ram_base + 0xae8/4; m_movie_speedup_data = m_ram_base + 0x804/4; diff --git a/src/mame/drivers/bfm_sc2.cpp b/src/mame/drivers/bfm_sc2.cpp index c1af8bb6e2c..d6a94b0e87e 100644 --- a/src/mame/drivers/bfm_sc2.cpp +++ b/src/mame/drivers/bfm_sc2.cpp @@ -3616,8 +3616,8 @@ MACHINE_START_MEMBER(bfm_sc2_state,sc2dmd) { MACHINE_START_CALL_MEMBER(bfm_sc2); address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_write_handler(0x2800, 0x2800, 0, 0, write8_delegate(FUNC(bfm_sc2_state::vfd1_dmd_w),this)); - space.install_write_handler(0x2900, 0x2900, 0, 0, write8_delegate(FUNC(bfm_sc2_state::dmd_reset_w),this)); + space.install_write_handler(0x2800, 0x2800, write8_delegate(FUNC(bfm_sc2_state::vfd1_dmd_w),this)); + space.install_write_handler(0x2900, 0x2900, write8_delegate(FUNC(bfm_sc2_state::dmd_reset_w),this)); } /* machine driver for scorpion2 board */ diff --git a/src/mame/drivers/bking.cpp b/src/mame/drivers/bking.cpp index e6085af308e..b85088542c8 100644 --- a/src/mame/drivers/bking.cpp +++ b/src/mame/drivers/bking.cpp @@ -45,7 +45,7 @@ WRITE8_MEMBER(bking_state::bking_soundlatch_w) if (data & (1 << i)) code |= 0x80 >> i; - soundlatch_byte_w(space, offset, code); + m_soundlatch->write(space, offset, code); if (m_sound_nmi_enable) m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -134,7 +134,7 @@ static ADDRESS_MAP_START( bking_audio_map, AS_PROGRAM, 8, bking_state ) AM_RANGE(0x4401, 0x4401) AM_DEVREAD("ay1", ay8910_device, data_r) AM_RANGE(0x4402, 0x4403) AM_DEVWRITE("ay2", ay8910_device, address_data_w) AM_RANGE(0x4403, 0x4403) AM_DEVREAD("ay2", ay8910_device, data_r) - AM_RANGE(0x4800, 0x4800) AM_READ(soundlatch_byte_r) + AM_RANGE(0x4800, 0x4800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x4802, 0x4802) AM_READWRITE(bking_sndnmi_disable_r, bking_sndnmi_enable_w) AM_RANGE(0xe000, 0xefff) AM_ROM /* Space for diagnostic ROM */ ADDRESS_MAP_END @@ -483,6 +483,8 @@ static MACHINE_CONFIG_START( bking, bking_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, XTAL_6MHz/4) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/drivers/blktiger.cpp b/src/mame/drivers/blktiger.cpp index 74984b54e97..92eade7109d 100644 --- a/src/mame/drivers/blktiger.cpp +++ b/src/mame/drivers/blktiger.cpp @@ -261,13 +261,6 @@ static GFXDECODE_START( blktiger ) GFXDECODE_END - -/* handler called by the 2203 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(blktiger_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - void blktiger_state::machine_start() { /* configure bankswitching */ @@ -340,7 +333,7 @@ static MACHINE_CONFIG_START( blktiger, blktiger_state ) MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_SOUND_ADD("ym1", YM2203, XTAL_3_579545MHz) /* verified on pcb */ - MCFG_YM2203_IRQ_HANDLER(WRITELINE(blktiger_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) MCFG_SOUND_ADD("ym2", YM2203, XTAL_3_579545MHz) /* verified on pcb */ diff --git a/src/mame/drivers/blockout.cpp b/src/mame/drivers/blockout.cpp index 2aef99913e0..bb8b9d370d6 100644 --- a/src/mame/drivers/blockout.cpp +++ b/src/mame/drivers/blockout.cpp @@ -80,7 +80,7 @@ WRITE16_MEMBER(blockout_state::blockout_sound_command_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -146,7 +146,7 @@ static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, blockout_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -318,6 +318,8 @@ static MACHINE_CONFIG_START( blockout, blockout_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", AUDIO_CLOCK) MCFG_YM2151_IRQ_HANDLER(WRITELINE(blockout_state,irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.60) diff --git a/src/mame/drivers/blstroid.cpp b/src/mame/drivers/blstroid.cpp index 9c9e159b52b..636019ec361 100644 --- a/src/mame/drivers/blstroid.cpp +++ b/src/mame/drivers/blstroid.cpp @@ -64,25 +64,26 @@ MACHINE_RESET_MEMBER(blstroid_state,blstroid) /* full map verified from schematics */ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, blstroid_state ) ADDRESS_MAP_UNMAP_HIGH + ADDRESS_MAP_GLOBAL_MASK(0x83ffff) AM_RANGE(0x000000, 0x03ffff) AM_MIRROR(0x7c0000) AM_ROM - AM_RANGE(0xff8000, 0xff8001) AM_MIRROR(0x7f81fe) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) - AM_RANGE(0xff8200, 0xff8201) AM_MIRROR(0x7f81fe) AM_WRITE(scanline_int_ack_w) - AM_RANGE(0xff8400, 0xff8401) AM_MIRROR(0x7f81fe) AM_WRITE(video_int_ack_w) - AM_RANGE(0xff8600, 0xff8601) AM_MIRROR(0x7f81fe) AM_DEVWRITE("eeprom", atari_eeprom_device, unlock_write) - AM_RANGE(0xff8800, 0xff89ff) AM_MIRROR(0x7f8000) AM_WRITEONLY AM_SHARE("priorityram") - AM_RANGE(0xff8a00, 0xff8a01) AM_MIRROR(0x7f81fe) AM_DEVWRITE8("jsa", atari_jsa_i_device, main_command_w, 0x00ff) - AM_RANGE(0xff8c00, 0xff8c01) AM_MIRROR(0x7f81fe) AM_DEVWRITE("jsa", atari_jsa_i_device, sound_reset_w) - AM_RANGE(0xff8e00, 0xff8e01) AM_MIRROR(0x7f81fe) AM_WRITE(blstroid_halt_until_hblank_0_w) - AM_RANGE(0xff9400, 0xff9401) AM_MIRROR(0x7f83fe) AM_DEVREAD8("jsa", atari_jsa_i_device, main_response_r, 0x00ff) - AM_RANGE(0xff9800, 0xff9801) AM_MIRROR(0x7f83f8) AM_READ_PORT("DIAL0") - AM_RANGE(0xff9804, 0xff9805) AM_MIRROR(0x7f83f8) AM_READ_PORT("DIAL1") - AM_RANGE(0xff9c00, 0xff9c01) AM_MIRROR(0x7f83fc) AM_READ_PORT("IN0") - AM_RANGE(0xff9c02, 0xff9c03) AM_MIRROR(0x7f83fc) AM_READ_PORT("IN1") - AM_RANGE(0xffa000, 0xffa3ff) AM_MIRROR(0x7f8c00) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - AM_RANGE(0xffb000, 0xffb3ff) AM_MIRROR(0x7f8c00) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff) - AM_RANGE(0xffc000, 0xffcfff) AM_MIRROR(0x7f8000) AM_RAM_DEVWRITE("playfield", tilemap_device, write) AM_SHARE("playfield") - AM_RANGE(0xffd000, 0xffdfff) AM_MIRROR(0x7f8000) AM_RAM AM_SHARE("mob") - AM_RANGE(0xffe000, 0xffffff) AM_MIRROR(0x7f8000) AM_RAM + AM_RANGE(0x800000, 0x800001) AM_MIRROR(0x7f81fe) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) + AM_RANGE(0x800200, 0x800201) AM_MIRROR(0x7f81fe) AM_WRITE(scanline_int_ack_w) + AM_RANGE(0x800400, 0x800401) AM_MIRROR(0x7f81fe) AM_WRITE(video_int_ack_w) + AM_RANGE(0x800600, 0x800601) AM_MIRROR(0x7f81fe) AM_DEVWRITE("eeprom", atari_eeprom_device, unlock_write) + AM_RANGE(0x800800, 0x8009ff) AM_MIRROR(0x7f8000) AM_WRITEONLY AM_SHARE("priorityram") + AM_RANGE(0x800a00, 0x800a01) AM_MIRROR(0x7f81fe) AM_DEVWRITE8("jsa", atari_jsa_i_device, main_command_w, 0x00ff) + AM_RANGE(0x800c00, 0x800c01) AM_MIRROR(0x7f81fe) AM_DEVWRITE("jsa", atari_jsa_i_device, sound_reset_w) + AM_RANGE(0x800e00, 0x800e01) AM_MIRROR(0x7f81fe) AM_WRITE(blstroid_halt_until_hblank_0_w) + AM_RANGE(0x801400, 0x801401) AM_MIRROR(0x7f83fe) AM_DEVREAD8("jsa", atari_jsa_i_device, main_response_r, 0x00ff) + AM_RANGE(0x801800, 0x801801) AM_MIRROR(0x7f83f8) AM_READ_PORT("DIAL0") + AM_RANGE(0x801804, 0x801805) AM_MIRROR(0x7f83f8) AM_READ_PORT("DIAL1") + AM_RANGE(0x801c00, 0x801c01) AM_MIRROR(0x7f83fc) AM_READ_PORT("IN0") + AM_RANGE(0x801c02, 0x801c03) AM_MIRROR(0x7f83fc) AM_READ_PORT("IN1") + AM_RANGE(0x802000, 0x8023ff) AM_MIRROR(0x7f8c00) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") + AM_RANGE(0x803000, 0x8033ff) AM_MIRROR(0x7f8c00) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff) + AM_RANGE(0x804000, 0x804fff) AM_MIRROR(0x7f8000) AM_RAM_DEVWRITE("playfield", tilemap_device, write) AM_SHARE("playfield") + AM_RANGE(0x805000, 0x805fff) AM_MIRROR(0x7f8000) AM_RAM AM_SHARE("mob") + AM_RANGE(0x806000, 0x807fff) AM_MIRROR(0x7f8000) AM_RAM ADDRESS_MAP_END diff --git a/src/mame/drivers/bml3.cpp b/src/mame/drivers/bml3.cpp index 9b93e8f734c..26cba28ea3c 100644 --- a/src/mame/drivers/bml3.cpp +++ b/src/mame/drivers/bml3.cpp @@ -789,11 +789,11 @@ void bml3_state::machine_reset() /* defaults */ mem.install_rom(0xa000, 0xfeff,memregion("maincpu")->base() + 0xa000); mem.install_rom(0xfff0, 0xffff,memregion("maincpu")->base() + 0xfff0); - mem.install_write_handler(0xa000, 0xbfff, 0, 0,write8_delegate(FUNC(bml3_state::bml3_a000_w), this),0); - mem.install_write_handler(0xc000, 0xdfff, 0, 0,write8_delegate(FUNC(bml3_state::bml3_c000_w), this),0); - mem.install_write_handler(0xe000, 0xefff, 0, 0,write8_delegate(FUNC(bml3_state::bml3_e000_w), this),0); - mem.install_write_handler(0xf000, 0xfeff, 0, 0,write8_delegate(FUNC(bml3_state::bml3_f000_w), this),0); - mem.install_write_handler(0xfff0, 0xffff, 0, 0,write8_delegate(FUNC(bml3_state::bml3_fff0_w), this),0); + mem.install_write_handler(0xa000, 0xbfff, write8_delegate(FUNC(bml3_state::bml3_a000_w), this),0); + mem.install_write_handler(0xc000, 0xdfff, write8_delegate(FUNC(bml3_state::bml3_c000_w), this),0); + mem.install_write_handler(0xe000, 0xefff, write8_delegate(FUNC(bml3_state::bml3_e000_w), this),0); + mem.install_write_handler(0xf000, 0xfeff, write8_delegate(FUNC(bml3_state::bml3_f000_w), this),0); + mem.install_write_handler(0xfff0, 0xffff, write8_delegate(FUNC(bml3_state::bml3_fff0_w), this),0); m_firq_mask = -1; // disable firq } @@ -820,7 +820,7 @@ WRITE8_MEMBER(bml3_state::bml3_piaA_w) { if(data & 0x40) { - mem.install_readwrite_handler(0xa000, 0xbfff, 0, 0, + mem.install_readwrite_handler(0xa000, 0xbfff, read8_delegate(FUNC(bml3_state::bml3_a000_r), this), write8_delegate(FUNC(bml3_state::bml3_a000_w), this), 0); } @@ -828,7 +828,7 @@ WRITE8_MEMBER(bml3_state::bml3_piaA_w) { mem.install_rom(0xa000, 0xbfff, memregion("maincpu")->base() + 0xa000); - mem.install_write_handler(0xa000, 0xbfff, 0, 0, + mem.install_write_handler(0xa000, 0xbfff, write8_delegate(FUNC(bml3_state::bml3_a000_w), this), 0); } @@ -838,7 +838,7 @@ WRITE8_MEMBER(bml3_state::bml3_piaA_w) { if(data & 0x40) { - mem.install_readwrite_handler(0xc000, 0xdfff, 0, 0, + mem.install_readwrite_handler(0xc000, 0xdfff, read8_delegate(FUNC(bml3_state::bml3_c000_r), this), write8_delegate(FUNC(bml3_state::bml3_c000_w), this), 0); } @@ -846,7 +846,7 @@ WRITE8_MEMBER(bml3_state::bml3_piaA_w) { mem.install_rom(0xc000, 0xdfff, memregion("maincpu")->base() + 0xc000); - mem.install_write_handler(0xc000, 0xdfff, 0, 0, + mem.install_write_handler(0xc000, 0xdfff, write8_delegate(FUNC(bml3_state::bml3_c000_w), this), 0); } @@ -856,7 +856,7 @@ WRITE8_MEMBER(bml3_state::bml3_piaA_w) { if(data & 0x80) { - mem.install_readwrite_handler(0xe000, 0xefff, 0, 0, + mem.install_readwrite_handler(0xe000, 0xefff, read8_delegate(FUNC(bml3_state::bml3_e000_r), this), write8_delegate(FUNC(bml3_state::bml3_e000_w), this), 0); } @@ -864,7 +864,7 @@ WRITE8_MEMBER(bml3_state::bml3_piaA_w) { mem.install_rom(0xe000, 0xefff, memregion("maincpu")->base() + 0xe000); - mem.install_write_handler(0xe000, 0xefff, 0, 0, + mem.install_write_handler(0xe000, 0xefff, write8_delegate(FUNC(bml3_state::bml3_e000_w), this), 0); } @@ -872,7 +872,7 @@ WRITE8_MEMBER(bml3_state::bml3_piaA_w) if(data & 1) { - mem.install_readwrite_handler(0xf000, 0xfeff, 0, 0, + mem.install_readwrite_handler(0xf000, 0xfeff, read8_delegate(FUNC(bml3_state::bml3_f000_r), this), write8_delegate(FUNC(bml3_state::bml3_f000_w), this), 0); } @@ -880,14 +880,14 @@ WRITE8_MEMBER(bml3_state::bml3_piaA_w) { mem.install_rom(0xf000, 0xfeff, memregion("maincpu")->base() + 0xf000); - mem.install_write_handler(0xf000, 0xfeff, 0, 0, + mem.install_write_handler(0xf000, 0xfeff, write8_delegate(FUNC(bml3_state::bml3_f000_w), this), 0); } if(data & 2) { - mem.install_readwrite_handler(0xfff0, 0xffff, 0, 0, + mem.install_readwrite_handler(0xfff0, 0xffff, read8_delegate(FUNC(bml3_state::bml3_fff0_r), this), write8_delegate(FUNC(bml3_state::bml3_fff0_w), this), 0); } @@ -895,7 +895,7 @@ WRITE8_MEMBER(bml3_state::bml3_piaA_w) { mem.install_rom(0xfff0, 0xffff, memregion("maincpu")->base() + 0xfff0); - mem.install_write_handler(0xfff0, 0xffff, 0, 0, + mem.install_write_handler(0xfff0, 0xffff, write8_delegate(FUNC(bml3_state::bml3_fff0_w), this), 0); } diff --git a/src/mame/drivers/bublbobl.cpp b/src/mame/drivers/bublbobl.cpp index 0f5f57528e6..55641655f95 100644 --- a/src/mame/drivers/bublbobl.cpp +++ b/src/mame/drivers/bublbobl.cpp @@ -316,7 +316,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, bublbobl_state ) AM_RANGE(0x8000, 0x8fff) AM_RAM AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ym1", ym2203_device, read, write) AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ym2", ym3526_device, read, write) - AM_RANGE(0xb000, 0xb000) AM_READ(soundlatch_byte_r) AM_WRITE(bublbobl_sound_status_w) + AM_RANGE(0xb000, 0xb000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(bublbobl_sound_status_w) AM_RANGE(0xb001, 0xb001) AM_WRITE(bublbobl_sh_nmi_enable_w) AM_READNOP AM_RANGE(0xb002, 0xb002) AM_WRITE(bublbobl_sh_nmi_disable_w) AM_RANGE(0xe000, 0xffff) AM_ROM // space for diagnostic ROM? @@ -400,7 +400,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( tokio_sound_map, AS_PROGRAM, 8, bublbobl_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x8fff) AM_RAM - AM_RANGE(0x9000, 0x9000) AM_READ(soundlatch_byte_r) AM_WRITE(bublbobl_sound_status_w) + AM_RANGE(0x9000, 0x9000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(bublbobl_sound_status_w) AM_RANGE(0x9800, 0x9800) AM_READNOP // ??? AM_RANGE(0xa000, 0xa000) AM_WRITE(bublbobl_sh_nmi_disable_w) AM_RANGE(0xa800, 0xa800) AM_WRITE(bublbobl_sh_nmi_enable_w) @@ -721,18 +721,6 @@ GFXDECODE_END /************************************* * - * Sound interface - * - *************************************/ - -// handler called by the 2203 emulator when the internal timers cause an IRQ -WRITE_LINE_MEMBER(bublbobl_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - -/************************************* - * * Machine driver * *************************************/ @@ -802,8 +790,10 @@ static MACHINE_CONFIG_START( tokio, bublbobl_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, MAIN_XTAL/8) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(bublbobl_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.08) MCFG_SOUND_ROUTE(1, "mono", 0.08) MCFG_SOUND_ROUTE(2, "mono", 0.08) @@ -886,8 +876,10 @@ static MACHINE_CONFIG_START( bublbobl, bublbobl_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM2203, MAIN_XTAL/8) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(bublbobl_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ADD("ym2", YM3526, MAIN_XTAL/8) diff --git a/src/mame/drivers/buggychl.cpp b/src/mame/drivers/buggychl.cpp index 3563b156be8..ebd6a873176 100644 --- a/src/mame/drivers/buggychl.cpp +++ b/src/mame/drivers/buggychl.cpp @@ -102,7 +102,7 @@ TIMER_CALLBACK_MEMBER(buggychl_state::nmi_callback) WRITE8_MEMBER(buggychl_state::sound_command_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(buggychl_state::nmi_callback),this), data); } @@ -168,7 +168,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, buggychl_state ) AM_RANGE(0x4810, 0x481d) AM_DEVWRITE("msm", msm5232_device, write) AM_RANGE(0x4820, 0x4820) AM_RAM /* VOL/BAL for the 7630 on the MSM5232 output */ AM_RANGE(0x4830, 0x4830) AM_RAM /* TRBL/BASS for the 7630 on the MSM5232 output */ - AM_RANGE(0x5000, 0x5000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x5000, 0x5000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // AM_RANGE(0x5001, 0x5001) AM_READNOP /* is command pending? */ AM_RANGE(0x5001, 0x5001) AM_WRITE(nmi_enable_w) AM_RANGE(0x5002, 0x5002) AM_WRITE(nmi_disable_w) @@ -394,6 +394,8 @@ static MACHINE_CONFIG_START( buggychl, buggychl_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 8000000/4) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(buggychl_state, port_a_0_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(buggychl_state, port_b_0_w)) diff --git a/src/mame/drivers/cabal.cpp b/src/mame/drivers/cabal.cpp index b14eeb7e6f8..6a7629a5a6c 100644 --- a/src/mame/drivers/cabal.cpp +++ b/src/mame/drivers/cabal.cpp @@ -46,6 +46,7 @@ Dip locations verified with Fabtek manual for the trackball version #include "emu.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/2151intf.h" #include "sound/msm5205.h" #include "includes/cabal.h" @@ -156,7 +157,7 @@ static ADDRESS_MAP_START( cabalbl_main_map, AS_PROGRAM, 16, cabal_state ) AM_RANGE(0xc0080, 0xc0081) AM_WRITE(flipscreen_w) AM_RANGE(0xe0000, 0xe07ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0xe8000, 0xe8003) AM_WRITE(cabalbl_sndcmd_w) - AM_RANGE(0xe8004, 0xe8005) AM_READ(soundlatch2_word_r) + AM_RANGE(0xe8004, 0xe8005) AM_DEVREAD8("soundlatch", generic_latch_8_device, read, 0x00ff) AM_RANGE(0xe8008, 0xe8009) AM_WRITE(cabalbl_sound_irq_trigger_word_w) ADDRESS_MAP_END @@ -203,13 +204,13 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( cabalbl_sound_map, AS_PROGRAM, 8, cabal_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x2000, 0x2fff) AM_RAM - AM_RANGE(0x4000, 0x4000) AM_WRITE(soundlatch3_byte_w) - AM_RANGE(0x4002, 0x4002) AM_WRITE(soundlatch4_byte_w) + AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) + AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("soundlatch3", generic_latch_8_device, write) AM_RANGE(0x4004, 0x4004) AM_WRITE(cabalbl_coin_w) AM_RANGE(0x4006, 0x4006) AM_READ_PORT("COIN") AM_RANGE(0x4008, 0x4008) AM_READ(cabalbl_snd2_r) AM_RANGE(0x400a, 0x400a) AM_READ(cabalbl_snd1_r) - AM_RANGE(0x400c, 0x400c) AM_WRITE(soundlatch2_byte_w) + AM_RANGE(0x400c, 0x400c) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x400e, 0x400f) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x6000, 0x6000) AM_WRITENOP /* ??? */ AM_RANGE(0x8000, 0xffff) AM_ROM @@ -239,7 +240,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( cabalbl_talk1_portmap, AS_IO, 8, cabal_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch3_byte_r) + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_RANGE(0x01, 0x01) AM_WRITE(cabalbl_1_adpcm_w) ADDRESS_MAP_END @@ -249,7 +250,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( cabalbl_talk2_portmap, AS_IO, 8, cabal_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch4_byte_r) + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch3", generic_latch_8_device, read) AM_RANGE(0x01, 0x01) AM_WRITE(cabalbl_2_adpcm_w) ADDRESS_MAP_END @@ -561,6 +562,10 @@ static MACHINE_CONFIG_START( cabalbl, cabal_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_GENERIC_LATCH_8_ADD("soundlatch3") + MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz) /* verified on pcb */ MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.80) diff --git a/src/mame/drivers/capr1.cpp b/src/mame/drivers/capr1.cpp index 4203174914c..8fb6a9e5930 100644 --- a/src/mame/drivers/capr1.cpp +++ b/src/mame/drivers/capr1.cpp @@ -42,8 +42,6 @@ public: { } required_device<cpu_device> m_maincpu; - - DECLARE_WRITE_LINE_MEMBER(ym2203_irq); }; @@ -103,11 +101,6 @@ INPUT_PORTS_END ***************************************************************************/ -WRITE_LINE_MEMBER(capr1_state::ym2203_irq) -{ - m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - static MACHINE_CONFIG_START( cspin2, capr1_state ) /* basic machine hardware */ @@ -121,7 +114,7 @@ static MACHINE_CONFIG_START( cspin2, capr1_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ym", YM2203, 4000000) // clock frequency unknown - MCFG_YM2203_IRQ_HANDLER(WRITELINE(capr1_state, ym2203_irq)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("maincpu", 0)) //MCFG_AY8910_PORT_A_READ_CB(IOPORT("IN0")) //MCFG_AY8910_PORT_B_READ_CB(IOPORT("IN1")) MCFG_SOUND_ROUTE(0, "mono", 0.15) diff --git a/src/mame/drivers/cave.cpp b/src/mame/drivers/cave.cpp index 05d37048af7..909a3007e56 100644 --- a/src/mame/drivers/cave.cpp +++ b/src/mame/drivers/cave.cpp @@ -76,14 +76,12 @@ Versions known to exist but not dumped: #include "emu.h" #include "cpu/m68000/m68000.h" -#include "machine/eepromser.h" #include "machine/nvram.h" #include "machine/watchdog.h" #include "cpu/z80/z80.h" #include "includes/cave.h" #include "sound/2203intf.h" #include "sound/2151intf.h" -#include "sound/okim6295.h" #include "sound/ymz280b.h" #include "ppsatan.lh" @@ -235,7 +233,7 @@ WRITE16_MEMBER(cave_state::sound_cmd_w) { // m_sound_flag1 = 1; // m_sound_flag2 = 1; - soundlatch_word_w(space, offset, data, mem_mask); + m_soundlatch->write(space, offset, data, mem_mask); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); space.device().execute().spin_until_time(attotime::from_usec(50)); // Allow the other cpu to reply } @@ -244,14 +242,14 @@ WRITE16_MEMBER(cave_state::sound_cmd_w) READ8_MEMBER(cave_state::soundlatch_lo_r) { // m_sound_flag1 = 0; - return soundlatch_word_r(space, offset, 0x00ff) & 0xff; + return m_soundlatch->read(space, offset, 0x00ff) & 0xff; } /* Sound CPU: read the high 8 bits of the 16 bit sound latch */ READ8_MEMBER(cave_state::soundlatch_hi_r) { // m_sound_flag2 = 0; - return soundlatch_word_r(space, offset, 0xff00) >> 8; + return m_soundlatch->read(space, offset, 0xff00) >> 8; } /* Main CPU: read the latch written by the sound CPU (acknowledge) */ @@ -1958,11 +1956,6 @@ MACHINE_RESET_MEMBER(cave_state,cave) m_agallet_vblank_irq = 0; } -WRITE_LINE_MEMBER(cave_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - /*************************************************************************** Dangun Feveron ***************************************************************************/ @@ -2249,8 +2242,10 @@ static MACHINE_CONFIG_START( hotdogst, cave_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_16_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_32MHz/8) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(cave_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.20) MCFG_SOUND_ROUTE(1, "mono", 0.20) MCFG_SOUND_ROUTE(2, "mono", 0.20) @@ -2350,8 +2345,10 @@ static MACHINE_CONFIG_START( mazinger, cave_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_16_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_4MHz) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(cave_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.20) MCFG_SOUND_ROUTE(1, "mono", 0.20) MCFG_SOUND_ROUTE(2, "mono", 0.20) @@ -2404,6 +2401,8 @@ static MACHINE_CONFIG_START( metmqstr, cave_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_16_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", XTAL_16MHz / 4) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.6) @@ -2576,8 +2575,10 @@ static MACHINE_CONFIG_START( pwrinst2, cave_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_16_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_16MHz / 4) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(cave_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.40) MCFG_SOUND_ROUTE(1, "mono", 0.40) MCFG_SOUND_ROUTE(2, "mono", 0.40) @@ -2634,6 +2635,9 @@ static MACHINE_CONFIG_START( sailormn, cave_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_16_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", XTAL_16MHz/4) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) diff --git a/src/mame/drivers/cclimber.cpp b/src/mame/drivers/cclimber.cpp index d6dffce1624..9c7e887820c 100644 --- a/src/mame/drivers/cclimber.cpp +++ b/src/mame/drivers/cclimber.cpp @@ -1933,13 +1933,41 @@ ROM_START( ckongdks ) ROM_LOAD( "ck07.bin", 0x1000, 0x1000, CRC(9003ffbd) SHA1(fd016056aabc23957643f37230f03842294f795e) ) ROM_END +/* Original ORCA PCB, with a suicide battery attached + + */ +ROM_START( rpatrol ) + ROM_REGION( 0x6000, "maincpu", 0 ) // encrypted + ROM_LOAD( "1.1h", 0x000000, 0x001000, CRC(065197f0) SHA1(6e482967949bdb126b7ac484abb84c24f4687a3a) ) + ROM_LOAD( "2.1f", 0x001000, 0x001000, CRC(3614b820) SHA1(01966e6ae2ead93797d402bc8d789458b0bdcd75) ) + ROM_LOAD( "3.1d", 0x002000, 0x001000, CRC(ba428bbf) SHA1(ac4cd6ac0adab79bc2cfec3ec2683291c5f0f376) ) + ROM_LOAD( "4.1c", 0x003000, 0x001000, CRC(41497a94) SHA1(7550e74f93c1fd1d5e7fc70c4a2cd2d1b4c22ce5) ) + ROM_LOAD( "5.1a", 0x004000, 0x001000, CRC(e20ee7e7) SHA1(53f7ec5c6805043d3e8f014ade2480cd6dbd94db) ) + + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "6.6l.2732", 0x000000, 0x000800, CRC(b38d8aca) SHA1(b93aa0010b0c0ab23284188a881d4a9bb0fd4582) ) + ROM_CONTINUE( 0x001000, 0x000800 ) + ROM_LOAD( "7.6p.2732", 0x002000, 0x000800, CRC(bc2bddf9) SHA1(4057fc535b1a2db943f893290afe9bfd865ac84b) ) + ROM_CONTINUE( 0x003000, 0x000800 ) + + ROM_REGION( 0x1000, "gfx2", 0 ) + ROM_LOAD( "9.2t", 0x000000, 0x000800, CRC(d373fc48) SHA1(f06017190955d7458ac652b37c47cee033bc5498) ) + ROM_LOAD( "8.2s", 0x000800, 0x000800, CRC(59747c31) SHA1(92acf07489f3e17f0c1769a0df15b6ddb117830f) ) + + ROM_REGION( 0x0060, "proms", 0 ) + // probably matches with existing sets + ROM_LOAD( "bprom1.9n", 0x0000, 0x0020, BAD_DUMP CRC(f9a2383b) SHA1(4d88c177740efdb27708474c9ee0fcdca5a78c36) ) + ROM_LOAD( "bprom2.9p", 0x0020, 0x0020, BAD_DUMP CRC(1743bd26) SHA1(9bb50f6e24a7ac3c9ddf3923e57c5532603009e5) ) + ROM_LOAD( "bprom3.9c", 0x0040, 0x0020, BAD_DUMP CRC(ee03bc96) SHA1(45e33e750a536a904f30136d84dd7993d97e8e54) ) +ROM_END + /* This set came from a 'Silver Land' board with Silver Land GFX roms, however, the program roms are nearly the same as River Patrol but appear to have an original ORCA copyright I think the board was a half-converted board as 'Water Gage' and 'Bon Voyage' don't really fit the theme of Silver Land so I'm loading the River Patrol GFX instead as they fit better */ -ROM_START( rpatrol ) +ROM_START( rpatrola ) ROM_REGION( 0x6000, "maincpu", 0 ) ROM_LOAD( "sci1.bin", 0x0000, 0x1000, CRC(33b01c90) SHA1(9c8da6dd963bfb0544ef99b8fdedcf86c32cdb6b) ) ROM_LOAD( "sci2.bin", 0x1000, 0x1000, CRC(03f53340) SHA1(35336945f4b634fc4c7791ac9c9e6643c8cd8006) ) @@ -2551,8 +2579,9 @@ GAME( 1981, ckongpt2b, ckongpt2, cclimber, ckongb, cclimber_state, ckongb, // see bagman.c for parent GAME( 1981, bagmanf, bagman, cclimber, ckong, driver_device, 0, ROT270, "bootleg", "Bagman (bootleg on Crazy Kong hardware)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1981, rpatrol, 0, cclimber, rpatrol, driver_device, 0, ROT0, "Orca", "River Patrol (Orca)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, rpatrolb, rpatrol, cclimber, rpatrol, driver_device, 0, ROT0, "bootleg", "River Patrol (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, rpatrol, 0, cclimber, rpatrol, driver_device, 0, ROT0, "Orca", "River Patrol (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // TODO: encrypted, suicide battery on PCB +GAME( 1981, rpatrola, rpatrol, cclimber, rpatrol, driver_device, 0, ROT0, "bootleg", "River Patrol (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, rpatrolb, rpatrol, cclimber, rpatrol, driver_device, 0, ROT0, "bootleg", "River Patrol (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, silvland, rpatrol, cclimber, rpatrol, driver_device, 0, ROT0, "Falcon", "Silver Land", MACHINE_SUPPORTS_SAVE ) // see pacman.c for parent diff --git a/src/mame/drivers/cfx9850.cpp b/src/mame/drivers/cfx9850.cpp index 30ec1e78b4b..0694dd5dc14 100644 --- a/src/mame/drivers/cfx9850.cpp +++ b/src/mame/drivers/cfx9850.cpp @@ -78,7 +78,7 @@ static ADDRESS_MAP_START( cfx9850, AS_PROGRAM, 8, cfx9850_state ) // AM_RANGE( 0x110000, 0x11ffff ) /* some memory mapped i/o? */ AM_RANGE( 0x200000, 0x27ffff ) AM_ROM AM_REGION( "bios", 0 ) AM_RANGE( 0x400000, 0x40ffff ) AM_RAM - AM_RANGE( 0x600000, 0x601fff ) AM_MIRROR(0xf800) AM_RAM AM_SHARE("display_ram") + AM_RANGE( 0x600000, 0x6007ff ) AM_MIRROR(0xf800) AM_RAM AM_SHARE("display_ram") // AM_RANGE( 0xe10000, 0xe1ffff ) /* some memory mapped i/o? */ ADDRESS_MAP_END diff --git a/src/mame/drivers/chanbara.cpp b/src/mame/drivers/chanbara.cpp index 379730cdf1a..51cabc6ea49 100644 --- a/src/mame/drivers/chanbara.cpp +++ b/src/mame/drivers/chanbara.cpp @@ -102,7 +102,6 @@ public: DECLARE_PALETTE_INIT(chanbara); UINT32 screen_update_chanbara(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - DECLARE_WRITE_LINE_MEMBER(sound_irq); }; @@ -372,11 +371,6 @@ WRITE8_MEMBER(chanbara_state::chanbara_ay_out_1_w) //if (data & 0xf8) printf("chanbara_ay_out_1_w unused bits set %02x\n", data & 0xf8); } -WRITE_LINE_MEMBER(chanbara_state::sound_irq) -{ - m_maincpu->set_input_line(0, state); -} - void chanbara_state::machine_start() { save_item(NAME(m_scroll)); @@ -412,7 +406,7 @@ static MACHINE_CONFIG_START( chanbara, chanbara_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2203, 12000000/8) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(chanbara_state, sound_irq)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("maincpu", 0)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(chanbara_state, chanbara_ay_out_0_w)) diff --git a/src/mame/drivers/chihiro.cpp b/src/mame/drivers/chihiro.cpp index d6c8bc74346..41197649f34 100644 --- a/src/mame/drivers/chihiro.cpp +++ b/src/mame/drivers/chihiro.cpp @@ -729,27 +729,33 @@ int ohci_hlean2131qc_device::handle_nonstandard_request(int endpoint, USBSetupPa { if (endpoint != 0) return -1; - printf("Control request: %x %x %x %x %x %x %x\n\r", endpoint, endpoints[endpoint].controldirection, setup->bmRequestType, setup->bRequest, setup->wValue, setup->wIndex, setup->wLength); + printf("Control request to an2131qc: %x %x %x %x %x %x %x\n\r", endpoint, endpoints[endpoint].controldirection, setup->bmRequestType, setup->bRequest, setup->wValue, setup->wIndex, setup->wLength); + // default valuse for data stage for (int n = 0; n < setup->wLength; n++) endpoints[endpoint].buffer[n] = 0x50 ^ n; endpoints[endpoint].buffer[1] = 0x4b; // bits 4-1 special value, must be 10 xor 15 - if (setup->bRequest == 0x17) + // bRequest is a command value + if (setup->bRequest == 0x16) { - maximum_send = setup->wIndex; - if (maximum_send > 0x40) - maximum_send = 0x40; - endpoints[2].remain = maximum_send; - endpoints[2].position = region + 0x2000 + setup->wValue; + // this command is used to read data from the first i2c serial eeprom connected to the chip + // setup->wValue = start address to read from + // setup->wIndex = number of bytes to read + // data will be transferred to the host using endpoint 1 (IN) + endpoints[1].remain = setup->wIndex & 255; + endpoints[1].position = region + setup->wValue; // usually wValue is 0x1f00 } - if ((setup->bRequest == 0x16) && (setup->wValue == 0x1f00)) + if (setup->bRequest == 0x17) { - // should be for an2131sc - endpoints[1].remain = setup->wIndex; - endpoints[1].position = region + 0x1f00; + // this command is used to read data from the second i2c serial eeprom connected to the chip + // setup->wValue = start address to read from + // setup->wIndex = number of bytes to read + // data will be transferred to the host using endpoint 2 (IN) + endpoints[2].remain = setup->wIndex & 255; + endpoints[2].position = region + 0x2000 + setup->wValue; } if (setup->bRequest == 0x19) // 19 used to receive packet, 20 to send ? { - // amount to transfer + // amount to transfer with endpoint 4 endpoints[endpoint].buffer[5] = 20 >> 8; endpoints[endpoint].buffer[4] = (20 & 0xff); endpoints[4].remain = 20; @@ -833,6 +839,7 @@ int ohci_hlean2131sc_device::handle_nonstandard_request(int endpoint, USBSetupPa { if (endpoint != 0) return -1; + printf("Control request to an2131sc: %x %x %x %x %x %x %x\n\r", endpoint, endpoints[endpoint].controldirection, setup->bmRequestType, setup->bRequest, setup->wValue, setup->wIndex, setup->wLength); for (int n = 0; n < setup->wLength; n++) endpoints[endpoint].buffer[n] = 0xa0 ^ n; endpoints[endpoint].position = endpoints[endpoint].buffer; @@ -1084,6 +1091,7 @@ WRITE32_MEMBER(chihiro_state::mediaboard_w) static ADDRESS_MAP_START(chihiro_map, AS_PROGRAM, 32, chihiro_state) AM_IMPORT_FROM(xbox_base_map) + AM_RANGE(0xff000000, 0xff07ffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x00f80000) ADDRESS_MAP_END static ADDRESS_MAP_START(chihiro_map_io, AS_IO, 32, chihiro_state) @@ -1156,7 +1164,7 @@ MACHINE_CONFIG_END ROMX_LOAD(name, offset, length, hash, ROM_BIOS(bios+1)) /* Note '+1' */ #define CHIHIRO_BIOS \ - ROM_REGION( 0x100000, "bios", 0) \ + ROM_REGION( 0x80000, "bios", 0) \ ROM_SYSTEM_BIOS( 0, "bios0", "Chihiro Bios" ) \ ROM_LOAD_BIOS( 0, "chihiro_xbox_bios.bin", 0x000000, 0x80000, CRC(66232714) SHA1(b700b0041af8f84835e45d1d1250247bf7077188) ) \ ROM_REGION( 0x200000, "mediaboard", 0) \ diff --git a/src/mame/drivers/chinagat.cpp b/src/mame/drivers/chinagat.cpp index 946d5020f38..b6b6db080b3 100644 --- a/src/mame/drivers/chinagat.cpp +++ b/src/mame/drivers/chinagat.cpp @@ -41,7 +41,7 @@ ADPCM in the bootlegs is not quite right.... Misusing the data? the microcode dump's the same). This in conjunction with the different ADPCM chip (msm5205) are used to 'fake' a M6295. - Bootleg 1 ADPCM is now wired up, but still not working :-( - Definantly sync problems between the i8049 and the m5205 which need + Definitely sync problems between the i8049 and the m5205 which need further looking at. @@ -79,7 +79,6 @@ Dip locations and factory settings verified with China Gate US manual. #include "sound/2151intf.h" #include "sound/2203intf.h" #include "sound/okim6295.h" -#include "sound/msm5205.h" #include "includes/ddragon.h" #define MAIN_CLOCK XTAL_12MHz @@ -108,7 +107,6 @@ public: DECLARE_WRITE8_MEMBER( saiyugoub1_m5205_clk_w ); DECLARE_READ8_MEMBER( saiyugoub1_m5205_irq_r ); DECLARE_WRITE_LINE_MEMBER(saiyugoub1_m5205_irq_w); - DECLARE_WRITE_LINE_MEMBER(chinagat_irq_handler); optional_device<msm5205_device> m_adpcm; }; @@ -166,7 +164,7 @@ WRITE8_MEMBER(chinagat_state::chinagat_interrupt_w ) switch (offset) { case 0: /* 3e00 - SND irq */ - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_soundcpu->set_input_line(m_sound_irq, (m_sound_irq == INPUT_LINE_NMI) ? PULSE_LINE : HOLD_LINE ); break; @@ -356,7 +354,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, chinagat_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xA000, 0xA000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xA000, 0xA000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( ym2203c_sound_map, AS_PROGRAM, 8, chinagat_state ) @@ -374,7 +372,7 @@ static ADDRESS_MAP_START( ym2203c_sound_map, AS_PROGRAM, 8, chinagat_state ) // AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) // AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xA000, 0xA000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xA000, 0xA000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( saiyugoub1_sound_map, AS_PROGRAM, 8, chinagat_state ) @@ -382,7 +380,7 @@ static ADDRESS_MAP_START( saiyugoub1_sound_map, AS_PROGRAM, 8, chinagat_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x9800, 0x9800) AM_WRITE(saiyugoub1_mcu_command_w) - AM_RANGE(0xA000, 0xA000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xA000, 0xA000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( i8748_map, AS_PROGRAM, 8, chinagat_state ) @@ -507,11 +505,6 @@ static GFXDECODE_START( chinagat ) GFXDECODE_END -WRITE_LINE_MEMBER(chinagat_state::chinagat_irq_handler) -{ - m_soundcpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE ); -} - MACHINE_START_MEMBER(chinagat_state,chinagat) { /* configure banks */ @@ -583,6 +576,8 @@ static MACHINE_CONFIG_START( chinagat, chinagat_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", 3579545) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.80) @@ -629,6 +624,8 @@ static MACHINE_CONFIG_START( saiyugoub1, chinagat_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", 3579545) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.80) @@ -673,8 +670,10 @@ static MACHINE_CONFIG_START( saiyugoub2, chinagat_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM2203, 3579545) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(chinagat_state, chinagat_irq_handler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) MCFG_SOUND_ROUTE(1, "mono", 0.50) MCFG_SOUND_ROUTE(2, "mono", 0.50) diff --git a/src/mame/drivers/cobra.cpp b/src/mame/drivers/cobra.cpp index 391cf3e040e..37ea78dfa0c 100644 --- a/src/mame/drivers/cobra.cpp +++ b/src/mame/drivers/cobra.cpp @@ -578,7 +578,9 @@ bool cobra_jvs::coin_counters(UINT8 *&buf, UINT8 count) *buf++ = m_coin_counter[0] >> 8; *buf++ = m_coin_counter[0]; if(count > 1) + { *buf++ = m_coin_counter[1] >> 8; *buf++ = m_coin_counter[1]; + } return true; } @@ -2025,26 +2027,26 @@ WRITE8_MEMBER(cobra_state::sub_jvs_w) } static ADDRESS_MAP_START( cobra_sub_map, AS_PROGRAM, 32, cobra_state ) - AM_RANGE(0x00000000, 0x003fffff) AM_MIRROR(0x80000000) AM_RAM AM_SHARE("sub_ram") // Main RAM - AM_RANGE(0x70000000, 0x7003ffff) AM_MIRROR(0x80000000) AM_READWRITE(sub_comram_r, sub_comram_w) // Double buffered shared RAM between Main and Sub -// AM_RANGE(0x78000000, 0x780000ff) AM_MIRROR(0x80000000) AM_NOP // SCSI controller (unused) - AM_RANGE(0x78040000, 0x7804ffff) AM_MIRROR(0x80000000) AM_DEVREADWRITE16("rfsnd", rf5c400_device, rf5c400_r, rf5c400_w, 0xffffffff) - AM_RANGE(0x78080000, 0x7808000f) AM_MIRROR(0x80000000) AM_READWRITE16(sub_ata0_r, sub_ata0_w, 0xffffffff) - AM_RANGE(0x780c0010, 0x780c001f) AM_MIRROR(0x80000000) AM_READWRITE16(sub_ata1_r, sub_ata1_w, 0xffffffff) - AM_RANGE(0x78200000, 0x782000ff) AM_MIRROR(0x80000000) AM_DEVREADWRITE("k001604", k001604_device, reg_r, reg_w) // PSAC registers - AM_RANGE(0x78210000, 0x78217fff) AM_MIRROR(0x80000000) AM_RAM_WRITE(sub_psac_palette_w) AM_SHARE("paletteram") // PSAC palette RAM - AM_RANGE(0x78220000, 0x7823ffff) AM_MIRROR(0x80000000) AM_DEVREADWRITE("k001604", k001604_device, tile_r, tile_w) // PSAC tile RAM - AM_RANGE(0x78240000, 0x7827ffff) AM_MIRROR(0x80000000) AM_DEVREADWRITE("k001604", k001604_device, char_r, char_w) // PSAC character RAM - AM_RANGE(0x78280000, 0x7828000f) AM_MIRROR(0x80000000) AM_NOP // ??? - AM_RANGE(0x78300000, 0x7830000f) AM_MIRROR(0x80000000) AM_READWRITE(sub_psac2_r, sub_psac2_w) // PSAC - AM_RANGE(0x7e000000, 0x7e000003) AM_MIRROR(0x80000000) AM_READWRITE(sub_unk7e_r, sub_debug_w) - AM_RANGE(0x7e040000, 0x7e041fff) AM_MIRROR(0x80000000) AM_DEVREADWRITE8("m48t58", timekeeper_device, read, write, 0xffffffff) /* M48T58Y RTC/NVRAM */ - AM_RANGE(0x7e180000, 0x7e180003) AM_MIRROR(0x80000000) AM_READWRITE(sub_unk1_r, sub_unk1_w) // TMS57002? - AM_RANGE(0x7e200000, 0x7e200003) AM_MIRROR(0x80000000) AM_READWRITE(sub_config_r, sub_config_w) - AM_RANGE(0x7e280000, 0x7e28ffff) AM_MIRROR(0x80000000) AM_NOP // LANC - AM_RANGE(0x7e300000, 0x7e30ffff) AM_MIRROR(0x80000000) AM_NOP // LANC - AM_RANGE(0x7e380000, 0x7e380003) AM_MIRROR(0x80000000) AM_READWRITE(sub_mainbd_r, sub_mainbd_w) - AM_RANGE(0x7ff80000, 0x7fffffff) AM_MIRROR(0x80000000) AM_ROM AM_REGION("user2", 0) /* Boot ROM */ + AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_SHARE("sub_ram") // Main RAM + AM_RANGE(0x70000000, 0x7003ffff) AM_READWRITE(sub_comram_r, sub_comram_w) // Double buffered shared RAM between Main and Sub +// AM_RANGE(0x78000000, 0x780000ff) AM_NOP // SCSI controller (unused) + AM_RANGE(0x78040000, 0x7804ffff) AM_DEVREADWRITE16("rfsnd", rf5c400_device, rf5c400_r, rf5c400_w, 0xffffffff) + AM_RANGE(0x78080000, 0x7808000f) AM_READWRITE16(sub_ata0_r, sub_ata0_w, 0xffffffff) + AM_RANGE(0x780c0010, 0x780c001f) AM_READWRITE16(sub_ata1_r, sub_ata1_w, 0xffffffff) + AM_RANGE(0x78200000, 0x782000ff) AM_DEVREADWRITE("k001604", k001604_device, reg_r, reg_w) // PSAC registers + AM_RANGE(0x78210000, 0x78217fff) AM_RAM_WRITE(sub_psac_palette_w) AM_SHARE("paletteram") // PSAC palette RAM + AM_RANGE(0x78220000, 0x7823ffff) AM_DEVREADWRITE("k001604", k001604_device, tile_r, tile_w) // PSAC tile RAM + AM_RANGE(0x78240000, 0x7827ffff) AM_DEVREADWRITE("k001604", k001604_device, char_r, char_w) // PSAC character RAM + AM_RANGE(0x78280000, 0x7828000f) AM_NOP // ??? + AM_RANGE(0x78300000, 0x7830000f) AM_READWRITE(sub_psac2_r, sub_psac2_w) // PSAC + AM_RANGE(0x7e000000, 0x7e000003) AM_READWRITE(sub_unk7e_r, sub_debug_w) + AM_RANGE(0x7e040000, 0x7e041fff) AM_DEVREADWRITE8("m48t58", timekeeper_device, read, write, 0xffffffff) /* M48T58Y RTC/NVRAM */ + AM_RANGE(0x7e180000, 0x7e180003) AM_READWRITE(sub_unk1_r, sub_unk1_w) // TMS57002? + AM_RANGE(0x7e200000, 0x7e200003) AM_READWRITE(sub_config_r, sub_config_w) + AM_RANGE(0x7e280000, 0x7e28ffff) AM_NOP // LANC + AM_RANGE(0x7e300000, 0x7e30ffff) AM_NOP // LANC + AM_RANGE(0x7e380000, 0x7e380003) AM_READWRITE(sub_mainbd_r, sub_mainbd_w) + AM_RANGE(0x7ff80000, 0x7fffffff) AM_ROM AM_REGION("user2", 0) /* Boot ROM */ ADDRESS_MAP_END diff --git a/src/mame/drivers/compgolf.cpp b/src/mame/drivers/compgolf.cpp index 344c83641ef..a5f2ecb035a 100644 --- a/src/mame/drivers/compgolf.cpp +++ b/src/mame/drivers/compgolf.cpp @@ -193,16 +193,6 @@ static GFXDECODE_START( compgolf ) GFXDECODE_ENTRY( "gfx3", 0, tilelayout8, 0, 0x10 ) GFXDECODE_END -/************************************* - * - * Sound interface - * - *************************************/ - -WRITE_LINE_MEMBER(compgolf_state::sound_irq) -{ - m_maincpu->set_input_line(0, state); -} /************************************* * @@ -253,7 +243,7 @@ static MACHINE_CONFIG_START( compgolf, compgolf_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2203, 1500000) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(compgolf_state, sound_irq)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("maincpu", 0)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(compgolf_state, compgolf_scrollx_lo_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(compgolf_state, compgolf_scrolly_lo_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/corona.cpp b/src/mame/drivers/corona.cpp index b4037863bf3..d30c13251b0 100644 --- a/src/mame/drivers/corona.cpp +++ b/src/mame/drivers/corona.cpp @@ -312,6 +312,7 @@ #include "emu.h" #include "cpu/z80/z80.h" #include "sound/ay8910.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "re800.lh" #include "luckyrlt.lh" @@ -324,7 +325,8 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), - m_screen(*this, "screen") { } + m_screen(*this, "screen"), + m_soundlatch(*this, "soundlatch") { } UINT8 m_blitter_x_reg; UINT8 m_blitter_y_reg; @@ -354,6 +356,7 @@ public: required_device<cpu_device> m_maincpu; required_device<cpu_device> m_soundcpu; required_device<screen_device> m_screen; + required_device<generic_latch_8_device> m_soundlatch; }; @@ -494,14 +497,14 @@ UINT32 corona_state::screen_update_luckyrlt(screen_device &screen, bitmap_ind16 WRITE8_MEMBER(corona_state::sound_latch_w) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_soundcpu->set_input_line(0, ASSERT_LINE); } READ8_MEMBER(corona_state::sound_latch_r) { m_soundcpu->set_input_line(0, CLEAR_LINE); - return soundlatch_byte_r(space, 0); + return m_soundlatch->read(space, 0); } @@ -1364,6 +1367,9 @@ static MACHINE_CONFIG_START( winner81, corona_state ) MCFG_PALETTE_INIT_OWNER(corona_state, corona) MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8912, AY_CLK1) /* measured */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END @@ -1395,6 +1401,9 @@ static MACHINE_CONFIG_START( winner82, corona_state ) MCFG_PALETTE_INIT_OWNER(corona_state, corona) MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, AY_CLK2) /* measured */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END @@ -1427,6 +1436,9 @@ static MACHINE_CONFIG_START( re800, corona_state ) MCFG_PALETTE_INIT_OWNER(corona_state, corona) MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8912, AY_CLK2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END @@ -1458,6 +1470,9 @@ static MACHINE_CONFIG_START( rcirulet, corona_state ) MCFG_PALETTE_INIT_OWNER(corona_state, corona) MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8912, AY_CLK2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END @@ -1490,6 +1505,9 @@ static MACHINE_CONFIG_START( luckyrlt, corona_state ) MCFG_PALETTE_INIT_OWNER(corona_state, corona) MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8912, AY_CLK1) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/cortex.cpp b/src/mame/drivers/cortex.cpp index 3b04c466d82..66563995066 100644 --- a/src/mame/drivers/cortex.cpp +++ b/src/mame/drivers/cortex.cpp @@ -60,7 +60,6 @@ static ADDRESS_MAP_START( cortex_io, AS_IO, 8, cortex_state ) //AM_RANGE(0x0812, 0x0813) AM_READ(cent_stat_r) //AM_RANGE(0x1ee0, 0x1eef) AM_READWRITE(cpu_int_r,cpu_int_w) //AM_RANGE(0x1fda, 0x1fdb) AM_READWRITE(cpu_int1_r,cpu_int1_w) - AM_RANGE(0x10000, 0x10000) AM_NOP ADDRESS_MAP_END /* Input ports */ diff --git a/src/mame/drivers/cosmic.cpp b/src/mame/drivers/cosmic.cpp index 58b92a19d39..b896be46641 100644 --- a/src/mame/drivers/cosmic.cpp +++ b/src/mame/drivers/cosmic.cpp @@ -212,55 +212,61 @@ WRITE8_MEMBER(cosmic_state::cosmica_sound_output_w) if (m_samples->playing(2)) { m_samples->stop(2); - m_samples->start(2, 3); break; + m_samples->start(2, 3); } else - m_samples->start(2, 3); break; + m_samples->start(2, 3); + break; case 3: if (m_samples->playing(3)) { m_samples->stop(3); - m_samples->start(3, 4); break; + m_samples->start(3, 4); } else - m_samples->start(3, 4); break; + m_samples->start(3, 4); + break; case 4: if (m_samples->playing(4)) { m_samples->stop(4); - m_samples->start(4, 5); break; + m_samples->start(4, 5); } else - m_samples->start(4, 5); break; + m_samples->start(4, 5); + break; case 5: if (m_samples->playing(5)) { m_samples->stop(5); - m_samples->start(5, 6); break; + m_samples->start(5, 6); } else - m_samples->start(5, 6); break; + m_samples->start(5, 6); + break; case 6: if (m_samples->playing(6)) { m_samples->stop(6); - m_samples->start(6, 7); break; + m_samples->start(6, 7); } else - m_samples->start(6, 7); break; + m_samples->start(6, 7); + break; case 7: if (m_samples->playing(7)) { m_samples->stop(7); - m_samples->start(7, 8); break; + m_samples->start(7, 8); } else - m_samples->start(7, 8); break; + m_samples->start(7, 8); + break; } } diff --git a/src/mame/drivers/cps1.cpp b/src/mame/drivers/cps1.cpp index bff13d06aa4..193f031e037 100644 --- a/src/mame/drivers/cps1.cpp +++ b/src/mame/drivers/cps1.cpp @@ -2166,7 +2166,7 @@ INPUT_PORTS_START( knights ) PORT_DIPSETTING( 0x00, DEF_STR( Test ) ) INPUT_PORTS_END -static INPUT_PORTS_START( varth ) +INPUT_PORTS_START( varth ) PORT_INCLUDE( cps1_3b ) PORT_MODIFY("IN0") diff --git a/src/mame/drivers/crbaloon.cpp b/src/mame/drivers/crbaloon.cpp index 93716951d09..f304755f7a0 100644 --- a/src/mame/drivers/crbaloon.cpp +++ b/src/mame/drivers/crbaloon.cpp @@ -211,7 +211,7 @@ static ADDRESS_MAP_START( main_io_map, AS_IO, 8, crbaloon_state ) ADDRESS_MAP_GLOBAL_MASK(0xf) AM_RANGE(0x00, 0x00) AM_MIRROR(0x0c) AM_READ_PORT("DSW0") AM_RANGE(0x01, 0x01) AM_MIRROR(0x0c) AM_READ_PORT("IN0") - AM_RANGE(0x02, 0x02) AM_MIRROR(0x0c) AM_MASK(0x0c) AM_READ(pc3259_r) + AM_RANGE(0x02, 0x02) AM_SELECT(0x0c) AM_READ(pc3259_r) AM_RANGE(0x03, 0x03) AM_MIRROR(0x0c) AM_READ_PORT("IN1") AM_RANGE(0x00, 0x00) AM_WRITENOP /* not connected */ diff --git a/src/mame/drivers/crshrace.cpp b/src/mame/drivers/crshrace.cpp index 7b562e5e570..7462d65a774 100644 --- a/src/mame/drivers/crshrace.cpp +++ b/src/mame/drivers/crshrace.cpp @@ -15,7 +15,7 @@ Stephh's notes (based on the games M68000 code and some tests) : 0) all games - - There seems to be preliminary support for 3 simulataneous players, but the + - There seems to be preliminary support for 3 simultaneous players, but the game resets before the race starts if the 3 players don't play against each other ! I can't tell however if it's an ingame or an emulation bug. To test this, change CRSHRACE_3P_HACK to 1, set the "Reset on P.O.S.T. Error" @@ -148,7 +148,7 @@ WRITE16_MEMBER(crshrace_state::sound_command_w) if (ACCESSING_BITS_0_7) { m_pending_command = 1; - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -196,7 +196,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, crshrace_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_WRITE(crshrace_sh_bankswitch_w) - AM_RANGE(0x04, 0x04) AM_READ(soundlatch_byte_r) AM_WRITE(pending_command_clear_w) + AM_RANGE(0x04, 0x04) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(pending_command_clear_w) AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) ADDRESS_MAP_END @@ -402,12 +402,6 @@ static GFXDECODE_START( crshrace ) GFXDECODE_END - -WRITE_LINE_MEMBER(crshrace_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - void crshrace_state::machine_start() { m_z80bank->configure_entries(0, 4, memregion("audiocpu")->base() + 0x10000, 0x8000); @@ -466,8 +460,10 @@ static MACHINE_CONFIG_START( crshrace, crshrace_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(crshrace_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) diff --git a/src/mame/drivers/cxhumax.cpp b/src/mame/drivers/cxhumax.cpp index fa2a956b2fe..936d33b62db 100644 --- a/src/mame/drivers/cxhumax.cpp +++ b/src/mame/drivers/cxhumax.cpp @@ -971,7 +971,7 @@ static ADDRESS_MAP_START(cxhumax_map, AS_PROGRAM, 32, cxhumax_state) AM_RANGE(0xe0600000, 0xe063ffff) AM_READWRITE(cx_gxa_r, cx_gxa_w) // GXA AM_RANGE(0xe4017000, 0xe40173ff) AM_RAM // HSX - BSP - 1K Video Shared Dual Port RAM (shared with MVP) AM_RANGE(0xe4080000, 0xe4083fff) AM_RAM // HSX - TSP 0 - 16K Private Instructions/Data and Host-Shared Data - AM_RANGE(0xf0000000, 0xf03fffff) AM_READWRITE(flash_r, flash_w) AM_MIRROR(0xf8000000) // 4MB FLASH (INTEL 28F320J3D) + AM_RANGE(0xf0000000, 0xf03fffff) AM_READWRITE(flash_r, flash_w) AM_MIRROR(0x08000000) // 4MB FLASH (INTEL 28F320J3D) AM_RANGE(0xf4000000, 0xf43fffff) AM_READ(dummy_flash_r) // do we need it? ADDRESS_MAP_END diff --git a/src/mame/drivers/cybertnk.cpp b/src/mame/drivers/cybertnk.cpp index f38b11a5096..d09f908df49 100644 --- a/src/mame/drivers/cybertnk.cpp +++ b/src/mame/drivers/cybertnk.cpp @@ -6,7 +6,7 @@ Cyber Tank HW (c) 1987/1988 Coreland Technology preliminary driver by Angelo Salese & David Haywood -Maybe it has some correlation with WEC Le Mans HW? (supposely that was originally done by Coreland too) +Maybe it has some correlation with WEC Le Mans HW? (supposedly that was originally done by Coreland too) TODO: - improve sprite zooming @@ -172,6 +172,7 @@ lev 7 : 0x7c : 0000 07e0 - input device clear? #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" +#include "machine/gen_latch.h" #include "sound/8950intf.h" #include "rendlay.h" @@ -185,6 +186,7 @@ public: m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_spr_ram(*this, "spr_ram"), m_tilemap0_vram(*this, "tilemap0_vram"), m_tilemap1_vram(*this, "tilemap1_vram"), @@ -198,6 +200,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_spr_ram; required_shared_ptr<UINT16> m_tilemap0_vram; @@ -536,7 +539,7 @@ WRITE8_MEMBER( cybertnk_state::cybertnk_sound_cmd_w ) } else if (offset == 1) { - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } } @@ -637,7 +640,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_mem, AS_PROGRAM, 8, cybertnk_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x9fff) AM_RAM - AM_RANGE(0xa001, 0xa001) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa001, 0xa001) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xa005, 0xa006) AM_NOP AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ym1", y8950_device, read, write) AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ym2", y8950_device, read, write) @@ -866,6 +869,8 @@ static MACHINE_CONFIG_START( cybertnk, cybertnk_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", Y8950, XTAL_3_579545MHz) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) diff --git a/src/mame/drivers/cybiko.cpp b/src/mame/drivers/cybiko.cpp index 16501fbb581..9bfb0ca4504 100644 --- a/src/mame/drivers/cybiko.cpp +++ b/src/mame/drivers/cybiko.cpp @@ -519,7 +519,7 @@ ROM_START( cybikoxt ) ROM_SYSTEM_BIOS( 0, "v1508", "v1.5.08" ) - ROM_REGION( 0x80000, "flashxt", 0 ) + ROM_REGION16_BE( 0x80000, "flashxt", 0 ) ROMX_LOAD( "cyos_v1508.bin", 0, 0x80000, CRC(f79400ba) SHA1(537a88e238746b3944b0cdfd4b0a9396460b2977), ROM_BIOS(1) ) ROM_END diff --git a/src/mame/drivers/cyclemb.cpp b/src/mame/drivers/cyclemb.cpp index 0de60e76cac..fed5bf963b2 100644 --- a/src/mame/drivers/cyclemb.cpp +++ b/src/mame/drivers/cyclemb.cpp @@ -73,6 +73,7 @@ Dumped by Chack'n #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/2203intf.h" #include "machine/tait8741.h" @@ -86,6 +87,7 @@ public: m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_vram(*this, "vram"), m_cram(*this, "cram"), m_obj1_ram(*this, "obj1_ram"), @@ -97,6 +99,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_vram; required_shared_ptr<UINT8> m_cram; @@ -332,7 +335,7 @@ void cyclemb_state::skydest_draw_sprites(screen_device &screen, bitmap_ind16 &bi if(m_obj3_ram[i+1] & 1) x |= 0x100; - x = 0x138 - x; + x = 0x138 - x; spr_offs = (m_obj1_ram[i+0]); spr_offs += ((m_obj3_ram[i+0] & 3) << 8); @@ -382,7 +385,7 @@ WRITE8_MEMBER(cyclemb_state::cyclemb_bankswitch_w) #if 0 WRITE8_MEMBER(cyclemb_state::sound_cmd_w) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } #endif @@ -396,7 +399,7 @@ READ8_MEMBER(cyclemb_state::mcu_status_r) WRITE8_MEMBER(cyclemb_state::sound_cmd_w)//actually ciom { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } #endif @@ -589,7 +592,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( cyclemb_sound_io, AS_IO, 8, cyclemb_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) - AM_RANGE(0x40, 0x40) AM_READ(soundlatch_byte_r) AM_WRITE(soundlatch2_byte_w) + AM_RANGE(0x40, 0x40) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) ADDRESS_MAP_END @@ -938,6 +941,10 @@ static MACHINE_CONFIG_START( cyclemb, cyclemb_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_18MHz/12) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END diff --git a/src/mame/drivers/darius.cpp b/src/mame/drivers/darius.cpp index ab67d05498a..933e06e1666 100644 --- a/src/mame/drivers/darius.cpp +++ b/src/mame/drivers/darius.cpp @@ -681,16 +681,6 @@ static GFXDECODE_START( darius ) GFXDECODE_END -/************************************************************** - YM2203 (SOUND) -**************************************************************/ - -/* handler called by the YM2203 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(darius_state::irqhandler) /* assumes Z80 sandwiched between 68Ks */ -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - /*********************************************************** MACHINE DRIVERS ***********************************************************/ @@ -803,7 +793,7 @@ static MACHINE_CONFIG_START( darius, darius_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ym1", YM2203, XTAL_8MHz/2) /* 4 MHz */ - MCFG_YM2203_IRQ_HANDLER(WRITELINE(darius_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) /* assumes Z80 sandwiched between 68Ks */ MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(darius_state, darius_write_portA0)) /* portA write */ MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(darius_state, darius_write_portB0)) /* portB write */ MCFG_SOUND_ROUTE(0, "filter0.0l", 0.08) diff --git a/src/mame/drivers/dcheese.cpp b/src/mame/drivers/dcheese.cpp index 3ef3b044404..f970b280065 100644 --- a/src/mame/drivers/dcheese.cpp +++ b/src/mame/drivers/dcheese.cpp @@ -36,7 +36,6 @@ #include "machine/eepromser.h" #include "machine/ticket.h" #include "machine/watchdog.h" -#include "sound/bsmt2000.h" #include "includes/dcheese.h" @@ -92,8 +91,6 @@ INTERRUPT_GEN_MEMBER(dcheese_state::dcheese_vblank) void dcheese_state::machine_start() { - m_bsmt = machine().device("bsmt"); - save_item(NAME(m_irq_state)); save_item(NAME(m_soundlatch_full)); save_item(NAME(m_sound_control)); @@ -133,7 +130,7 @@ WRITE16_MEMBER(dcheese_state::sound_command_w) /* write the latch and set the IRQ */ m_soundlatch_full = 1; m_audiocpu->set_input_line(0, ASSERT_LINE); - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); } } @@ -150,15 +147,14 @@ READ8_MEMBER(dcheese_state::sound_command_r) /* read the latch and clear the IRQ */ m_soundlatch_full = 0; m_audiocpu->set_input_line(0, CLEAR_LINE); - return soundlatch_byte_r(space, 0); + return m_soundlatch->read(space, 0); } READ8_MEMBER(dcheese_state::sound_status_r) { /* seems to be ready signal on BSMT or latching hardware */ - bsmt2000_device *bsmt = machine().device<bsmt2000_device>("bsmt"); - return bsmt->read_status() << 7; + return m_bsmt->read_status() << 7; } @@ -178,16 +174,14 @@ WRITE8_MEMBER(dcheese_state::sound_control_w) WRITE8_MEMBER(dcheese_state::bsmt_data_w) { - bsmt2000_device *bsmt = machine().device<bsmt2000_device>("bsmt"); - /* writes come in pairs; even bytes latch, odd bytes write */ if (offset % 2 == 0) { - bsmt->write_reg(offset / 2); + m_bsmt->write_reg(offset / 2); m_sound_msb_latch = data; } else - bsmt->write_data((m_sound_msb_latch << 8) | data); + m_bsmt->write_data((m_sound_msb_latch << 8) | data); } @@ -426,6 +420,8 @@ static MACHINE_CONFIG_START( dcheese, dcheese_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_BSMT2000_ADD("bsmt", SOUND_OSC) MCFG_SOUND_ROUTE(0, "lspeaker", 1.2) MCFG_SOUND_ROUTE(1, "rspeaker", 1.2) diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp index 725411052d8..f95e11765f5 100644 --- a/src/mame/drivers/ddenlovr.cpp +++ b/src/mame/drivers/ddenlovr.cpp @@ -3029,8 +3029,8 @@ static ADDRESS_MAP_START( mjchuuka_portmap, AS_IO, 8, ddenlovr_state ) // 16 AM_RANGE(0x13, 0x13) AM_MIRROR(0xff00) AM_READ(hanakanz_rand_r) AM_RANGE(0x1c, 0x1c) AM_MIRROR(0xff00) AM_WRITE(hanakanz_rombank_w) AM_RANGE(0x1e, 0x1e) AM_MIRROR(0xff00) AM_WRITE(mjchuuka_oki_bank_w) - AM_RANGE(0x20, 0x20) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_WRITE(mjchuuka_blitter_w) - AM_RANGE(0x21, 0x21) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_WRITE(mjchuuka_palette_w) + AM_RANGE(0x20, 0x20) AM_SELECT(0xff00) AM_WRITE(mjchuuka_blitter_w) + AM_RANGE(0x21, 0x21) AM_SELECT(0xff00) AM_WRITE(mjchuuka_palette_w) AM_RANGE(0x23, 0x23) AM_MIRROR(0xff00) AM_READ(mjchuuka_gfxrom_0_r) AM_RANGE(0x40, 0x40) AM_MIRROR(0xff00) AM_WRITE(mjchuuka_coincounter_w) AM_RANGE(0x41, 0x41) AM_MIRROR(0xff00) AM_WRITE(hanakanz_keyb_w) diff --git a/src/mame/drivers/ddragon.cpp b/src/mame/drivers/ddragon.cpp index e139b685942..23916839c75 100644 --- a/src/mame/drivers/ddragon.cpp +++ b/src/mame/drivers/ddragon.cpp @@ -60,7 +60,6 @@ Dip locations verified with manual for ddragon & ddragon2 #include "cpu/z80/z80.h" #include "sound/2151intf.h" #include "sound/okim6295.h" -#include "sound/msm5205.h" #include "includes/ddragon.h" @@ -281,7 +280,7 @@ void ddragon_state::ddragon_interrupt_ack(address_space &space, offs_t offset, U break; case 3: /* 380e - SND IRQ and latch */ - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_soundcpu->set_input_line(m_sound_irq, ASSERT_LINE); break; @@ -327,7 +326,7 @@ WRITE_LINE_MEMBER(ddragon_state::irq_handler) READ8_MEMBER(ddragon_state::soundlatch_ack_r) { m_soundcpu->set_input_line(m_sound_irq, CLEAR_LINE); - return soundlatch_byte_r(space, 0); + return m_soundlatch->read(space, 0); } @@ -977,6 +976,8 @@ static MACHINE_CONFIG_START( ddragon, ddragon_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("fmsnd", SOUND_CLOCK) MCFG_YM2151_IRQ_HANDLER(WRITELINE(ddragon_state, irq_handler)) MCFG_SOUND_ROUTE(0, "mono", 0.60) @@ -1044,6 +1045,8 @@ static MACHINE_CONFIG_START( ddragon6809, ddragon_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("fmsnd", SOUND_CLOCK) MCFG_YM2151_IRQ_HANDLER(WRITELINE(ddragon_state,irq_handler)) MCFG_SOUND_ROUTE(0, "mono", 0.60) @@ -1094,6 +1097,8 @@ static MACHINE_CONFIG_START( ddragon2, ddragon_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("fmsnd", SOUND_CLOCK) MCFG_YM2151_IRQ_HANDLER(WRITELINE(ddragon_state,irq_handler)) MCFG_SOUND_ROUTE(0, "mono", 0.60) diff --git a/src/mame/drivers/ddragon3.cpp b/src/mame/drivers/ddragon3.cpp index 6a29b3b9e62..4fe00e232b0 100644 --- a/src/mame/drivers/ddragon3.cpp +++ b/src/mame/drivers/ddragon3.cpp @@ -186,7 +186,6 @@ ROMs (All ROMs are 27C010 EPROM. - means not populated) #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" #include "sound/2151intf.h" -#include "sound/okim6295.h" #include "includes/ddragon3.h" @@ -203,7 +202,7 @@ WRITE8_MEMBER(ddragon3_state::oki_bankswitch_w) WRITE16_MEMBER(wwfwfest_state::wwfwfest_soundwrite) { - soundlatch_byte_w(space,1,data & 0xff); + m_soundlatch->write(space,1,data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE ); } @@ -218,8 +217,8 @@ WRITE16_MEMBER(ddragon3_state::ddragon3_io_w) m_vreg = m_io_reg[0]; break; - case 1: /* soundlatch_byte_w */ - soundlatch_byte_w(space, 1, m_io_reg[1] & 0xff); + case 1: /* soundlatch write */ + m_soundlatch->write(space, 1, m_io_reg[1] & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE ); break; @@ -379,7 +378,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, ddragon3_state ) AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_RANGE(0xc800, 0xc801) AM_DEVREADWRITE("ym2151", ym2151_device, read, write) AM_RANGE(0xd800, 0xd800) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xe800, 0xe800) AM_WRITE(oki_bankswitch_w) ADDRESS_MAP_END @@ -389,7 +388,7 @@ static ADDRESS_MAP_START( ctribe_sound_map, AS_PROGRAM, 8, ddragon3_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ym2151", ym2151_device, status_r, write) AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END /************************************* @@ -852,6 +851,8 @@ static MACHINE_CONFIG_START( ddragon3, ddragon3_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ym2151", XTAL_3_579545MHz) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) @@ -920,6 +921,8 @@ static MACHINE_CONFIG_START( wwfwfest, wwfwfest_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ym2151", XTAL_3_579545MHz) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.45) diff --git a/src/mame/drivers/dec0.cpp b/src/mame/drivers/dec0.cpp index 6e4e753b928..737a88f1d70 100644 --- a/src/mame/drivers/dec0.cpp +++ b/src/mame/drivers/dec0.cpp @@ -1251,17 +1251,6 @@ GFXDECODE_END /******************************************************************************/ -WRITE_LINE_MEMBER(dec0_state::sound_irq) -{ - m_audiocpu->set_input_line(0, state); /* IRQ */ -} - -WRITE_LINE_MEMBER(dec0_state::sound_irq2) -{ - m_audiocpu->set_input_line(1, state); /* IRQ2 */ -} - -/******************************************************************************/ /* This is guesswork, in order to get ~57,41 Hz. @@ -1333,7 +1322,7 @@ static MACHINE_CONFIG_DERIVED( dec0, dec0_base ) MCFG_SOUND_ROUTE(3, "mono", 0.35) MCFG_SOUND_ADD("ym2", YM3812, XTAL_12MHz / 4) - MCFG_YM3812_IRQ_HANDLER(WRITELINE(dec0_state, sound_irq)) + MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) MCFG_OKIM6295_ADD("oki", XTAL_20MHz / 2 / 10, OKIM6295_PIN7_HIGH) @@ -1361,7 +1350,7 @@ static MACHINE_CONFIG_DERIVED( dec1, dec0_base ) MCFG_SOUND_ROUTE(3, "mono", 0.35) MCFG_SOUND_ADD("ym2", YM3812, XTAL_12MHz/4) /* verified on pcb */ - MCFG_YM3812_IRQ_HANDLER(WRITELINE(dec0_state, sound_irq2)) + MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 1)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) MCFG_OKIM6295_ADD("oki", XTAL_12MHz/12, OKIM6295_PIN7_HIGH) /* verified on pcb */ @@ -1633,7 +1622,7 @@ static MACHINE_CONFIG_DERIVED( midresb, midres ) MCFG_CPU_PROGRAM_MAP(dec0_s_map) MCFG_SOUND_MODIFY("ym2") - MCFG_YM3812_IRQ_HANDLER(WRITELINE(dec0_state, sound_irq)) + MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) // bootleg doesn't seem to support row/col scroll (or enable is different) diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp index 7459d638f55..176419ce338 100644 --- a/src/mame/drivers/deco32.cpp +++ b/src/mame/drivers/deco32.cpp @@ -554,8 +554,6 @@ WRITE32_MEMBER(dragngun_state::eeprom_w) WRITE32_MEMBER(deco32_state::tattass_control_w) { - address_space &eeprom_space = m_eeprom->space(); - /* Eprom in low byte */ if (mem_mask==0x000000ff) { /* Byte write to low byte only (different from word writing including low byte) */ /* @@ -604,7 +602,7 @@ WRITE32_MEMBER(deco32_state::tattass_control_w) int d=m_readBitCount/8; int m=7-(m_readBitCount%8); int a=(m_byteAddr+d)%1024; - int b=eeprom_space.read_byte(a); + int b=m_eeprom->internal_read(a); m_tattass_eprom_bit=(b>>m)&1; @@ -621,7 +619,7 @@ WRITE32_MEMBER(deco32_state::tattass_control_w) int b=(m_buffer[24]<<7)|(m_buffer[25]<<6)|(m_buffer[26]<<5)|(m_buffer[27]<<4) |(m_buffer[28]<<3)|(m_buffer[29]<<2)|(m_buffer[30]<<1)|(m_buffer[31]<<0); - eeprom_space.write_byte(m_byteAddr, b); + m_eeprom->internal_write(m_byteAddr, b); } m_lastClock=data&0x20; return; @@ -636,7 +634,7 @@ WRITE32_MEMBER(deco32_state::tattass_control_w) /* Check for read command */ if (m_buffer[0] && m_buffer[1]) { - m_tattass_eprom_bit=(eeprom_space.read_byte(m_byteAddr)>>7)&1; + m_tattass_eprom_bit=(m_eeprom->internal_read(m_byteAddr)>>7)&1; m_readBitCount=1; m_pendingCommand=1; } diff --git a/src/mame/drivers/deco_ld.cpp b/src/mame/drivers/deco_ld.cpp index 5c2c1a5a282..7101b91cb3b 100644 --- a/src/mame/drivers/deco_ld.cpp +++ b/src/mame/drivers/deco_ld.cpp @@ -111,8 +111,9 @@ Sound processor - 6502 #include "emu.h" #include "cpu/m6502/m6502.h" #include "sound/ay8910.h" -#include "machine/ldv1000.h" +#include "machine/ldp1000.h" #include "machine/gen_latch.h" +#include "machine/6850acia.h" class deco_ld_state : public driver_device @@ -123,6 +124,7 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_laserdisc(*this, "laserdisc"), + //m_acia(*this, "acia"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), @@ -137,7 +139,8 @@ public: required_device<cpu_device> m_maincpu; optional_device<cpu_device> m_audiocpu; - required_device<pioneer_ldv1000_device> m_laserdisc; + required_device<sony_ldp1000_device> m_laserdisc; + //required_device<acia6850_device> m_acia; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; @@ -150,20 +153,18 @@ public: UINT8 m_laserdisc_data; int m_nmimask; - DECLARE_READ8_MEMBER(laserdisc_r); - DECLARE_WRITE8_MEMBER(laserdisc_w); + DECLARE_READ8_MEMBER(acia_status_hack_r); DECLARE_READ8_MEMBER(sound_status_r); DECLARE_WRITE8_MEMBER(decold_sound_cmd_w); - DECLARE_WRITE8_MEMBER(decold_palette_w); DECLARE_CUSTOM_INPUT_MEMBER(begas_vblank_r); DECLARE_INPUT_CHANGED_MEMBER(coin_inserted); virtual void machine_start() override; - UINT32 screen_update_rblaster(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + UINT32 screen_update_rblaster(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(sound_interrupt); - void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT8 *spriteram, UINT16 tile_bank ); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8 *spriteram, UINT16 tile_bank ); }; -void deco_ld_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT8 *spriteram, UINT16 tile_bank ) +void deco_ld_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8 *spriteram, UINT16 tile_bank ) { gfx_element *gfx = m_gfxdecode->gfx(1); int i,spr_offs,x,y,col,fx,fy; @@ -208,7 +209,7 @@ void deco_ld_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect } } -UINT32 deco_ld_state::screen_update_rblaster(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +UINT32 deco_ld_state::screen_update_rblaster(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { gfx_element *gfx = m_gfxdecode->gfx(0); int y,x; @@ -246,39 +247,24 @@ UINT32 deco_ld_state::screen_update_rblaster(screen_device &screen, bitmap_rgb32 } - -READ8_MEMBER(deco_ld_state::laserdisc_r) -{ - UINT8 result = m_laserdisc->status_r(); -// osd_printf_debug("laserdisc_r = %02X\n", result); - return result; -} - - -WRITE8_MEMBER(deco_ld_state::laserdisc_w) -{ - m_laserdisc_data = data; -} - - WRITE8_MEMBER(deco_ld_state::decold_sound_cmd_w) { m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(0, HOLD_LINE); } -/* same as Burger Time HW */ -WRITE8_MEMBER(deco_ld_state::decold_palette_w) -{ - m_palette->write(space, offset, UINT8(~data)); -} - /* unknown, but certainly related to audiocpu somehow */ READ8_MEMBER(deco_ld_state::sound_status_r) { return 0xff ^ 0x40; } +// TODO: needs LD BIOS dumped +READ8_MEMBER(deco_ld_state::acia_status_hack_r) +{ + return 0xff; +} + static ADDRESS_MAP_START( rblaster_map, AS_PROGRAM, 8, deco_ld_state ) AM_RANGE(0x0000, 0x0fff) AM_RAM AM_RANGE(0x1000, 0x1000) AM_READ_PORT("IN0") AM_WRITENOP // (w) coin lockout @@ -287,9 +273,11 @@ static ADDRESS_MAP_START( rblaster_map, AS_PROGRAM, 8, deco_ld_state ) AM_RANGE(0x1003, 0x1003) AM_READ_PORT("IN1") AM_RANGE(0x1004, 0x1004) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_WRITE(decold_sound_cmd_w) AM_RANGE(0x1005, 0x1005) AM_READ(sound_status_r) - AM_RANGE(0x1006, 0x1006) AM_NOP // 6850 status - AM_RANGE(0x1007, 0x1007) AM_READWRITE(laserdisc_r,laserdisc_w) // 6850 data - AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(decold_palette_w) AM_SHARE("palette") + //AM_RANGE(0x1006, 0x1006) AM_DEVREADWRITE("acia", acia6850_device, status_r, control_w) + //AM_RANGE(0x1007, 0x1007) AM_DEVREADWRITE("acia", acia6850_device, data_r, data_w) + AM_RANGE(0x1006, 0x1006) AM_READ(acia_status_hack_r) + AM_RANGE(0x1007, 0x1007) AM_DEVREADWRITE("laserdisc", sony_ldp1000_device, status_r, command_w) + AM_RANGE(0x1800, 0x1fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE(0x2000, 0x27ff) AM_RAM AM_RANGE(0x2800, 0x2bff) AM_RAM AM_SHARE("vram0") AM_RANGE(0x2c00, 0x2fff) AM_RAM AM_SHARE("attr0") @@ -480,17 +468,21 @@ static MACHINE_CONFIG_START( rblaster, deco_ld_state ) // MCFG_QUANTUM_TIME(attotime::from_hz(6000)) - MCFG_LASERDISC_LDV1000_ADD("laserdisc") //Sony LDP-1000A, is it truly compatible with the Pioneer? + MCFG_LASERDISC_LDP1000_ADD("laserdisc") MCFG_LASERDISC_OVERLAY_DRIVER(256, 256, deco_ld_state, screen_update_rblaster) - MCFG_LASERDISC_OVERLAY_CLIP(0, 256-1, 8, 240-1) + //MCFG_LASERDISC_OVERLAY_CLIP(0, 256-1, 8, 240-1) MCFG_LASERDISC_OVERLAY_PALETTE("palette") /* video hardware */ MCFG_LASERDISC_SCREEN_ADD_NTSC("screen", "laserdisc") MCFG_GFXDECODE_ADD("gfxdecode", "palette", rblaster) - MCFG_PALETTE_ADD("palette", 512) - MCFG_PALETTE_FORMAT(BBGGGRRR) + MCFG_PALETTE_ADD("palette", 0x800) + MCFG_PALETTE_FORMAT(BBGGGRRR_inverted) + //MCFG_DEVICE_ADD("acia", ACIA6850, 0) + //MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("laserdisc", sony_ldp1000_device, write)) + //MCFG_ACIA6850_RXD_HANDLER(DEVREADLINE("laserdisc", sony_ldp1000_device, read)) + /* sound hardware */ /* TODO: mixing */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -608,7 +600,7 @@ ROM_START( rblaster ) ROM_LOAD( "08.bin", 0xa000, 0x2000, CRC(4608b516) SHA1(44af4be84a0b807ea0813ce86376a4b6fd927e5a) ) DISK_REGION( "laserdisc" ) - DISK_IMAGE_READONLY( "rblaster", 0, NO_DUMP ) + DISK_IMAGE_READONLY( "rblaster", 0, SHA1(1563ea907d461592e17646848fdf2dce904bba32) ) ROM_END ROM_START( cobra ) diff --git a/src/mame/drivers/decwritr.cpp b/src/mame/drivers/decwritr.cpp index 8d19958bae1..f82a6a6e647 100644 --- a/src/mame/drivers/decwritr.cpp +++ b/src/mame/drivers/decwritr.cpp @@ -8,6 +8,8 @@ **************************************************************************/ +// tech manual: http://manx.classiccmp.org/mirror/vt100.net/docs/la120-tm/la120tm1.pdf + #include "emu.h" #include "render.h" #include "cpu/i8085/i8085.h" @@ -120,6 +122,18 @@ WRITE8_MEMBER( decwriter_state::la120_LED_w ) (m_led_array&0x1)?"PAPER OUT":"---------" ); } +/* todo: er1400 device */ +/* control lines: + 3 2 1 + 0 0 0 Standby + 0 0 1 Read + 0 1 0 Erase + 0 1 1 Write + 1 0 0 <unused> + 1 0 1 Shift data out + 1 1 0 Accept address + 1 1 1 Accept data + */ READ8_MEMBER( decwriter_state::la120_NVR_r ) { return 0xFF; @@ -128,22 +142,65 @@ READ8_MEMBER( decwriter_state::la120_NVR_r ) WRITE8_MEMBER( decwriter_state::la120_NVR_w ) { } + +/* todo: fully reverse engineer DC305 ASIC */ +/* read registers: all 4 registers read the same set of 8 bits, but what register is being read may be selectable by writing + Tech manual implies this register is an 8-bit position counter of where the carriage head currently is located. + 0 = 1 = 2 = 3 + data bits: + 76543210 + |||||||\- ? + ||||||\-- ? + |||||\--- ? + ||||\---- ? + |||\----- ? + ||\------ ? + |\------- ? + \-------- ? + */ READ8_MEMBER( decwriter_state::la120_DC305_r ) { - return 0xFF; + UINT8 data = 0x00; + logerror("DC305 Read from offset %01x, returning %02X\n", offset, data); + return data; } +/* write registers: + 0 = ? (a bunch of data written here on start, likely motor control and setup bits) + 1 = ? (one byte written here, possibly voltage control, 0x00 or could be dot fifo write?) + 2 = ? + 3 = ? + there are at least two bits in here to enable the 2.5ms tick interrupt(rst3) and the dot interrupt/linefeed(rtc expired) interrupt(rst5) + the dot fifo is 4 bytes long, dot int fires when it is half empty + at least 3 bits control the speaker/buzzer which can be on or off, at least two volume levels, and at least two frequencies, 400hz or 2400hz + two quadrature lines from the head servomotor connect here to allow the dc305 to determine motor position; one pulses when the motor turns clockwise and one when it turns counterclockwise. the head stop is found when the pulses stop, which firmware uses to find the zero position. + */ WRITE8_MEMBER( decwriter_state::la120_DC305_w ) { + logerror("DC305 Write of %02X to offset %01X\n", data, offset); } +/* + * 8080 address map (x = ignored; * = selects address within this range) + a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0 + 0 0 0 0 * * * * * * * * * * * * R ROMS0 (e6 first half OR e6,e8) + 0 0 0 1 * * * * * * * * * * * * R ROMS1 (e6 second half OR e12,e17) + 0 0 1 0 0 * * * * * * * * * * * R ROMS2 (e4) + 0 0 1 0 1 * * * * * * * * * * * R ROMS2 (open bus) + 0 0 1 1 x x x x x x x * * * * * RW KBD(R)/LED(W) + 0 1 0 0 x x * * * * * * * * * * RW RAM0 (e7,e13) + 0 1 0 1 x x * * * * * * * * * * RW RAM1 (e9,e18) + 0 1 1 0 x * * * x x x x x x x * RW NVM (ER1400,e39) + 0 1 1 1 x x x x x x x x x x * * RW PTR (DC305 ASIC,e25) + 1 * * * * * * * * * * * * * * * Expansion space (open bus) + */ static ADDRESS_MAP_START(la120_mem, AS_PROGRAM, 8, decwriter_state) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE( 0x0000, 0x2fff ) AM_ROM - AM_RANGE( 0x3000, 0x3fff ) AM_READWRITE(la120_KBD_r, la120_LED_w) // keyboard read, write to status and 7seg LEDS + AM_RANGE( 0x0000, 0x27ff ) AM_ROM + AM_RANGE( 0x3000, 0x301f ) AM_READWRITE(la120_KBD_r, la120_LED_w) AM_MIRROR(0xFE0) // keyboard read, write to status and 7seg LEDS AM_RANGE( 0x4000, 0x43ff ) AM_MIRROR(0x0c00) AM_RAM // 1k 'low ram' AM_RANGE( 0x5000, 0x53ff ) AM_MIRROR(0x0c00) AM_RAM // 1k 'high ram' - AM_RANGE( 0x6000, 0x6fff ) AM_MIRROR(0x08fe) AM_READWRITE(la120_NVR_r, la120_NVR_w) // ER1400 EAROM - AM_RANGE( 0x7000, 0x7003 ) AM_MIRROR(0x0ffc) AM_READWRITE(la120_DC305_r, la120_DC305_w) // DC305 printer controller ASIC stuff; since this can generate interrupts this needs to be split to its own device. + AM_RANGE( 0x6000, 0x67ff ) /*AM_MIRROR(0x08fe)*/AM_MIRROR(0x800) AM_READWRITE(la120_NVR_r, la120_NVR_w) // ER1400 EAROM; a10,9,8 are c3,2,1, a0 is clk, data i/o on d7, d0 always reads as 0 (there may have once been a second er1400 with data i/o on d0, sharing same address controls as the d7 one, not populated on shipping boards), d1-d6 read open bus + AM_RANGE( 0x7000, 0x7003 ) AM_MIRROR(0x0ffc) AM_READWRITE(la120_DC305_r, la120_DC305_w) // DC305 printer controller ASIC stuff; since this can generate interrupts (dot interrupt, lf interrupt, 2.5ms interrupt) this needs to be split to its own device. // 8000-ffff is reserved for expansion (i.e. unused, open bus) ADDRESS_MAP_END @@ -160,7 +217,7 @@ static ADDRESS_MAP_START(la120_io, AS_IO, 8, decwriter_state) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x00, 0x00) AM_MIRROR(0x7C) AM_DEVREADWRITE("i8251", i8251_device, data_r, data_w) // 8251 Data AM_RANGE(0x01, 0x01) AM_MIRROR(0x7C) AM_DEVREADWRITE("i8251", i8251_device, status_r, control_w) // 8251 Status/Control - //AM_RANGE(0x02, 0x02) AM_MIRROR(0x7D) // other io ports + //AM_RANGE(0x02, 0x02) AM_MIRROR(0x7D) // other io ports, serial loopback etc, see table 4-9 in TM // 0x80-0xff are reserved for expansion (i.e. unused, open bus) ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_END @@ -206,7 +263,7 @@ static INPUT_PORTS_START( la120 ) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("[ {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("- _") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') PORT_BIT(0x60, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_TOGGLE PORT_NAME("Caps lock") PORT_CODE(KEYCODE_CAPSLOCK) // TODO: does the physical switch toggle? + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_TOGGLE PORT_NAME("Caps lock") PORT_CODE(KEYCODE_CAPSLOCK) // This key has a physical toggle PORT_START("COL5") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Num 0") PORT_CODE(KEYCODE_0_PAD) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') diff --git a/src/mame/drivers/didact.cpp b/src/mame/drivers/didact.cpp index e5f74d458de..80dbdb2eef9 100644 --- a/src/mame/drivers/didact.cpp +++ b/src/mame/drivers/didact.cpp @@ -468,10 +468,10 @@ ADDRESS_MAP_END // This address map is traced from schema static ADDRESS_MAP_START( md6802_map, AS_PROGRAM, 8, md6802_state ) - AM_RANGE(0x0000, 0x1fff) AM_RAM AM_MIRROR(0x1800) + AM_RANGE(0x0000, 0x07ff) AM_RAM AM_MIRROR(0x1800) AM_RANGE(0xa000, 0xa003) AM_DEVREADWRITE("pia1", pia6821_device, read, write) AM_MIRROR(0x1ffc) AM_RANGE(0xc000, 0xc003) AM_DEVREADWRITE("pia2", pia6821_device, read, write) AM_MIRROR(0x1ffc) - AM_RANGE(0xe000, 0xffff) AM_ROM AM_MIRROR(0x1800) AM_REGION("maincpu", 0xe000) + AM_RANGE(0xe000, 0xe7ff) AM_ROM AM_MIRROR(0x1800) AM_REGION("maincpu", 0xe000) ADDRESS_MAP_END // This address map is traced from pcb diff --git a/src/mame/drivers/discoboy.cpp b/src/mame/drivers/discoboy.cpp index f127c4554e2..f76665044c8 100644 --- a/src/mame/drivers/discoboy.cpp +++ b/src/mame/drivers/discoboy.cpp @@ -3,10 +3,10 @@ /* Disco Boy -Similar to mitchell.c / egghunt.c .. clearly derived from that hardware +Similar to mitchell.cpp / egghunt.cpp .. clearly derived from that hardware TODO: -- move sound HW into proper file (it's 99% IDENTICAL to yunsung8.c) +- move sound HW into proper file (it's 99% IDENTICAL to yunsung8.cpp) - ADPCM has sound volume issues, it's either too loud or too quiet; PCB Layout @@ -43,6 +43,7 @@ Notes: #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/msm5205.h" #include "sound/3812intf.h" @@ -53,11 +54,12 @@ class discoboy_state : public driver_device public: discoboy_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_audiocpu(*this, "audiocpu") , m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* video-related */ UINT8 m_ram_bank; @@ -67,7 +69,12 @@ public: UINT8 m_toggle; /* devices */ + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; + required_device<msm5205_device> m_msm; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; /* memory */ UINT8 m_ram_1[0x800]; @@ -96,10 +103,6 @@ public: UINT32 screen_update_discoboy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); DECLARE_WRITE_LINE_MEMBER(yunsung8_adpcm_int); - required_device<cpu_device> m_maincpu; - required_device<msm5205_device> m_msm; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; }; @@ -248,7 +251,7 @@ WRITE8_MEMBER(discoboy_state::discoboy_port_03_w)// sfx? (to sound cpu) { // printf("unk discoboy_port_03_w %02x\n", data); // m_audiocpu->set_input_line(INPUT_LINE_NMI, HOLD_LINE); - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -360,7 +363,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, discoboy_state ) AM_RANGE(0xe400, 0xe400) AM_WRITE(yunsung8_adpcm_w) AM_RANGE(0xec00, 0xec01) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -514,6 +517,8 @@ static MACHINE_CONFIG_START( discoboy, discoboy_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_10MHz/4) /* 2.5 MHz? */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.6) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.6) diff --git a/src/mame/drivers/divebomb.cpp b/src/mame/drivers/divebomb.cpp new file mode 100755 index 00000000000..65249b6e6ba --- /dev/null +++ b/src/mame/drivers/divebomb.cpp @@ -0,0 +1,631 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood, Phil Bennett +/*************************************************************************** + + Kyuukoukabakugekitai - Dive Bomber Squad + + (C) Konami 1989 + +**************************************************************************** + + PCB Layout + ---------- + + GX840 PWB35165 +|--------------------------------------------------------------------------| +| | +| U15 Z80B Z80B DSW1 | +| DSW2 | +| HM6116AP-15 DSW3 | +| U16 U21 DSW4 | +| MN53060KGB 8464A-15L U20 | +| U17 (QFP148) 8464A-15L | +| | +| J | +| A | +| M | +| U18 24.0MHz 051316 Z80B M | +| A | +| U83 U34 U19 | +| MB81C86-55 MB81C86-55 U82 U33 8464A-15L | +| MB81C86-55 MB81C86-55 U81 U22 | +| | +| 051316 | +| | +| CN1 CN2 SN76489 | +| SN76489 | +| SN76489 | +| SN76489 | +| HM6116AP-15 U23 SN76489 | +| U22 SN76489 VR | +| | +|--------------------------------------------------------------------------| + + Notes: + There are numerous wire modificationss connecting pins of U15-U18 to + various other components on the PCB + + MB81C86 - 64kx4 SRAM + HM6116AP - 2kx8 SRAM + 8464A - 8kx8 SRAM + MN53060KGB - Panasonic CMOS gate array (6016 gates) + 051316 - Konami PSAC + CN1/CN2 - ROM board connectors + + + ROM Board + --------- + + GX840 PWB451716 + |--------------------------| + | | + | U8 | + | | + | U3 U7 U10 | + | | + | U2 U6 U10 | + | | + | U41 U5 U9 | + | | + |--------------------------| + + Notes: + All ROMs are 27512 EPROMs + + +To do: + * Verify layer alignment + * Deduce unknown DIP switch settings + +To verify against original HW: + * Game has no sprites when you reach level 4 and becomes unplayable + * Game often hangs (sprites no longer animate, screen scrolls/rotates endlessly) due to a communication breakdown + Data sent from one CPU to another is occasionally overwritten before the recipient can read the first value + * Game hangs if you die from hitting a regular enemy at the same time a boss dies + * Bosses can't kill you directly + * Cocktail mode is broken + * UFOs that appear during the boss battle wrap around when leaving the right side of the screen + * Sometimes a stray, bad explosion sprite appears in the top left corner after you respawn + * Lives counter is corrupt for > 4 lives + +****************************************************************************/ + +#include "emu.h" +#include "includes/divebomb.h" + + + +/************************************* + * + * Main CPU + * + *************************************/ + +static ADDRESS_MAP_START( divebomb_fgcpu_map, AS_PROGRAM, 8, divebomb_state ) + AM_RANGE(0x0000, 0x7fff) AM_ROM + AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(fgram_w) AM_SHARE("fgram") + AM_RANGE(0xe000, 0xffff) AM_RAM +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( divebomb_fgcpu_iomap, AS_IO, 8, divebomb_state ) + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x00, 0x00) AM_DEVWRITE("sn0", sn76489_device, write) + AM_RANGE(0x01, 0x01) AM_DEVWRITE("sn1", sn76489_device, write) + AM_RANGE(0x02, 0x02) AM_DEVWRITE("sn2", sn76489_device, write) + AM_RANGE(0x03, 0x03) AM_DEVWRITE("sn3", sn76489_device, write) + AM_RANGE(0x04, 0x04) AM_DEVWRITE("sn4", sn76489_device, write) + AM_RANGE(0x05, 0x05) AM_DEVWRITE("sn5", sn76489_device, write) + AM_RANGE(0x10, 0x10) AM_READWRITE(fgcpu_roz_comm_r, fgcpu_roz_comm_w) + AM_RANGE(0x20, 0x20) AM_READWRITE(fgcpu_spr_comm_r, fgcpu_spr_comm_w) + AM_RANGE(0x30, 0x30) AM_READ_PORT("IN0") + AM_RANGE(0x31, 0x31) AM_READ_PORT("IN1") + AM_RANGE(0x32, 0x32) AM_READ_PORT("DSW1") + AM_RANGE(0x33, 0x33) AM_READ_PORT("DSW2") + // 34/35 aren't read but PCB has 4 banks of dips populated, so logically they would map here even if unused + AM_RANGE(0x34, 0x34) AM_READ_PORT("DSW3") + AM_RANGE(0x35, 0x35) AM_READ_PORT("DSW4") + AM_RANGE(0x36, 0x36) AM_READ_PORT("SYSTEM") + AM_RANGE(0x37, 0x37) AM_READ(fgcpu_comm_flags_r) +ADDRESS_MAP_END + + +READ8_MEMBER(divebomb_state::fgcpu_spr_comm_r) +{ + has_fromsprite = false; + update_irqs(); + return from_sprite; +} + + +WRITE8_MEMBER(divebomb_state::fgcpu_spr_comm_w) +{ + m_spritecpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); + to_spritecpu = data; +} + + +READ8_MEMBER(divebomb_state::fgcpu_roz_comm_r) +{ + has_fromroz = false; + update_irqs(); + return from_roz; +} + + +WRITE8_MEMBER(divebomb_state::fgcpu_roz_comm_w) +{ + m_rozcpucpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); + to_rozcpu = data; +} + + +READ8_MEMBER(divebomb_state::fgcpu_comm_flags_r) +{ + UINT8 result = 0; + + if (has_fromroz) + result |= 1; + if (has_fromsprite) + result |= 2; + + return result; +} + + + +/************************************* + * + * Sprite CPU + * + *************************************/ + +static ADDRESS_MAP_START( divebomb_spritecpu_map, AS_PROGRAM, 8, divebomb_state ) + AM_RANGE(0x0000, 0x7fff) AM_ROM + AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("spriteram") + AM_RANGE(0xc800, 0xdfff) AM_WRITENOP + AM_RANGE(0xe000, 0xffff) AM_RAM +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( divebomb_spritecpu_iomap, AS_IO, 8, divebomb_state ) + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x00, 0x00) AM_WRITE(spritecpu_port00_w) + AM_RANGE(0x80, 0x80) AM_READWRITE(spritecpu_comm_r, spritecpu_comm_w) +ADDRESS_MAP_END + + +READ8_MEMBER(divebomb_state::spritecpu_comm_r) +{ + m_spritecpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); + return to_spritecpu; +} + + +WRITE8_MEMBER(divebomb_state::spritecpu_comm_w) +{ + from_sprite = data; + has_fromsprite = true; + update_irqs(); +} + + +WRITE8_MEMBER(divebomb_state::spritecpu_port00_w) +{ + // Written with 0x00 on reset + // Written with 0x34 7 times in succession on occasion (see PC:0x00E3) +} + + + +/************************************* + * + * ROZ CPU + * + *************************************/ + +static ADDRESS_MAP_START( divebomb_rozcpu_map, AS_PROGRAM, 8, divebomb_state ) + AM_RANGE(0x0000, 0x7fff) AM_ROM + AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") + AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_DEVREADWRITE("k051316_1", k051316_device, read, write) + AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_DEVREADWRITE("k051316_2", k051316_device, read, write) + AM_RANGE(0xe000, 0xffff) AM_RAM +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( divebomb_rozcpu_iomap, AS_IO, 8, divebomb_state ) + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x00, 0x00) AM_WRITE(rozcpu_bank_w) + AM_RANGE(0x10, 0x10) AM_WRITE(rozcpu_wrap2_enable_w) + AM_RANGE(0x12, 0x12) AM_WRITE(rozcpu_enable1_w) + AM_RANGE(0x13, 0x13) AM_WRITE(rozcpu_enable2_w) + AM_RANGE(0x14, 0x14) AM_WRITE(rozcpu_wrap1_enable_w) + AM_RANGE(0x20, 0x2f) AM_DEVWRITE("k051316_1", k051316_device, ctrl_w) + AM_RANGE(0x30, 0x3f) AM_DEVWRITE("k051316_2", k051316_device, ctrl_w) + AM_RANGE(0x40, 0x40) AM_READWRITE(rozcpu_comm_r, rozcpu_comm_w) + AM_RANGE(0x50, 0x50) AM_WRITE(rozcpu_pal_w) +ADDRESS_MAP_END + + +WRITE8_MEMBER(divebomb_state::rozcpu_bank_w) +{ + UINT32 bank = BITSWAP8(data, 4, 5, 6, 7, 3, 2, 1, 0) >> 4; + m_bank1->set_entry(bank); + + if (data & 0x0f) + logerror("rozcpu_bank_w %02x\n", data); +} + + +READ8_MEMBER(divebomb_state::rozcpu_comm_r) +{ + m_rozcpucpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); + return to_rozcpu; +} + + +WRITE8_MEMBER(divebomb_state::rozcpu_comm_w) +{ + from_roz = data; + has_fromroz = true; + update_irqs(); +} + + + +/************************************* + * + * IRQs + * + *************************************/ + +void divebomb_state::update_irqs() +{ + if (has_fromsprite || has_fromroz) + m_fgcpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); + else + m_fgcpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); +} + + + +/************************************* + * + * Port definitions + * + *************************************/ + +static INPUT_PORTS_START( divebomb ) + PORT_START("DSW1") // If the first 4 are on it engages freeplay + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") + PORT_DIPSETTING( 0x03, "3" ) + PORT_DIPSETTING( 0x02, "5" ) + PORT_DIPSETTING( 0x01, "7" ) + PORT_DIPSETTING( 0x00, "9" ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:3") + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW3") + PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW3:1" ) + PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW3:2" ) + PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW3:3" ) + PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW3:4" ) + PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW3:5" ) + PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW3:6" ) + PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW3:7" ) + PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW3:8" ) + + PORT_START("DSW4") + PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW4:1" ) + PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW4:2" ) + PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW4:3" ) + PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW4:4" ) + PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW4:5" ) + PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW4:6" ) + PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW4:7" ) + PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW4:8" ) + + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + + PORT_START("SYSTEM") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + + +/************************************* + * + * Graphics definitions + * + *************************************/ + +static const gfx_layout tiles8x8_layout = +{ + 8,8, + RGN_FRAC(1,1), + 2, + { 8,0 }, + { 0, 1, 2, 3, 4, 5, 6, 7 }, + { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 }, + 16*8 +}; + + +static const gfx_layout tiles16x16_layout = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { 24,16,8,0 }, + { 0, 1, 2, 3, 4, 5, 6, 7, 32,33,34,35,36,37,38,39 }, + { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64, 8*64,9*64,10*64,11*64,12*64,13*64,14*64,15*64 }, + 64*16 +}; + + +static GFXDECODE_START( divebomb ) + GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0x400+0x400, 16 ) + GFXDECODE_ENTRY( "gfx2", 0, tiles16x16_layout, 0x400+0x400+0x400, 16 ) +GFXDECODE_END + + + +/************************************* + * + * Machine driver + * + *************************************/ + +static MACHINE_CONFIG_START( divebomb, divebomb_state ) + + MCFG_CPU_ADD("fgcpu", Z80,XTAL1/4) // ? + MCFG_CPU_PROGRAM_MAP(divebomb_fgcpu_map) + MCFG_CPU_IO_MAP(divebomb_fgcpu_iomap) + MCFG_CPU_VBLANK_INT_DRIVER("screen", divebomb_state, nmi_line_pulse) + + MCFG_CPU_ADD("spritecpu", Z80,XTAL1/4) // ? + MCFG_CPU_PROGRAM_MAP(divebomb_spritecpu_map) + MCFG_CPU_IO_MAP(divebomb_spritecpu_iomap) + MCFG_CPU_VBLANK_INT_DRIVER("screen", divebomb_state, nmi_line_pulse) + + MCFG_CPU_ADD("rozcpu", Z80,XTAL1/4) // ? + MCFG_CPU_PROGRAM_MAP(divebomb_rozcpu_map) + MCFG_CPU_IO_MAP(divebomb_rozcpu_iomap) + MCFG_CPU_VBLANK_INT_DRIVER("screen", divebomb_state, nmi_line_pulse) + + MCFG_QUANTUM_PERFECT_CPU("fgcpu") + + MCFG_DEVICE_ADD("k051316_1", K051316, 0) + MCFG_GFX_PALETTE("palette") + MCFG_K051316_BPP(8) + MCFG_K051316_WRAP(0) + MCFG_K051316_OFFSETS(-88, -16) + MCFG_K051316_CB(divebomb_state, zoom_callback_1) + + MCFG_DEVICE_ADD("k051316_2", K051316, 0) + MCFG_GFX_PALETTE("palette") + MCFG_K051316_BPP(8) + MCFG_K051316_WRAP(0) + MCFG_K051316_OFFSETS(-88, -16) + MCFG_K051316_CB(divebomb_state, zoom_callback_2) + + MCFG_MACHINE_START_OVERRIDE(divebomb_state, divebomb) + MCFG_MACHINE_RESET_OVERRIDE(divebomb_state, divebomb) + + MCFG_VIDEO_START_OVERRIDE(divebomb_state, divebomb) + + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_SIZE(256, 256) + MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0, 256-1-32) + MCFG_SCREEN_UPDATE_DRIVER(divebomb_state, screen_update_divebomb) + MCFG_SCREEN_PALETTE("palette") + + MCFG_GFXDECODE_ADD("gfxdecode", "palette", divebomb) + MCFG_PALETTE_ADD("palette", 0x400+0x400+0x400+0x100) + + MCFG_PALETTE_INIT_OWNER(divebomb_state, divebomb) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + // All frequencies unverified + MCFG_SOUND_ADD("sn0", SN76489, XTAL1/8) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) + MCFG_SOUND_ADD("sn1", SN76489, XTAL1/8) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) + MCFG_SOUND_ADD("sn2", SN76489, XTAL1/8) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) + MCFG_SOUND_ADD("sn3", SN76489, XTAL1/8) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) + MCFG_SOUND_ADD("sn4", SN76489, XTAL1/8) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) + MCFG_SOUND_ADD("sn5", SN76489, XTAL1/8) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) +MACHINE_CONFIG_END + + + +/************************************* + * + * Driver initialization + * + *************************************/ + +ROM_START( divebomb ) + ROM_REGION( 0x08000, "fgcpu", 0 ) + ROM_LOAD( "U20.27256", 0x00000, 0x08000, CRC(89a30c82) SHA1(ecb3dcc00192b9646dab55ec6c102ab1d2e403e8) ) + + ROM_REGION( 0x08000, "spritecpu", 0 ) + ROM_LOAD( "U21.27256", 0x00000, 0x08000, CRC(3896d3f6) SHA1(86d10c907bf00977656d8fa426b2f1ac211acdb3) ) + + ROM_REGION( 0x08000, "rozcpu", 0 ) + ROM_LOAD( "U19.27256", 0x00000, 0x08000, CRC(16e26fb9) SHA1(9602c79f947f5267e5f4f4f8dedc4697861a519b) ) + + ROM_REGION( 0x40000, "rozcpudata", 0 ) // on sub-board + ROM_LOAD( "U9.27512", 0x00000, 0x10000, CRC(c842f831) SHA1(badb38908a285e54b85e369342fd6ecb8fd68bbb) ) + ROM_LOAD( "U10.27512", 0x10000, 0x10000, CRC(c77f3574) SHA1(06b7576d5949906ee3209c011cd30e7066bb20cc) ) + ROM_LOAD( "U11.27512", 0x20000, 0x10000, CRC(8d46be7d) SHA1(7751df1f39b208169f04a5b904cb63e9fb53bba8) ) + // u12 not populated + + ROM_REGION( 0x10000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "U22.27256", 0x00000, 0x08000, CRC(f816f9c5) SHA1(b8e136463a1b4c81960c6b7350472d82af0fb1fb) ) + ROM_LOAD16_BYTE( "U23.27256", 0x00001, 0x08000, CRC(d2600570) SHA1(a7f7e182670e7b95321c4ec8278ce915bbe2b5ca) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD32_BYTE( "U15.27C100", 0x00000, 0x20000, CRC(ccba7fa0) SHA1(5eb4c1e458e7810e0f9db92946474d6da65f1a1b) ) + ROM_LOAD32_BYTE( "U16.27C100", 0x00001, 0x20000, CRC(16891fef) SHA1(a4723958509bccc73138306e58c355325ec342a3) ) + ROM_LOAD32_BYTE( "U17.27C100", 0x00002, 0x20000, CRC(f4cbc97f) SHA1(1e13bc18db128575ca8e6998e9dd6f7dc37a99b8) ) + ROM_LOAD32_BYTE( "U18.27C100", 0x00003, 0x20000, CRC(91ab9d89) SHA1(98454df4638bb831babb1796b095169851e6cf40) ) + + ROM_REGION( 0x30000, "k051316_1", ROMREGION_INVERT ) // on sub-board + ROM_LOAD( "U1.27512", 0x00000, 0x10000, CRC(99af1e18) SHA1(5d63130313fdd85c58e1d6b59e42b75a15328a6b) ) + ROM_LOAD( "U2.27512", 0x10000, 0x10000, CRC(99c8d516) SHA1(6205907bd526181542f4d58d442667595aec9730) ) + ROM_LOAD( "U3.27512", 0x20000, 0x10000, CRC(5ab4af3c) SHA1(ab8632e37a42f2f0db9b22c8577c4f09718ccc7c) ) + // u4 not populated + + ROM_REGION( 0x40000, "k051316_2", ROMREGION_INVERT ) // on sub-board + ROM_LOAD( "U5.27512", 0x00000, 0x10000, CRC(6726d022) SHA1(314fcec87f3bf335356b24224158233d91012675) ) + ROM_LOAD( "U6.27512", 0x10000, 0x10000, CRC(756b8a12) SHA1(2869c18ef1592d00dbc340facac2002d21adf6bc) ) + ROM_LOAD( "U7.27512", 0x20000, 0x10000, CRC(01c07d84) SHA1(45e05f15e94a32adbd488a4f77a9619e7e6b63f3) ) + ROM_LOAD( "U8.27512", 0x30000, 0x10000, CRC(5b9e7caa) SHA1(85510c0b861bad6a1411afc1d628bc7c448c9fef) ) + + // there are 12 PROMs, 4x banks of 3 + ROM_REGION( 0xc00, "fg_proms", 0 ) // text layer palette + ROM_LOAD( "u35.MB7122.bin", 0x800, 0x400, CRC(e890259d) SHA1(f96e00da6de3b868e50f2347b83f8e5727b85d9b) ) + ROM_LOAD( "u36.MB7122.bin", 0x400, 0x400, CRC(0c1ecdb5) SHA1(4ba9e283c747d6a760fe2e0a8b2bfdfcc55a3969) ) + ROM_LOAD( "u37.MB7122.bin", 0x000, 0x400, CRC(55c17465) SHA1(153e99a09604467ddd8c641d60c5f1b8d9a205b4) ) + + ROM_REGION( 0xc00, "k051316_1_pr", 0 ) // front roz ( k051316_1 ) + // looks like banks 0,1,2 are valid + ROM_LOAD( "u29.MB7122.bin", 0x000, 0x400, CRC(8b3d60d2) SHA1(a9ac4d3dd5e72522717dd18c32d3f88b75bb077c) ) // the last 0x100 block is invalid (copy of data in u33) + ROM_LOAD( "u30.MB7122.bin", 0x400, 0x400, CRC(0aeb1a88) SHA1(7b00e85ced210a5f7dfc100c15baa9e1735c7c80) ) // the last 0x100 block is empty + ROM_LOAD( "u31.MB7122.bin", 0x800, 0x400, CRC(75cf5f3d) SHA1(ec02b99ab65e561596b773918569b28313f21835) ) // the last 0x100 block is invalid (copy of data in u33) + + ROM_REGION( 0xc00, "k051316_2_pr", 0 ) // back roz ( k051316_2 ) + // 4 valid palettes but our code is only using 1 + ROM_LOAD( "u34.MB7122.bin", 0x000, 0x400, CRC(e0e2d93b) SHA1(9043929520abde15727e9333c153cf97104c9003) ) + ROM_LOAD( "u33.MB7122.bin", 0x400, 0x400, CRC(4df75f4f) SHA1(0157d6e268cdd797622c712648eb2e88214b12d9) ) + ROM_LOAD( "u32.MB7122.bin", 0x800, 0x400, CRC(e2e4b443) SHA1(e97a4e2988e29f992c5dec6f817a783b14535742) ) + + ROM_REGION( 0x300, "spr_proms", 0 ) // sprite layer palette + ROM_LOAD( "u83.MB7114.bin", 0x000, 0x100, CRC(d216110d) SHA1(3de935dbf876f82864b8b69049c8681101619411) ) + ROM_LOAD( "u82.MB7114.bin", 0x100, 0x100, CRC(52637774) SHA1(919727e337a716dbd18b51e26e45025b82aeba79) ) + ROM_LOAD( "u81.MB7114.bin", 0x200, 0x100, CRC(c59b0857) SHA1(aea4cb8d1ab59b54f90edb96d4ac42b1dd6bdcbe) ) +ROM_END + + + +/************************************* + * + * Driver initialization + * + *************************************/ + +MACHINE_START_MEMBER(divebomb_state, divebomb) +{ + m_bank1->configure_entries(0, 16, memregion("rozcpudata")->base(), 0x4000); + + save_item(NAME(roz1_enable)); + save_item(NAME(roz2_enable)); + save_item(NAME(roz1_wrap)); + save_item(NAME(roz2_wrap)); + save_item(NAME(to_spritecpu)); + save_item(NAME(to_rozcpu)); + save_item(NAME(has_fromsprite)); + save_item(NAME(has_fromroz)); + save_item(NAME(from_sprite)); + save_item(NAME(from_roz)); + save_item(NAME(roz_pal)); +} + + +MACHINE_RESET_MEMBER(divebomb_state, divebomb) +{ + roz1_enable = false; + roz2_enable = false; + roz1_wrap = false; + roz2_wrap = false; + has_fromsprite = false; + has_fromroz = false; +} + + + +/************************************* + * + * Game driver(s) + * + *************************************/ + +// According to a flyer, the world release was to be called 'Gaia'. The Gaia title graphics are present in the ROMs. +GAME( 1989, divebomb, 0, divebomb, divebomb, driver_device, 0, ROT270, "Konami", "Kyuukoukabakugekitai - Dive Bomber Squad (Japan, prototype)", MACHINE_IS_INCOMPLETE | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/dlair.cpp b/src/mame/drivers/dlair.cpp index 2969e3f15f4..fb7c981a6f1 100644 --- a/src/mame/drivers/dlair.cpp +++ b/src/mame/drivers/dlair.cpp @@ -361,8 +361,8 @@ static ADDRESS_MAP_START( dlus_map, AS_PROGRAM, 8, dlair_state ) AM_RANGE(0x0000, 0x9fff) AM_ROM AM_RANGE(0xa000, 0xa7ff) AM_MIRROR(0x1800) AM_RAM AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x1fc7) AM_DEVREAD("aysnd", ay8910_device, data_r) - AM_RANGE(0xc008, 0xc008) AM_MIRROR(0x1fc7) AM_READ_PORT("CONTROLS") - AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x1fc7) AM_READ_PORT("SERVICE") + AM_RANGE(0xc008, 0xc008) AM_MIRROR(0x1fc7) AM_READ_PORT("P1") + AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x1fc7) AM_READ_PORT("SYSTEM") AM_RANGE(0xc020, 0xc020) AM_MIRROR(0x1fc7) AM_READ(laserdisc_r) AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x1fc7) AM_DEVWRITE("aysnd", ay8910_device, data_w) AM_RANGE(0xe008, 0xe008) AM_MIRROR(0x1fc7) AM_WRITE(misc_w) @@ -478,11 +478,11 @@ static INPUT_PORTS_START( dlair ) PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) // PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x03, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x03, DEF_STR( Unused ) ) // TODO: kill me PORT_DIPNAME( 0x04, 0x00, "Difficulty Mode" ) PORT_DIPLOCATION("A:3") PORT_DIPSETTING( 0x04, "Mode 1" ) PORT_DIPSETTING( 0x00, "Mode 2" ) - PORT_DIPNAME( 0x08, 0x00, "Engineering mode" ) PORT_DIPLOCATION("A:4") + PORT_DIPNAME( 0x08, 0x00, "Engineering Mode" ) PORT_DIPLOCATION("A:4") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x00, "2 Credits/Free play" ) PORT_DIPLOCATION("A:5") @@ -524,7 +524,7 @@ static INPUT_PORTS_START( dlair ) PORT_DIPSETTING( 0x80, DEF_STR( Easy ) ) PORT_CONDITION("DSW1", 0x04, EQUALS, 0x04) PORT_DIPSETTING( 0x90, DEF_STR( Easy ) ) PORT_CONDITION("DSW1", 0x04, EQUALS, 0x04) - PORT_START("CONTROLS") + PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) @@ -534,7 +534,7 @@ static INPUT_PORTS_START( dlair ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ - PORT_START("SERVICE") + PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) @@ -627,7 +627,53 @@ static INPUT_PORTS_START( dleuro ) PORT_DIPSETTING( 0x90, DEF_STR( Easy ) ) PORT_CONDITION("DSW1", 0x04, EQUALS, 0x04) INPUT_PORTS_END +static INPUT_PORTS_START( spaceace ) + PORT_INCLUDE(dlair) + + PORT_MODIFY("DSW1") + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("A:1") + PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("A:2") + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPSETTING( 0x02, "5" ) + // TODO: manual claims following is "Difficulty Increase", which more or less is again rank ... + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("A:3") + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) // 5 chapters without losing life + PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) // 3 + PORT_DIPNAME( 0x08, 0x00, "Difficulty Rank Increase" ) PORT_DIPLOCATION("A:4") + PORT_DIPSETTING( 0x00, "Slow" ) + PORT_DIPSETTING( 0x08, "Fast" ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("A:5") + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x20, 0x00, "Demo Sounds Frequency" ) PORT_DIPLOCATION("A:6") + PORT_DIPSETTING( 0x00, "All the time" ) + PORT_DIPSETTING( 0x20, "1 out of eight times" ) + PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_HIGH, "A:7") + PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_HIGH, "A:8") + + PORT_MODIFY("DSW2") + PORT_DIPNAME( 0x01, 0x01, "LD Player" ) PORT_DIPLOCATION("B:1") + PORT_DIPSETTING( 0x00, "LD-PR7820" ) + PORT_DIPSETTING( 0x01, "LDV-1000" ) + PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_HIGH, "B:2") + PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_HIGH, "B:3") + PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_HIGH, "B:4") + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("B:5") + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x20, 0x00, "Unlimited Lives" ) PORT_DIPLOCATION("B:6") + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x40, 0x00, "Enable Frame Display" ) PORT_DIPLOCATION("B:7") // ? + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_HIGH, "B:8" ) // "Diagnostic Mode", plays the whole disc from start to finish, start buttons makes the disc go back one chapter. Setting this to off makes it to execute host CPU tests before proceeding to game. + +INPUT_PORTS_END +// TODO: dips for Space Ace euro /************************************* * @@ -905,7 +951,7 @@ ROM_START( spaceace ) /* revision A3 */ ROM_LOAD( "sa_a3_u5.bin", 0x8000, 0x2000, CRC(85cbcdc4) SHA1(97e01e96c885ab7af4c3a3b586eb40374d54f12f) ) DISK_REGION( "ld_ldv1000" ) - DISK_IMAGE_READONLY( "spaceace", 0, NO_DUMP ) + DISK_IMAGE_READONLY( "space_ace_ver2", 0, SHA1(9ca7d4cba380b04a3277a9b706b35036622fe2fb) ) ROM_END ROM_START( spaceacea2 ) /* revision A2 */ @@ -917,7 +963,7 @@ ROM_START( spaceacea2 ) /* revision A2 */ ROM_LOAD( "sa_a2_u5.bin", 0x8000, 0x2000, CRC(85cbcdc4) SHA1(97e01e96c885ab7af4c3a3b586eb40374d54f12f) ) DISK_REGION( "ld_ldv1000" ) - DISK_IMAGE_READONLY( "spaceace", 0, NO_DUMP ) + DISK_IMAGE_READONLY( "space_ace_ver2", 0, SHA1(9ca7d4cba380b04a3277a9b706b35036622fe2fb) ) ROM_END ROM_START( spaceacea ) /* revision A */ @@ -929,7 +975,7 @@ ROM_START( spaceacea ) /* revision A */ ROM_LOAD( "sa_a_u5.bin", 0x8000, 0x2000, CRC(85cbcdc4) SHA1(97e01e96c885ab7af4c3a3b586eb40374d54f12f) ) DISK_REGION( "ld_ldv1000" ) - DISK_IMAGE_READONLY( "spaceace", 0, NO_DUMP ) + DISK_IMAGE_READONLY( "space_ace_ver2", 0, SHA1(9ca7d4cba380b04a3277a9b706b35036622fe2fb) ) ROM_END ROM_START( spaceaceeuro ) /* Italian Sidam version */ @@ -989,7 +1035,7 @@ GAMEL( 1983, dleuro, dlair, dleuro, dleuro, dlair_state, fixed, R GAMEL( 1983, dleuroalt,dlair, dleuro, dleuro, dlair_state, fixed, ROT0, "Cinematronics (Atari license)", "Dragon's Lair (European, alternate)", MACHINE_NOT_WORKING, layout_dlair ) GAMEL( 1983, dlital, dlair, dleuro, dleuro, dlair_state, fixed, ROT0, "Cinematronics (Sidam license?)","Dragon's Lair (Italian)", MACHINE_NOT_WORKING, layout_dlair ) -GAMEL( 1983, spaceace, 0, dlair_ldv1000, dlaire, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A3)", MACHINE_NOT_WORKING, layout_dlair ) -GAMEL( 1983, spaceacea2, spaceace, dlair_ldv1000, dlaire, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A2)", MACHINE_NOT_WORKING, layout_dlair ) -GAMEL( 1983, spaceacea, spaceace, dlair_ldv1000, dlaire, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A)", MACHINE_NOT_WORKING, layout_dlair ) -GAMEL( 1983, spaceaceeuro, spaceace, dleuro, dleuro, dlair_state, fixed, ROT0, "Cinematronics (Atari license)", "Space Ace (European)", MACHINE_NOT_WORKING, layout_dlair ) +GAMEL( 1983, spaceace, 0, dlair_ldv1000, spaceace, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A3)", MACHINE_NOT_WORKING, layout_dlair ) +GAMEL( 1983, spaceacea2, spaceace, dlair_ldv1000, spaceace, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A2)", MACHINE_NOT_WORKING, layout_dlair ) +GAMEL( 1983, spaceacea, spaceace, dlair_ldv1000, spaceace, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A)", MACHINE_NOT_WORKING, layout_dlair ) +GAMEL( 1983, spaceaceeuro, spaceace, dleuro, spaceace, dlair_state, fixed, ROT0, "Cinematronics (Atari license)", "Space Ace (European)", MACHINE_NOT_WORKING, layout_dlair ) diff --git a/src/mame/drivers/dmndrby.cpp b/src/mame/drivers/dmndrby.cpp index 209ac140802..c95e8c04c87 100644 --- a/src/mame/drivers/dmndrby.cpp +++ b/src/mame/drivers/dmndrby.cpp @@ -54,6 +54,7 @@ DD10 DD14 DD18 H5 DD21 #include "emu.h" #include "cpu/z80/z80.h" #include "sound/ay8910.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "video/resnet.h" @@ -70,7 +71,8 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } required_shared_ptr<UINT8> m_scroll_ram; required_shared_ptr<UINT8> m_sprite_ram; @@ -93,12 +95,13 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; }; WRITE8_MEMBER(dmndrby_state::dderby_sound_w) { - soundlatch_byte_w(space,0,data); + m_soundlatch->write(space,0,data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -158,7 +161,7 @@ static ADDRESS_MAP_START( dderby_sound_map, AS_PROGRAM, 8, dmndrby_state ) AM_RANGE(0x0000, 0x0fff) AM_ROM AM_RANGE(0x1000, 0x1000) AM_RAM //??? AM_RANGE(0x4000, 0x4001) AM_DEVWRITE("ay1", ay8910_device, address_data_w) - AM_RANGE(0x4000, 0x4000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x4000, 0x4000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x4001, 0x4001) AM_DEVREAD("ay1", ay8910_device, data_r) AM_RANGE(0x6000, 0x67ff) AM_RAM ADDRESS_MAP_END @@ -545,6 +548,8 @@ static MACHINE_CONFIG_START( dderby, dmndrby_state ) MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 1789750) // frequency guessed MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) MACHINE_CONFIG_END diff --git a/src/mame/drivers/docastle.cpp b/src/mame/drivers/docastle.cpp index e5e18c8a1bb..7af24557142 100644 --- a/src/mame/drivers/docastle.cpp +++ b/src/mame/drivers/docastle.cpp @@ -232,7 +232,7 @@ static ADDRESS_MAP_START( docastle_map2, AS_PROGRAM, 8, docastle_state ) AM_RANGE(0xc001, 0xc001) AM_MIRROR(0x0080) AM_READ_PORT("DSW2") AM_RANGE(0xc002, 0xc002) AM_MIRROR(0x0080) AM_READ_PORT("DSW1") AM_RANGE(0xc003, 0xc003) AM_MIRROR(0x0080) AM_READ_PORT("JOYS") - AM_RANGE(0xc004, 0xc004) AM_MIRROR(0x0080) AM_MASK(0x0080) AM_READWRITE(flipscreen_r, flipscreen_w) + AM_RANGE(0xc004, 0xc004) AM_SELECT(0x0080) AM_READWRITE(flipscreen_r, flipscreen_w) AM_RANGE(0xc005, 0xc005) AM_MIRROR(0x0080) AM_READ_PORT("BUTTONS") AM_RANGE(0xc007, 0xc007) AM_MIRROR(0x0080) AM_READ_PORT("SYSTEM") AM_RANGE(0xe000, 0xe000) AM_DEVWRITE("sn1", sn76489a_device, write) @@ -278,7 +278,7 @@ static ADDRESS_MAP_START( dorunrun_map2, AS_PROGRAM, 8, docastle_state ) AM_RANGE(0xc001, 0xc001) AM_MIRROR(0x0080) AM_READ_PORT("DSW2") AM_RANGE(0xc002, 0xc002) AM_MIRROR(0x0080) AM_READ_PORT("DSW1") AM_RANGE(0xc003, 0xc003) AM_MIRROR(0x0080) AM_READ_PORT("JOYS") - AM_RANGE(0xc004, 0xc004) AM_MIRROR(0x0080) AM_MASK(0x0080) AM_READWRITE(flipscreen_r, flipscreen_w) + AM_RANGE(0xc004, 0xc004) AM_SELECT(0x0080) AM_READWRITE(flipscreen_r, flipscreen_w) AM_RANGE(0xc005, 0xc005) AM_MIRROR(0x0080) AM_READ_PORT("BUTTONS") AM_RANGE(0xc007, 0xc007) AM_MIRROR(0x0080) AM_READ_PORT("SYSTEM") AM_RANGE(0xe000, 0xe008) AM_READWRITE(docastle_shared1_r, docastle_shared0_w) @@ -305,7 +305,7 @@ static ADDRESS_MAP_START( idsoccer_map2, AS_PROGRAM, 8, docastle_state ) AM_RANGE(0xc001, 0xc001) AM_MIRROR(0x0080) AM_READ_PORT("DSW2") AM_RANGE(0xc002, 0xc002) AM_MIRROR(0x0080) AM_READ_PORT("DSW1") AM_RANGE(0xc003, 0xc003) AM_MIRROR(0x0080) AM_READ_PORT("JOYS") - AM_RANGE(0xc004, 0xc004) AM_MIRROR(0x0080) AM_MASK(0x0080) AM_READ_PORT("JOYS_RIGHT") AM_WRITE(flipscreen_w) + AM_RANGE(0xc004, 0xc004) AM_SELECT(0x0080) AM_READ_PORT("JOYS_RIGHT") AM_WRITE(flipscreen_w) AM_RANGE(0xc005, 0xc005) AM_MIRROR(0x0080) AM_READ_PORT("BUTTONS") AM_RANGE(0xc007, 0xc007) AM_MIRROR(0x0080) AM_READ_PORT("SYSTEM") AM_RANGE(0xe000, 0xe000) AM_DEVWRITE("sn1", sn76489a_device, write) diff --git a/src/mame/drivers/dynadice.cpp b/src/mame/drivers/dynadice.cpp index c2604827b94..66e73d06d2e 100644 --- a/src/mame/drivers/dynadice.cpp +++ b/src/mame/drivers/dynadice.cpp @@ -37,6 +37,7 @@ dy_6.bin (near Z80) #include "cpu/z80/z80.h" #include "cpu/i8085/i8085.h" #include "sound/ay8910.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" @@ -116,7 +117,7 @@ static ADDRESS_MAP_START( dynadice_io_map, AS_IO, 8, dynadice_state ) AM_RANGE(0x51, 0x51) AM_READ_PORT("IN1") AM_RANGE(0x52, 0x52) AM_READ_PORT("DSW") AM_RANGE(0x62, 0x62) AM_WRITENOP - AM_RANGE(0x63, 0x63) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0x63, 0x63) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x70, 0x77) AM_WRITENOP ADDRESS_MAP_END @@ -127,8 +128,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( dynadice_sound_io_map, AS_IO, 8, dynadice_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r) - AM_RANGE(0x01, 0x01) AM_WRITE(soundlatch_clear_byte_w) + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) + AM_RANGE(0x01, 0x01) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x02, 0x02) AM_WRITE(sound_data_w) AM_RANGE(0x03, 0x03) AM_WRITE(sound_control_w) ADDRESS_MAP_END @@ -263,6 +264,8 @@ static MACHINE_CONFIG_START( dynadice, dynadice_state ) MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, 2000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/eacc.cpp b/src/mame/drivers/eacc.cpp index 38e7d29c3f3..8512cb0a36a 100644 --- a/src/mame/drivers/eacc.cpp +++ b/src/mame/drivers/eacc.cpp @@ -97,7 +97,7 @@ static ADDRESS_MAP_START(eacc_mem, AS_PROGRAM, 8, eacc_state) AM_RANGE(0x0000, 0x001f) AM_RAM AM_SHARE("nvram") // inside cpu, battery-backed AM_RANGE(0x0020, 0x007f) AM_RAM // inside cpu AM_RANGE(0x6000, 0x67ff) AM_ROM AM_MIRROR(0x8000) - AM_RANGE(0x8004, 0x8007) AM_MIRROR(0x7fc) AM_DEVREADWRITE("pia", pia6821_device, read, write) + AM_RANGE(0x8000, 0x8003) AM_MIRROR(0x7fc) AM_DEVREADWRITE("pia", pia6821_device, read, write) ADDRESS_MAP_END diff --git a/src/mame/drivers/einstein.cpp b/src/mame/drivers/einstein.cpp index d0f5bb73a05..67b2edf0e36 100644 --- a/src/mame/drivers/einstein.cpp +++ b/src/mame/drivers/einstein.cpp @@ -505,7 +505,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( einstein2_io, AS_IO, 8, einstein_state ) AM_IMPORT_FROM(einstein_io) - AM_RANGE(0x40, 0x47) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(einstein_80col_ram_r, einstein_80col_ram_w) + AM_RANGE(0x40, 0x47) AM_SELECT(0xff00) AM_READWRITE(einstein_80col_ram_r, einstein_80col_ram_w) AM_RANGE(0x48, 0x48) AM_MIRROR(0xff00) AM_DEVWRITE("crtc", mc6845_device, address_w) AM_RANGE(0x49, 0x49) AM_MIRROR(0xff00) AM_DEVWRITE("crtc", mc6845_device, register_w) AM_RANGE(0x4c, 0x4c) AM_MIRROR(0xff00) AM_READ(einstein_80col_state_r) diff --git a/src/mame/drivers/equites.cpp b/src/mame/drivers/equites.cpp index 98e58f261d3..b8b4baef9c9 100644 --- a/src/mame/drivers/equites.cpp +++ b/src/mame/drivers/equites.cpp @@ -663,9 +663,9 @@ static ADDRESS_MAP_START( equites_map, AS_PROGRAM, 16, equites_state ) AM_RANGE(0x100000, 0x1001ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x140000, 0x1407ff) AM_READWRITE8(mcu_ram_r, mcu_ram_w, 0x00ff) AM_RANGE(0x180000, 0x180001) AM_READ_PORT("IN1") AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) - AM_RANGE(0x184000, 0x184001) AM_MIRROR(0x020000) AM_MASK(0x020000) AM_WRITE(equites_flipw_w) - AM_RANGE(0x188000, 0x188001) AM_MIRROR(0x020000) AM_MASK(0x020000) AM_WRITE(mcu_start_w) - AM_RANGE(0x18c000, 0x18c001) AM_MIRROR(0x020000) AM_MASK(0x020000) AM_WRITE(mcu_switch_w) + AM_RANGE(0x184000, 0x184001) AM_SELECT(0x020000) AM_WRITE(equites_flipw_w) + AM_RANGE(0x188000, 0x188001) AM_SELECT(0x020000) AM_WRITE(mcu_start_w) + AM_RANGE(0x18c000, 0x18c001) AM_SELECT(0x020000) AM_WRITE(mcu_switch_w) AM_RANGE(0x1c0000, 0x1c0001) AM_READ_PORT("IN0") AM_WRITE(equites_scrollreg_w) AM_RANGE(0x380000, 0x380001) AM_WRITE8(equites_bgcolor_w, 0xff00) AM_RANGE(0x780000, 0x780001) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) @@ -673,7 +673,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( gekisou_map, AS_PROGRAM, 16, equites_state ) AM_RANGE(0x040000, 0x040fff) AM_RAM AM_SHARE("nvram") // mainram is battery-backed - AM_RANGE(0x580000, 0x580001) AM_MIRROR(0x020000) AM_MASK(0x020000) AM_WRITE(gekisou_unknown_bit_w) + AM_RANGE(0x580000, 0x580001) AM_SELECT(0x020000) AM_WRITE(gekisou_unknown_bit_w) AM_IMPORT_FROM( equites_map ) ADDRESS_MAP_END @@ -684,11 +684,11 @@ static ADDRESS_MAP_START( splndrbt_map, AS_PROGRAM, 16, equites_state ) AM_RANGE(0x040000, 0x040fff) AM_RAM AM_RANGE(0x080000, 0x080001) AM_READ_PORT("IN0") AM_RANGE(0x0c0000, 0x0c0001) AM_READ_PORT("IN1") - AM_RANGE(0x0c0000, 0x0c0001) AM_MIRROR(0x020000) AM_MASK(0x020000) AM_WRITE8(equites_bgcolor_w, 0xff00) // note: addressmask does not apply here - AM_RANGE(0x0c0000, 0x0c0001) AM_MIRROR(0x020000) AM_MASK(0x020000) AM_WRITE8(equites_flipb_w, 0x00ff) - AM_RANGE(0x0c4000, 0x0c4001) AM_MIRROR(0x020000) AM_MASK(0x020000) AM_WRITE(mcu_start_w) - AM_RANGE(0x0c8000, 0x0c8001) AM_MIRROR(0x020000) AM_MASK(0x020000) AM_WRITE(mcu_switch_w) - AM_RANGE(0x0cc000, 0x0cc001) AM_MIRROR(0x020000) AM_MASK(0x020000) AM_WRITE(splndrbt_selchar_w) + AM_RANGE(0x0c0000, 0x0c0001) AM_SELECT(0x020000) AM_WRITE8(equites_bgcolor_w, 0xff00) // note: addressmask does not apply here + AM_RANGE(0x0c0000, 0x0c0001) AM_SELECT(0x020000) AM_WRITE8(equites_flipb_w, 0x00ff) + AM_RANGE(0x0c4000, 0x0c4001) AM_SELECT(0x020000) AM_WRITE(mcu_start_w) + AM_RANGE(0x0c8000, 0x0c8001) AM_SELECT(0x020000) AM_WRITE(mcu_switch_w) + AM_RANGE(0x0cc000, 0x0cc001) AM_SELECT(0x020000) AM_WRITE(splndrbt_selchar_w) AM_RANGE(0x100000, 0x100001) AM_WRITE(splndrbt_bg_scrollx_w) AM_RANGE(0x140000, 0x140001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(splndrbt_bg_scrolly_w) diff --git a/src/mame/drivers/esd16.cpp b/src/mame/drivers/esd16.cpp index 912e811ac4e..10ded704940 100644 --- a/src/mame/drivers/esd16.cpp +++ b/src/mame/drivers/esd16.cpp @@ -35,7 +35,7 @@ Other ESD games: 3 Cushion Billiards (c) 2000 - Undumped Tang Tang (c) 2000 - Undumped ESD 05-28-99 version -Fire Hawk (c) 2001 - see nmk16.c driver +Fire Hawk (c) 2001 - see nmk16.cpp driver Head Panic - Nude / Bikini pics don't show in-game, even when set in test mode? @@ -69,7 +69,6 @@ ToDo: #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" -#include "machine/eepromser.h" #include "sound/okim6295.h" #include "sound/3812intf.h" #include "includes/esd16.h" @@ -87,7 +86,7 @@ WRITE16_MEMBER(esd16_state::esd16_sound_command_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(0, ASSERT_LINE); // Generate an IRQ space.device().execute().spin_until_time(attotime::from_usec(50)); // Allow the other CPU to reply } @@ -250,7 +249,7 @@ READ8_MEMBER(esd16_state::esd16_sound_command_r) { /* Clear IRQ only after reading the command, or some get lost */ m_audiocpu->set_input_line(0, CLEAR_LINE); - return soundlatch_byte_r(space, 0); + return m_soundlatch->read(space, 0); } static ADDRESS_MAP_START( multchmp_sound_io_map, AS_IO, 8, esd16_state ) @@ -641,6 +640,8 @@ static MACHINE_CONFIG_START( esd16, esd16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_16MHz/4) /* 4MHz */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) @@ -736,7 +737,7 @@ ESD 11-09-98 (C) ESD 1998, 1999 PCB No. ESD 11-09-98 CPU: MC68HC000FN16 (68000, 68 pin PLCC socketed) -SND: Z80 (Z0840006PSC), YM3812/YM3014 & OKI M6295 (rebaged as U6612/U6614 & AD-65) +SND: Z80 (Z0840006PSC), YM3812/YM3014 & OKI M6295 (rebadged as U6612/U6614 & AD-65) OSC: 16.000MHz, 14.000MHz RAM: 4 x 62256, 9 x 6116 DIPS: 2 x 8 position diff --git a/src/mame/drivers/esh.cpp b/src/mame/drivers/esh.cpp index 72dcb78dfcb..65940aae7fa 100644 --- a/src/mame/drivers/esh.cpp +++ b/src/mame/drivers/esh.cpp @@ -14,10 +14,11 @@ Notes: Eshb has some junk in the IO TEST screen. Maybe a bad dump? Todo: - - LD TROUBLE message pops up after each cycle in attract. NMI-related? + - LD TROUBLE appears at POST. Sync/timing issue? + - Performance spike after some time of gameplay, CPU comms gets corrupt? + - How to init NVRAM? Current defaults definitely aren't. + - Wrong overlay colors; - Convert to tilemaps (see next ToDo for feasibility). - - Apparently some tiles blink (in at least two different ways). - - 0xfe and 0xff are pretty obviously not NMI enables. They're likely LED's. Do the NMI right (somehow). - Rumor has it there's an analog beep hanging off 0xf5? Implement it and finish off 0xf5 bits. - NVRAM range 0xe000-0xe800 might be too large. It doesn't seem to write past 0xe600... - Maybe some of the IPT_UNKNOWNs do something? @@ -33,40 +34,39 @@ Todo: class esh_state : public driver_device { public: - enum - { - TIMER_IRQ_STOP - }; - esh_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_laserdisc(*this, "laserdisc") , - m_tile_ram(*this, "tile_ram"), - m_tile_control_ram(*this, "tile_ctrl_ram"), - m_maincpu(*this, "maincpu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_laserdisc(*this, "laserdisc"), + m_screen(*this, "screen"), + m_tile_ram(*this, "tile_ram"), + m_tile_control_ram(*this, "tile_ctrl_ram"), + m_maincpu(*this, "maincpu"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette") { } required_device<pioneer_ldv1000_device> m_laserdisc; + required_device<screen_device> m_screen; required_shared_ptr<UINT8> m_tile_ram; required_shared_ptr<UINT8> m_tile_control_ram; - UINT8 m_ld_video_visible; + bool m_ld_video_visible; DECLARE_READ8_MEMBER(ldp_read); DECLARE_WRITE8_MEMBER(ldp_write); DECLARE_WRITE8_MEMBER(misc_write); DECLARE_WRITE8_MEMBER(led_writes); DECLARE_WRITE8_MEMBER(nmi_line_w); DECLARE_DRIVER_INIT(esh); + bool m_nmi_enable; virtual void machine_start() override; DECLARE_PALETTE_INIT(esh); UINT32 screen_update_esh(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(vblank_callback_esh); + DECLARE_WRITE_LINE_MEMBER(ld_command_strobe_cb); required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + //virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; }; @@ -78,10 +78,14 @@ protected: UINT32 esh_state::screen_update_esh(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { int charx, chary; + const UINT8 pal_bank = m_ld_video_visible == true ? 0x10 : 0x00; + const UINT32 trans_mask = m_ld_video_visible == true ? 0 : -1; + gfx_element *gfx;// = m_gfxdecode->gfx(0); /* clear */ bitmap.fill(0, cliprect); + /* Draw tiles */ for (charx = 0; charx < 32; charx++) { @@ -91,13 +95,34 @@ UINT32 esh_state::screen_update_esh(screen_device &screen, bitmap_rgb32 &bitmap, int palIndex = (m_tile_control_ram[current_screen_character] & 0x0f); int tileOffs = (m_tile_control_ram[current_screen_character] & 0x10) >> 4; - //int blinkLine = (m_tile_control_ram[current_screen_character] & 0x40) >> 6; - //int blinkChar = (m_tile_control_ram[current_screen_character] & 0x80) >> 7; + bool blinkLine = bool((m_tile_control_ram[current_screen_character] & 0x40) >> 6); + bool blinkChar = bool((m_tile_control_ram[current_screen_character] & 0x80) >> 7); + + + // TODO: blink timing + if(blinkChar == true && m_screen->frame_number() & 8) + { + if(trans_mask == 0) + continue; + + for(int yi=0;yi<8;yi++) + for(int xi=0;xi<8;xi++) + bitmap.pix32(yi+chary*8, xi+charx*8) = m_palette->pen(palIndex * 8 + pal_bank * 0x100); + + continue; + } + + if(blinkLine == true && m_screen->frame_number() & 8) + gfx = m_gfxdecode->gfx(1); + else + gfx = m_gfxdecode->gfx(0); + + + gfx->transpen(bitmap,cliprect, + m_tile_ram[current_screen_character] + (0x100 * tileOffs), + palIndex + pal_bank, + 0, 0, charx*8, chary*8, trans_mask); - m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, - m_tile_ram[current_screen_character] + (0x100 * tileOffs), - palIndex, - 0, 0, charx*8, chary*8, 0); } } @@ -126,7 +151,7 @@ WRITE8_MEMBER(esh_state::misc_write) logerror("BEEP!\n"); /* Bit 2 unknown */ - m_ld_video_visible = !((data & 0x08) >> 3); + m_ld_video_visible = bool(!((data & 0x08) >> 3)); /* Bits 4-7 unknown */ /* They cycle through a repeating pattern though */ @@ -165,13 +190,15 @@ WRITE8_MEMBER(esh_state::led_writes) WRITE8_MEMBER(esh_state::nmi_line_w) { - if (data == 0x00) - m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); - if (data == 0x01) - m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - - if (data != 0x00 && data != 0x01) - logerror("NMI line got a weird value!\n"); + // 0 -> 1 transition enables this, else disabled? + m_nmi_enable = (data & 1) == 1; + //if (data == 0x00) + // m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); + //if (data == 0x01) + // m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + + if (data & 0xfe) + logerror("NMI line unknown bit set %02x\n",data); } @@ -206,7 +233,7 @@ static INPUT_PORTS_START( esh ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME( "TEST" ) PORT_CODE( KEYCODE_T ) + PORT_SERVICE( 0x10, IP_ACTIVE_LOW ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -247,7 +274,7 @@ PALETTE_INIT_MEMBER(esh_state, esh) const UINT8 *color_prom = memregion("proms")->base(); int i; - /* Oddly enough, the top 4 bits of each byte is 0 */ + /* Oddly enough, the top 4 bits of each byte is 0 <- ??? */ for (i = 0; i < palette.entries(); i++) { int r,g,b; @@ -259,25 +286,29 @@ PALETTE_INIT_MEMBER(esh_state, esh) bit0 = (color_prom[i+0x100] >> 0) & 0x01; bit1 = (color_prom[i+0x100] >> 1) & 0x01; bit2 = (color_prom[i+0x100] >> 2) & 0x01; - r = (0x97 * bit2) + (0x47 * bit1) + (0x21 * bit0); + r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; /* green component */ - bit0 = 0; + bit0 = 0; //(color_prom[i+0x100] >> 0) & 0x01; bit1 = (color_prom[i+0x100] >> 3) & 0x01; bit2 = (color_prom[i+0x100] >> 4) & 0x01; - g = (0x97 * bit2) + (0x47 * bit1) + (0x21 * bit0); + g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; /* blue component */ - bit0 = 0; - bit1 = (color_prom[i+0x100] >> 5) & 0x01; - bit2 = (color_prom[i+0x100] >> 6) & 0x01; - b = (0x97 * bit2) + (0x47 * bit1) + (0x21 * bit0); - + // TODO: actually opaque flag + if((color_prom[i+0x100] >> 7) & 1) + b = 0xff; + else + { + bit0 = 0; //(color_prom[i+0x100] >> 5) & 0x01; + bit1 = (color_prom[i+0x100] >> 5) & 0x01; + bit2 = (color_prom[i+0x100] >> 6) & 0x01; + b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + } + palette.set_pen_color(i,rgb_t(r,g,b)); } - /* make color 0 transparent */ - palette.set_pen_color(0, rgb_t(0,0,0,0)); } static const gfx_layout esh_gfx_layout = @@ -285,7 +316,7 @@ static const gfx_layout esh_gfx_layout = 8,8, RGN_FRAC(1,3), 3, - { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) }, + { RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) }, { 0,1,2,3,4,5,6,7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, 8*8 @@ -293,25 +324,20 @@ static const gfx_layout esh_gfx_layout = static GFXDECODE_START( esh ) GFXDECODE_ENTRY("gfx1", 0, esh_gfx_layout, 0x0, 0x20) + GFXDECODE_ENTRY("gfx2", 0, esh_gfx_layout, 0x0, 0x20) GFXDECODE_END -void esh_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +INTERRUPT_GEN_MEMBER(esh_state::vblank_callback_esh) { - switch (id) - { - case TIMER_IRQ_STOP: - m_maincpu->set_input_line(0, CLEAR_LINE); - break; - default: - assert_always(FALSE, "Unknown id in esh_state::device_timer"); - } + // IRQ + device.execute().set_input_line(0, HOLD_LINE); } -INTERRUPT_GEN_MEMBER(esh_state::vblank_callback_esh) +// TODO: 0xfe NMI enabled after writing to LD command port, NMI reads LD port. +WRITE_LINE_MEMBER(esh_state::ld_command_strobe_cb) { - // IRQ - device.execute().set_input_line(0, ASSERT_LINE); - timer_set(attotime::from_usec(50), TIMER_IRQ_STOP); + if(m_nmi_enable) + m_maincpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE); } void esh_state::machine_start() @@ -321,17 +347,16 @@ void esh_state::machine_start() /* DRIVER */ static MACHINE_CONFIG_START( esh, esh_state ) - /* main cpu */ MCFG_CPU_ADD("maincpu", Z80, PCB_CLOCK/6) /* The denominator is a Daphne guess based on PacMan's hardware */ MCFG_CPU_PROGRAM_MAP(z80_0_mem) MCFG_CPU_IO_MAP(z80_0_io) MCFG_CPU_VBLANK_INT_DRIVER("screen", esh_state, vblank_callback_esh) - + MCFG_NVRAM_ADD_0FILL("nvram") - MCFG_LASERDISC_LDV1000_ADD("laserdisc") + MCFG_LASERDISC_LDV1000_COMMAND_STROBE_CB(WRITELINE(esh_state, ld_command_strobe_cb)) MCFG_LASERDISC_OVERLAY_DRIVER(256, 256, esh_state, screen_update_esh) MCFG_LASERDISC_OVERLAY_PALETTE("palette") @@ -351,6 +376,11 @@ static MACHINE_CONFIG_START( esh, esh_state ) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) MACHINE_CONFIG_END +// we just disable even lines so we can simulate line blinking +#define ROM_INTERLACED_GFX \ + ROM_REGION( 0x3000, "gfx2", 0 ) \ + ROM_COPY( "gfx1", 0, 0, 0x3000 ) \ + ROMX_FILL( 0, 0x3000, 0x00, ROM_SKIP(1) ) \ ROM_START( esh ) /* Main program CPU */ @@ -364,6 +394,8 @@ ROM_START( esh ) ROM_LOAD( "b.l3", 0x1000, 0x1000, CRC(9366dde7) SHA1(891db65384d47d13355b2eea37f57c34bc775c8f) ) ROM_LOAD( "c.k3", 0x2000, 0x1000, CRC(a936ef01) SHA1(bcacb281ccb72ceb57fb6a79380cc3a9688743c4) ) + ROM_INTERLACED_GFX + /* Color (+other) PROMs */ ROM_REGION( 0x400, "proms", 0 ) ROM_LOAD( "rgb.j1", 0x000, 0x200, CRC(1e9f795f) SHA1(61a58694929fa39b2412bc9244e5681d65a0eacb) ) @@ -371,7 +403,7 @@ ROM_START( esh ) ROM_LOAD( "v.c6", 0x300, 0x100, CRC(7157ba22) SHA1(07355f30efe46196d216356eda48a59fc622e43f) ) DISK_REGION( "laserdisc" ) - DISK_IMAGE_READONLY( "esh", 0, NO_DUMP ) + DISK_IMAGE_READONLY( "esh_ver2_en", 0, SHA1(c04709d95fd92259f013ec1cd28e3e36a163abe1) ) ROM_END ROM_START( esha ) @@ -386,6 +418,8 @@ ROM_START( esha ) ROM_LOAD( "b.l3", 0x1000, 0x1000, CRC(9366dde7) SHA1(891db65384d47d13355b2eea37f57c34bc775c8f) ) ROM_LOAD( "c.k3", 0x2000, 0x1000, CRC(a936ef01) SHA1(bcacb281ccb72ceb57fb6a79380cc3a9688743c4) ) + ROM_INTERLACED_GFX + /* Color (+other) PROMs */ ROM_REGION( 0x400, "proms", 0 ) ROM_LOAD( "rgb.j1", 0x000, 0x200, CRC(1e9f795f) SHA1(61a58694929fa39b2412bc9244e5681d65a0eacb) ) @@ -393,7 +427,7 @@ ROM_START( esha ) ROM_LOAD( "v.c6", 0x300, 0x100, CRC(7157ba22) SHA1(07355f30efe46196d216356eda48a59fc622e43f) ) DISK_REGION( "laserdisc" ) - DISK_IMAGE_READONLY( "esh", 0, NO_DUMP ) + DISK_IMAGE_READONLY( "esh_ver2_en", 0, SHA1(c04709d95fd92259f013ec1cd28e3e36a163abe1) ) ROM_END ROM_START( eshb ) @@ -408,6 +442,8 @@ ROM_START( eshb ) ROM_LOAD( "b.l3", 0x1000, 0x1000, CRC(9366dde7) SHA1(891db65384d47d13355b2eea37f57c34bc775c8f) ) ROM_LOAD( "c.k3", 0x2000, 0x1000, CRC(a936ef01) SHA1(bcacb281ccb72ceb57fb6a79380cc3a9688743c4) ) + ROM_INTERLACED_GFX + /* Color (+other) PROMs */ ROM_REGION( 0x400, "proms", 0 ) ROM_LOAD( "rgb.j1", 0x000, 0x200, CRC(1e9f795f) SHA1(61a58694929fa39b2412bc9244e5681d65a0eacb) ) @@ -415,7 +451,7 @@ ROM_START( eshb ) ROM_LOAD( "v.c6", 0x300, 0x100, CRC(7157ba22) SHA1(07355f30efe46196d216356eda48a59fc622e43f) ) DISK_REGION( "laserdisc" ) - DISK_IMAGE_READONLY( "esh", 0, NO_DUMP ) + DISK_IMAGE_READONLY( "esh_ver2_en", 0, SHA1(c04709d95fd92259f013ec1cd28e3e36a163abe1) ) ROM_END @@ -424,6 +460,6 @@ DRIVER_INIT_MEMBER(esh_state,esh) } /* YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME FLAGS */ -GAME( 1983, esh, 0, esh, esh, esh_state, esh, ROT0, "Funai/Gakken", "Esh's Aurunmilla (set 1)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND) -GAME( 1983, esha, esh, esh, esh, esh_state, esh, ROT0, "Funai/Gakken", "Esh's Aurunmilla (set 2)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND) -GAME( 1983, eshb, esh, esh, esh, esh_state, esh, ROT0, "Funai/Gakken", "Esh's Aurunmilla (set 3)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND) +GAME( 1983, esh, 0, esh, esh, esh_state, esh, ROT0, "Funai/Gakken", "Esh's Aurunmilla (set 1)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_COLORS) +GAME( 1983, esha, esh, esh, esh, esh_state, esh, ROT0, "Funai/Gakken", "Esh's Aurunmilla (set 2)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_COLORS) +GAME( 1983, eshb, esh, esh, esh, esh_state, esh, ROT0, "Funai/Gakken", "Esh's Aurunmilla (set 3)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_COLORS) diff --git a/src/mame/drivers/f1gp.cpp b/src/mame/drivers/f1gp.cpp index f60b0ca1633..3285d2c9873 100644 --- a/src/mame/drivers/f1gp.cpp +++ b/src/mame/drivers/f1gp.cpp @@ -44,7 +44,7 @@ WRITE16_MEMBER(f1gp_state::sound_command_w) if (ACCESSING_BITS_0_7) { m_pending_command = 1; - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -125,7 +125,7 @@ static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, f1gp_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_WRITE(f1gp_sh_bankswitch_w) // f1gp AM_RANGE(0x0c, 0x0c) AM_WRITE(f1gp_sh_bankswitch_w) // f1gp2 - AM_RANGE(0x14, 0x14) AM_READ(soundlatch_byte_r) AM_WRITE(pending_command_clear_w) + AM_RANGE(0x14, 0x14) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(pending_command_clear_w) AM_RANGE(0x18, 0x1b) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) ADDRESS_MAP_END @@ -363,12 +363,6 @@ static GFXDECODE_START( f1gp2 ) GFXDECODE_END - -WRITE_LINE_MEMBER(f1gp_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - MACHINE_START_MEMBER(f1gp_state,f1gpb) { save_item(NAME(m_pending_command)); @@ -448,8 +442,10 @@ static MACHINE_CONFIG_START( f1gp, f1gp_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_8MHz) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(f1gp_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) diff --git a/src/mame/drivers/fccpu30.cpp b/src/mame/drivers/fccpu30.cpp new file mode 100644 index 00000000000..2be0284abe7 --- /dev/null +++ b/src/mame/drivers/fccpu30.cpp @@ -0,0 +1,802 @@ +// license:BSD-3-Clause +// copyright-holders:Joakim Larsson Edstrom +/*************************************************************************** + * + * Force SYS68K CPU-30 VME SBC drivers + * + * 21/05/2016 + * + * Thanks to Al Kossow his site http://www.bitsavers.org/ I got the information + * required to start the work with this driver. + * + * The driver is currently starting up and the Boot ROM asks for input do start FGA-002 + * diagnostics and do SRAM setup, which it does. After that it jumps to zeroed memory + * and crashes so needs some more work to be useful + * + * + * || + * || || CPU-30 + * ||||--||_____________________________________________________________ + * ||||--|| | + * || || _ |__ + * || | | | + * || | | | + * || | | | + * || | | | + * || | | | + * || | | | + * || | |VME| + * || | | | + * || | |P1 | + * || | | | + * || | | | + * || | | | + * || | | | + * || | | | + * || | | | + * || |_| | + * || |___| + * || | + * || | + * || | + * || | + * || | + * || | + * || | + * || | + * || |___ + * || _| | + * || | | | + * || | | | + * || | | | + * || | | | + * || | |VME| + * || | | | + * || | |P2 | + * || | | | + * || | | | + * || | | | + * || | | | + * || | | | + * || | | | + * || | | | + * || | | | + * || |_| | + * || |___| + * || || + + * ||||--|| | + * ||||--||--------------------------------------------------------------+ + * || + * + * History of Force Computers + *--------------------------- + * + * Misc links about Force Computes and this board: + *------------------------------------------------ + * http://bitsavers.trailing-edge.com/pdf/forceComputers/CPU30/204030_CPU-30_R4_Technical_Reference_Oct96.pdf + * http://www.artisantg.com/info/P_wUovN.pdf + * + * Description(s) + * ------------- + * CPU-30 has the following feature set + * - 16.7 or 25 MHz MC68030 enhanced 32-bit microprocessor + * - 16.7 or 25 MHz MC68882 floating-point coprocessor + * - 32-512 Kb of SRAM with battery backup + * - 4, 8, 16, or 32MB of shared DRAM, with byte parity + * - Up to 8Mb Flash memory + * - 128,256 or 512 Mb boot flash or upto 1Mb of boot OTP PROM + * - Double High (6U) VMEmodule + * - A32/D32 VMEbus master/slave interface with system controller function (VMEchip ASIC) + * - Ethernet transceiver interface (AM79C90) + * - SCSI bus interface with independent data bus on P2 connector (MB87033/34) + * - Flopyy disk interface on P2 connector (FCD37C65C) + * - Four serial ports (DUSCC SCN68562 x 2) + * - 20 bit digital i/o for user applications( 2 x 68230 PI/T ) + * - Real-Time Clock with interrupt (72423) + * - 4-level requester, 7-level interrupter, and 7-level interrupt handler for VMEbus (VMEchip ASIC) + * + * NOTE: This driver currently mimics the CPU-30xyz configuration: 16MHz, 4Mb RAM, no parity, no ethernet (See TODO) + * + * Address Map + * -------------------------------------------------------------------------- + * Range Decscription + * -------------------------------------------------------------------------- + * 00000000-0xxFFFFF Shared DRAM D8-D32 xx=0x1F-0x03 for 32Mb-4Mb + * 0yy00000-FAFFFFFF VME A32 D8-D32 yy=xx+1 + * FB000000-FBFEFFFF VME A24 D8-D32 + * FBFF0000-FBFFFFFF VME A16 D8-D32 + * FC000000-FCFEFFFF VME A24 D8-D16 + * FCFF0000-FCFFFFFF VME A16 D8-D16 + * FD000000-FEEFFFFF Reserved + * FEF00000-FEF7FFFF LAN RAM D8-D32 + * FEF80000-FEFFFFFF LAN Controller D16 (AM79C90) + * FF000000-FF7FFFFF System PROM D8-D32 (read) D32 (flash write) + * FF800000-FF800BFF Reserved + * FF800C00-FF800DFF PIT1 D8 (68230) + * FF800E00-FF800FFF PIT2 D8 (68230) + * FF801000-FF801FFF Reserved + * FF802000-FF8021FF DUSCC1 D8 (SCN68562) + * FF802200-FF8023FF DUSCC2 D8 (SCN68562) + * FF802400-FF802FFF Reserved + * FF803000-FF8031FF RTC (72423) D8 + * FF803200-FF8033FF Reserved + * FF803400-FF8035FF SCSI controller (MB87033/34) D8 + * FF803600-FF8037FF Reserved + * FF803800-FF80397F Floppy controller (FDC37C65C) D8 + * FF803980-FF8039FF Slot 1 status register (read) D8 + * FFC00000-FFCFFFFF Local SRAM D8-D32 + * FFD00000-FFDFFFFF FGA-002 Gate Array D8-D32 + * FFE00000-FFEFFFFF Boot PROM D8-D32 + * FFF00000-FFFFFFFF Reserved + * -------------------------------------------------------------------------- + * + * Interrupt sources MVME + * ---------------------------------------------------------- + * Description Device Lvl IRQ VME board + * /Board Vector Address + * ---------------------------------------------------------- + * On board Sources + * + * Off board Sources (other VME boards) + * + * ---------------------------------------------------------- + * + * DMAC Channel Assignments + * ---------------------------------------------------------- + * Channel MVME147 + * ---------------------------------------------------------- + * + * + * TODO: + * - Investigate and fix crash + * - Add VxWorks proms + * - Add more devices + * - Write VME device + * - Add variants of boards + * + ****************************************************************************/ + +#include "emu.h" +#include "cpu/m68000/m68000.h" +#include "machine/scnxx562.h" +#include "machine/68230pit.h" +#include "machine/nvram.h" +#include "bus/rs232/rs232.h" +#include "machine/clock.h" +//#include "machine/timekpr.h" + +#define VERBOSE 0 + +#define LOG(x) do { if (VERBOSE) logerror x; } while (0) +#if VERBOSE >= 2 +#define logerror printf +#endif + +#ifdef _MSC_VER +#define FUNCNAME __func__ +#else +#define FUNCNAME __PRETTY_FUNCTION__ +#endif + +#define DUSCC_CLOCK XTAL_14_7456MHz /* Verified */ + +class fccpu30_state : public driver_device +{ +public: +fccpu30_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device (mconfig, type, tag), + m_maincpu (*this, "maincpu") + ,m_dusccterm(*this, "duscc") + ,m_pit1 (*this, "pit1") + ,m_pit2 (*this, "pit2") + { + } + + DECLARE_READ32_MEMBER (bootvect_r); + DECLARE_WRITE32_MEMBER (bootvect_w); + /* FGA-002 - Force Gate Array */ + DECLARE_READ8_MEMBER (fga8_r); + DECLARE_WRITE8_MEMBER (fga8_w); + + /* Rotary switch PIT input */ + DECLARE_READ8_MEMBER (rotary_rd); + DECLARE_READ8_MEMBER (board_mem_id_rd); + + /* VME bus accesses */ + //DECLARE_READ16_MEMBER (vme_a24_r); + //DECLARE_WRITE16_MEMBER (vme_a24_w); + //DECLARE_READ16_MEMBER (vme_a16_r); + //DECLARE_WRITE16_MEMBER (vme_a16_w); + virtual void machine_start () override; + virtual void machine_reset () override; +protected: + +private: + required_device<cpu_device> m_maincpu; + required_device<duscc68562_device> m_dusccterm; + + required_device<pit68230_device> m_pit1; + required_device<pit68230_device> m_pit2; + + // Pointer to System ROMs needed by bootvect_r and masking RAM buffer for post reset accesses + UINT32 *m_sysrom; + UINT32 m_sysram[2]; + + // FGA-002 + UINT8 m_fga002[0x500]; +}; + +static ADDRESS_MAP_START (fccpu30_mem, AS_PROGRAM, 32, fccpu30_state) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE (0x00000000, 0x00000007) AM_ROM AM_READ (bootvect_r) /* ROM mirror just during reset */ + AM_RANGE (0x00000000, 0x00000007) AM_RAM AM_WRITE (bootvect_w) /* After first write we act as RAM */ + AM_RANGE (0x00000008, 0x003fffff) AM_RAM /* 4 Mb RAM */ + AM_RANGE (0xff000000, 0xff7fffff) AM_ROM AM_REGION("maincpu", 0xff000000) + AM_RANGE (0xff802000, 0xff8021ff) AM_DEVREADWRITE8("duscc", duscc68562_device, read, write, 0xffffffff) /* Port 1&2 - Dual serial port DUSCC */ + AM_RANGE (0xff800c00, 0xff800dff) AM_DEVREADWRITE8("pit1", pit68230_device, read, write, 0xffffffff) + AM_RANGE (0xff800e00, 0xff800fff) AM_DEVREADWRITE8("pit2", pit68230_device, read, write, 0xffffffff) + AM_RANGE (0xffc00000, 0xffcfffff) AM_RAM AM_SHARE ("nvram") /* On-board SRAM with battery backup (nvram) */ + AM_RANGE (0xffd00000, 0xffd004ff) AM_READWRITE8(fga8_r, fga8_w, 0xffffffff) /* FGA-002 Force Gate Array */ + AM_RANGE (0xffe00000, 0xffefffff) AM_ROM AM_REGION("maincpu", 0xffe00000) + + //AM_RANGE(0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */ + //AM_RANGE(0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */ +ADDRESS_MAP_END + +/* Input ports */ +static INPUT_PORTS_START (fccpu30) +INPUT_PORTS_END + +#define FGA_ICRMBOX0 0x0000 +#define FGA_ICRMBOX1 0x0004 +#define FGA_ICRMBOX2 0x0008 +#define FGA_ICRMBOX3 0x000c +#define FGA_ICRMBOX4 0x0010 +#define FGA_ICRMBOX5 0x0014 +#define FGA_ICRMBOX6 0x0018 +#define FGA_ICRMBOX7 0x001C +#define FGA_VMEPAGE 0x0200 +#define FGA_ICRVME1 0x0204 +#define FGA_ICRVME2 0x0208 +#define FGA_ICRVME3 0x020c +#define FGA_ICRVME4 0x0210 +#define FGA_ICRVME5 0x0214 +#define FGA_ICRVME6 0x0218 +#define FGA_ICRVME7 0x021c +#define FGA_ICRTIM0 0x0220 +#define FGA_ICRDMANORM 0x0230 +#define FGA_ICRDMAERR 0x0234 +#define FGA_CTL1 0x0238 +#define FGA_CTL2 0x023c +#define FGA_ICRFMB0REF 0x0240 +#define FGA_ICRFMB1REF 0x0244 +#define FGA_ICRFMB0MES 0x0248 +#define FGA_ICRFMB1MES 0x024c +#define FGA_CTL3 0x0250 +#define FGA_CTL4 0x0254 +#define FGA_ICRPARITY 0x0258 +#define FGA_AUXPINCTL 0x0260 +#define FGA_CTL5 0x0264 +#define FGA_AUXFIFWEX 0x0268 +#define FGA_AUXFIFREX 0x026c +#define FGA_CTL6 0x0270 +#define FGA_CTL7 0x0274 +#define FGA_CTL8 0x0278 +#define FGA_CTL9 0x027c +#define FGA_ICRABORT 0x0280 +#define FGA_ICRACFAIL 0x0284 +#define FGA_ICRSYSFAIL 0x0288 +#define FGA_ICRLOCAL0 0x028c +#define FGA_ICRLOCAL1 0x0290 +#define FGA_ICRLOCAL2 0x0294 +#define FGA_ICRLOCAL3 0x0298 +#define FGA_ICRLOCAL4 0x029c +#define FGA_ICRLOCAL5 0x02a0 +#define FGA_ICRLOCAL6 0x02a4 +#define FGA_ICRLOCAL7 0x02a8 +#define FGA_ENAMCODE 0x02b4 +#define FGA_CTL10 0x02c0 +#define FGA_CTL11 0x02c4 +#define FGA_MAINUM 0x02c8 +#define FGA_MAINUU 0x02cc +#define FGA_BOTTOMPAGEU 0x02d0 +#define FGA_BOTTOMPAGEL 0x02d4 +#define FGA_TOPPAGEU 0x02d8 +#define FGA_TOPPAGEL 0x02dc +#define FGA_MYVMEPAGE 0x02fc +#define FGA_TIM0PRELOAD 0x0300 +#define FGA_TIM0CTL 0x0310 +#define FGA_DMASRCATT 0x0320 +#define FGA_DMADSTATT 0x0324 +#define FGA_DMA_GENERAL 0x0328 +#define FGA_CTL12 0x032c +#define FGA_LIOTIMING 0x0330 +#define FGA_LOCALIACK 0x0334 +#define FGA_FMBCTL 0x0338 +#define FGA_FMBAREA 0x033c +#define FGA_AUXSRCSTART 0x0340 +#define FGA_AUXDSTSTART 0x0344 +#define FGA_AUXSRCTERM 0x0348 +#define FGA_AUXDSTTERM 0x034c +#define FGA_CTL13 0x0350 +#define FGA_CTL14 0x0354 +#define FGA_CTL15 0x0358 +#define FGA_CTL16 0x035c +#define FGA_SPECIALENA 0x0424 +#define FGA_ISTIM0 0x04a0 +#define FGA_ISDMANORM 0x04b0 +#define FGA_ISDMAERR 0x04b4 +#define FGA_ISFMB0REF 0x04b8 +#define FGA_ISFMB1REF 0x04bc +#define FGA_ISPARITY 0x04c0 +#define FGA_DMARUNCTL 0x04c4 +#define FGA_ISABORT 0x04c8 +#define FGA_ISACFAIL 0x04cc +#define FGA_ISFMB0MES 0x04e0 +#define FGA_ISFMB1MES 0x04e4 +#define FGA_ISSYSFAIL 0x04d0 +#define FGA_ABORTPIN 0x04d4 +#define FGA_RSVMECALL 0x04f0 +#define FGA_RSKEYRES 0x04f4 +#define FGA_RSCPUCALL 0x04f8 +#define FGA_RSLOCSW 0x04fc + +/* Start it up */ +void fccpu30_state::machine_start () +{ + LOG(("--->%s\n", FUNCNAME)); + + save_pointer (NAME (m_sysrom), sizeof(m_sysrom)); + save_pointer (NAME (m_sysram), sizeof(m_sysram)); + save_pointer (NAME (m_fga002), sizeof(m_fga002)); + + /* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */ + m_sysrom = (UINT32*)(memregion ("maincpu")->base () + 0xffe00000); +} + +void fccpu30_state::machine_reset () +{ + LOG(("--->%s\n", FUNCNAME)); + + /* Reset pointer to bootvector in ROM for bootvector handler bootvect_r */ + if (m_sysrom == &m_sysram[0]) /* Condition needed because memory map is not setup first time */ + m_sysrom = (UINT32*)(memregion ("maincpu")->base () + 0xffe00000); + + /* Reset values for the FGA-002 */ + memset(&m_fga002[0], 0, sizeof(m_fga002)); + m_fga002[FGA_RSVMECALL] = 0x80; + m_fga002[FGA_RSKEYRES] = 0x80; + m_fga002[FGA_RSCPUCALL] = 0x80; + m_fga002[FGA_RSLOCSW] = 0x80; + m_fga002[FGA_ISTIM0] = 0x80; + m_fga002[FGA_ISDMANORM] = 0x80; + m_fga002[FGA_ISDMAERR] = 0x80; + m_fga002[FGA_ISFMB0REF] = 0x80; + m_fga002[FGA_ISFMB1REF] = 0x80; + m_fga002[FGA_ISPARITY] = 0x80; + m_fga002[FGA_ISABORT] = 0x80; + m_fga002[FGA_ISACFAIL] = 0x80; + m_fga002[FGA_ISSYSFAIL] = 0x80; + m_fga002[FGA_ISFMB0MES] = 0x80; + m_fga002[FGA_ISFMB1MES] = 0x80; +} + +/* Boot vector handler, the PCB hardwires the first 8 bytes from 0xff800000 to 0x0 at reset*/ +READ32_MEMBER (fccpu30_state::bootvect_r){ + return m_sysrom[offset]; +} + +WRITE32_MEMBER (fccpu30_state::bootvect_w){ + m_sysram[offset % sizeof(m_sysram)] &= ~mem_mask; + m_sysram[offset % sizeof(m_sysram)] |= (data & mem_mask); + m_sysrom = &m_sysram[0]; // redirect all upcomming accesses to masking RAM until reset. +} + +/* + * FGA-002 driver, might deserve its own driver but will rest here until another board wants it + * +The FGA-002 gate array is a high speed CMOS device manufactured in 1.2 micron technology and +containing 24,000 gates in a 281 pin PGA package. It provides interfaces to the 68020/30 microprocessor +as well as a VMEbus compatible interface. The auxilary interface of the gate array is a high speed data +channel used by the internal 32 bit DMA controller. The interface allows data transfer rates of up to +6 MByte/second. The timing of the local I/O interface is programmable and provides easy interfacing of +local I/O devices. All control, address and data lines of the CPU and the VMEbus are either directly +connected or connected via buffers to the gate array allowing easy implementation and usage. +The gate array registers are programmed by the local CPU. + +FEATURES: +- Programmable decoding for CPU and VME access to the local main memory +- Interrupt management for internal and external interrupt sources +- 32 bit multi-port DMA Controller +- FORCE Message Broadcast slave interface with 2 message channels +- 8 interrupt capable MAILBOXES +- 8 bit TIMER with 16 selectable internal source clocks +*/ +WRITE8_MEMBER (fccpu30_state::fga8_w){ + LOG(("%s[%04x] <- %02x - ", FUNCNAME, offset, data)); + switch(offset) + { + case FGA_SPECIALENA : LOG(("FGA_SPECIALENA - not implemented\n")); m_fga002[FGA_SPECIALENA] = data; break; + case FGA_RSVMECALL : LOG(("FGA_RSVMECALL - not implemented\n")); m_fga002[FGA_RSVMECALL] = data; break; + case FGA_RSKEYRES : LOG(("FGA_RSKEYRES - not implemented\n")); m_fga002[FGA_RSKEYRES] = data; break; + case FGA_RSCPUCALL : LOG(("FGA_RSCPUCALL - not implemented\n")); m_fga002[FGA_RSCPUCALL] = data; break; + case FGA_RSLOCSW : LOG(("FGA_RSLOCSW - not implemented\n")); m_fga002[FGA_RSLOCSW] = data; break; + case FGA_ICRMBOX0 : LOG(("FGA_ICRMBOX0 - not implemented\n")); m_fga002[FGA_ICRMBOX0] = data; break; + case FGA_ICRMBOX1 : LOG(("FGA_ICRMBOX1 - not implemented\n")); m_fga002[FGA_ICRMBOX1] = data; break; + case FGA_ICRMBOX2 : LOG(("FGA_ICRMBOX2 - not implemented\n")); m_fga002[FGA_ICRMBOX2] = data; break; + case FGA_ICRMBOX3 : LOG(("FGA_ICRMBOX3 - not implemented\n")); m_fga002[FGA_ICRMBOX3] = data; break; + case FGA_ICRMBOX4 : LOG(("FGA_ICRMBOX4 - not implemented\n")); m_fga002[FGA_ICRMBOX4] = data; break; + case FGA_ICRMBOX5 : LOG(("FGA_ICRMBOX5 - not implemented\n")); m_fga002[FGA_ICRMBOX5] = data; break; + case FGA_ICRMBOX6 : LOG(("FGA_ICRMBOX6 - not implemented\n")); m_fga002[FGA_ICRMBOX6] = data; break; + case FGA_ICRMBOX7 : LOG(("FGA_ICRMBOX7 - not implemented\n")); m_fga002[FGA_ICRMBOX7] = data; break; + case FGA_VMEPAGE : LOG(("FGA_VMEPAGE - not implemented\n")); m_fga002[FGA_VMEPAGE ] = data; break; + case FGA_ICRVME1 : LOG(("FGA_ICRVME1 - not implemented\n")); m_fga002[FGA_ICRVME1] = data; break; + case FGA_ICRVME2 : LOG(("FGA_ICRVME2 - not implemented\n")); m_fga002[FGA_ICRVME2] = data; break; + case FGA_ICRVME3 : LOG(("FGA_ICRVME3 - not implemented\n")); m_fga002[FGA_ICRVME3] = data; break; + case FGA_ICRVME4 : LOG(("FGA_ICRVME4 - not implemented\n")); m_fga002[FGA_ICRVME4] = data; break; + case FGA_ICRVME5 : LOG(("FGA_ICRVME5 - not implemented\n")); m_fga002[FGA_ICRVME5] = data; break; + case FGA_ICRVME6 : LOG(("FGA_ICRVME6 - not implemented\n")); m_fga002[FGA_ICRVME6] = data; break; + case FGA_ICRVME7 : LOG(("FGA_ICRVME7 - not implemented\n")); m_fga002[FGA_ICRVME7] = data; break; + case FGA_ICRTIM0 : LOG(("FGA_ICRTIM0 - not implemented\n")); m_fga002[FGA_ICRTIM0] = data; break; + case FGA_ICRDMANORM : LOG(("FGA_ICRDMANORM - not implemented\n")); m_fga002[FGA_ICRDMANORM] = data; break; + case FGA_ICRDMAERR : LOG(("FGA_ICRDMAERR - not implemented\n")); m_fga002[FGA_ICRDMAERR] = data; break; + case FGA_CTL1 : LOG(("FGA_CTL1 - not implemented\n")); m_fga002[FGA_CTL1] = data; break; + case FGA_CTL2 : LOG(("FGA_CTL2 - not implemented\n")); m_fga002[FGA_CTL2] = data; break; + case FGA_ICRFMB0REF : LOG(("FGA_ICRFMB0REF - not implemented\n")); m_fga002[FGA_ICRFMB0REF] = data; break; + case FGA_ICRFMB1REF : LOG(("FGA_ICRFMB1REF - not implemented\n")); m_fga002[FGA_ICRFMB1REF] = data; break; + case FGA_ICRFMB0MES : LOG(("FGA_ICRFMB0MES - not implemented\n")); m_fga002[FGA_ICRFMB0MES] = data; break; + case FGA_ICRFMB1MES : LOG(("FGA_ICRFMB1MES - not implemented\n")); m_fga002[FGA_ICRFMB1MES] = data; break; + case FGA_CTL3 : LOG(("FGA_CTL3 - not implemented\n")); m_fga002[FGA_CTL3] = data; break; + case FGA_CTL4 : LOG(("FGA_CTL4 - not implemented\n")); m_fga002[FGA_CTL4] = data; break; + case FGA_ICRPARITY : LOG(("FGA_ICRPARITY - not implemented\n")); m_fga002[FGA_ICRPARITY] = data; break; + case FGA_AUXPINCTL : LOG(("FGA_AUXPINCTL - not implemented\n")); m_fga002[FGA_AUXPINCTL] = data; break; + case FGA_CTL5 : LOG(("FGA_CTL5 - not implemented\n")); m_fga002[FGA_CTL5] = data; break; + case FGA_AUXFIFWEX : LOG(("FGA_AUXFIFWEX - not implemented\n")); m_fga002[FGA_AUXFIFWEX] = data; break; + case FGA_AUXFIFREX : LOG(("FGA_AUXFIFREX - not implemented\n")); m_fga002[FGA_AUXFIFREX] = data; break; + case FGA_CTL6 : LOG(("FGA_CTL6 - not implemented\n")); m_fga002[FGA_CTL6] = data; break; + case FGA_CTL7 : LOG(("FGA_CTL7 - not implemented\n")); m_fga002[FGA_CTL7] = data; break; + case FGA_CTL8 : LOG(("FGA_CTL8 - not implemented\n")); m_fga002[FGA_CTL8] = data; break; + case FGA_CTL9 : LOG(("FGA_CTL9 - not implemented\n")); m_fga002[FGA_CTL9] = data; break; + case FGA_ICRABORT : LOG(("FGA_ICRABORT - not implemented\n")); m_fga002[FGA_ICRABORT] = data; break; + case FGA_ICRACFAIL : LOG(("FGA_ICRACFAIL - not implemented\n")); m_fga002[FGA_ICRACFAIL] = data; break; + case FGA_ICRSYSFAIL : LOG(("FGA_ICRSYSFAIL - not implemented\n")); m_fga002[FGA_ICRSYSFAIL] = data; break; + case FGA_ICRLOCAL0 : LOG(("FGA_ICRLOCAL0 - not implemented\n")); m_fga002[FGA_ICRLOCAL0] = data; break; + case FGA_ICRLOCAL1 : LOG(("FGA_ICRLOCAL1 - not implemented\n")); m_fga002[FGA_ICRLOCAL1] = data; break; + case FGA_ICRLOCAL2 : LOG(("FGA_ICRLOCAL2 - not implemented\n")); m_fga002[FGA_ICRLOCAL2] = data; break; + case FGA_ICRLOCAL3 : LOG(("FGA_ICRLOCAL3 - not implemented\n")); m_fga002[FGA_ICRLOCAL3] = data; break; + case FGA_ICRLOCAL4 : LOG(("FGA_ICRLOCAL4 - not implemented\n")); m_fga002[FGA_ICRLOCAL4] = data; break; + case FGA_ICRLOCAL5 : LOG(("FGA_ICRLOCAL5 - not implemented\n")); m_fga002[FGA_ICRLOCAL5] = data; break; + case FGA_ICRLOCAL6 : LOG(("FGA_ICRLOCAL6 - not implemented\n")); m_fga002[FGA_ICRLOCAL6] = data; break; + case FGA_ICRLOCAL7 : LOG(("FGA_ICRLOCAL7 - not implemented\n")); m_fga002[FGA_ICRLOCAL7] = data; break; + case FGA_ENAMCODE : LOG(("FGA_ENAMCODE - not implemented\n")); m_fga002[FGA_ENAMCODE] = data; break; + case FGA_CTL10 : LOG(("FGA_CTL10 - not implemented\n")); m_fga002[FGA_CTL10] = data; break; + case FGA_CTL11 : LOG(("FGA_CTL11 - not implemented\n")); m_fga002[FGA_CTL11] = data; break; + case FGA_MAINUM : LOG(("FGA_MAINUM - not implemented\n")); m_fga002[FGA_MAINUM] = data; break; + case FGA_MAINUU : LOG(("FGA_MAINUU - not implemented\n")); m_fga002[FGA_MAINUU] = data; break; + case FGA_BOTTOMPAGEU : LOG(("FGA_BOTTOMPAGEU - not implemented\n")); m_fga002[FGA_BOTTOMPAGEU] = data; break; + case FGA_BOTTOMPAGEL : LOG(("FGA_BOTTOMPAGEL - not implemented\n")); m_fga002[FGA_BOTTOMPAGEL] = data; break; + case FGA_TOPPAGEU : LOG(("FGA_TOPPAGEU - not implemented\n")); m_fga002[FGA_TOPPAGEU] = data; break; + case FGA_TOPPAGEL : LOG(("FGA_TOPPAGEL - not implemented\n")); m_fga002[FGA_TOPPAGEL] = data; break; + case FGA_MYVMEPAGE : LOG(("FGA_MYVMEPAGE - not implemented\n")); m_fga002[FGA_MYVMEPAGE] = data; break; + case FGA_TIM0PRELOAD : LOG(("FGA_TIM0PRELOAD - not implemented\n")); m_fga002[FGA_TIM0PRELOAD] = data; break; + case FGA_TIM0CTL : LOG(("FGA_TIM0CTL - not implemented\n")); m_fga002[FGA_TIM0CTL] = data; break; + case FGA_DMASRCATT : LOG(("FGA_DMASRCATT - not implemented\n")); m_fga002[FGA_DMASRCATT] = data; break; + case FGA_DMADSTATT : LOG(("FGA_DMADSTATT - not implemented\n")); m_fga002[FGA_DMADSTATT] = data; break; + case FGA_DMA_GENERAL : LOG(("FGA_DMA_GENERAL - not implemented\n")); m_fga002[FGA_DMA_GENERAL] = data; break; + case FGA_CTL12 : LOG(("FGA_CTL12 - not implemented\n")); m_fga002[FGA_CTL12] = data; break; + case FGA_LIOTIMING : LOG(("FGA_LIOTIMING - not implemented\n")); m_fga002[FGA_LIOTIMING] = data; break; + case FGA_LOCALIACK : LOG(("FGA_LOCALIACK - not implemented\n")); m_fga002[FGA_LOCALIACK] = data; break; + case FGA_FMBCTL : LOG(("FGA_FMBCTL - not implemented\n")); m_fga002[FGA_FMBCTL] = data; break; + case FGA_FMBAREA : LOG(("FGA_FMBAREA - not implemented\n")); m_fga002[FGA_FMBAREA] = data; break; + case FGA_AUXSRCSTART : LOG(("FGA_AUXSRCSTART - not implemented\n")); m_fga002[FGA_AUXSRCSTART] = data; break; + case FGA_AUXDSTSTART : LOG(("FGA_AUXDSTSTART - not implemented\n")); m_fga002[FGA_AUXDSTSTART] = data; break; + case FGA_AUXSRCTERM : LOG(("FGA_AUXSRCTERM - not implemented\n")); m_fga002[FGA_AUXSRCTERM] = data; break; + case FGA_AUXDSTTERM : LOG(("FGA_AUXDSTTERM - not implemented\n")); m_fga002[FGA_AUXDSTTERM] = data; break; + case FGA_CTL13 : LOG(("FGA_CTL13 - not implemented\n")); m_fga002[FGA_CTL13] = data; break; + case FGA_CTL14 : LOG(("FGA_CTL14 - not implemented\n")); m_fga002[FGA_CTL14] = data; break; + case FGA_CTL15 : LOG(("FGA_CTL15 - not implemented\n")); m_fga002[FGA_CTL15] = data; break; + case FGA_CTL16 : LOG(("FGA_CTL16 - not implemented\n")); m_fga002[FGA_CTL16] = data; break; + case FGA_ISTIM0 : LOG(("FGA_ISTIM0 - not implemented\n")); m_fga002[FGA_ISTIM0] = data; break; + case FGA_ISDMANORM : LOG(("FGA_ISDMANORM - not implemented\n")); m_fga002[FGA_ISDMANORM] = data; break; + case FGA_ISDMAERR : LOG(("FGA_ISDMAERR - not implemented\n")); m_fga002[FGA_ISDMAERR] = data; break; + case FGA_ISFMB0REF : LOG(("FGA_ISFMB0REF - not implemented\n")); m_fga002[FGA_ISFMB0REF] = data; break; + case FGA_ISFMB1REF : LOG(("FGA_ISFMB1REF - not implemented\n")); m_fga002[FGA_ISFMB1REF] = data; break; + case FGA_ISPARITY : LOG(("FGA_ISPARITY - not implemented\n")); m_fga002[FGA_ISPARITY] = data; break; + case FGA_DMARUNCTL : LOG(("FGA_DMARUNCTL - not implemented\n")); m_fga002[FGA_DMARUNCTL] = data; break; + case FGA_ISABORT : LOG(("FGA_ISABORT - not implemented\n")); m_fga002[FGA_ISABORT] = data; break; + case FGA_ISFMB0MES : LOG(("FGA_ISFMB0MES - not implemented\n")); m_fga002[FGA_ISFMB0MES] = data; break; + case FGA_ISFMB1MES : LOG(("FGA_ISFMB1MES - not implemented\n")); m_fga002[FGA_ISFMB1MES] = data; break; + case FGA_ABORTPIN : LOG(("FGA_ABORTPIN - not implemented\n")); m_fga002[FGA_ABORTPIN] = data; break; + default: + LOG(("Unsupported register %04x\n", offset)); + } +} + +READ8_MEMBER (fccpu30_state::fga8_r){ + + UINT8 ret = 0; + + LOG(("%s[%04x] ", FUNCNAME, offset)); + switch(offset) + { + case FGA_SPECIALENA : ret = m_fga002[FGA_SPECIALENA]; LOG(("FGA_SPECIALENA returns %02x - not implemented\n", ret)); break; + case FGA_RSVMECALL : ret = m_fga002[FGA_RSVMECALL]; LOG(("FGA_RSVMECALL returns %02x - not implemented\n", ret)); break; + case FGA_RSKEYRES : ret = m_fga002[FGA_RSKEYRES]; LOG(("FGA_RSKEYRES returns %02x - not implemented\n", ret)); break; + case FGA_RSCPUCALL : ret = m_fga002[FGA_RSCPUCALL]; LOG(("FGA_RSCPUCALL returns %02x - not implemented\n", ret)); break; + case FGA_RSLOCSW : ret = m_fga002[FGA_RSLOCSW]; LOG(("FGA_RSLOCSW returns %02x - not implemented\n", ret)); break; + case FGA_ICRMBOX0 : ret = m_fga002[FGA_ICRMBOX0]; LOG(("FGA_ICRMBOX0 returns %02x - not implemented\n", ret)); break; + case FGA_ICRMBOX1 : ret = m_fga002[FGA_ICRMBOX1]; LOG(("FGA_ICRMBOX1 returns %02x - not implemented\n", ret)); break; + case FGA_ICRMBOX2 : ret = m_fga002[FGA_ICRMBOX2]; LOG(("FGA_ICRMBOX2 returns %02x - not implemented\n", ret)); break; + case FGA_ICRMBOX3 : ret = m_fga002[FGA_ICRMBOX3]; LOG(("FGA_ICRMBOX3 returns %02x - not implemented\n", ret)); break; + case FGA_ICRMBOX4 : ret = m_fga002[FGA_ICRMBOX4]; LOG(("FGA_ICRMBOX4 returns %02x - not implemented\n", ret)); break; + case FGA_ICRMBOX5 : ret = m_fga002[FGA_ICRMBOX5]; LOG(("FGA_ICRMBOX5 returns %02x - not implemented\n", ret)); break; + case FGA_ICRMBOX6 : ret = m_fga002[FGA_ICRMBOX6]; LOG(("FGA_ICRMBOX6 returns %02x - not implemented\n", ret)); break; + case FGA_ICRMBOX7 : ret = m_fga002[FGA_ICRMBOX7]; LOG(("FGA_ICRMBOX7 returns %02x - not implemented\n", ret)); break; + case FGA_VMEPAGE : ret = m_fga002[FGA_VMEPAGE]; LOG(("FGA_VMEPAGE returns %02x - not implemented\n", ret)); break; + case FGA_ICRVME1 : ret = m_fga002[FGA_ICRVME1]; LOG(("FGA_ICRVME1 returns %02x - not implemented\n", ret)); break; + case FGA_ICRVME2 : ret = m_fga002[FGA_ICRVME2]; LOG(("FGA_ICRVME2 returns %02x - not implemented\n", ret)); break; + case FGA_ICRVME3 : ret = m_fga002[FGA_ICRVME3]; LOG(("FGA_ICRVME3 returns %02x - not implemented\n", ret)); break; + case FGA_ICRVME4 : ret = m_fga002[FGA_ICRVME4]; LOG(("FGA_ICRVME4 returns %02x - not implemented\n", ret)); break; + case FGA_ICRVME5 : ret = m_fga002[FGA_ICRVME5]; LOG(("FGA_ICRVME5 returns %02x - not implemented\n", ret)); break; + case FGA_ICRVME6 : ret = m_fga002[FGA_ICRVME6]; LOG(("FGA_ICRVME6 returns %02x - not implemented\n", ret)); break; + case FGA_ICRVME7 : ret = m_fga002[FGA_ICRVME7]; LOG(("FGA_ICRVME7 returns %02x - not implemented\n", ret)); break; + case FGA_ICRTIM0 : ret = m_fga002[FGA_ICRTIM0]; LOG(("FGA_ICRTIM0 returns %02x - not implemented\n", ret)); break; + case FGA_ICRDMANORM : ret = m_fga002[FGA_ICRDMANORM]; LOG(("FGA_ICRDMANORM returns %02x - not implemented\n", ret)); break; + case FGA_ICRDMAERR : ret = m_fga002[FGA_ICRDMAERR]; LOG(("FGA_ICRDMAERR returns %02x - not implemented\n", ret)); break; + case FGA_CTL1 : ret = m_fga002[FGA_CTL1]; LOG(("FGA_CTL1 returns %02x - not implemented\n", ret)); break; + case FGA_CTL2 : ret = m_fga002[FGA_CTL2]; LOG(("FGA_CTL2 returns %02x - not implemented\n", ret)); break; + case FGA_ICRFMB0REF : ret = m_fga002[FGA_ICRFMB0REF]; LOG(("FGA_ICRFMB0REF returns %02x - not implemented\n", ret)); break; + case FGA_ICRFMB1REF : ret = m_fga002[FGA_ICRFMB1REF]; LOG(("FGA_ICRFMB1REF returns %02x - not implemented\n", ret)); break; + case FGA_ICRFMB0MES : ret = m_fga002[FGA_ICRFMB0MES]; LOG(("FGA_ICRFMB0MES returns %02x - not implemented\n", ret)); break; + case FGA_ICRFMB1MES : ret = m_fga002[FGA_ICRFMB1MES]; LOG(("FGA_ICRFMB1MES returns %02x - not implemented\n", ret)); break; + case FGA_CTL3 : ret = m_fga002[FGA_CTL3]; LOG(("FGA_CTL3 returns %02x - not implemented\n", ret)); break; + case FGA_CTL4 : ret = m_fga002[FGA_CTL4]; LOG(("FGA_CTL4 returns %02x - not implemented\n", ret)); break; + case FGA_ICRPARITY : ret = m_fga002[FGA_ICRPARITY]; LOG(("FGA_ICRPARITY returns %02x - not implemented\n", ret)); break; + case FGA_AUXPINCTL : ret = m_fga002[FGA_AUXPINCTL]; LOG(("FGA_AUXPINCTL returns %02x - not implemented\n", ret)); break; + case FGA_CTL5 : ret = m_fga002[FGA_CTL5]; LOG(("FGA_CTL5 returns %02x - not implemented\n", ret)); break; + case FGA_AUXFIFWEX : ret = m_fga002[FGA_AUXFIFWEX]; LOG(("FGA_AUXFIFWEX returns %02x - not implemented\n", ret)); break; + case FGA_AUXFIFREX : ret = m_fga002[FGA_AUXFIFREX]; LOG(("FGA_AUXFIFREX returns %02x - not implemented\n", ret)); break; + case FGA_CTL6 : ret = m_fga002[FGA_CTL6]; LOG(("FGA_CTL6 returns %02x - not implemented\n", ret)); break; + case FGA_CTL7 : ret = m_fga002[FGA_CTL7]; LOG(("FGA_CTL7 returns %02x - not implemented\n", ret)); break; + case FGA_CTL8 : ret = m_fga002[FGA_CTL8]; LOG(("FGA_CTL8 returns %02x - not implemented\n", ret)); break; + case FGA_CTL9 : ret = m_fga002[FGA_CTL9]; LOG(("FGA_CTL9 returns %02x - not implemented\n", ret)); break; + case FGA_ICRABORT : ret = m_fga002[FGA_ICRABORT]; LOG(("FGA_ICRABORT returns %02x - not implemented\n", ret)); break; + case FGA_ICRACFAIL : ret = m_fga002[FGA_ICRACFAIL]; LOG(("FGA_ICRACFAIL returns %02x - not implemented\n", ret)); break; + case FGA_ICRSYSFAIL : ret = m_fga002[FGA_ICRSYSFAIL]; LOG(("FGA_ICRSYSFAIL returns %02x - not implemented\n", ret)); break; + case FGA_ICRLOCAL0 : ret = m_fga002[FGA_ICRLOCAL0]; LOG(("FGA_ICRLOCAL0 returns %02x - not implemented\n", ret)); break; + case FGA_ICRLOCAL1 : ret = m_fga002[FGA_ICRLOCAL1]; LOG(("FGA_ICRLOCAL1 returns %02x - not implemented\n", ret)); break; + case FGA_ICRLOCAL2 : ret = m_fga002[FGA_ICRLOCAL2]; LOG(("FGA_ICRLOCAL2 returns %02x - not implemented\n", ret)); break; + case FGA_ICRLOCAL3 : ret = m_fga002[FGA_ICRLOCAL3]; LOG(("FGA_ICRLOCAL3 returns %02x - not implemented\n", ret)); break; + case FGA_ICRLOCAL4 : ret = m_fga002[FGA_ICRLOCAL4]; LOG(("FGA_ICRLOCAL4 returns %02x - not implemented\n", ret)); break; + case FGA_ICRLOCAL5 : ret = m_fga002[FGA_ICRLOCAL5]; LOG(("FGA_ICRLOCAL5 returns %02x - not implemented\n", ret)); break; + case FGA_ICRLOCAL6 : ret = m_fga002[FGA_ICRLOCAL6]; LOG(("FGA_ICRLOCAL6 returns %02x - not implemented\n", ret)); break; + case FGA_ICRLOCAL7 : ret = m_fga002[FGA_ICRLOCAL7]; LOG(("FGA_ICRLOCAL7 returns %02x - not implemented\n", ret)); break; + case FGA_ENAMCODE : ret = m_fga002[FGA_ENAMCODE]; LOG(("FGA_ENAMCODE returns %02x - not implemented\n", ret)); break; + case FGA_CTL10 : ret = m_fga002[FGA_CTL10]; LOG(("FGA_CTL10 returns %02x - not implemented\n", ret)); break; + case FGA_CTL11 : ret = m_fga002[FGA_CTL11]; LOG(("FGA_CTL11 returns %02x - not implemented\n", ret)); break; + case FGA_MAINUM : ret = m_fga002[FGA_MAINUM]; LOG(("FGA_MAINUM returns %02x - not implemented\n", ret)); break; + case FGA_MAINUU : ret = m_fga002[FGA_MAINUU]; LOG(("FGA_MAINUU returns %02x - not implemented\n", ret)); break; + case FGA_BOTTOMPAGEU : ret = m_fga002[FGA_BOTTOMPAGEU]; LOG(("FGA_BOTTOMPAGEU returns %02x - not implemented\n", ret)); break; + case FGA_BOTTOMPAGEL : ret = m_fga002[FGA_BOTTOMPAGEL]; LOG(("FGA_BOTTOMPAGEL returns %02x - not implemented\n", ret)); break; + case FGA_TOPPAGEU : ret = m_fga002[FGA_TOPPAGEU]; LOG(("FGA_TOPPAGEU returns %02x - not implemented\n", ret)); break; + case FGA_TOPPAGEL : ret = m_fga002[FGA_TOPPAGEL]; LOG(("FGA_TOPPAGEL returns %02x - not implemented\n", ret)); break; + case FGA_MYVMEPAGE : ret = m_fga002[FGA_MYVMEPAGE]; LOG(("FGA_MYVMEPAGE returns %02x - not implemented\n", ret)); break; + case FGA_TIM0PRELOAD : ret = m_fga002[FGA_TIM0PRELOAD]; LOG(("FGA_TIM0PRELOAD returns %02x - not implemented\n", ret)); break; + case FGA_TIM0CTL : ret = m_fga002[FGA_TIM0CTL]; LOG(("FGA_TIM0CTL returns %02x - not implemented\n", ret)); break; + case FGA_DMASRCATT : ret = m_fga002[FGA_DMASRCATT]; LOG(("FGA_DMASRCATT returns %02x - not implemented\n", ret)); break; + case FGA_DMADSTATT : ret = m_fga002[FGA_DMADSTATT]; LOG(("FGA_DMADSTATT returns %02x - not implemented\n", ret)); break; + case FGA_DMA_GENERAL : ret = m_fga002[FGA_DMA_GENERAL]; LOG(("FGA_DMA_GENERAL returns %02x - not implemented\n", ret)); break; + case FGA_CTL12 : ret = m_fga002[FGA_CTL12]; LOG(("FGA_CTL12 returns %02x - not implemented\n", ret)); break; + case FGA_LIOTIMING : ret = m_fga002[FGA_LIOTIMING]; LOG(("FGA_LIOTIMING returns %02x - not implemented\n", ret)); break; + case FGA_LOCALIACK : ret = m_fga002[FGA_LOCALIACK]; LOG(("FGA_LOCALIACK returns %02x - not implemented\n", ret)); break; + case FGA_FMBCTL : ret = m_fga002[FGA_FMBCTL]; LOG(("FGA_FMBCTL returns %02x - not implemented\n", ret)); break; + case FGA_FMBAREA : ret = m_fga002[FGA_FMBAREA]; LOG(("FGA_FMBAREA returns %02x - not implemented\n", ret)); break; + case FGA_AUXSRCSTART : ret = m_fga002[FGA_AUXSRCSTART]; LOG(("FGA_AUXSRCSTART returns %02x - not implemented\n", ret)); break; + case FGA_AUXDSTSTART : ret = m_fga002[FGA_AUXDSTSTART]; LOG(("FGA_AUXDSTSTART returns %02x - not implemented\n", ret)); break; + case FGA_AUXSRCTERM : ret = m_fga002[FGA_AUXSRCTERM]; LOG(("FGA_AUXSRCTERM returns %02x - not implemented\n", ret)); break; + case FGA_AUXDSTTERM : ret = m_fga002[FGA_AUXDSTTERM]; LOG(("FGA_AUXDSTTERM returns %02x - not implemented\n", ret)); break; + case FGA_CTL13 : ret = m_fga002[FGA_CTL13]; LOG(("FGA_CTL13 returns %02x - not implemented\n", ret)); break; + case FGA_CTL14 : ret = m_fga002[FGA_CTL14]; LOG(("FGA_CTL14 returns %02x - not implemented\n", ret)); break; + case FGA_CTL15 : ret = m_fga002[FGA_CTL15]; LOG(("FGA_CTL15 returns %02x - not implemented\n", ret)); break; + case FGA_CTL16 : ret = m_fga002[FGA_CTL16]; LOG(("FGA_CTL16 returns %02x - not implemented\n", ret)); break; + case FGA_ISTIM0 : ret = m_fga002[FGA_ISTIM0]; LOG(("FGA_ISTIM0 returns %02x - not implemented\n", ret)); break; + case FGA_ISDMANORM : ret = m_fga002[FGA_ISDMANORM]; LOG(("FGA_ISDMANORM returns %02x - not implemented\n", ret)); break; + case FGA_ISDMAERR : ret = m_fga002[FGA_ISDMAERR]; LOG(("FGA_ISDMAERR returns %02x - not implemented\n", ret)); break; + case FGA_ISFMB0REF : ret = m_fga002[FGA_ISFMB0REF]; LOG(("FGA_ISFMB0REF returns %02x - not implemented\n", ret)); break; + case FGA_ISFMB1REF : ret = m_fga002[FGA_ISFMB1REF]; LOG(("FGA_ISFMB1REF returns %02x - not implemented\n", ret)); break; + case FGA_ISPARITY : ret = m_fga002[FGA_ISPARITY]; LOG(("FGA_ISPARITY returns %02x - not implemented\n", ret)); break; + case FGA_DMARUNCTL : ret = m_fga002[FGA_DMARUNCTL]; LOG(("FGA_DMARUNCTL returns %02x - not implemented\n", ret)); break; + case FGA_ISABORT : ret = m_fga002[FGA_ISABORT]; LOG(("FGA_ISABORT returns %02x - not implemented\n", ret)); break; + case FGA_ISFMB0MES : ret = m_fga002[FGA_ISFMB0MES]; LOG(("FGA_ISFMB0MES returns %02x - not implemented\n", ret)); break; + case FGA_ISFMB1MES : ret = m_fga002[FGA_ISFMB1MES]; LOG(("FGA_ISFMB1MES returns %02x - not implemented\n", ret)); break; + case FGA_ABORTPIN : ret = m_fga002[FGA_ABORTPIN]; LOG(("FGA_ABORTPIN returns %02x - not implemented\n", ret)); break; + default: + LOG(("Unsupported register %04x\n", offset)); + } + return ret; +} + +/* + * Rotary Switches - to configure the board + * + * Table 25: PI/T #1 Interface Signals + * Pin Function In/Out + * PA0-PA3 SW1 In + * PA4 PA7 SW2 In + * + * Table 38: Upper Rotary Switch (SW2) + * Bit 3: This bit indicates whether the RAM disk should be initialized after reset. If this bit is set to "0" (settings 0-7), + * the RAM disk is initialized as defined by bit 0 and 1. When the disk is initialized, all data on the disk is lost. + * Bit 2: This bit defines the default data size on the VMEbus. If the bit is set to "0", 16 bits are selected, if it is set + * to "1", 32 bits are selected. + * Bit 1 and Bit 0: These two bits define the default RAM disk. See Table 40, "RAM Disk Usage," a detailed description. + * If AUTOBOOT is set by bit 2 and 3 of SW1, bit 1 and 0 of SW2 define which operating system will be booted. See Table 42, + * "Boot an Operating System (if AUTOBOOT is selected)," on page 129 for detailed description. + * + * Table 39: Lower Rotary Switch (SW1) + * Bit 3 and Bit 2: These two bits define which program is to be invoked after reset. Please refer + * to Table 41, "Program After Reset," on page 129 for a detailed description. + * Bit 1: If this switch is "0" (settings 0,1,4,5,8,9,C,D), VMEPROM tries to execute a start-up file after reset. The default + * filename is SY$STRT. If the bit is "1", VMEPROM comes up with the default banner. + * Bit 0: If this switch is set to "0" (settings 0,2,4,6,8,A,C,E), VMEPROM checks the VMEbus for available hardware after reset. + * In addition VMEPROM waits for SYSFAIL to disappear from the VMEbus. The following hardware can be detected: + * - Contiguous memory + * - ASCU-1/2 + * - ISIO-1/2 + * - SIO-1/2 + * - ISCSI-1 + * - WFC-1 + * + * Table 40: RAM Disk Usage + * Bit 1 Bit 0 Upper Switch (SW 2) selected on + * 1 1 RAM DISK AT TOP OF MEMORY (32 Kbytes) 3,7,B,F + * 1 0 RAM DISK AT 0xFC80 0000 (512 Kbytes) 2,6,A,E + * 0 1 RAM DISK AT 0x4070 0000 (512 Kbytes) 1,5,9,D + * 0 0 RAM DISK AT 0x4080 0000 (512 Kbytes) 0,4,8,C + * + * Table 41: Program After Reset + * Bit 3 Bit 2 Lower Switch (SW 1) selected on + * 1 1 VMEPROM C,D,E,F + * 1 0 USER PROGRAM AT 0x4070 0000 8,9,A,B + * 0 1 AUTOBOOT SYSTEM 4,5,6,7 + * 0 0 USER PROGRAM AT 4080.000016 0,1,2,3 + * + * Table 42: Boot an Operating System (if AUTOBOOT is selected) + * Bit 1 Bit 0 Upper Switch (SW 2) selected on + * 1 1 reserved 3,7,B,F + * 1 0 Boot UNIX/PDOS 4.x 2,6,A,E + * 0 1 Boot another operating system 1,5,9,D + * 0 0 Setup for UNIX mailbox driver 0,4,8,C + * + * "To start VMEPROM, the rotary switches must both be set to 'F':" Hmm... + */ +READ8_MEMBER (fccpu30_state::rotary_rd){ + LOG(("%s\n", FUNCNAME)); + return 0xff; // TODO: make this configurable from commandline or artwork +} + +/* + * PI/T #2 Factory settings + * B0-B2 Shared Memory Size - From these lines, the on-board Shared RAM capacity can be read in by software. + * 0 0 0 32 Mb + * 0 0 1 16 Mb + * 0 1 0 8 Mb + * 0 1 1 4 Mb + * 1 x x Reserved + * B3-B7 Board ID(s) - From these lines, the CPU board identification number can be read in by + * 0 1 0 1 0 CPU-30 R4 software. Every CPU board has a unique number. Different versions of + * (fill in more) one CPU board (i.e. different speeds, capacity of memory, or modules) + * contain the same identification number. In the case of the CPU-30 R4, the + * number is ten ("10" decimal or 0A16 hexadecimal "01010" binary). + */ +READ8_MEMBER (fccpu30_state::board_mem_id_rd){ + LOG(("%s\n", FUNCNAME)); + return 0x6A; // CPU-30 R4 with 4Mb of shared RAM. TODO: make this configurable from commandline or artwork +} + +#if 0 +/* Dummy VME access methods until the VME bus device is ready for use */ +READ16_MEMBER (fccpu30_state::vme_a24_r){ + LOG (logerror ("vme_a24_r\n")); + return (UINT16) 0; +} + +WRITE16_MEMBER (fccpu30_state::vme_a24_w){ + LOG (logerror ("vme_a24_w\n")); +} + +READ16_MEMBER (fccpu30_state::vme_a16_r){ + LOG (logerror ("vme_16_r\n")); + return (UINT16) 0; +} + +WRITE16_MEMBER (fccpu30_state::vme_a16_w){ + LOG (logerror ("vme_a16_w\n")); +} +#endif + +/* + * Machine configuration + */ +static MACHINE_CONFIG_START (fccpu30, fccpu30_state) + /* basic machine hardware */ + MCFG_CPU_ADD ("maincpu", M68030, XTAL_16MHz) + MCFG_CPU_PROGRAM_MAP (fccpu30_mem) + MCFG_NVRAM_ADD_0FILL("nvram") + + /* Terminal Port config */ + MCFG_DUSCC68562_ADD("duscc", DUSCC_CLOCK, 0, 0, 0, 0 ) + MCFG_DUSCC_OUT_TXDA_CB(DEVWRITELINE("rs232trm", rs232_port_device, write_txd)) + MCFG_DUSCC_OUT_DTRA_CB(DEVWRITELINE("rs232trm", rs232_port_device, write_dtr)) + MCFG_DUSCC_OUT_RTSA_CB(DEVWRITELINE("rs232trm", rs232_port_device, write_rts)) + + MCFG_RS232_PORT_ADD ("rs232trm", default_rs232_devices, "terminal") + MCFG_RS232_RXD_HANDLER (DEVWRITELINE ("duscc", duscc68562_device, rxa_w)) + MCFG_RS232_CTS_HANDLER (DEVWRITELINE ("duscc", duscc68562_device, ctsa_w)) + +// MCFG_DUSCC68562_ADD("duscc2", DUSCC_CLOCK, 0, 0, 0, 0 ) + + /* PIT Parallel Interface and Timer device, assuming strapped for on board clock */ + MCFG_DEVICE_ADD ("pit1", PIT68230, XTAL_16MHz / 2) + MCFG_PIT68230_PA_INPUT_CB(READ8(fccpu30_state, rotary_rd)) + MCFG_DEVICE_ADD ("pit2", PIT68230, XTAL_16MHz / 2) + MCFG_PIT68230_PB_INPUT_CB(READ8(fccpu30_state, board_mem_id_rd)) +MACHINE_CONFIG_END + +/* ROM definitions */ +ROM_START (fccpu30) +ROM_REGION32_BE(0xfff00000, "maincpu", 0) + +ROM_LOAD16_BYTE("CPU30LO.BIN", 0xff000000, 0x20000, CRC (fefa88ed) SHA1 (71a9ad807c0c2da5c6f6a6dc68c73ad8b52f3ea9)) +ROM_LOAD16_BYTE("CPU30UP.BIN", 0xff000001, 0x20000, CRC (dfed1f68) SHA1 (71478a77d5ab5da0fabcd78e69537919b560e3b8)) +ROM_LOAD("PGA-002.BIN", 0xffe00000, 0x10000, CRC (faa38972) SHA1 (651dfc2f9a865fc6adf49dad90f9e705f2889919)) + +/* + * System ROM information + * + * FGA-002 Bootprom version 3.1 is released May 28, 1990, coprighted by FORCE Computers Gmbh + * + * Bootprom PIT setup sequence + * 0a 00 <- read port A without side effects + * 0b 00 <- read port B without side effects + * 10 00 -> TCR - Timer Control register: Disable timer + * 13 ff -> CPRH - Counter Preload Regsiter High + * 14 ff -> CPRM - Counter Preload Regsiter Mid + * 15 ff -> CPRL - Counter Preload Regsiter Low + * 10 01 -> TCR - Timer Control register: Enable timer + * ------ init ends -------- clock: 4217 + * + * To start VMEPROM, the rotary switches must both be set to 'F' (PI/T #1 port A) + * + * ------ next config -------- clock: 1964222 + * 10 00 -> TCR - Timer Control register: Disable timer + * 17 00 -> CRH - Counter Register High + * 18 00 -> CRM - Counter Register Medium + * 19 00 -> CRL - Counter Register Low + * + * DUSCC #1 channel A setup sequence + * 0f 00 -> REG_CCR - reset Tx Command + * 0f 40 -> REG_CCR - reset Rx Command + * 00 07 -> REG_CMR1 - Async mode + * 01 38 -> REG_CMR2 - Normal polled or interrupt mode, no DMA + * 04 7f -> REG_TPR - Tx 8 bits, CTS and RTS, 1 STOP bit + * 06 1b -> REG_RPR - Rx RTS, 8 bits, no DCD, no parity + * 05 3d -> REG_TTR - Tx BRG 9600 (assuming a 14.7456 crystal) + * 07 2d -> REG_RTR - Rx BRG 9600 (assuming a 14.7456 crystal) + * 0e 27 -> REG_PCR - TRxC = RxCLK 1x, RTxC is input, RTS, GPO2, crystal oscillator connected to X2 + * 0b f1 -> REG_OMR - RTS low, OUT1 = OUT2 = high, RxRdy asserted for each character, + * TxRdy asserted on threshold, Same Tx Residual Character Length as for REG_TPR + * 0f 00 -> REG_CCR - reset Tx Command + * 0f 40 -> REG_CCR - reset Rx Command + * 0f 02 -> REG_CCR - enable Tx Command + * 0f 42 -> REG_CCR - enable Rx Command + *--- end of setup sequence --- + * loop: + * read <- REG_GSR + * until something needs attention + */ +ROM_END + +/* Driver */ +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +COMP (1990, fccpu30, 0, 0, fccpu30, fccpu30, driver_device, 0, "Force Computers Gmbh", "SYS68K/CPU-30", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_TYPE_COMPUTER ) diff --git a/src/mame/drivers/fcrash.cpp b/src/mame/drivers/fcrash.cpp index d13da4ad367..07b60b63649 100644 --- a/src/mame/drivers/fcrash.cpp +++ b/src/mame/drivers/fcrash.cpp @@ -2954,6 +2954,103 @@ ROM_START( slampic ) ROM_LOAD( "mb_qa.5k", 0x00000, 0x20000, CRC(e21a03c4) SHA1(98c03fd2c9b6bf8a4fc25a4edca87fff7c3c3819) ) ROM_END +// ************************************************************************* VARTHB + +WRITE16_MEMBER(cps_state::varthb_layer_w) +{ + if (data > 0x9000) + m_cps_a_regs[0x06 / 2] = data; +} + +static ADDRESS_MAP_START( varthb_map, AS_PROGRAM, 16, cps_state ) + AM_RANGE(0x000000, 0x1fffff) AM_ROM + AM_RANGE(0x800000, 0x800001) AM_READ_PORT("IN1") + AM_RANGE(0x800006, 0x800007) AM_WRITE(cps1_soundlatch_w) + AM_RANGE(0x800018, 0x80001f) AM_READ(cps1_dsw_r) + AM_RANGE(0x800030, 0x800037) AM_WRITE(cps1_coinctrl_w) + AM_RANGE(0x800100, 0x80013f) AM_WRITE(cps1_cps_a_w) AM_SHARE("cps_a_regs") + AM_RANGE(0x800140, 0x80017f) AM_READWRITE(cps1_cps_b_r, cps1_cps_b_w) AM_SHARE("cps_b_regs") + AM_RANGE(0x800188, 0x800189) AM_WRITE(varthb_layer_w) + AM_RANGE(0x980000, 0x98000b) AM_WRITE(dinopic_layer_w) + AM_RANGE(0x900000, 0x92ffff) AM_RAM_WRITE(cps1_gfxram_w) AM_SHARE("gfxram") + AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("mainram") +ADDRESS_MAP_END + +static MACHINE_CONFIG_START( varthb, cps_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68000, 12000000) + MCFG_CPU_PROGRAM_MAP(varthb_map) + MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state, cps1_interrupt) + + MCFG_CPU_ADD("audiocpu", Z80, 3579545) + MCFG_CPU_PROGRAM_MAP(sgyxz_sound_map) + + MCFG_MACHINE_START_OVERRIDE(cps_state,cps1) + + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_SIZE(64*8, 32*8) + MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 ) + MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_cps1) + MCFG_SCREEN_VBLANK_DRIVER(cps_state, screen_eof_cps1) + MCFG_SCREEN_PALETTE("palette") + + MCFG_GFXDECODE_ADD("gfxdecode", "palette", cps1) + MCFG_PALETTE_ADD("palette", 0xc00) + + MCFG_VIDEO_START_OVERRIDE(cps_state,cps1) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + + MCFG_YM2151_ADD("2151", XTAL_3_579545MHz) + MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) + MCFG_SOUND_ROUTE(0, "mono", 0.35) + MCFG_SOUND_ROUTE(1, "mono", 0.35) + + MCFG_OKIM6295_ADD("oki", XTAL_16MHz/4/4, OKIM6295_PIN7_HIGH) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) +MACHINE_CONFIG_END + +ROM_START( varthb ) + ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ + ROM_LOAD16_BYTE( "2", 0x000000, 0x80000, CRC(2f010023) SHA1(bf4b6c0cd82cf1b86e17d6ea2670110c06e6eabe) ) + ROM_LOAD16_BYTE( "1", 0x000001, 0x80000, CRC(0861dff3) SHA1(bf6dfe18ecaeaa1bbea09267014891c4a4a07943) ) + ROM_LOAD16_BYTE( "4", 0x100000, 0x10000, CRC(aa51e43b) SHA1(46b9dab844c55b50a47d048e5bb114911773699c) ) + ROM_LOAD16_BYTE( "3", 0x100001, 0x10000, CRC(f7e4f2f0) SHA1(2ce4eadb2d6a0e0d5745323eff2c899950ad4d3b) ) + + ROM_REGION( 0x200000, "gfx", 0 ) + ROMX_LOAD( "14", 0x000000, 0x40000, CRC(7ca73780) SHA1(26909db32f84157cd05719e5d1e715e76636d292) , ROM_SKIP(7) ) + ROMX_LOAD( "13", 0x000001, 0x40000, CRC(9fb11869) SHA1(a434fb0b588f934aaa68139495e1212a63ccf162) , ROM_SKIP(7) ) + ROMX_LOAD( "12", 0x000002, 0x40000, CRC(afeba416) SHA1(e722c65ea2e2bac3251c32208899484aa5ef6ad2) , ROM_SKIP(7) ) + ROMX_LOAD( "11", 0x000003, 0x40000, CRC(9eef3507) SHA1(ae03064ca5681fbdc43a34c54aaac11c8467428b) , ROM_SKIP(7) ) + ROMX_LOAD( "10", 0x000004, 0x40000, CRC(eeec6183) SHA1(40dc9c86e90d7c1a2ad600c195fe387180d95fd4) , ROM_SKIP(7) ) + ROMX_LOAD( "9", 0x000005, 0x40000, CRC(0e94f718) SHA1(249534f2323abcdb24099d0abc24c229c699ba94) , ROM_SKIP(7) ) + ROMX_LOAD( "8", 0x000006, 0x40000, CRC(c4ddc5b4) SHA1(79c2a42a664e387932b7804e7a80f5753338c3b0) , ROM_SKIP(7) ) + ROMX_LOAD( "7", 0x000007, 0x40000, CRC(8941ca12) SHA1(5ad5d47b8614c2899d05c65dc3b74947d4bac561) , ROM_SKIP(7) ) + + ROM_REGION( 0x18000, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */ + ROM_LOAD( "6", 0x00000, 0x08000, CRC(7a99446e) SHA1(ca027f41e3e58be5abc33ad7380746658cb5380a) ) + ROM_CONTINUE( 0x10000, 0x08000 ) + + ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ + ROM_LOAD( "5", 0x00000, 0x40000, CRC(1547e595) SHA1(27f47b1afd9700afd9e8167d7e4e2888be34a9e5) ) + + ROM_REGION( 0x1000, "pals", 0 ) + ROM_LOAD_OPTIONAL( "varth1.bin", 0x00000, 0x157, CRC(4c6a0d99) SHA1(081a307ef38675de178dd6221e6c4e55a5bfbd87) ) + ROM_LOAD_OPTIONAL( "varth2.bin", 0x00200, 0x157, NO_DUMP ) // Registered + ROM_LOAD_OPTIONAL( "varth3.bin", 0x00400, 0x157, NO_DUMP ) // Registered + ROM_LOAD_OPTIONAL( "varth4.bin", 0x00600, 0x117, CRC(53317bf6) SHA1(f7b8f8b2c40429a517e3be63e5aed9573972ddfb) ) + ROM_LOAD_OPTIONAL( "varth5.bin", 0x00800, 0x157, NO_DUMP ) // Registered + ROM_LOAD_OPTIONAL( "varth6.bin", 0x00a00, 0x157, NO_DUMP ) // Registered +ROM_END + // ************************************************************************* DRIVER MACROS @@ -2986,3 +3083,5 @@ GAME( 1992, sf2m9, sf2ce, sf2m1, sf2, cps_state, sf2m1, ROT0, GAME( 1993, slampic, slammast, slampic, slammast, cps_state, dinopic, ROT0, "bootleg", "Saturday Night Slam Masters (bootleg with PIC16c57)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) // 930713 ETC GAME( 1999, sgyxz, wof, sgyxz, sgyxz, cps_state, cps1, ROT0, "bootleg (All-In Electronic)", "Warriors of Fate ('sgyxz' bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // 921005 - Sangokushi 2 + +GAME( 1992, varthb, varth, varthb, varth, cps_state, dinopic, ROT270, "bootleg", "Varth: Operation Thunderstorm (bootleg)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/fcscsi.cpp b/src/mame/drivers/fcscsi.cpp index ea7083a46e7..41f6d745b5e 100644 --- a/src/mame/drivers/fcscsi.cpp +++ b/src/mame/drivers/fcscsi.cpp @@ -349,9 +349,16 @@ MACHINE_CONFIG_END ROM_START (fcscsi1) ROM_REGION (0x1000000, "maincpu", 0) - /* Besta ROM:s */ - ROM_LOAD16_BYTE ("besta88_scsi_lower.ROM", 0xe00001, 0x4000, CRC (fb3ab364) SHA1 (d79112100f1c4beaf358e006efd4dde5e300b0ba)) - ROM_LOAD16_BYTE ("besta88_scsi_upper.ROM", 0xe00000, 0x4000, CRC (41f9cdf4) SHA1 (66b998bbf9459f0a613718260e05e97749532073)) + /* Besta ROM:s - apparantly patched Force ROM:s */ + ROM_SYSTEM_BIOS(0, "Besta 88", "Besta 88") + ROMX_LOAD ("besta88_scsi_lower.ROM", 0xe00001, 0x4000, CRC (fb3ab364) SHA1 (d79112100f1c4beaf358e006efd4dde5e300b0ba), ROM_SKIP(1) | ROM_BIOS(1)) + ROMX_LOAD ("besta88_scsi_upper.ROM", 0xe00000, 0x4000, CRC (41f9cdf4) SHA1 (66b998bbf9459f0a613718260e05e97749532073), ROM_SKIP(1) | ROM_BIOS(1)) + + /* Force ROM:s */ + ROM_SYSTEM_BIOS(1, "ISCSI-1 v3.7", "Force Computer SYS68K/ISCSI-1 firmware v3.7") + ROMX_LOAD ("ISCSI-1_V3.7_L.BIN", 0xe00001, 0x4000, CRC (83d95ab7) SHA1 (bf249910bcb6cb0b04dda2a95a38a0f90b553352), ROM_SKIP(1) | ROM_BIOS(2)) + ROMX_LOAD ("ISCSI-1_V3.7_U.BIN", 0xe00000, 0x4000, CRC (58815831) SHA1 (074085ef96e1fe2a551938bdeee6a9cab40ff09c), ROM_SKIP(1) | ROM_BIOS(2)) + ROM_END /* Driver */ diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index 3543b30a0ae..0cec6776c1b 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -4,6 +4,9 @@ /****************************************************************************** Fidelity Electronics 6502 based board driver + + TODO: + - EAS doesn't work, there's some activity if you boot/reset with 1-key held down ****************************************************************************** @@ -141,6 +144,20 @@ All three of the above are called "segment H". ****************************************************************************** +Super 9 Sensory Chess Challenger (SU9) +This is basically the Fidelity Elite A/S program on CSC hardware. +--------------------------------- + +R6502AP CPU, assume 2MHz +1 RAM chip, assume 4KB +2*8KB ROM + 1*2KB ROM (+another 8KB ROM?) +built-in CB9 module + +See CSC description above for more information. + + +****************************************************************************** + Reversi Sensory Challenger (RSC) The 1st version came out in 1980, a program revision was released in 1981. Another distinction is the board color and layout, the 1981 version is green. @@ -155,6 +172,26 @@ PCB label 510-1035A01 ****************************************************************************** +Elite A/S Challenger (EAS) +This was out in 1982. 2 program updates were released in 1983 and 1984, +named Budapest and Glasgow, places where Fidelity won chess computer matches. +--------------------------------- + +8*8 magnet sensors, 11 buttons, 8*(8+1) LEDs + 4*7seg LEDs +R65C02P4 CPU, default frequency 3MHz* +4KB RAM (2*HM6116), 24KB ROM +TSI S14001A + speech ROM +I/O with 8255 PPI and bunch of TTL +module slot and printer port +PCB label 510-1071A01 + +*It was advertised as 3.2, 3.6, or 4MHz, with unofficial modifications up to 8MHz. +PCB photos show only a 3MHz XTAL. + + +****************************************************************************** + + Sensory Chess Challenger "9" (SC9) 2 versions were available, the newer version was 2MHz and included the Budapest program. --------------------------------- @@ -295,15 +332,19 @@ Z80 D6 to W: (model 6092, tied to VCC otherwise) #include "cpu/m6502/r65c02.h" #include "cpu/m6502/m65sc02.h" #include "machine/6821pia.h" +#include "machine/i8255.h" +#include "machine/nvram.h" #include "includes/fidelz80.h" // internal artwork #include "fidel_csc.lh" // clickable +#include "fidel_eas.lh" // clickable #include "fidel_fev.lh" // clickable #include "fidel_rsc_v2.lh" // clickable #include "fidel_sc9.lh" // clickable #include "fidel_sc12.lh" // clickable +#include "fidel_su9.lh" // clickable class fidel6502_state : public fidelz80base_state @@ -311,10 +352,12 @@ class fidel6502_state : public fidelz80base_state public: fidel6502_state(const machine_config &mconfig, device_type type, const char *tag) : fidelz80base_state(mconfig, type, tag), + m_ppi8255(*this, "ppi8255"), m_cart(*this, "cartslot") { } // devices/pointers + optional_device<i8255_device> m_ppi8255; optional_device<generic_slot_device> m_cart; TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); } @@ -335,6 +378,14 @@ public: DECLARE_READ_LINE_MEMBER(csc_pia1_ca1_r); DECLARE_READ_LINE_MEMBER(csc_pia1_cb1_r); + // EAS + DECLARE_WRITE8_MEMBER(eas_segment_w); + DECLARE_WRITE8_MEMBER(eas_led_w); + DECLARE_READ8_MEMBER(eas_input_r); + DECLARE_WRITE8_MEMBER(eas_ppi_porta_w); + DECLARE_READ8_MEMBER(eas_ppi_portb_r); + DECLARE_WRITE8_MEMBER(eas_ppi_portc_w); + // SC9 void sc9_prepare_display(); DECLARE_WRITE8_MEMBER(sc9_control_w); @@ -488,6 +539,58 @@ WRITE_LINE_MEMBER(fidel6502_state::csc_pia1_ca2_w) /****************************************************************************** + EAS +******************************************************************************/ + +// TTL/generic + +WRITE8_MEMBER(fidel6502_state::eas_segment_w) +{ + // a0-a2,d7: digit segment + m_7seg_data = (data & 0x80) >> offset; + m_7seg_data = BITSWAP8(m_7seg_data,7,6,4,5,0,2,1,3); + csc_prepare_display(); +} + +WRITE8_MEMBER(fidel6502_state::eas_led_w) +{ + // a0-a2,d0: led data + m_led_data = (data & 1) << offset; + csc_prepare_display(); +} + +READ8_MEMBER(fidel6502_state::eas_input_r) +{ + // multiplexed inputs + return read_inputs(9); +} + + +// 8255 PPI + +WRITE8_MEMBER(fidel6502_state::eas_ppi_porta_w) +{ + // speech chip? +} + +WRITE8_MEMBER(fidel6502_state::eas_ppi_portc_w) +{ + // d0-d3: input/led mux + m_led_select = data & 0xf; + csc_prepare_display(); + + // other: ? +} + +READ8_MEMBER(fidel6502_state::eas_ppi_portb_r) +{ + // ? + return 0; +} + + + +/****************************************************************************** SC9 ******************************************************************************/ @@ -676,6 +779,34 @@ static ADDRESS_MAP_START( csc_map, AS_PROGRAM, 8, fidel6502_state ) ADDRESS_MAP_END +// EAS + +static ADDRESS_MAP_START( eas_map, AS_PROGRAM, 8, fidel6502_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("nvram") + AM_RANGE(0x2000, 0x5fff) AM_READ(sc12_cart_r) + AM_RANGE(0x7000, 0x7003) AM_DEVREADWRITE("ppi8255", i8255_device, read, write) + AM_RANGE(0x7020, 0x7027) AM_WRITE(eas_segment_w) AM_READNOP + AM_RANGE(0x7030, 0x7037) AM_WRITE(eas_led_w) AM_READNOP + AM_RANGE(0x7050, 0x7050) AM_READ(eas_input_r) + AM_RANGE(0x8000, 0x9fff) AM_ROM + AM_RANGE(0xc000, 0xffff) AM_ROM +ADDRESS_MAP_END + + +// SU9 + +static ADDRESS_MAP_START( su9_map, AS_PROGRAM, 8, fidel6502_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x0fff) AM_RAM + AM_RANGE(0x1000, 0x1003) AM_DEVREADWRITE("pia0", pia6821_device, read, write) + AM_RANGE(0x1800, 0x1803) AM_DEVREADWRITE("pia1", pia6821_device, read, write) + AM_RANGE(0x2000, 0x3fff) AM_ROM + AM_RANGE(0xa000, 0xa7ff) AM_ROM + AM_RANGE(0xc000, 0xffff) AM_ROM +ADDRESS_MAP_END + + // SC9 static ADDRESS_MAP_START( sc9_map, AS_PROGRAM, 8, fidel6502_state ) @@ -875,6 +1006,18 @@ static INPUT_PORTS_START( csc ) PORT_CONFSETTING( 0x02, DEF_STR( On ) ) INPUT_PORTS_END +static INPUT_PORTS_START( su9 ) + PORT_INCLUDE( csc ) + + PORT_MODIFY("IN.8") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("RV / Pawn") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("DM / Knight") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("TB / Bishop") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("LV / Rook") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("PV / Queen") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB / King") +INPUT_PORTS_END + static INPUT_PORTS_START( cscg ) PORT_INCLUDE( csc ) @@ -884,6 +1027,15 @@ static INPUT_PORTS_START( cscg ) PORT_CONFSETTING( 0x01, "Other" ) INPUT_PORTS_END +static INPUT_PORTS_START( su9g ) + PORT_INCLUDE( su9 ) + + PORT_MODIFY("IN.9") + PORT_CONFNAME( 0x01, 0x01, "Language" ) + PORT_CONFSETTING( 0x00, "English" ) + PORT_CONFSETTING( 0x01, "Other" ) +INPUT_PORTS_END + static INPUT_PORTS_START( rsc ) PORT_START("IN.0") @@ -978,6 +1130,99 @@ static INPUT_PORTS_START( rsc ) INPUT_PORTS_END +static INPUT_PORTS_START( eas ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a8") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a7") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a6") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a5") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a4") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a3") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a2") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a1") + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b8") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b7") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b6") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b5") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b4") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b3") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b2") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b1") + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c8") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c7") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c6") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c5") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c4") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c3") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c2") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c1") + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d8") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d7") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d6") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d5") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d4") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d3") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d2") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d1") + + PORT_START("IN.4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e8") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e7") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e6") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e5") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e4") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e3") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e2") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e1") + + PORT_START("IN.5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f8") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f7") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f6") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f5") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f4") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f3") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f2") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f1") + + PORT_START("IN.6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g8") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g7") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g6") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g5") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g4") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g3") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g2") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g1") + + PORT_START("IN.7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h8") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h7") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h6") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h5") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h4") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h3") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h2") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h1") + + PORT_START("IN.8") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) +INPUT_PORTS_END + + /****************************************************************************** Machine Drivers @@ -1043,6 +1288,49 @@ static MACHINE_CONFIG_START( csc, fidel6502_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END +static MACHINE_CONFIG_START( eas, fidel6502_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", R65C02, XTAL_3MHz) + MCFG_CPU_PROGRAM_MAP(eas_map) + MCFG_CPU_PERIODIC_INT_DRIVER(fidelz80base_state, irq0_line_hold, 600) // guessed + + MCFG_DEVICE_ADD("ppi8255", I8255, 0) // port B: input, port A & C: output + MCFG_I8255_OUT_PORTA_CB(WRITE8(fidel6502_state, eas_ppi_porta_w)) + MCFG_I8255_IN_PORTB_CB(READ8(fidel6502_state, eas_ppi_portb_r)) + MCFG_I8255_OUT_PORTC_CB(WRITE8(fidel6502_state, eas_ppi_portc_w)) + + MCFG_NVRAM_ADD_1FILL("nvram") + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_fidel_eas) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speech", S14001A, 25000) // R/C circuit, around 25khz + MCFG_S14001A_EXT_READ_HANDLER(READ8(fidel6502_state, csc_speech_r)) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) + + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + + /* cartridge */ + MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "fidel_scc") + MCFG_GENERIC_EXTENSIONS("bin,dat") + MCFG_GENERIC_LOAD(fidelz80base_state, scc_cartridge) + MCFG_SOFTWARE_LIST_ADD("cart_list", "fidel_scc") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( su9, csc ) + + /* basic machine hardware */ + MCFG_CPU_REPLACE("maincpu", M6502, 2000000) // same as csc? + MCFG_CPU_PROGRAM_MAP(su9_map) + MCFG_CPU_PERIODIC_INT_DRIVER(fidelz80base_state, irq0_line_hold, 600) // guessed + + MCFG_DEFAULT_LAYOUT(layout_fidel_su9) +MACHINE_CONFIG_END + static MACHINE_CONFIG_START( sc9, fidel6502_state ) /* basic machine hardware */ @@ -1177,6 +1465,84 @@ ROM_START( cscfr ) ROM_END +ROM_START( feasbu ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("eli_bu3.bin", 0x8000, 0x2000, CRC(93dcc23b) SHA1(2eb8c5a85e566948bc256d6b1804694e6b0ffa6f) ) + ROM_LOAD("eli_bu1.bin", 0xc000, 0x2000, CRC(859d69f1) SHA1(a8b057683369e2387f22fc7e916b6f3c75d44b21) ) + ROM_LOAD("eli_bu2.bin", 0xe000, 0x2000, CRC(571a33a7) SHA1(43b110cf0918caf16643178f401e58b2dc73894f) ) + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("vcc-english.bin", 0x0000, 0x1000, BAD_DUMP CRC(f35784f9) SHA1(348e54a7fa1e8091f89ac656b4da22f28ca2e44d) ) // taken from csc, assume correct + ROM_RELOAD( 0x1000, 0x1000) +ROM_END + +ROM_START( feasgla ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("eli_gla3.bin", 0x8000, 0x0800, CRC(2fdddb4f) SHA1(6da0a328a45462f285ae6a0756f97c5a43148f97) ) + ROM_CONTINUE( 0x9000, 0x0800 ) + ROM_CONTINUE( 0x8800, 0x0800 ) + ROM_CONTINUE( 0x9800, 0x0800 ) + ROM_LOAD("eli_gla1.bin", 0xc000, 0x0800, CRC(f094e625) SHA1(fef84c6a3da504aac15988ec9af94417e5fedfbd) ) + ROM_CONTINUE( 0xd000, 0x0800 ) + ROM_CONTINUE( 0xc800, 0x0800 ) + ROM_CONTINUE( 0xd800, 0x0800 ) + ROM_LOAD("eli_gla2.bin", 0xe000, 0x0800, CRC(5f6845d1) SHA1(684eb16faf36a49560e5a73b55fd0022dc090e35) ) + ROM_CONTINUE( 0xf000, 0x0800 ) + ROM_CONTINUE( 0xe800, 0x0800 ) + ROM_CONTINUE( 0xf800, 0x0800 ) + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("vcc-english.bin", 0x0000, 0x1000, BAD_DUMP CRC(f35784f9) SHA1(348e54a7fa1e8091f89ac656b4da22f28ca2e44d) ) // taken from csc, assume correct + ROM_RELOAD( 0x1000, 0x1000) +ROM_END + + +ROM_START( super9cc ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("cb9.bin", 0x2000, 0x2000, CRC(421147e8) SHA1(ccf62f6f218e8992baf30973fe41b35e14a1cc1a) ) + ROM_LOAD("101-1024b03", 0xa000, 0x0800, CRC(e8c97455) SHA1(ed2958fc5474253ee8c2eaf27fc64226e12f80ea) ) + ROM_LOAD("101-1024b02", 0xc000, 0x2000, CRC(95004699) SHA1(ea79f43da73267344545df8ad61730f613876c2e) ) + ROM_LOAD("101-1024c01", 0xe000, 0x2000, CRC(03904e86) SHA1(bfa0dd9d8541e3ec359a247a3eba543501f727bc) ) + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("vcc-english.bin", 0x0000, 0x1000, BAD_DUMP CRC(f35784f9) SHA1(348e54a7fa1e8091f89ac656b4da22f28ca2e44d) ) // taken from csc, assume correct + ROM_RELOAD( 0x1000, 0x1000) +ROM_END + +ROM_START( super9ccsp ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("cb9.bin", 0x2000, 0x2000, CRC(421147e8) SHA1(ccf62f6f218e8992baf30973fe41b35e14a1cc1a) ) + ROM_LOAD("101-1024b03", 0xa000, 0x0800, CRC(e8c97455) SHA1(ed2958fc5474253ee8c2eaf27fc64226e12f80ea) ) + ROM_LOAD("101-1024b02", 0xc000, 0x2000, CRC(95004699) SHA1(ea79f43da73267344545df8ad61730f613876c2e) ) + ROM_LOAD("101-1024c01", 0xe000, 0x2000, CRC(03904e86) SHA1(bfa0dd9d8541e3ec359a247a3eba543501f727bc) ) + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("vcc-spanish.bin", 0x0000, 0x2000, BAD_DUMP CRC(8766e128) SHA1(78c7413bf240159720b131ab70bfbdf4e86eb1e9) ) // taken from vcc/fexcelv, assume correct +ROM_END + +ROM_START( super9ccg ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("cb9.bin", 0x2000, 0x2000, CRC(421147e8) SHA1(ccf62f6f218e8992baf30973fe41b35e14a1cc1a) ) + ROM_LOAD("101-1024b03", 0xa000, 0x0800, CRC(e8c97455) SHA1(ed2958fc5474253ee8c2eaf27fc64226e12f80ea) ) + ROM_LOAD("101-1024b02", 0xc000, 0x2000, CRC(95004699) SHA1(ea79f43da73267344545df8ad61730f613876c2e) ) + ROM_LOAD("101-1024c01", 0xe000, 0x2000, CRC(03904e86) SHA1(bfa0dd9d8541e3ec359a247a3eba543501f727bc) ) + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("vcc-german.bin", 0x0000, 0x2000, BAD_DUMP CRC(6c85e310) SHA1(20d1d6543c1e6a1f04184a2df2a468f33faec3ff) ) // taken from fexcelv, assume correct +ROM_END + +ROM_START( super9ccfr ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("cb9.bin", 0x2000, 0x2000, CRC(421147e8) SHA1(ccf62f6f218e8992baf30973fe41b35e14a1cc1a) ) + ROM_LOAD("101-1024b03", 0xa000, 0x0800, CRC(e8c97455) SHA1(ed2958fc5474253ee8c2eaf27fc64226e12f80ea) ) + ROM_LOAD("101-1024b02", 0xc000, 0x2000, CRC(95004699) SHA1(ea79f43da73267344545df8ad61730f613876c2e) ) + ROM_LOAD("101-1024c01", 0xe000, 0x2000, CRC(03904e86) SHA1(bfa0dd9d8541e3ec359a247a3eba543501f727bc) ) + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("vcc-french.bin", 0x0000, 0x2000, BAD_DUMP CRC(fe8c5c18) SHA1(2b64279ab3747ee81c86963c13e78321c6cfa3a3) ) // taken from fexcelv, assume correct +ROM_END + + ROM_START( fscc9 ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("b30", 0xc000, 0x2000, CRC(b845c458) SHA1(d3fda65dbd9fae44fa4b93f8207839d8fa0c367a) ) // HN48364P @@ -1211,16 +1577,24 @@ ROM_END Drivers ******************************************************************************/ -/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ -CONS( 1981, reversic, 0, 0, rsc, rsc, driver_device, 0, "Fidelity Electronics", "Reversi Sensory Challenger (1981 version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ +CONS( 1981, reversic, 0, 0, rsc, rsc, driver_device, 0, "Fidelity Electronics", "Reversi Sensory Challenger (green version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +CONS( 1981, csc, 0, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1981, cscsp, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1981, cscg, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1981, cscfr, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +CONS( 1983, feasbu, 0, 0, eas, eas, driver_device, 0, "Fidelity Electronics", "Elite A/S Challenger (Budapest program, English)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1984, feasgla, feasbu, 0, eas, eas, driver_device, 0, "Fidelity Electronics", "Elite A/S Challenger (Glasgow program, English)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1981, csc, 0, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1981, cscsp, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1981, cscg, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1981, cscfr, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1983, super9cc, 0, 0, su9, su9, driver_device, 0, "Fidelity Electronics", "Super 9 Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1983, super9ccsp, super9cc, 0, su9, su9g, driver_device, 0, "Fidelity Electronics", "Super 9 Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1983, super9ccg, super9cc, 0, su9, su9g, driver_device, 0, "Fidelity Electronics", "Super 9 Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1983, super9ccfr, super9cc, 0, su9, su9g, driver_device, 0, "Fidelity Electronics", "Super 9 Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1982, fscc9, 0, 0, sc9, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 9", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1982, fscc9, 0, 0, sc9, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 9", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, fexcel, 0, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "Excellence (model 6080/6093)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, fexcelv, 0, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, fexcel, 0, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "Excellence (model 6080/6093)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, fexcelv, fexcel, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/fidel68k.cpp b/src/mame/drivers/fidel68k.cpp index 4d1c17e9c95..5af2fb70d28 100644 --- a/src/mame/drivers/fidel68k.cpp +++ b/src/mame/drivers/fidel68k.cpp @@ -417,6 +417,14 @@ static MACHINE_CONFIG_DERIVED( eagv7, eag ) MCFG_CPU_PERIODIC_INT_DRIVER(fidel68k_state, irq2_line_hold, 600) // complete guess MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( eagv9, eag ) + + /* basic machine hardware */ + MCFG_CPU_REPLACE("maincpu", M68030, XTAL_32MHz) + MCFG_CPU_PROGRAM_MAP(eagv7_map) + MCFG_CPU_PERIODIC_INT_DRIVER(fidel68k_state, irq2_line_hold, 600) // complete guess +MACHINE_CONFIG_END + static MACHINE_CONFIG_DERIVED( eagv10, eag ) /* basic machine hardware */ @@ -453,6 +461,13 @@ ROM_START( feagv7 ) ROM_END +ROM_START( feagv9 ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD16_BYTE("eag-v9b", 0x00000, 0x10000, CRC(60523199) SHA1(a308eb6b782732af1ab2fd0ed8b046de7a8dd24b) ) + ROM_LOAD16_BYTE("eag-v9a", 0x00001, 0x10000, CRC(255c63c0) SHA1(8aa0397bdb3731002f5b066cd04ec62531267e22) ) +ROM_END + + ROM_START( feagv11 ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD32_BYTE("16", 0x00000, 0x08000, CRC(8375d61f) SHA1(e042f6f01480c59ee09a458cf34f135664479824) ) // 27c256 @@ -471,6 +486,7 @@ ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ CONS( 1989, feagv2, 0, 0, eag, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1990, feagv7, 0, 0, eagv7, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6117-7)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1990, feagv10, 0, 0, eagv10, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 2002, feagv11, feagv10, 0, eagv11, eag, driver_device, 0, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, feagv7, feagv2, 0, eagv7, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6117-7)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, feagv9, feagv2, 0, eagv9, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, feagv10, feagv2, 0, eagv10, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 2002, feagv11, feagv2, 0, eagv11, eag, driver_device, 0, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/firefox.cpp b/src/mame/drivers/firefox.cpp index af6d7faac3e..a2a4a439390 100644 --- a/src/mame/drivers/firefox.cpp +++ b/src/mame/drivers/firefox.cpp @@ -574,7 +574,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, firefox_state ) AM_RANGE(0x0000, 0x07ff) AM_RAM AM_RANGE(0x0800, 0x087f) AM_MIRROR(0x0700) AM_RAM /* RIOT ram */ - AM_RANGE(0x0880, 0x089f) AM_MIRROR(0x07e0) AM_DEVREADWRITE("riot", riot6532_device, read, write) + AM_RANGE(0x0880, 0x089f) AM_MIRROR(0x0760) AM_DEVREADWRITE("riot", riot6532_device, read, write) AM_RANGE(0x1000, 0x1000) AM_READ(main_to_sound_r) AM_RANGE(0x1800, 0x1800) AM_WRITE(sound_to_main_w) AM_RANGE(0x2000, 0x200f) AM_DEVREADWRITE("pokey1", pokey_device, read, write) diff --git a/src/mame/drivers/fitfight.cpp b/src/mame/drivers/fitfight.cpp index 97ba31d9a7b..d0d35212f14 100644 --- a/src/mame/drivers/fitfight.cpp +++ b/src/mame/drivers/fitfight.cpp @@ -1012,7 +1012,7 @@ DRIVER_INIT_MEMBER(fitfight_state,bbprot) DRIVER_INIT_MEMBER(fitfight_state,hotmindff) { - m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, 0, 0, read16_delegate(FUNC(fitfight_state::hotmindff_unk_r),this)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(fitfight_state::hotmindff_unk_r),this)); DRIVER_INIT_CALL(fitfight); } diff --git a/src/mame/drivers/flstory.cpp b/src/mame/drivers/flstory.cpp index 237ac48c0f6..1afa2a7ac5e 100644 --- a/src/mame/drivers/flstory.cpp +++ b/src/mame/drivers/flstory.cpp @@ -45,7 +45,7 @@ TIMER_CALLBACK_MEMBER(flstory_state::nmi_callback) WRITE8_MEMBER(flstory_state::sound_command_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(flstory_state::nmi_callback),this), data); } @@ -433,7 +433,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, flstory_state ) AM_RANGE(0xca00, 0xca0d) AM_DEVWRITE("msm", msm5232_device, write) AM_RANGE(0xcc00, 0xcc00) AM_WRITE(sound_control_0_w) AM_RANGE(0xce00, 0xce00) AM_WRITE(sound_control_1_w) - AM_RANGE(0xd800, 0xd800) AM_READ(soundlatch_byte_r) AM_WRITE(to_main_w) + AM_RANGE(0xd800, 0xd800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(to_main_w) AM_RANGE(0xda00, 0xda00) AM_READNOP AM_WRITE(nmi_enable_w) /* unknown read*/ AM_RANGE(0xdc00, 0xdc00) AM_WRITE(nmi_disable_w) AM_RANGE(0xde00, 0xde00) AM_READNOP AM_DEVWRITE("dac", dac_device, write_unsigned8) /* signed 8-bit DAC & unknown read */ @@ -1078,6 +1078,8 @@ static MACHINE_CONFIG_START( flstory, flstory_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, XTAL_8MHz/4) /* verified on pcb */ MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(flstory_state, sound_control_2_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(flstory_state, sound_control_3_w)) @@ -1138,6 +1140,8 @@ static MACHINE_CONFIG_START( onna34ro, flstory_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, 8000000/4) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(flstory_state, sound_control_2_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(flstory_state, sound_control_3_w)) @@ -1198,6 +1202,8 @@ static MACHINE_CONFIG_START( victnine, flstory_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, 8000000/4) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(flstory_state, sound_control_2_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(flstory_state, sound_control_3_w)) @@ -1264,6 +1270,8 @@ static MACHINE_CONFIG_START( rumba, flstory_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, XTAL_8MHz/4) /* verified on pcb */ MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(flstory_state, sound_control_2_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(flstory_state, sound_control_3_w)) diff --git a/src/mame/drivers/fmtowns.cpp b/src/mame/drivers/fmtowns.cpp index 39d303765bb..90b2dec9133 100644 --- a/src/mame/drivers/fmtowns.cpp +++ b/src/mame/drivers/fmtowns.cpp @@ -2175,7 +2175,6 @@ static ADDRESS_MAP_START(marty_mem, AS_PROGRAM, 16, towns_state) AM_RANGE(0x00f00000, 0x00f7ffff) AM_ROM AM_REGION("user",0x180000) // FONT AM_RANGE(0x00f80000, 0x00f8ffff) AM_DEVREADWRITE8("pcm", rf5c68_device, rf5c68_mem_r, rf5c68_mem_w, 0xffff) // WAVE RAM AM_RANGE(0x00fc0000, 0x00ffffff) AM_ROM AM_REGION("user",0x200000) // SYSTEM ROM - AM_RANGE(0xfffc0000, 0xffffffff) AM_ROM AM_REGION("user",0x200000) // SYSTEM ROM ADDRESS_MAP_END static ADDRESS_MAP_START(ux_mem, AS_PROGRAM, 16, towns_state) @@ -2200,7 +2199,6 @@ static ADDRESS_MAP_START(ux_mem, AS_PROGRAM, 16, towns_state) AM_RANGE(0x00f00000, 0x00f7ffff) AM_ROM AM_REGION("user",0x180000) // FONT AM_RANGE(0x00f80000, 0x00f8ffff) AM_DEVREADWRITE8("pcm", rf5c68_device, rf5c68_mem_r, rf5c68_mem_w, 0xffff) // WAVE RAM AM_RANGE(0x00fc0000, 0x00ffffff) AM_ROM AM_REGION("user",0x200000) // SYSTEM ROM - AM_RANGE(0xfffc0000, 0xffffffff) AM_ROM AM_REGION("user",0x200000) // SYSTEM ROM ADDRESS_MAP_END static ADDRESS_MAP_START( towns_io , AS_IO, 32, towns_state) @@ -2584,7 +2582,7 @@ void towns_state::driver_start() // CD-ROM init m_towns_cd.read_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(towns_state::towns_cdrom_read_byte),this), (void*)machine().device("dma_1")); - m_maincpu->space(AS_PROGRAM).install_ram(0x100000,m_ram->size()-1,0xffffffff,0,nullptr); + m_maincpu->space(AS_PROGRAM).install_ram(0x100000,m_ram->size()-1,nullptr); } void marty_state::driver_start() @@ -2731,6 +2729,7 @@ static MACHINE_CONFIG_FRAGMENT( towns_base ) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(towns_state,mb8877a_drq_w)) MCFG_FLOPPY_DRIVE_ADD("fdc:0", towns_floppies, "35hd", towns_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", towns_floppies, "35hd", towns_state::floppy_formats) + MCFG_SOFTWARE_LIST_ADD("fd_list","fmtowns_flop") MCFG_CDROM_ADD("cdrom") MCFG_CDROM_INTERFACE("fmt_cdrom") diff --git a/src/mame/drivers/force68k.cpp b/src/mame/drivers/force68k.cpp index a4ba796836e..6a7cc1a172a 100644 --- a/src/mame/drivers/force68k.cpp +++ b/src/mame/drivers/force68k.cpp @@ -470,8 +470,8 @@ MCFG_DEVICE_ADD ("rtc", MM58167, XTAL_32_768kHz) /* PIT Parallel Interface and Timer device, assuming strapped for on board clock */ MCFG_DEVICE_ADD ("pit", PIT68230, XTAL_16MHz / 2) -MCFG_PIT68230_PA_OUTPUT_CALLBACK (DEVWRITE8 ("cent_data_out", output_latch_device, write)) -MCFG_PIT68230_H2_CALLBACK (DEVWRITELINE ("centronics", centronics_device, write_strobe)) +MCFG_PIT68230_PA_OUTPUT_CB (DEVWRITE8 ("cent_data_out", output_latch_device, write)) +MCFG_PIT68230_H2_CB (DEVWRITELINE ("centronics", centronics_device, write_strobe)) // centronics MCFG_CENTRONICS_ADD ("centronics", centronics_devices, "printer") diff --git a/src/mame/drivers/fromanc2.cpp b/src/mame/drivers/fromanc2.cpp index d098319d184..79bf11e54d5 100644 --- a/src/mame/drivers/fromanc2.cpp +++ b/src/mame/drivers/fromanc2.cpp @@ -21,7 +21,6 @@ #include "emu.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" -#include "machine/eepromser.h" #include "sound/2610intf.h" #include "includes/fromanc2.h" #include "rendlay.h" @@ -41,8 +40,8 @@ INTERRUPT_GEN_MEMBER(fromanc2_state::fromanc2_interrupt) WRITE16_MEMBER(fromanc2_state::fromanc2_sndcmd_w) { - soundlatch_byte_w(space, offset, (data >> 8) & 0xff); // 1P (LEFT) - soundlatch2_byte_w(space, offset, data & 0xff); // 2P (RIGHT) + m_soundlatch->write(space, offset, (data >> 8) & 0xff); // 1P (LEFT) + m_soundlatch2->write(space, offset, data & 0xff); // 2P (RIGHT) m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); m_sndcpu_nmi_flag = 0; @@ -283,8 +282,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( fromanc2_sound_io_map, AS_IO, 8, fromanc2_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r) AM_WRITENOP // snd cmd (1P) / ? - AM_RANGE(0x04, 0x04) AM_READ(soundlatch2_byte_r) // snd cmd (2P) + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITENOP // snd cmd (1P) / ? + AM_RANGE(0x04, 0x04) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // snd cmd (2P) AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) AM_RANGE(0x0c, 0x0c) AM_READ(fromanc2_sndcpu_nmi_clr) ADDRESS_MAP_END @@ -461,18 +460,6 @@ GFXDECODE_END /************************************* * - * Sound interface - * - *************************************/ - -WRITE_LINE_MEMBER(fromanc2_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - - -/************************************* - * * Machine driver * *************************************/ @@ -561,8 +548,11 @@ static MACHINE_CONFIG_START( fromanc2, fromanc2_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(fromanc2_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) MCFG_SOUND_ROUTE(1, "mono", 0.75) MCFG_SOUND_ROUTE(2, "mono", 0.75) @@ -618,8 +608,11 @@ static MACHINE_CONFIG_START( fromancr, fromanc2_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(fromanc2_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) MCFG_SOUND_ROUTE(1, "mono", 0.75) MCFG_SOUND_ROUTE(2, "mono", 0.75) @@ -671,8 +664,11 @@ static MACHINE_CONFIG_START( fromanc4, fromanc2_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(fromanc2_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) MCFG_SOUND_ROUTE(1, "mono", 0.75) MCFG_SOUND_ROUTE(2, "mono", 0.75) diff --git a/src/mame/drivers/funworld.cpp b/src/mame/drivers/funworld.cpp index d45c615fd52..38479635cb0 100644 --- a/src/mame/drivers/funworld.cpp +++ b/src/mame/drivers/funworld.cpp @@ -4705,6 +4705,28 @@ ROM_END /* + Royal Card (Austrian, set 8) + Year: 1991. + Manufacturer: TAB Austria. + +*/ +ROM_START( royalcrdh ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "145-3.bin", 0x8000, 0x8000, CRC(c4da3e95) SHA1(fb7c3652f783a3040e6e08616df102efcb0b4134) ) + + ROM_REGION( 0x10000, "gfx1", 0 ) + ROM_LOAD( "145-2.bin", 0x0000, 0x8000, CRC(85e77661) SHA1(7d7a765c1bfcfeb9eb91d2519b22d734f20eab24) ) + ROM_LOAD( "145-1.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) ) + + ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */ + ROM_LOAD( "royalcrdh_nvram.bin", 0x0000, 0x0800, CRC(7757d73a) SHA1(997bfbd847d1d21777694331be92a1a5e79e4faf) ) + + ROM_REGION( 0x0200, "proms", 0 ) + ROM_LOAD( "prom.bin", 0x0000, 0x0200, CRC(7e5839e6) SHA1(5e8401d2b236f73cc017a73a369b3b3b821a1deb) ) // borrowed from parent set. +ROM_END + + +/* Royal Card (French) Year: 1991 Manufacturer: TAB Austria @@ -6545,7 +6567,8 @@ GAMEL( 1991, royalcrde, royalcrd, royalcd1, royalcrd, driver_device, 0, GAMEL( 1991, royalcrdt, royalcrd, royalcd1, royalcrd, driver_device, 0, ROT0, "TAB Austria", "Royal Card (TAB original)", 0, layout_jollycrd ) GAME( 1991, royalcrdf, royalcrd, royalcd1, royalcrd, funworld_state, royalcdc, ROT0, "Evona Electronic","Royal Card (Slovak, encrypted)", MACHINE_NOT_WORKING ) GAMEL( 1990, royalcrdg, royalcrd, royalcd1, royalcrd, driver_device, 0, ROT0, "bootleg", "Royal Card (Austrian, set 7, CMC C1030 HW)", 0, layout_jollycrd ) // big CPLD -GAMEL( 1991, royalcdfr, royalcrd, royalcd1, royalcrd, driver_device, 0, ROT0, "TAB Austria", "Royal Card (French)", 0, layout_jollycrd ) // big CPLD +GAMEL( 1991, royalcrdh, royalcrd, royalcd2, royalcrd, driver_device, 0, ROT0, "TAB Austria", "Royal Card (Austrian, set 8)", 0 , layout_jollycrd ) +GAMEL( 1991, royalcdfr, royalcrd, royalcd1, royalcrd, driver_device, 0, ROT0, "TAB Austria", "Royal Card (French)", 0, layout_jollycrd ) GAME( 1993, royalcrdp, royalcrd, cuoreuno, royalcrd, driver_device, 0, ROT0, "Digital Dreams", "Royal Card v2.0 Professional", 0 ) GAMEL( 199?, witchryl, 0, witchryl, witchryl, driver_device, 0, ROT0, "Video Klein", "Witch Royal (Export version 2.1)", 0, layout_jollycrd ) diff --git a/src/mame/drivers/gaelco3d.cpp b/src/mame/drivers/gaelco3d.cpp index d7b3652da95..5c08a3d8ffd 100644 --- a/src/mame/drivers/gaelco3d.cpp +++ b/src/mame/drivers/gaelco3d.cpp @@ -486,7 +486,7 @@ WRITE16_MEMBER(gaelco3d_state::tms_reset_w) /* it does not ever appear to be touched after that */ if (LOG) logerror("%06X:tms_reset_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); - m_tms->set_input_line(INPUT_LINE_RESET, (data == 0xffff) ? CLEAR_LINE : ASSERT_LINE); + m_tms->set_input_line(INPUT_LINE_RESET, (data == 0xffff) ? CLEAR_LINE : ASSERT_LINE); } diff --git a/src/mame/drivers/gaiden.cpp b/src/mame/drivers/gaiden.cpp index ac47862d22a..39a20fe191b 100644 --- a/src/mame/drivers/gaiden.cpp +++ b/src/mame/drivers/gaiden.cpp @@ -142,9 +142,9 @@ Notes: WRITE16_MEMBER(gaiden_state::gaiden_sound_command_w) { if (ACCESSING_BITS_0_7) - soundlatch_byte_w(space, 0, data & 0xff); /* Ninja Gaiden */ + m_soundlatch->write(space, 0, data & 0xff); /* Ninja Gaiden */ if (ACCESSING_BITS_8_15) - soundlatch_byte_w(space, 0, data >> 8); /* Tecmo Knight */ + m_soundlatch->write(space, 0, data >> 8); /* Tecmo Knight */ m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -152,7 +152,7 @@ WRITE16_MEMBER(gaiden_state::drgnbowl_sound_command_w) { if (ACCESSING_BITS_8_15) { - soundlatch_byte_w(space, 0, data >> 8); + m_soundlatch->write(space, 0, data >> 8); m_audiocpu->set_input_line(0, HOLD_LINE); } } @@ -434,7 +434,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, gaiden_state ) AM_RANGE(0xf810, 0xf811) AM_DEVWRITE("ym1", ym2203_device, write) AM_RANGE(0xf820, 0xf821) AM_DEVWRITE("ym2", ym2203_device, write) AM_RANGE(0xfc00, 0xfc00) AM_NOP /* ?? */ - AM_RANGE(0xfc20, 0xfc20) AM_READ(soundlatch_byte_r) + AM_RANGE(0xfc20, 0xfc20) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( drgnbowl_sound_map, AS_PROGRAM, 8, gaiden_state ) @@ -446,7 +446,7 @@ static ADDRESS_MAP_START( drgnbowl_sound_port_map, AS_IO, 8, gaiden_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc0, 0xc0) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static INPUT_PORTS_START( common ) @@ -738,11 +738,6 @@ static GFXDECODE_START( drgnbowl ) GFXDECODE_ENTRY( "gfx3", 0, drgnbowl_spritelayout, 0x100, 16 ) /* sprites 16x16 */ GFXDECODE_END -/* handler called by the 2203 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(gaiden_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} static MACHINE_CONFIG_START( shadoww, gaiden_state ) @@ -788,8 +783,10 @@ static MACHINE_CONFIG_START( shadoww, gaiden_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM2203, 4000000) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(gaiden_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.15) MCFG_SOUND_ROUTE(1, "mono", 0.15) MCFG_SOUND_ROUTE(2, "mono", 0.15) @@ -848,6 +845,8 @@ static MACHINE_CONFIG_START( drgnbowl, gaiden_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", 4000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) @@ -907,7 +906,7 @@ static ADDRESS_MAP_START( mastninj_sound_map, AS_PROGRAM, 8, gaiden_state ) AM_RANGE(0xc400, 0xc401) AM_DEVWRITE("ym1", ym2203_device, write) AM_RANGE(0xc800, 0xc801) AM_DEVWRITE("ym2", ym2203_device, write) // AM_RANGE(0xfc00, 0xfc00) AM_NOP /* ?? */ -// AM_RANGE(0xfc20, 0xfc20) AM_READ(soundlatch_byte_r) +// AM_RANGE(0xfc20, 0xfc20) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( mastninj_map, AS_PROGRAM, 16, gaiden_state ) @@ -963,15 +962,17 @@ static MACHINE_CONFIG_START( mastninj, gaiden_state ) MCFG_PALETTE_ADD("palette", 4096) MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR) - /* NOT using Tecmo Sprite device - signifcant changes, maybe a clone of something else */ + /* NOT using Tecmo Sprite device - significant changes, maybe a clone of something else */ MCFG_VIDEO_START_OVERRIDE(gaiden_state,drgnbowl) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM2203, 4000000) /* ?? MHz */ - MCFG_YM2203_IRQ_HANDLER(WRITELINE(gaiden_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.15) MCFG_SOUND_ROUTE(1, "mono", 0.15) MCFG_SOUND_ROUTE(2, "mono", 0.15) diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp index 48e8b85747c..1d6390e9169 100644 --- a/src/mame/drivers/galaxian.cpp +++ b/src/mame/drivers/galaxian.cpp @@ -1871,8 +1871,8 @@ static ADDRESS_MAP_START( turtles_map, AS_PROGRAM, 8, galaxian_state ) AM_RANGE(0xa030, 0xa030) AM_MIRROR(0x47c7) AM_WRITE(coin_count_0_w) AM_RANGE(0xa038, 0xa038) AM_MIRROR(0x47c7) AM_WRITE(coin_count_1_w) AM_RANGE(0xa800, 0xa800) AM_MIRROR(0x47ff) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) - AM_RANGE(0xb000, 0xb03f) AM_MIRROR(0x47cf) AM_READWRITE(turtles_ppi8255_0_r, turtles_ppi8255_0_w) - AM_RANGE(0xb800, 0xb83f) AM_MIRROR(0x47cf) AM_READWRITE(turtles_ppi8255_1_r, turtles_ppi8255_1_w) + AM_RANGE(0xb000, 0xb03f) AM_MIRROR(0x47c0) AM_READWRITE(turtles_ppi8255_0_r, turtles_ppi8255_0_w) + AM_RANGE(0xb800, 0xb83f) AM_MIRROR(0x47c0) AM_READWRITE(turtles_ppi8255_1_r, turtles_ppi8255_1_w) ADDRESS_MAP_END @@ -5905,9 +5905,13 @@ static MACHINE_CONFIG_DERIVED( explorer, galaxian_base ) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( takeoff, explorer ) // takeoff shares the same main map as explorer, but uses only an AY8912 for sound. - + + MCFG_SOUND_MODIFY("maincpu") + MCFG_DEVICE_CLOCK(XTAL_12MHz / 8) // XTAL verified, divider not verified + /* 2nd CPU to drive sound */ MCFG_SOUND_MODIFY("audiocpu") + MCFG_DEVICE_CLOCK(XTAL_12MHz / 8) MCFG_CPU_PROGRAM_MAP(takeoff_sound_map) MCFG_CPU_IO_MAP(takeoff_sound_portmap) @@ -5915,7 +5919,7 @@ static MACHINE_CONFIG_DERIVED( takeoff, explorer ) // takeoff shares the same ma MCFG_DEVICE_REMOVE("8910.0") MCFG_DEVICE_REMOVE("8910.1") - MCFG_SOUND_ADD("8912", AY8912, KONAMI_SOUND_CLOCK/8) + MCFG_SOUND_ADD("8912", AY8912, XTAL_12MHz / 8) MCFG_AY8910_PORT_A_READ_CB(READ8(galaxian_state, explorer_sound_latch_r)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END @@ -6378,9 +6382,9 @@ void galaxian_state::unmap_galaxian_sound(offs_t base) { address_space &space = m_maincpu->space(AS_PROGRAM); - space.unmap_write(base + 0x0004, base + 0x0007, 0, 0x07f8); - space.unmap_write(base + 0x0800, base + 0x0807, 0, 0x07f8); - space.unmap_write(base + 0x1800, base + 0x1800, 0, 0x07ff); + space.unmap_write(base + 0x0004, base + 0x0007, 0x07f8); + space.unmap_write(base + 0x0800, base + 0x0fff); + space.unmap_write(base + 0x1800, base + 0x1fff); } @@ -6405,7 +6409,7 @@ DRIVER_INIT_MEMBER(galaxian_state,nolock) DRIVER_INIT_CALL(galaxian); /* ...but coin lockout disabled/disconnected */ - space.unmap_write(0x6002, 0x6002, 0, 0x7f8); + space.unmap_write(0x6002, 0x6002, 0x7f8); } DRIVER_INIT_MEMBER(galaxian_state, warofbugg) @@ -6432,7 +6436,7 @@ DRIVER_INIT_MEMBER(galaxian_state,azurian) common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, nullptr); /* coin lockout disabled */ - space.unmap_write(0x6002, 0x6002, 0, 0x7f8); + space.unmap_write(0x6002, 0x6002, 0x7f8); } @@ -6448,7 +6452,7 @@ DRIVER_INIT_MEMBER(galaxian_state,gmgalax) membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000); /* callback when the game select is toggled */ - gmgalax_game_changed(*machine().ioport().ports().first()->fields().first(), nullptr, 0, 0); + gmgalax_game_changed(*machine().ioport().ports().begin()->second->fields().first(), nullptr, 0, 0); save_item(NAME(m_gmgalax_selected_game)); } @@ -6461,7 +6465,7 @@ DRIVER_INIT_MEMBER(galaxian_state,pisces) common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::pisces_extend_tile_info, &galaxian_state::pisces_extend_sprite_info); /* coin lockout replaced by graphics bank */ - space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::galaxian_gfxbank_w),this)); + space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::galaxian_gfxbank_w),this)); } @@ -6473,7 +6477,7 @@ DRIVER_INIT_MEMBER(galaxian_state,batman2) common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::batman2_extend_tile_info, &galaxian_state::upper_extend_sprite_info); /* coin lockout replaced by graphics bank */ - space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::galaxian_gfxbank_w),this)); + space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::galaxian_gfxbank_w),this)); } @@ -6521,7 +6525,7 @@ DRIVER_INIT_MEMBER(galaxian_state,mooncrgx) common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::mooncrst_extend_tile_info, &galaxian_state::mooncrst_extend_sprite_info); /* LEDs and coin lockout replaced by graphics banking */ - space.install_write_handler(0x6000, 0x6002, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::galaxian_gfxbank_w),this)); + space.install_write_handler(0x6000, 0x6002, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::galaxian_gfxbank_w),this)); } @@ -6547,7 +6551,7 @@ DRIVER_INIT_MEMBER(galaxian_state,pacmanbl) DRIVER_INIT_CALL(galaxian); /* ...but coin lockout disabled/disconnected */ - space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::artic_gfxbank_w),this)); + space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::artic_gfxbank_w),this)); } READ8_MEMBER(galaxian_state::tenspot_dsw_read) @@ -6609,12 +6613,12 @@ DRIVER_INIT_MEMBER(galaxian_state,tenspot) //common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::batman2_extend_tile_info, &galaxian_state::upper_extend_sprite_info); /* coin lockout replaced by graphics bank */ - //space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::galaxian_gfxbank_w),this)); + //space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::galaxian_gfxbank_w),this)); DRIVER_INIT_CALL(galaxian); - space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::artic_gfxbank_w),this)); + space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::artic_gfxbank_w),this)); m_tenspot_current_game = 0; @@ -6658,11 +6662,11 @@ DRIVER_INIT_MEMBER(galaxian_state,zigzag) membank("bank3")->set_base(memregion("maincpu")->base() + 0x0000); /* handler for doing the swaps */ - space.install_write_handler(0x7002, 0x7002, 0, 0x07f8, write8_delegate(FUNC(galaxian_state::zigzag_bankswap_w),this)); + space.install_write_handler(0x7002, 0x7002, 0, 0x07f8, 0, write8_delegate(FUNC(galaxian_state::zigzag_bankswap_w),this)); zigzag_bankswap_w(space, 0, 0); /* coin lockout disabled */ - space.unmap_write(0x6002, 0x6002, 0, 0x7f8); + space.unmap_write(0x6002, 0x6002, 0x7f8); /* remove the galaxian sound hardware */ unmap_galaxian_sound( 0x6000); @@ -6688,11 +6692,11 @@ DRIVER_INIT_MEMBER(galaxian_state,checkman) common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::mooncrst_extend_tile_info, &galaxian_state::mooncrst_extend_sprite_info); /* move the interrupt enable from $b000 to $b001 */ - space.unmap_write(0xb000, 0xb000, 0, 0x7f8); - space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::irq_enable_w),this)); + space.unmap_write(0xb000, 0xb000, 0x7f8); + space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::irq_enable_w),this)); /* attach the sound command handler */ - iospace.install_write_handler(0x00, 0x00, 0, 0xffff, write8_delegate(FUNC(galaxian_state::checkman_sound_command_w),this)); + iospace.install_write_handler(0x00, 0x00, 0, 0xffff, 0, write8_delegate(FUNC(galaxian_state::checkman_sound_command_w),this)); /* decrypt program code */ decode_checkman(); @@ -6707,7 +6711,7 @@ DRIVER_INIT_MEMBER(galaxian_state,checkmaj) common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, nullptr); /* attach the sound command handler */ - space.install_write_handler(0x7800, 0x7800, 0, 0x7ff, write8_delegate(FUNC(galaxian_state::checkman_sound_command_w),this)); + space.install_write_handler(0x7800, 0x7800, 0, 0x7ff, 0, write8_delegate(FUNC(galaxian_state::checkman_sound_command_w),this)); /* for the title screen */ space.install_read_handler(0x3800, 0x3800, read8_delegate(FUNC(galaxian_state::checkmaj_protection_r),this)); @@ -6722,7 +6726,7 @@ DRIVER_INIT_MEMBER(galaxian_state,dingo) common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, nullptr); /* attach the sound command handler */ - space.install_write_handler(0x7800, 0x7800, 0, 0x7ff, write8_delegate(FUNC(galaxian_state::checkman_sound_command_w),this)); + space.install_write_handler(0x7800, 0x7800, 0, 0x7ff, 0, write8_delegate(FUNC(galaxian_state::checkman_sound_command_w),this)); space.install_read_handler(0x3000, 0x3000, read8_delegate(FUNC(galaxian_state::dingo_3000_r),this)); space.install_read_handler(0x3035, 0x3035, read8_delegate(FUNC(galaxian_state::dingo_3035_r),this)); @@ -6738,11 +6742,11 @@ DRIVER_INIT_MEMBER(galaxian_state,dingoe) common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::mooncrst_extend_tile_info, &galaxian_state::mooncrst_extend_sprite_info); /* move the interrupt enable from $b000 to $b001 */ - space.unmap_write(0xb000, 0xb000, 0, 0x7f8); - space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::irq_enable_w),this)); + space.unmap_write(0xb000, 0xb000, 0x7f8); + space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::irq_enable_w),this)); /* attach the sound command handler */ - iospace.install_write_handler(0x00, 0x00, 0, 0xffff, write8_delegate(FUNC(galaxian_state::checkman_sound_command_w),this)); + iospace.install_write_handler(0x00, 0x00, 0, 0xffff, 0, write8_delegate(FUNC(galaxian_state::checkman_sound_command_w),this)); space.install_read_handler(0x3001, 0x3001, read8_delegate(FUNC(galaxian_state::dingoe_3001_r),this)); /* Protection check */ @@ -6759,7 +6763,7 @@ DRIVER_INIT_MEMBER(galaxian_state,skybase) common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::pisces_extend_tile_info, &galaxian_state::pisces_extend_sprite_info); /* coin lockout replaced by graphics bank */ - space.install_write_handler(0xa002, 0xa002, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::galaxian_gfxbank_w),this)); + space.install_write_handler(0xa002, 0xa002, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::galaxian_gfxbank_w),this)); /* needs a full 2k of RAM */ space.install_ram(0x8000, 0x87ff); @@ -6911,12 +6915,12 @@ DRIVER_INIT_MEMBER(galaxian_state,kingball) common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, nullptr); /* disable the stars */ - space.unmap_write(0xb004, 0xb004, 0, 0x07f8); + space.unmap_write(0xb004, 0xb004, 0x7f8); - space.install_write_handler(0xb000, 0xb000, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::kingball_sound1_w),this)); - space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::irq_enable_w),this)); - space.install_write_handler(0xb002, 0xb002, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::kingball_sound2_w),this)); - space.install_write_handler(0xb003, 0xb003, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::kingball_speech_dip_w),this)); + space.install_write_handler(0xb000, 0xb000, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::kingball_sound1_w),this)); + space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::irq_enable_w),this)); + space.install_write_handler(0xb002, 0xb002, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::kingball_sound2_w),this)); + space.install_write_handler(0xb003, 0xb003, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::kingball_speech_dip_w),this)); save_item(NAME(m_kingball_speech_dip)); save_item(NAME(m_kingball_sound)); @@ -6931,8 +6935,8 @@ DRIVER_INIT_MEMBER(galaxian_state,scorpnmc) common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::batman2_extend_tile_info, &galaxian_state::upper_extend_sprite_info); /* move the interrupt enable from $b000 to $b001 */ - space.unmap_write(0xb000, 0xb000, 0, 0x7f8); - space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::irq_enable_w),this)); + space.unmap_write(0xb000, 0xb000, 0x7f8); + space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::irq_enable_w),this)); /* extra ROM */ space.install_rom(0x5000, 0x67ff, memregion("maincpu")->base() + 0x5000); @@ -6952,11 +6956,11 @@ DRIVER_INIT_MEMBER(galaxian_state,thepitm) common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::mooncrst_extend_tile_info, &galaxian_state::mooncrst_extend_sprite_info); /* move the interrupt enable from $b000 to $b001 */ - space.unmap_write(0xb000, 0xb000, 0, 0x7f8); - space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::irq_enable_w),this)); + space.unmap_write(0xb000, 0xb000, 0x7f8); + space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::irq_enable_w),this)); /* disable the stars */ - space.unmap_write(0xb004, 0xb004, 0, 0x07f8); + space.unmap_write(0xb004, 0xb004, 0x7f8); /* extend ROM */ space.install_rom(0x0000, 0x47ff, memregion("maincpu")->base()); @@ -6976,7 +6980,7 @@ DRIVER_INIT_MEMBER(galaxian_state,theend) common_init(&galaxian_state::theend_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, nullptr); /* coin counter on the upper bit of port C */ - space.unmap_write(0x6802, 0x6802, 0, 0x7f8); + space.unmap_write(0x6802, 0x6802, 0x7f8); } @@ -7008,8 +7012,8 @@ DRIVER_INIT_MEMBER(galaxian_state,atlantis) /* watchdog is at $7800? (or is it just disabled?) */ watchdog_timer_device *wdog = subdevice<watchdog_timer_device>("watchdog"); - space.unmap_read(0x7000, 0x7000, 0, 0x7ff); - space.install_read_handler(0x7800, 0x7800, 0, 0x7ff, read8_delegate(FUNC(watchdog_timer_device::reset_r), wdog)); + space.unmap_read(0x7000, 0x77ff); + space.install_read_handler(0x7800, 0x7800, 0, 0x7ff, 0, read8_delegate(FUNC(watchdog_timer_device::reset_r), wdog)); } @@ -7088,8 +7092,8 @@ DRIVER_INIT_MEMBER(galaxian_state,froggermc) /* video extensions */ common_init(nullptr, &galaxian_state::frogger_draw_background, &galaxian_state::frogger_extend_tile_info, &galaxian_state::frogger_extend_sprite_info); - space.install_write_handler(0xa800, 0xa800, 0, 0x7ff, write8_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch)); - space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::froggermc_sound_control_w),this)); + space.install_write_handler(0xa800, 0xa800, 0, 0x7ff, 0, write8_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch)); + space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, 0, write8_delegate(FUNC(galaxian_state::froggermc_sound_control_w),this)); /* actually needs 2k of RAM */ space.install_ram(0x8000, 0x87ff); @@ -7641,6 +7645,22 @@ ROM_START( galaxianbl ) // looks to be a fairly plain set with modified bonus li ROM_LOAD( "6l.bpr", 0x0000, 0x0020, CRC(c3ac9467) SHA1(f382ad5a34d282056c78a5ec00c30ec43772bae2) ) ROM_END +ROM_START( galaxianbl2 ) // same program as galaxianbl, but double sized ROMs. GFX ROMs are the same as kamakazi3's. + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD( "H7.7h", 0x0000, 0x0800, CRC(d09b9f1a) SHA1(9799dcd6780a6916bbd63e0ef93e4d2035414108) ) // ic4 + ic5 + ROM_LOAD( "J7.7j", 0x0800, 0x0800, CRC(f58283e3) SHA1(edc6e72516c50fd3402281d9936574d276581ce9) ) // ic6 + ic7 + ROM_LOAD( "K7.7k", 0x1000, 0x0800, CRC(4c7031c0) SHA1(97f7ab0cedcd8eba1c8f6f516d84d672a2108258) ) // 1c8 + ic9 + ROM_LOAD( "L7.7l", 0x1800, 0x0800, CRC(9471cdd3) SHA1(d35e396b8ba39bf8229567035088037fae5effbb) ) // ic10 + ic11 + ROM_LOAD( "M7.7m", 0x2000, 0x0800, CRC(5766c95b) SHA1(cf6c226df0cc9d088b04ade43d6db87d278f8b09) ) // ic12 + ic13 + + ROM_REGION( 0x1000, "gfx1", 0 ) + ROM_LOAD( "KL1.1kl", 0x0000, 0x0800, CRC(977e37cf) SHA1(88ff1e4edadf5cfc83413a1fe999aecf4ba72232) ) + ROM_LOAD( "HJ1.1hj", 0x0800, 0x0800, CRC(d0ba22c9) SHA1(678b22d10e1ae7dcea068da838bf6bd648e9ee28) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "6331-1j.6l", 0x0000, 0x0020, CRC(c3ac9467) SHA1(f382ad5a34d282056c78a5ec00c30ec43772bae2) ) +ROM_END + ROM_START( kamakazi3 ) /* Hack of Video Games (UK) Ltd. version???? flyer spells it Kamakaze III, also no year or (c) */ ROM_REGION( 0x4000, "maincpu", 0 ) ROM_LOAD( "f_r_a.bin", 0x0000, 0x0800, CRC(e8f3aa67) SHA1(a0e9576784dbe602dd9780e667f01f31defd7c00) ) @@ -10485,6 +10505,25 @@ ROM_START( scramrf ) ROM_LOAD( "c01s.6e", 0x0000, 0x0020, CRC(4e3caeab) SHA1(a25083c3e36d28afdefe4af6e6d4f3155e303625) ) ROM_END +ROM_START( scrammr ) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD( "301.CD2", 0x0000, 0x1000, CRC(680c9355) SHA1(e23cfc1ec839b9bf3d8d9d5d09f0df5c67f8bbb5) ) + ROM_LOAD( "302.E2", 0x1000, 0x1000, CRC(5b500c90) SHA1(45b1bad1d93f3e474395a193d2fe00e105ba39e5) ) + ROM_LOAD( "303.FG2", 0x2000, 0x1000, CRC(664437d7) SHA1(1fb7cb724b0dcfe6fcd2213f8e47dfd46e51f90f) ) + ROM_LOAD( "304.H2", 0x3000, 0x1000, CRC(b66c90d6) SHA1(7aea3055b0b538ea8197623ff5d5aae76133f156) ) + + ROM_REGION( 0x3000, "audiocpu", 0 ) + ROM_LOAD( "305.C5", 0x0000, 0x1000, CRC(684a0866) SHA1(fa9acfff7ea6f35b9ff219ac84611a7d9debc711) ) + ROM_LOAD( "313.D5", 0x1000, 0x0800, CRC(ba2fa933) SHA1(1f976d8595706730e29f93027e7ab4620075c078) ) + + ROM_REGION( 0x1000, "gfx1", 0 ) + ROM_LOAD( "310.H5", 0x0000, 0x0800, CRC(4708845b) SHA1(a8b1ad19a95a9d35050a2ab7194cc96fc5afcdc9) ) + ROM_LOAD( "309.FG5", 0x0800, 0x0800, CRC(11fd2887) SHA1(69844e48bb4d372cac7ae83c953df573c7ecbb7f) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "74188.K6", 0x0000, 0x0020, CRC(aec6cb4e) SHA1(747c442d338b1b679619dfffc8a7c7fa9a43a073) ) +ROM_END + ROM_START( scramblebf ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "scf1.2d", 0x0000, 0x0800, CRC(b126aa1f) SHA1(1e4db9ee891711e880273241e74e932b0f4e3a0b) ) @@ -11419,6 +11458,7 @@ GAME( 1979, starfght, galaxian, galaxian, swarm, galaxian_state, galax GAME( 1979, galaxbsf, galaxian, galaxian, galaxian, galaxian_state, galaxian, ROT90, "bootleg", "Galaxian (bootleg, set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1979, galaxianbl, galaxian, galaxian, galaxianbl, galaxian_state, galaxian, ROT90, "bootleg", "Galaxian (bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1979, galaxbsf2, galaxian, galaxian, galaxian, galaxian_state, galaxian, ROT90, "bootleg", "Galaxian (bootleg, set 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 1979, galaxianbl2, galaxian, galaxian, galaxianbl, galaxian_state, galaxian, ROT90, "bootleg", "Galaxian (bootleg, set 4)", MACHINE_SUPPORTS_SAVE ) GAME( 1980, galaxrf, galaxian, galaxian, galaxrf, galaxian_state, galaxian, ROT90, "bootleg (Recreativos Franco S.A.)", "Galaxian (Recreativos Franco S.A. Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1980, galaxrfgg, galaxian, galaxian, galaxrf, galaxian_state, galaxian, ROT90, "bootleg (Recreativos Franco S.A.)", "Galaxian Growing Galaxip / Galaxian Nave Creciente (Recreativos Franco S.A. Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) @@ -11638,6 +11678,7 @@ GAME( 1981, scrambp, scramble, scramble, scramble, galaxian_state, scram GAME( 1981, scramce, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Centromatic S.A.)", "Scramble (Centromatic S.A., Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // similar to above GAME( 1981, scrampt, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Petaco S.A.)", "Scramble (Petaco S.A., Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // ^^ GAME( 1981, scramrf, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Recreativos Franco)", "Scramble (Recreativos Franco, Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, scrammr, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Model Racing)", "Scramble (Model Racing, Italian bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 1981, scramblebb, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg?", "Scramble (bootleg?)", MACHINE_SUPPORTS_SAVE ) GAME( 198?, bomber, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Alca)", "Bomber (bootleg of Scramble)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/galaxold.cpp b/src/mame/drivers/galaxold.cpp index b66bdceb980..371e6b4c6be 100644 --- a/src/mame/drivers/galaxold.cpp +++ b/src/mame/drivers/galaxold.cpp @@ -3485,7 +3485,7 @@ ROM_END DRIVER_INIT_MEMBER(galaxold_state,guttangt) { address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_read_bank( 0x2000, 0x27ff, 0, 0, "cpubank" ); + space.install_read_bank( 0x2000, 0x27ff, "cpubank" ); UINT8 *rom = memregion("maincpu")->base(); membank("cpubank")->set_base(rom + 0x2000); } diff --git a/src/mame/drivers/gameking.cpp b/src/mame/drivers/gameking.cpp index 66ce023b10b..96366b2bf02 100644 --- a/src/mame/drivers/gameking.cpp +++ b/src/mame/drivers/gameking.cpp @@ -315,7 +315,7 @@ ROM_END ROM_START(gamekin3) ROM_REGION(0x10000+0x80000, "maincpu", ROMREGION_ERASE00) - ROM_LOAD("gameking3", 0x10000, 0x80000,NO_DUMP ) + ROM_LOAD("gm220.bin", 0x10000, 0x80000, CRC(1dc43bd5) SHA1(f9dcd3cb76bb7cb10565a1acb070ab375c082b4c) ) ROM_END CONS(2003, gameking, 0, 0, gameking1, gameking, gameking_state, gameking, "TimeTop", "GameKing GM-218", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) diff --git a/src/mame/drivers/gb.cpp b/src/mame/drivers/gb.cpp index cdc7a820415..34446d4b5d3 100644 --- a/src/mame/drivers/gb.cpp +++ b/src/mame/drivers/gb.cpp @@ -942,43 +942,46 @@ MACHINE_CONFIG_END ***************************************************************************/ -ROM_START( gameboy ) - ROM_REGION( 0x0100, "maincpu", 0 ) - ROM_LOAD( "dmg_boot.bin", 0x0000, 0x0100, CRC(59c8598e) SHA1(4ed31ec6b0b175bb109c0eb5fd3d193da823339f) ) +ROM_START(gameboy) + ROM_REGION(0x0100, "maincpu", 0) + ROM_SYSTEM_BIOS(0, "dmg", "DMG vX") + ROMX_LOAD("dmg_boot.bin", 0x0000, 0x0100, CRC(59c8598e) SHA1(4ed31ec6b0b175bb109c0eb5fd3d193da823339f), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(1, "dmg_v0", "DMG v0") + ROMX_LOAD("dmg_v0.rom", 0x0000, 0x0100, CRC(c2f5cc97) SHA1(8bd501e31921e9601788316dbd3ce9833a97bcbc), ROM_BIOS(2)) ROM_END -ROM_START( supergb ) - ROM_REGION( 0x0100, "maincpu", 0 ) - ROM_LOAD( "sgb_boot.bin", 0x0000, 0x0100, CRC(ec8a83b9) SHA1(aa2f50a77dfb4823da96ba99309085a3c6278515) ) +ROM_START(supergb) + ROM_REGION(0x0100, "maincpu", 0) + ROM_LOAD("sgb_boot.bin", 0x0000, 0x0100, CRC(ec8a83b9) SHA1(aa2f50a77dfb4823da96ba99309085a3c6278515)) ROM_END -ROM_START( supergb2 ) - ROM_REGION( 0x0100, "maincpu", 0 ) - ROM_LOAD( "sgb2_boot.bin", 0x0000, 0x0100, CRC(53d0dd63) SHA1(93407ea10d2f30ab96a314d8eca44fe160aea734) ) +ROM_START(supergb2 ) + ROM_REGION(0x0100, "maincpu", 0) + ROM_LOAD("sgb2_boot.bin", 0x0000, 0x0100, CRC(53d0dd63) SHA1(93407ea10d2f30ab96a314d8eca44fe160aea734)) ROM_END -ROM_START( gbpocket ) - ROM_REGION( 0x0100, "maincpu", 0 ) - ROM_LOAD( "mgb_boot.bin", 0x0000, 0x0100, CRC(e6920754) SHA1(4e68f9da03c310e84c523654b9026e51f26ce7f0) ) +ROM_START(gbpocket ) + ROM_REGION(0x0100, "maincpu", 0) + ROM_LOAD("mgb_boot.bin", 0x0000, 0x0100, CRC(e6920754) SHA1(4e68f9da03c310e84c523654b9026e51f26ce7f0)) ROM_END -ROM_START( gbcolor ) - ROM_REGION( 0x800, "maincpu", 0 ) - ROM_LOAD( "gbc_boot.1", 0x0000, 0x0100, CRC(779ea374) SHA1(e4b40c9fd593a97a1618cfb2696f290cf9596a62) ) /* Bootstrap code part 1 */ - ROM_LOAD( "gbc_boot.2", 0x0100, 0x0700, CRC(f741807d) SHA1(f943b1e0b640cf1d371e1d8f0ada69af03ebb396) ) /* Bootstrap code part 2 */ +ROM_START(gbcolor) + ROM_REGION(0x800, "maincpu", 0) + ROM_LOAD("gbc_boot.1", 0x0000, 0x0100, CRC(779ea374) SHA1(e4b40c9fd593a97a1618cfb2696f290cf9596a62)) /* Bootstrap code part 1 */ + ROM_LOAD("gbc_boot.2", 0x0100, 0x0700, CRC(f741807d) SHA1(f943b1e0b640cf1d371e1d8f0ada69af03ebb396)) /* Bootstrap code part 2 */ ROM_END -ROM_START( megaduck ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) +ROM_START(megaduck) + ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF) ROM_END -/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ -CONS( 1990, gameboy, 0, 0, gameboy, gameboy, driver_device, 0, "Nintendo", "Game Boy", MACHINE_SUPPORTS_SAVE ) -CONS( 1994, supergb, gameboy, 0, supergb, gameboy, driver_device, 0, "Nintendo", "Super Game Boy", MACHINE_SUPPORTS_SAVE ) -CONS( 1998, supergb2, gameboy, 0, supergb2, gameboy, driver_device, 0, "Nintendo", "Super Game Boy 2", MACHINE_SUPPORTS_SAVE ) -CONS( 1996, gbpocket, gameboy, 0, gbpocket, gameboy, driver_device, 0, "Nintendo", "Game Boy Pocket", MACHINE_SUPPORTS_SAVE ) -CONS( 1998, gbcolor, 0, 0, gbcolor, gameboy, driver_device, 0, "Nintendo", "Game Boy Color", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ +CONS(1990, gameboy, 0, 0, gameboy, gameboy, driver_device, 0, "Nintendo", "Game Boy", MACHINE_SUPPORTS_SAVE) +CONS(1994, supergb, gameboy, 0, supergb, gameboy, driver_device, 0, "Nintendo", "Super Game Boy", MACHINE_SUPPORTS_SAVE) +CONS(1998, supergb2, gameboy, 0, supergb2, gameboy, driver_device, 0, "Nintendo", "Super Game Boy 2", MACHINE_SUPPORTS_SAVE) +CONS(1996, gbpocket, gameboy, 0, gbpocket, gameboy, driver_device, 0, "Nintendo", "Game Boy Pocket", MACHINE_SUPPORTS_SAVE) +CONS(1998, gbcolor, 0, 0, gbcolor, gameboy, driver_device, 0, "Nintendo", "Game Boy Color", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE) // Sound is not 100% yet, it generates some sounds which could be ok. Since we're lacking a real system there's no way to verify. CONS( 1993, megaduck, 0, 0, megaduck, gameboy, driver_device, 0, "Welback Holdings (Timlex International) / Creatronic / Videojet / Cougar USA", "Mega Duck / Cougar Boy", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/gba.cpp b/src/mame/drivers/gba.cpp index 9270c520b43..54a2ca5527f 100644 --- a/src/mame/drivers/gba.cpp +++ b/src/mame/drivers/gba.cpp @@ -2106,9 +2106,9 @@ void gba_state::machine_start() // install the cart ROM & SRAM into the address map, if present if (m_cart->exists()) { - m_maincpu->space(AS_PROGRAM).install_read_bank(0x08000000, 0x09ffffff, 0, 0, "rom1"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x0a000000, 0x0bffffff, 0, 0, "rom2"); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x0c000000, 0x0cffffff, 0, 0, "rom3"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x08000000, 0x09ffffff, "rom1"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x0a000000, 0x0bffffff, "rom2"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x0c000000, 0x0cffffff, "rom3"); std::string region_tag; memory_region *cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GBASLOT_ROM_REGION_TAG).c_str()); diff --git a/src/mame/drivers/ggconnie.cpp b/src/mame/drivers/ggconnie.cpp index 236a5c1c21d..06a27001cca 100644 --- a/src/mame/drivers/ggconnie.cpp +++ b/src/mame/drivers/ggconnie.cpp @@ -194,10 +194,10 @@ static MACHINE_CONFIG_START( ggconnie, ggconnie_state ) MCFG_HUC6260_HSYNC_CHANGED_CB(DEVWRITELINE("huc6202", huc6202_device, hsync_changed)) MCFG_DEVICE_ADD( "huc6270_0", HUC6270, 0 ) MCFG_HUC6270_VRAM_SIZE(0x10000) - MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(pce_common_state, pce_irq_changed)) + MCFG_HUC6270_IRQ_CHANGED_CB(INPUTLINE("maincpu", 0)) MCFG_DEVICE_ADD( "huc6270_1", HUC6270, 0 ) MCFG_HUC6270_VRAM_SIZE(0x10000) - MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(pce_common_state, pce_irq_changed)) + MCFG_HUC6270_IRQ_CHANGED_CB(INPUTLINE("maincpu", 0)) MCFG_DEVICE_ADD( "huc6202", HUC6202, 0 ) MCFG_HUC6202_NEXT_PIXEL_0_CB(DEVREAD16("huc6270_0", huc6270_device, next_pixel)) MCFG_HUC6202_TIME_TIL_NEXT_EVENT_0_CB(DEVREAD16("huc6270_0", huc6270_device, time_until_next_event)) diff --git a/src/mame/drivers/gimix.cpp b/src/mame/drivers/gimix.cpp index 4b61c81521c..23684f53b9b 100644 --- a/src/mame/drivers/gimix.cpp +++ b/src/mame/drivers/gimix.cpp @@ -508,22 +508,22 @@ void gimix_state::machine_start() // install any extra RAM if(m_ram->size() > 65536) { - m_bank1->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank2->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank3->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank4->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank5->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank6->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank7->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank8->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank9->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank10->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank11->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank12->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank13->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank14->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank15->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); - m_bank16->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,0xffff,0,"upper_ram"); + m_bank1->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank2->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank3->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank4->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank5->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank6->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank7->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank8->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank9->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank10->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank11->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank12->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank13->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank14->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank15->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); + m_bank16->space(AS_PROGRAM).install_readwrite_bank(0x10000,m_ram->size()-1,"upper_ram"); } m_floppy0->get_device()->set_rpm(300); m_floppy1->get_device()->set_rpm(300); diff --git a/src/mame/drivers/gladiatr.cpp b/src/mame/drivers/gladiatr.cpp index 029352ff5bb..2c82af4487a 100644 --- a/src/mame/drivers/gladiatr.cpp +++ b/src/mame/drivers/gladiatr.cpp @@ -279,14 +279,14 @@ WRITE8_MEMBER(gladiatr_state::gladiator_adpcm_w) WRITE8_MEMBER(gladiatr_state::gladiator_cpu_sound_command_w) { - soundlatch_byte_w(space,0,data); + m_soundlatch->write(space,0,data); m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } READ8_MEMBER(gladiatr_state::gladiator_cpu_sound_command_r) { m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - return soundlatch_byte_r(space,0); + return m_soundlatch->read(space,0); } WRITE8_MEMBER(gladiatr_state::gladiatr_flipscreen_w) @@ -651,6 +651,8 @@ static MACHINE_CONFIG_START( ppking, gladiatr_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_12MHz/8) /* verified on pcb */ MCFG_AY8910_PORT_A_READ_CB(READ8(gladiatr_state, ppking_f1_r)) MCFG_AY8910_PORT_B_READ_CB(READ8(gladiatr_state, ppking_f1_r)) @@ -706,6 +708,8 @@ static MACHINE_CONFIG_START( gladiatr, gladiatr_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_12MHz/8) /* verified on pcb */ MCFG_YM2203_IRQ_HANDLER(WRITELINE(gladiatr_state, gladiator_ym_irq)) MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW3")) /* port B read */ diff --git a/src/mame/drivers/go2000.cpp b/src/mame/drivers/go2000.cpp index 5bb7a58f0a3..90391a01e20 100644 --- a/src/mame/drivers/go2000.cpp +++ b/src/mame/drivers/go2000.cpp @@ -4,7 +4,7 @@ Go 2000 - Korean Card game -Newer PCB, very sparce with newer surface mounted CPUs +Newer PCB, very sparse with newer surface mounted CPUs MC68EC000FU10 Z84C0006FEC @@ -34,6 +34,7 @@ Notes: #include "emu.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/dac.h" class go2000_state : public driver_device @@ -43,33 +44,36 @@ public: : driver_device(mconfig, type, tag), m_videoram(*this, "videoram"), m_videoram2(*this, "videoram2"), - m_soundcpu(*this, "soundcpu"), m_maincpu(*this, "maincpu"), + m_soundcpu(*this, "soundcpu"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT16> m_videoram; required_shared_ptr<UINT16> m_videoram2; /* devices */ + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_soundcpu; + required_device<gfxdecode_device> m_gfxdecode; + required_device<screen_device> m_screen; + required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; + DECLARE_WRITE16_MEMBER(sound_cmd_w); DECLARE_WRITE8_MEMBER(go2000_pcm_1_bankswitch_w); virtual void machine_start() override; virtual void video_start() override; UINT32 screen_update_go2000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - required_device<cpu_device> m_maincpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<screen_device> m_screen; - required_device<palette_device> m_palette; }; WRITE16_MEMBER(go2000_state::sound_cmd_w) { - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_soundcpu->set_input_line(0, HOLD_LINE); } @@ -99,7 +103,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( go2000_sound_io, AS_IO, 8, go2000_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r) + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x00, 0x00) AM_DEVWRITE("dac1", dac_device, write_unsigned8) AM_RANGE(0x03, 0x03) AM_WRITE(go2000_pcm_1_bankswitch_w) ADDRESS_MAP_END @@ -352,6 +356,8 @@ static MACHINE_CONFIG_START( go2000, go2000_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_DAC_ADD("dac1") MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) MCFG_SOUND_ROUTE(1, "rspeaker", 0.50) diff --git a/src/mame/drivers/goal92.cpp b/src/mame/drivers/goal92.cpp index 1bb26dad975..26fc4e032ae 100644 --- a/src/mame/drivers/goal92.cpp +++ b/src/mame/drivers/goal92.cpp @@ -14,14 +14,13 @@ #include "cpu/m68000/m68000.h" #include "sound/2203intf.h" #include "sound/okim6295.h" -#include "sound/msm5205.h" #include "includes/goal92.h" WRITE16_MEMBER(goal92_state::goal92_sound_command_w) { if (ACCESSING_BITS_8_15) { - soundlatch_byte_w(space, 0, (data >> 8) & 0xff); + m_soundlatch->write(space, 0, (data >> 8) & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } } @@ -89,7 +88,7 @@ static ADDRESS_MAP_START( sound_cpu, AS_PROGRAM, 8, goal92_state ) AM_RANGE(0xe800, 0xe801) AM_DEVREADWRITE("ym1", ym2203_device, read, write) AM_RANGE(0xec00, 0xec01) AM_DEVREADWRITE("ym2", ym2203_device, read, write) AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static INPUT_PORTS_START( goal92 ) @@ -320,6 +319,8 @@ static MACHINE_CONFIG_START( goal92, goal92_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM2203, 2500000/2) MCFG_YM2203_IRQ_HANDLER(WRITELINE(goal92_state, irqhandler)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/drivers/goindol.cpp b/src/mame/drivers/goindol.cpp index a47f1892c3c..6c1a76541ed 100644 --- a/src/mame/drivers/goindol.cpp +++ b/src/mame/drivers/goindol.cpp @@ -21,6 +21,7 @@ Notes: #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/2203intf.h" #include "includes/goindol.h" @@ -81,7 +82,7 @@ static ADDRESS_MAP_START( goindol_map, AS_PROGRAM, 8, goindol_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("ram") - AM_RANGE(0xc800, 0xc800) AM_READNOP AM_WRITE(soundlatch_byte_w) // watchdog? + AM_RANGE(0xc800, 0xc800) AM_READNOP AM_DEVWRITE("soundlatch", generic_latch_8_device, write) // watchdog? AM_RANGE(0xc810, 0xc810) AM_WRITE(goindol_bankswitch_w) AM_RANGE(0xc820, 0xc820) AM_READ_PORT("DIAL") AM_RANGE(0xc820, 0xd820) AM_WRITEONLY AM_SHARE("fg_scrolly") @@ -107,7 +108,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, goindol_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0xa000, 0xa001) AM_DEVWRITE("ymsnd", ym2203_device, write) AM_RANGE(0xc000, 0xc7ff) AM_RAM - AM_RANGE(0xd800, 0xd800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xd800, 0xd800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -256,6 +257,8 @@ static MACHINE_CONFIG_START( goindol, goindol_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_12MHz/8) /* Confirmed pitch from recording */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END diff --git a/src/mame/drivers/goldstar.cpp b/src/mame/drivers/goldstar.cpp index 7c619e597a2..79edd4c5a46 100644 --- a/src/mame/drivers/goldstar.cpp +++ b/src/mame/drivers/goldstar.cpp @@ -7367,6 +7367,30 @@ static const gfx_layout super9_tilelayout = // Green is OK. Red needs normal go 128*8 /* every char takes 128 consecutive bytes */ }; +static const gfx_layout flaming7_charlayout = +{ + 8,8, /* 8*8 characters */ + 4096, /* 4096 characters */ + 3, /* 3 bits per pixel */ + { 2, 4, 6 }, /* the bitplanes are packed in one byte */ + { 2*8+1, 2*8+0, 3*8+1, 3*8+0, 0*8+1, 0*8+0, 1*8+1, 1*8+0 }, + { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, + 32*8 /* every char takes 32 consecutive bytes */ +}; + +static const gfx_layout flaming7_tilelayout = +{ + 8,32, /* 8*32 characters */ + 256, /* 256 tiles */ + 4, /* 4 bits per pixel */ + { 0, 2, 4, 6 }, + { 2*8+0, 2*8+1, 3*8+0, 3*8+1, 0, 1, 1*8+0, 1*8+1 }, + { 0*8, 4*8, 8*8, 12*8, 16*8, 20*8, 24*8, 28*8, + 32*8, 36*8, 40*8, 44*8, 48*8, 52*8, 56*8, 60*8, + 64*8, 68*8, 72*8, 76*8, 80*8, 84*8, 88*8, 92*8, + 96*8, 100*8, 104*8, 108*8, 112*8, 116*8, 120*8, 124*8 }, + 128*8 /* every char takes 128 consecutive bytes */ +}; static GFXDECODE_START( goldstar ) @@ -7472,6 +7496,11 @@ static GFXDECODE_START( super9 ) GFXDECODE_ENTRY( "gfx2", 0, super9_tilelayout, 128, 8 ) GFXDECODE_END +static GFXDECODE_START( flaming7 ) + GFXDECODE_ENTRY( "gfx1", 0, flaming7_charlayout, 0, 16 ) + GFXDECODE_ENTRY( "gfx2", 0, flaming7_tilelayout, 128, 8 ) +GFXDECODE_END + static const gfx_layout tiles8x32_4bpp_layout = { @@ -7638,6 +7667,7 @@ WRITE8_MEMBER(goldstar_state::ay8910_outputb_w) //popmessage("ay8910_outputb_w %02x",data); } + static MACHINE_CONFIG_START( goldstar, goldstar_state ) /* basic machine hardware */ @@ -7796,7 +7826,7 @@ static MACHINE_CONFIG_START( super9, goldstar_state ) MACHINE_CONFIG_END -PALETTE_INIT_MEMBER(goldstar_state,cm) +PALETTE_INIT_MEMBER(goldstar_state, cm) { /* BBGGGRRR */ @@ -7813,7 +7843,7 @@ PALETTE_INIT_MEMBER(goldstar_state,cm) } } -PALETTE_INIT_MEMBER(goldstar_state,cmast91) +PALETTE_INIT_MEMBER(goldstar_state, cmast91) { int i; for (i = 0; i < 0x100; i++) @@ -8186,12 +8216,25 @@ static MACHINE_CONFIG_DERIVED( bingownga, bingowng ) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( flam7_w4, lucky8 ) + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(flaming7_map) + + MCFG_DEVICE_MODIFY("ppi8255_0") + MCFG_I8255_OUT_PORTC_CB(WRITE8(wingco_state, fl7w4_outc802_w)) + + MCFG_DS2401_ADD("fl7w4_id") +MACHINE_CONFIG_END + static MACHINE_CONFIG_DERIVED( flaming7, lucky8 ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(flaming7_map) -// MCFG_CPU_IO_MAP(flaming7_readport) + MCFG_GFXDECODE_MODIFY("gfxdecode", flaming7) + + // to do serial protection. MCFG_DEVICE_MODIFY("ppi8255_0") MCFG_I8255_OUT_PORTC_CB(WRITE8(wingco_state, fl7w4_outc802_w)) @@ -8199,6 +8242,7 @@ static MACHINE_CONFIG_DERIVED( flaming7, lucky8 ) MACHINE_CONFIG_END + PALETTE_INIT_MEMBER(wingco_state, magodds) { for (int i = 0; i < 0x100; i++) @@ -13770,7 +13814,34 @@ ROM_END */ ROM_START( cmpacman ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) // Seems to have the pulse/bookkeeping bug fixed. + ROM_LOAD( "corsica_v8.31_pacman_old_board_new.bin", 0x0000, 0x10000, CRC(4f1ea727) SHA1(e127f3da9e7cc81b93dc3eec66ca56452e78375e) ) + + ROM_REGION( 0x18000, "gfx1", 0 ) + ROM_LOAD( "c_m_pacman_rom7.u16", 0x00000, 0x8000, CRC(c53273a4) SHA1(d359e65c31ef5253f1e9a3b67db8851a8d1262d1) ) + ROM_LOAD( "c_m_pacman_rom6.u11", 0x08000, 0x8000, CRC(013bff64) SHA1(65f2808480970a756b642ddd1a64c10b89ea3b3e) ) + ROM_LOAD( "c_m_pacman_rom5.u4", 0x10000, 0x8000, CRC(03298f22) SHA1(32c99da82afff6d38333a9998802c497d6f49fab) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) + ROM_LOAD( "4.u15", 0x0000, 0x2000, CRC(8607ffd9) SHA1(9bc94715554aa2473ae2ed249a47f29c7886b3dc) ) + ROM_LOAD( "3.u10", 0x2000, 0x2000, CRC(c32367be) SHA1(ff217021b9c58e23b2226f8b0a7f5da966225715) ) + ROM_LOAD( "2.u14", 0x4000, 0x2000, CRC(6dfcb188) SHA1(22430429c798954d9d979e62699b58feae7fdbf4) ) + ROM_LOAD( "1.u9", 0x6000, 0x2000, CRC(9678ead2) SHA1(e80aefa98b2363fe9e6b2415762695ace272e4d3) ) + + ROM_REGION( 0x10000, "user1", 0 ) + ROM_LOAD( "8.u53", 0x0000, 0x10000, CRC(e92443d3) SHA1(4b6ca4521841610054165f085ae05510e77af191) ) + + /* proms taken from cmv4, probably wrong */ + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "82s129.u84", 0x0000, 0x0100, CRC(0489b760) SHA1(78f8632b17a76335183c5c204cdec856988368b0) ) + ROM_LOAD( "82s129.u79", 0x0100, 0x0100, CRC(21eb5b19) SHA1(9b8425bdb97f11f4855c998c7792c3291fd07470) ) + + ROM_REGION( 0x100, "proms2", 0 ) + ROM_LOAD( "82s129.u46", 0x0000, 0x0100, CRC(50ec383b) SHA1(ae95b92bd3946b40134bcdc22708d5c6b0f4c23e) ) +ROM_END + +ROM_START( cmpacmana ) + ROM_REGION( 0x10000, "maincpu", 0 ) // Seems to have a pulse/bookkeeping bug. ROM_LOAD( "corsica_v8.31_pacman_old_board.bin", 0x0000, 0x10000, CRC(f69cbe75) SHA1(08446eb005b6c7ed24489fd664df14b20a41e3eb) ) ROM_REGION( 0x18000, "gfx1", 0 ) @@ -14122,6 +14193,8 @@ ROM_END Flaming 7 Cyberdyne Systems, Inc. + W4 hardware. + GFX sets: 1) Red, White & Blue 7's 2) Hollywood Nights. @@ -14167,6 +14240,98 @@ ROM_START( fl7_3121 ) // Red, White & Blue 7's + Hollywood Nights. Serial 7D063 ROM_END +/* + Flaming 7's + Cyberdyne Systems. + + Main - 50. + Custom Hardware. + +*/ +ROM_START( fl7_50 ) // Serial 00000069A1C9. + ROM_REGION( 0x8000, "maincpu", 0 ) + ROM_LOAD( "50-main.u22", 0x0000, 0x8000, CRC(e097e317) SHA1(a903144cc2290b7e22045490784b592adbf9ba97) ) + + ROM_REGION( 0x20000, "gfx1", 0 ) + ROM_LOAD( "27c1001.u6", 0x00000, 0x20000, CRC(00eac3c1) SHA1(1a955f8bc044e17f0885b4b126a66d7ad191e410) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) + ROM_LOAD( "27c256.u3", 0x0000, 0x8000, CRC(cfc8f3e2) SHA1(7dd72e3ffb0904776f3c07635b953e72f4c63068) ) + + /* Proper bipolar PROM dump */ + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "am27s29.u1", 0x0000, 0x0200, CRC(3fe7e369) SHA1(cf4ae287cb58581a4bf9e9ff1994426461fb38cc) ) + + ROM_REGION( 0x20, "proms2", 0 ) + ROM_LOAD( "dummy", 0x0000, 0x0020, NO_DUMP ) + + ROM_REGION(0x8, "fl7w4_id", 0) /* Electronic Serial DS2401 */ + ROM_LOAD( "ds2401.bin", 0x0000, 0x0008, NO_DUMP ) // Hand built to match our ROM set + +ROM_END + + +/* + Flaming 7's + Cyberdyne Systems. + + Main - 500. + Custom Hardware. + +*/ +ROM_START( fl7_500 ) // Serial 000000125873. + ROM_REGION( 0x8000, "maincpu", 0 ) + ROM_LOAD( "500-main.u22", 0x0000, 0x8000, CRC(e2c82c67) SHA1(951b0044de9b6104f51aa5a3176d0ea475415f7c) ) + + ROM_REGION( 0x20000, "gfx1", 0 ) + ROM_LOAD( "27c1001.u6", 0x00000, 0x20000, CRC(00eac3c1) SHA1(1a955f8bc044e17f0885b4b126a66d7ad191e410) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) + ROM_LOAD( "27c256.u3", 0x0000, 0x8000, CRC(4e3bd980) SHA1(202d3135da7ab435f487943079d88b170dc10955) ) + + /* Proper bipolar PROM dump */ + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "am27s29.u1", 0x0000, 0x0200, CRC(3fe7e369) SHA1(cf4ae287cb58581a4bf9e9ff1994426461fb38cc) ) + + ROM_REGION( 0x20, "proms2", 0 ) + ROM_LOAD( "dummy", 0x0000, 0x0020, NO_DUMP ) + + ROM_REGION(0x8, "fl7w4_id", 0) /* Electronic Serial DS2401 */ + ROM_LOAD( "ds2401.bin", 0x0000, 0x0008, NO_DUMP ) // Hand built to match our ROM set + +ROM_END + + +/* + Flaming 7's + Cyberdyne Systems. + + Main - 2000. + Custom Hardware. + +*/ +ROM_START( fl7_2000 ) // Serial 00000063A47F. + ROM_REGION( 0x8000, "maincpu", 0 ) + ROM_LOAD( "2000_main_27c256.u22", 0x0000, 0x8000, CRC(9659b045) SHA1(801b6733b70b35de65cd8faba6814fa013c05ad0) ) + + ROM_REGION( 0x20000, "gfx1", 0 ) + ROM_LOAD( "m27c1001.u6", 0x00000, 0x20000, CRC(5a2157bb) SHA1(2b170102caf1224df7a6d33bb84d19114f453d89) ) + + ROM_REGION( 0x8000, "gfx2", 0 ) + ROM_LOAD( "27c256.u3", 0x0000, 0x8000, CRC(cfc8f3e2) SHA1(7dd72e3ffb0904776f3c07635b953e72f4c63068) ) + + /* Proper bipolar PROM dump */ + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "am27s29.u1", 0x0000, 0x0200, CRC(3fe7e369) SHA1(cf4ae287cb58581a4bf9e9ff1994426461fb38cc) ) + + ROM_REGION( 0x20, "proms2", 0 ) + ROM_LOAD( "dummy", 0x0000, 0x0020, NO_DUMP ) + + ROM_REGION(0x8, "fl7w4_id", 0) /* Electronic Serial DS2401 */ + ROM_LOAD( "ds2401.bin", 0x0000, 0x0008, NO_DUMP ) // Hand built to match our ROM set + +ROM_END + /*********************************************************************************************************************/ @@ -14912,7 +15077,10 @@ GAMEL( 1993, bingownga, bingowng, bingownga,bingownga,driver_device, 0, // --- Flaming 7's hardware (W-4 derivative) --- -GAME( 199?, fl7_3121, 0, flaming7, flaming7, driver_device, 0, ROT0, "Cyberdyne Systems", "Flaming 7 (Red, White & Blue 7's + Hollywood Nights)", 0 ) +GAME( 199?, fl7_3121, 0, flam7_w4, flaming7, driver_device, 0, ROT0, "Cyberdyne Systems", "Flaming 7 (W4 Hardware, Red, White & Blue 7's + Hollywood Nights)", 0 ) +GAME( 199?, fl7_50, 0, flaming7, flaming7, driver_device, 0, ROT0, "Cyberdyne Systems", "Flaming 7 (Custom Hardware, Main, 50)", MACHINE_NOT_WORKING ) +GAME( 199?, fl7_500, fl7_50, flaming7, flaming7, driver_device, 0, ROT0, "Cyberdyne Systems", "Flaming 7 (Custom Hardware, Main, 500)", MACHINE_NOT_WORKING ) +GAME( 199?, fl7_2000, fl7_50, flaming7, flaming7, driver_device, 0, ROT0, "Cyberdyne Systems", "Flaming 7 (Custom Hardware, Main, 2000)", MACHINE_NOT_WORKING ) // --- Wing W-8 hardware --- @@ -14989,12 +15157,13 @@ GAME( 1996, cherry96, scmaster, unkch, unkch4, unkch_state, unkch4, /* Stealth sets. These have hidden games inside that can be switched to avoid inspections, police or whatever purposes)... */ -/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ -GAMEL( 198?, cmpacman, 0, cm, cmpacman, cmaster_state, cm, ROT0, "<unknown>", "Super Pacman (v1.2) + Cherry Master (Corsica, v8.31)", 0, layout_cmpacman ) // need to press K to switch between games... -GAMEL( 198?, cmtetris, 0, cm, cmtetris, cmaster_state, cm, ROT0, "<unknown>", "Tetris + Cherry Master (Corsica, v8.01, set 1)", 0, layout_cmpacman ) // need to press K/L to switch between games... -GAMEL( 198?, cmtetrsa, 0, cm, cmtetris, cmaster_state, cm, ROT0, "<unknown>", "Tetris + Cherry Master (Corsica, v8.01, set 2)", MACHINE_NOT_WORKING, layout_cmpacman ) // seems banked... -GAMEL( 198?, cmtetrsb, 0, cm, cmtetris, cmaster_state, cm, ROT0, "<unknown>", "Tetris + Cherry Master (+K, Canada Version, encrypted)", MACHINE_NOT_WORKING, layout_cmpacman ) // different Tetris game. press insert to throttle and see the attract running. -GAMEL( 1997, crazybon, 0, pkrmast, crazybon, driver_device, 0, ROT0, "bootleg (Crazy Co.)", "Crazy Bonus 2002", MACHINE_IMPERFECT_COLORS, layout_crazybon ) // Windows ME desktop... but not found the way to switch it. +/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ +GAMEL( 198?, cmpacman, 0, cm, cmpacman, cmaster_state, cm, ROT0, "<unknown>", "Super Pacman (v1.2) + Cherry Master (Corsica, v8.31, set 1)", 0, layout_cmpacman ) // need to press K to switch between games... +GAMEL( 198?, cmpacmana, cmpacman, cm, cmpacman, cmaster_state, cm, ROT0, "<unknown>", "Super Pacman (v1.2) + Cherry Master (Corsica, v8.31, set 2)", 0, layout_cmpacman ) // need to press K to switch between games... +GAMEL( 198?, cmtetris, 0, cm, cmtetris, cmaster_state, cm, ROT0, "<unknown>", "Tetris + Cherry Master (Corsica, v8.01, set 1)", 0, layout_cmpacman ) // need to press K/L to switch between games... +GAMEL( 198?, cmtetrsa, 0, cm, cmtetris, cmaster_state, cm, ROT0, "<unknown>", "Tetris + Cherry Master (Corsica, v8.01, set 2)", MACHINE_NOT_WORKING, layout_cmpacman ) // seems banked... +GAMEL( 198?, cmtetrsb, 0, cm, cmtetris, cmaster_state, cm, ROT0, "<unknown>", "Tetris + Cherry Master (+K, Canada Version, encrypted)", MACHINE_NOT_WORKING, layout_cmpacman ) // different Tetris game. press insert to throttle and see the attract running. +GAMEL( 1997, crazybon, 0, pkrmast, crazybon, driver_device, 0, ROT0, "bootleg (Crazy Co.)", "Crazy Bonus 2002", MACHINE_IMPERFECT_COLORS, layout_crazybon ) // Windows ME desktop... but not found the way to switch it. /* other possible stealth sets: - cmv4a ---> see the 1fxx zone. put a bp in 1f9f to see the loop. diff --git a/src/mame/drivers/gotcha.cpp b/src/mame/drivers/gotcha.cpp index afb5540c576..d571a608f2d 100644 --- a/src/mame/drivers/gotcha.cpp +++ b/src/mame/drivers/gotcha.cpp @@ -14,7 +14,7 @@ TODO: gfx related but since everything seems fine I've no idea what it might do. - Unknown sound writes at C00F; also, there's an NMI handler that would read from C00F. -- Sound samples were getting chopped; I fixed this by changing sound/adpcm.c to +- Sound samples were getting chopped; I fixed this by changing sound/adpcm.cpp to disregard requests to play new samples until the previous one is finished*. Gotcha pcb: 97,7,29 PARA VER 3.0 but it is the same as ppchamp @@ -62,6 +62,7 @@ Notes: #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" +#include "machine/gen_latch.h" #include "sound/2151intf.h" #include "sound/okim6295.h" #include "includes/gotcha.h" @@ -97,7 +98,7 @@ WRITE16_MEMBER(gotcha_state::gotcha_oki_bank_w) static ADDRESS_MAP_START( gotcha_map, AS_PROGRAM, 16, gotcha_state ) AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x100000, 0x100001) AM_WRITE(soundlatch_word_w) + AM_RANGE(0x100000, 0x100001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x100002, 0x100003) AM_WRITE(gotcha_lamps_w) AM_RANGE(0x100004, 0x100005) AM_WRITE(gotcha_oki_bank_w) AM_RANGE(0x120000, 0x12ffff) AM_RAM @@ -119,7 +120,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, gotcha_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0xc002, 0xc002) AM_DEVREADWRITE("oki", okim6295_device, read, write) AM_MIRROR(1) - AM_RANGE(0xc006, 0xc006) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc006, 0xc006) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xd000, 0xd7ff) AM_RAM ADDRESS_MAP_END @@ -291,6 +292,8 @@ static MACHINE_CONFIG_START( gotcha, gotcha_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", 14318180/4) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.80) diff --git a/src/mame/drivers/gottlieb.cpp b/src/mame/drivers/gottlieb.cpp index fcc00892148..d3006f73d9e 100644 --- a/src/mame/drivers/gottlieb.cpp +++ b/src/mame/drivers/gottlieb.cpp @@ -228,9 +228,9 @@ void gottlieb_state::machine_start() if (m_laserdisc != nullptr) { /* attach to the I/O ports */ - m_maincpu->space(AS_PROGRAM).install_read_handler(0x05805, 0x05807, 0, 0x07f8, read8_delegate(FUNC(gottlieb_state::laserdisc_status_r),this)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x05805, 0x05805, 0, 0x07f8, write8_delegate(FUNC(gottlieb_state::laserdisc_command_w),this)); /* command for the player */ - m_maincpu->space(AS_PROGRAM).install_write_handler(0x05806, 0x05806, 0, 0x07f8, write8_delegate(FUNC(gottlieb_state::laserdisc_select_w),this)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x05805, 0x05807, 0, 0x07f8, 0, read8_delegate(FUNC(gottlieb_state::laserdisc_status_r),this)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x05805, 0x05805, 0, 0x07f8, 0, write8_delegate(FUNC(gottlieb_state::laserdisc_command_w),this)); /* command for the player */ + m_maincpu->space(AS_PROGRAM).install_write_handler(0x05806, 0x05806, 0, 0x07f8, 0, write8_delegate(FUNC(gottlieb_state::laserdisc_select_w),this)); /* allocate a timer for serial transmission, and one for philips code processing */ m_laserdisc_bit_timer = timer_alloc(TIMER_LASERDISC_BIT); @@ -2604,21 +2604,21 @@ DRIVER_INIT_MEMBER(gottlieb_state,romtiles) DRIVER_INIT_MEMBER(gottlieb_state,qbert) { DRIVER_INIT_CALL(romtiles); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x5803, 0x5803, 0, 0x07f8, write8_delegate(FUNC(gottlieb_state::qbert_output_w),this)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x5803, 0x5803, 0, 0x07f8, 0, write8_delegate(FUNC(gottlieb_state::qbert_output_w),this)); } DRIVER_INIT_MEMBER(gottlieb_state,qbertqub) { DRIVER_INIT_CALL(romtiles); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x5803, 0x5803, 0, 0x07f8, write8_delegate(FUNC(gottlieb_state::qbertqub_output_w),this)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x5803, 0x5803, 0, 0x07f8, 0, write8_delegate(FUNC(gottlieb_state::qbertqub_output_w),this)); } DRIVER_INIT_MEMBER(gottlieb_state,stooges) { DRIVER_INIT_CALL(ramtiles); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x5803, 0x5803, 0, 0x07f8, write8_delegate(FUNC(gottlieb_state::stooges_output_w),this)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x5803, 0x5803, 0, 0x07f8, 0, write8_delegate(FUNC(gottlieb_state::stooges_output_w),this)); } diff --git a/src/mame/drivers/grchamp.cpp b/src/mame/drivers/grchamp.cpp index 15b52ed0bdb..ae8518ba75b 100644 --- a/src/mame/drivers/grchamp.cpp +++ b/src/mame/drivers/grchamp.cpp @@ -200,7 +200,7 @@ WRITE8_MEMBER(grchamp_state::cpu0_outputs_w) case 0x0e: /* OUT14 */ /* O-21 connector */ - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); break; } @@ -511,7 +511,7 @@ static ADDRESS_MAP_START( main_portmap, AS_IO, 8, grchamp_state ) AM_RANGE(0x19, 0x19) AM_MIRROR(0x60) AM_READ(pc3259_3_r) AM_RANGE(0x00, 0x0f) AM_MIRROR(0x40) AM_WRITE(cpu0_outputs_w) AM_RANGE(0x10, 0x13) AM_MIRROR(0x40) AM_WRITE(main_to_sub_comm_w) - AM_RANGE(0x20, 0x2f) AM_MIRROR(0x53) AM_WRITE(led_board_w) + AM_RANGE(0x20, 0x20) AM_SELECT(0x0c) AM_MIRROR(0x53) AM_WRITE(led_board_w) ADDRESS_MAP_END @@ -543,7 +543,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, grchamp_state ) AM_RANGE(0x4803, 0x4803) AM_MIRROR(0x07f8) AM_DEVREAD("ay2", ay8910_device, data_r) AM_RANGE(0x4804, 0x4805) AM_MIRROR(0x07fa) AM_DEVWRITE("ay3", ay8910_device, address_data_w) AM_RANGE(0x4805, 0x4805) AM_MIRROR(0x07fa) AM_DEVREAD("ay3", ay8910_device, data_r) - AM_RANGE(0x5000, 0x5000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x5000, 0x5000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -680,6 +680,8 @@ static MACHINE_CONFIG_START( grchamp, grchamp_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, SOUND_CLOCK/4) /* 3B */ MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(grchamp_state, portA_0_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(grchamp_state, portB_0_w)) diff --git a/src/mame/drivers/gstriker.cpp b/src/mame/drivers/gstriker.cpp index ca2ad772f7f..a56b4ae3cd3 100644 --- a/src/mame/drivers/gstriker.cpp +++ b/src/mame/drivers/gstriker.cpp @@ -202,7 +202,7 @@ WRITE16_MEMBER(gstriker_state::sound_command_w) if (ACCESSING_BITS_0_7) { m_pending_command = 1; - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -299,7 +299,7 @@ static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, gstriker_state ) AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) AM_RANGE(0x04, 0x04) AM_WRITE(sh_bankswitch_w) AM_RANGE(0x08, 0x08) AM_WRITE(sh_pending_command_clear_w) - AM_RANGE(0x0c, 0x0c) AM_READ(soundlatch_byte_r) + AM_RANGE(0x0c, 0x0c) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -549,6 +549,8 @@ static MACHINE_CONFIG_START( gstriker, gstriker_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) diff --git a/src/mame/drivers/gsword.cpp b/src/mame/drivers/gsword.cpp index b7a694cb30e..8d05a02050f 100644 --- a/src/mame/drivers/gsword.cpp +++ b/src/mame/drivers/gsword.cpp @@ -146,7 +146,6 @@ reg: 0->1 (main->2nd) / : (1->0) 2nd->main : #include "emu.h" #include "cpu/z80/z80.h" #include "machine/tait8741.h" -#include "sound/msm5205.h" #include "includes/gsword.h" @@ -308,7 +307,7 @@ WRITE8_MEMBER(gsword_state::gsword_adpcm_data_w) WRITE8_MEMBER(gsword_state::adpcm_soundcommand_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -364,7 +363,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( cpu3_map, AS_PROGRAM, 8, gsword_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x8000) AM_WRITE(gsword_adpcm_data_w) - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -669,6 +668,8 @@ static MACHINE_CONFIG_START( gsword, gsword_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, XTAL_18MHz/12) /* verified on pcb */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) diff --git a/src/mame/drivers/halleys.cpp b/src/mame/drivers/halleys.cpp index 8a8737dc516..45fcde5b1f4 100644 --- a/src/mame/drivers/halleys.cpp +++ b/src/mame/drivers/halleys.cpp @@ -164,6 +164,7 @@ Video sync 6 F Video sync Post 6 F Post #include "emu.h" #include "cpu/z80/z80.h" #include "includes/taitoipt.h" +#include "machine/gen_latch.h" #include "cpu/m6809/m6809.h" #include "sound/ay8910.h" @@ -217,7 +218,8 @@ public: m_io_ram(*this, "io_ram"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } UINT16 *m_render_layer[MAX_LAYERS]; UINT8 m_sound_fifo[MAX_SOUNDS]; @@ -285,6 +287,7 @@ public: required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; }; @@ -887,7 +890,7 @@ COMMAND_MODE: second pass at the same location with zeroes. In addition the X and Y values passed to the blitter do not reflect the tiles true locations. For example, tiles near the top or bottom of the screen - are positioned resonably close but those in the middle are oddly + are positioned reasonably close but those in the middle are oddly shifted toward either side. The tiles also resemble predefined patterns but I don't know if there are supposed to be lookup tables in ROM or hard-wired to the blitter chips. @@ -934,13 +937,20 @@ COMMAND_MODE: ax = (UINT16)src1_ptr[edx]; al = src1_ptr[edx+0x10000]; ax |= BG_RGB; - if (al & 0x01) dst_ptr[ecx] = ax; ecx++; ecx &= WARPMASK; - if (al & 0x02) dst_ptr[ecx] = ax; ecx++; ecx &= WARPMASK; - if (al & 0x04) dst_ptr[ecx] = ax; ecx++; ecx &= WARPMASK; - if (al & 0x08) dst_ptr[ecx] = ax; ecx++; ecx &= WARPMASK; - if (al & 0x10) dst_ptr[ecx] = ax; ecx++; ecx &= WARPMASK; - if (al & 0x20) dst_ptr[ecx] = ax; ecx++; ecx &= WARPMASK; - if (al & 0x40) dst_ptr[ecx] = ax; ecx++; ecx &= WARPMASK; + if (al & 0x01) dst_ptr[ecx] = ax; + ecx++; ecx &= WARPMASK; + if (al & 0x02) dst_ptr[ecx] = ax; + ecx++; ecx &= WARPMASK; + if (al & 0x04) dst_ptr[ecx] = ax; + ecx++; ecx &= WARPMASK; + if (al & 0x08) dst_ptr[ecx] = ax; + ecx++; ecx &= WARPMASK; + if (al & 0x10) dst_ptr[ecx] = ax; + ecx++; ecx &= WARPMASK; + if (al & 0x20) dst_ptr[ecx] = ax; + ecx++; ecx &= WARPMASK; + if (al & 0x40) dst_ptr[ecx] = ax; + ecx++; ecx &= WARPMASK; if (al & 0x80) dst_ptr[ecx] = ax; dst_ptr += SCREEN_WIDTH; } while (++edx); @@ -1401,12 +1411,18 @@ void halleys_state::copy_fixed_xp(bitmap_ind16 &bitmap, UINT16 *source) do { ax = esi[ecx]; bx = esi[ecx+1]; - if (ax) edi[ecx ] = ax; ax = esi[ecx+2]; - if (bx) edi[ecx+1] = bx; bx = esi[ecx+3]; - if (ax) edi[ecx+2] = ax; ax = esi[ecx+4]; - if (bx) edi[ecx+3] = bx; bx = esi[ecx+5]; - if (ax) edi[ecx+4] = ax; ax = esi[ecx+6]; - if (bx) edi[ecx+5] = bx; bx = esi[ecx+7]; + if (ax) edi[ecx ] = ax; + ax = esi[ecx+2]; + if (bx) edi[ecx+1] = bx; + bx = esi[ecx+3]; + if (ax) edi[ecx+2] = ax; + ax = esi[ecx+4]; + if (bx) edi[ecx+3] = bx; + bx = esi[ecx+5]; + if (ax) edi[ecx+4] = ax; + ax = esi[ecx+6]; + if (bx) edi[ecx+5] = bx; + bx = esi[ecx+7]; if (ax) edi[ecx+6] = ax; if (bx) edi[ecx+7] = bx; } @@ -1437,24 +1453,40 @@ void halleys_state::copy_fixed_2b(bitmap_ind16 &bitmap, UINT16 *source) ax = esi[ecx]; bx = esi[ecx+1]; - if (!(ax)) goto SKIP0; if (!(ax&SP_2BACK)) goto DRAW0; if (edi[ecx ]) goto SKIP0; + if (!(ax)) goto SKIP0; + if (!(ax&SP_2BACK)) goto DRAW0; + if (edi[ecx ]) goto SKIP0; DRAW0: edi[ecx ] = ax; SKIP0: ax = esi[ecx+2]; - if (!(bx)) goto SKIP1; if (!(bx&SP_2BACK)) goto DRAW1; if (edi[ecx+1]) goto SKIP1; + if (!(bx)) goto SKIP1; + if (!(bx&SP_2BACK)) goto DRAW1; + if (edi[ecx+1]) goto SKIP1; DRAW1: edi[ecx+1] = bx; SKIP1: bx = esi[ecx+3]; - if (!(ax)) goto SKIP2; if (!(ax&SP_2BACK)) goto DRAW2; if (edi[ecx+2]) goto SKIP2; + if (!(ax)) goto SKIP2; + if (!(ax&SP_2BACK)) goto DRAW2; + if (edi[ecx+2]) goto SKIP2; DRAW2: edi[ecx+2] = ax; SKIP2: ax = esi[ecx+4]; - if (!(bx)) goto SKIP3; if (!(bx&SP_2BACK)) goto DRAW3; if (edi[ecx+3]) goto SKIP3; + if (!(bx)) goto SKIP3; + if (!(bx&SP_2BACK)) goto DRAW3; + if (edi[ecx+3]) goto SKIP3; DRAW3: edi[ecx+3] = bx; SKIP3: bx = esi[ecx+5]; - if (!(ax)) goto SKIP4; if (!(ax&SP_2BACK)) goto DRAW4; if (edi[ecx+4]) goto SKIP4; + if (!(ax)) goto SKIP4; + if (!(ax&SP_2BACK)) goto DRAW4; + if (edi[ecx+4]) goto SKIP4; DRAW4: edi[ecx+4] = ax; SKIP4: ax = esi[ecx+6]; - if (!(bx)) goto SKIP5; if (!(bx&SP_2BACK)) goto DRAW5; if (edi[ecx+5]) goto SKIP5; + if (!(bx)) goto SKIP5; + if (!(bx&SP_2BACK)) goto DRAW5; + if (edi[ecx+5]) goto SKIP5; DRAW5: edi[ecx+5] = bx; SKIP5: bx = esi[ecx+7]; - if (!(ax)) goto SKIP6; if (!(ax&SP_2BACK)) goto DRAW6; if (edi[ecx+6]) goto SKIP6; + if (!(ax)) goto SKIP6; + if (!(ax&SP_2BACK)) goto DRAW6; + if (edi[ecx+6]) goto SKIP6; DRAW6: edi[ecx+6] = ax; SKIP6: - if (!(bx)) continue; if (!(bx&SP_2BACK)) goto DRAW7; if (edi[ecx+7]) continue; + if (!(bx)) continue; + if (!(bx&SP_2BACK)) goto DRAW7; + if (edi[ecx+7]) continue; DRAW7: edi[ecx+7] = bx; } while (ecx += 8); @@ -1643,7 +1675,7 @@ WRITE8_MEMBER(halleys_state::sndnmi_msk_w) WRITE8_MEMBER(halleys_state::soundcommand_w) { m_io_ram[0x8a] = data; - soundlatch_byte_w(space,offset,data); + m_soundlatch->write(space,offset,data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -1711,7 +1743,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, halleys_state ) AM_RANGE(0x4803, 0x4803) AM_DEVREAD("ay3", ay8910_device, data_r) AM_RANGE(0x4804, 0x4805) AM_DEVWRITE("ay4", ay8910_device, address_data_w) AM_RANGE(0x4805, 0x4805) AM_DEVREAD("ay4", ay8910_device, data_r) - AM_RANGE(0x5000, 0x5000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x5000, 0x5000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xe000, 0xefff) AM_ROM // space for diagnostic ROM ADDRESS_MAP_END @@ -1993,6 +2025,8 @@ static MACHINE_CONFIG_START( halleys, halleys_state ) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, XTAL_6MHz/4) /* verified on pcb */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp index a1daca3724d..45e3f433897 100644 --- a/src/mame/drivers/hh_hmcs40.cpp +++ b/src/mame/drivers/hh_hmcs40.cpp @@ -87,6 +87,7 @@ #include "rendlay.h" #include "cpu/hmcs40/hmcs40.h" #include "cpu/cop400/cop400.h" +#include "machine/gen_latch.h" #include "sound/speaker.h" // internal artwork @@ -102,6 +103,8 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2"), m_inp_matrix(*this, "IN"), m_speaker(*this, "speaker"), m_display_wait(33), @@ -112,6 +115,8 @@ public: // devices required_device<cpu_device> m_maincpu; optional_device<cpu_device> m_audiocpu; + optional_device<generic_latch_8_device> m_soundlatch; + optional_device<generic_latch_8_device> m_soundlatch2; optional_ioport_array<7> m_inp_matrix; // max 7 optional_device<speaker_sound_device> m_speaker; @@ -1798,7 +1803,7 @@ READ8_MEMBER(pairmtch_state::input_r) WRITE8_MEMBER(pairmtch_state::sound_w) { // R5x: soundlatch (to audiocpu R2x) - soundlatch_byte_w(space, 0, BITSWAP8(data,7,6,5,4,0,1,2,3)); + m_soundlatch->write(space, 0, BITSWAP8(data,7,6,5,4,0,1,2,3)); } @@ -1807,7 +1812,7 @@ WRITE8_MEMBER(pairmtch_state::sound_w) WRITE8_MEMBER(pairmtch_state::sound2_w) { // R2x: soundlatch (to maincpu R5x) - soundlatch2_byte_w(space, 0, BITSWAP8(data,7,6,5,4,0,1,2,3)); + m_soundlatch2->write(space, 0, BITSWAP8(data,7,6,5,4,0,1,2,3)); } WRITE16_MEMBER(pairmtch_state::speaker_w) @@ -1859,14 +1864,14 @@ static MACHINE_CONFIG_START( pairmtch, pairmtch_state ) MCFG_HMCS40_WRITE_R_CB(3, WRITE8(pairmtch_state, plate_w)) MCFG_HMCS40_READ_R_CB(4, READ8(pairmtch_state, input_r)) MCFG_HMCS40_WRITE_R_CB(5, WRITE8(pairmtch_state, sound_w)) - MCFG_HMCS40_READ_R_CB(5, READ8(driver_device, soundlatch2_byte_r)) + MCFG_HMCS40_READ_R_CB(5, DEVREAD8("soundlatch2", generic_latch_8_device, read)) MCFG_HMCS40_WRITE_R_CB(6, WRITE8(pairmtch_state, plate_w)) MCFG_HMCS40_WRITE_D_CB(WRITE16(pairmtch_state, grid_w)) MCFG_HMCS40_READ_D_CB(IOPORT("IN.2")) MCFG_CPU_ADD("audiocpu", HD38820, 400000) // approximation MCFG_HMCS40_WRITE_R_CB(2, WRITE8(pairmtch_state, sound2_w)) - MCFG_HMCS40_READ_R_CB(2, READ8(driver_device, soundlatch_byte_r)) + MCFG_HMCS40_READ_R_CB(2, DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_HMCS40_WRITE_D_CB(WRITE16(pairmtch_state, speaker_w)) MCFG_QUANTUM_PERFECT_CPU("maincpu") @@ -1876,6 +1881,10 @@ static MACHINE_CONFIG_START( pairmtch, pairmtch_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END diff --git a/src/mame/drivers/himesiki.cpp b/src/mame/drivers/himesiki.cpp index f357beaac16..c61d2939a01 100644 --- a/src/mame/drivers/himesiki.cpp +++ b/src/mame/drivers/himesiki.cpp @@ -113,7 +113,7 @@ WRITE8_MEMBER(himesiki_state::himesiki_rombank_w) WRITE8_MEMBER(himesiki_state::himesiki_sound_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_subcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -149,7 +149,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( himesiki_iom1, AS_IO, 8, himesiki_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ym2203", ym2203_device, read, write) - AM_RANGE(0x04, 0x04) AM_READ(soundlatch_byte_r) + AM_RANGE(0x04, 0x04) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END /****************************************************************************/ @@ -456,6 +456,9 @@ static MACHINE_CONFIG_START( himesiki, himesiki_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym2203", YM2203, CLK2/4) // ?? MCFG_YM2203_IRQ_HANDLER(INPUTLINE("sub", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.10) @@ -523,7 +526,7 @@ ROM_START( androidpo ) ROM_LOAD16_BYTE( "MITSUBISHI__AD-7__M5L27512K.botpcb.bc9", 0x00001, 0x10000, CRC(611ff400) SHA1(1a9aed33d0e3f063811f92b9fee3ecbff0e965bf) ) ROM_REGION( 0x2000, "plds", 0 ) - ROM_LOAD( "RICOH_7A2_19__EPL10P8BP_JAPAN_I.f1.jed", 0x0000, 0x0473, CRC(58520dfc) SHA1(2b7c6eadfbe315bc3ebd91519d53fc873676c42c) ) + ROM_LOAD( "RICOH_7A2_19__EPL10P8BP_JAPAN_I.f1.jed", 0x0000, 0x0473, CRC(c5e51ea2) SHA1(3e35a30935f562227f0afa32a6be6eb33f9a8372) ) ROM_LOAD( "RICOH_7A2_19__EPL10P8BP_JAPAN_M.j3.jed", 0x1000, 0x0473, CRC(807d1553) SHA1(257be9eacd57d2e2dbaab3be5725d8d06d6a9a0b) ) ROM_REGION( 0x20000, "spr_p103a", ROMREGION_ERASEFF ) diff --git a/src/mame/drivers/homedata.cpp b/src/mame/drivers/homedata.cpp index ce48e62fc65..fdd5ee0029e 100644 --- a/src/mame/drivers/homedata.cpp +++ b/src/mame/drivers/homedata.cpp @@ -222,8 +222,7 @@ Custom: GX61A01 #include "cpu/m6809/m6809.h" #include "cpu/upd7810/upd7810.h" #include "includes/homedata.h" -#include "sound/dac.h" -#include "sound/2203intf.h" + INTERRUPT_GEN_MEMBER(homedata_state::homedata_irq) { @@ -289,7 +288,7 @@ WRITE8_MEMBER(homedata_state::mrokumei_keyboard_select_w) READ8_MEMBER(homedata_state::mrokumei_sound_io_r) { if (m_sndbank & 4) - return(soundlatch_byte_r(space, 0)); + return(m_soundlatch->read(space, 0)); else return memregion("audiocpu")->base()[0x10000 + offset + (m_sndbank & 1) * 0x10000]; } @@ -317,7 +316,7 @@ WRITE8_MEMBER(homedata_state::mrokumei_sound_io_w) WRITE8_MEMBER(homedata_state::mrokumei_sound_cmd_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -1159,8 +1158,6 @@ GFXDECODE_END MACHINE_START_MEMBER(homedata_state,homedata) { - m_sn = machine().device<sn76489a_device>("snsnd"); - save_item(NAME(m_visible_page)); save_item(NAME(m_flipscreen)); save_item(NAME(m_blitter_bank)); @@ -1286,6 +1283,8 @@ static MACHINE_CONFIG_START( mrokumei, homedata_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("snsnd", SN76489A, 16000000/4) // SN76489AN actually MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) diff --git a/src/mame/drivers/hyperscan.cpp b/src/mame/drivers/hyperscan.cpp index 6813997dc33..da5fd6e7895 100644 --- a/src/mame/drivers/hyperscan.cpp +++ b/src/mame/drivers/hyperscan.cpp @@ -588,8 +588,8 @@ static ADDRESS_MAP_START(spg290_mem, AS_PROGRAM, 32, hyperscan_state) AM_RANGE(0x08000000, 0x09ffffff) AM_READWRITE(spg290_regs_r, spg290_regs_w) AM_RANGE(0x0a000000, 0x0a003fff) AM_RAM // internal SRAM AM_RANGE(0x0b000000, 0x0b007fff) AM_ROM AM_REGION("spg290", 0) // internal ROM - AM_RANGE(0x1e000000, 0x1e0fffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x0e000000) - AM_RANGE(0x1f000000, 0x1f0fffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x0e000000) + AM_RANGE(0x10000000, 0x100fffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x0e000000) + AM_RANGE(0x11000000, 0x110fffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x0e000000) ADDRESS_MAP_END /* Input ports */ diff --git a/src/mame/drivers/inufuku.cpp b/src/mame/drivers/inufuku.cpp index ab422b0a2dc..6bc01f82fd1 100644 --- a/src/mame/drivers/inufuku.cpp +++ b/src/mame/drivers/inufuku.cpp @@ -96,7 +96,7 @@ WRITE16_MEMBER(inufuku_state::inufuku_soundcommand_w) return; m_pending_command = 1; - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -177,7 +177,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( inufuku_sound_io_map, AS_IO, 8, inufuku_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_WRITE(inufuku_soundrombank_w) - AM_RANGE(0x04, 0x04) AM_READ(soundlatch_byte_r) AM_WRITE(pending_command_clear_w) + AM_RANGE(0x04, 0x04) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(pending_command_clear_w) AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) ADDRESS_MAP_END @@ -318,18 +318,6 @@ GFXDECODE_END /****************************************************************************** - Sound definitions - -******************************************************************************/ - -WRITE_LINE_MEMBER(inufuku_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - - -/****************************************************************************** - Machine driver ******************************************************************************/ @@ -403,8 +391,10 @@ static MACHINE_CONFIG_START( inufuku, inufuku_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, 32000000/4) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(inufuku_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) MCFG_SOUND_ROUTE(1, "mono", 0.75) MCFG_SOUND_ROUTE(2, "mono", 0.75) diff --git a/src/mame/drivers/itech32.cpp b/src/mame/drivers/itech32.cpp index dbfba1fcadb..928a300dee9 100644 --- a/src/mame/drivers/itech32.cpp +++ b/src/mame/drivers/itech32.cpp @@ -982,7 +982,7 @@ static ADDRESS_MAP_START( drivedge_tms1_map, AS_PROGRAM, 32, itech32_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( drivedge_tms2_map, AS_PROGRAM, 32, itech32_state ) - AM_RANGE(0x008000, 0x0083ff) AM_MIRROR(0x8400) AM_RAM_WRITE(tms2_trigger_w) AM_SHARE("tms2_ram") + AM_RANGE(0x000000, 0x0003ff) AM_MIRROR(0x8400) AM_RAM_WRITE(tms2_trigger_w) AM_SHARE("tms2_ram") AM_RANGE(0x080000, 0x08ffff) AM_RAM ADDRESS_MAP_END diff --git a/src/mame/drivers/jedi.cpp b/src/mame/drivers/jedi.cpp index 11664bd166a..47242667e31 100644 --- a/src/mame/drivers/jedi.cpp +++ b/src/mame/drivers/jedi.cpp @@ -267,7 +267,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, jedi_state ) AM_RANGE(0x1000, 0x13ff) AM_NOP AM_RANGE(0x1400, 0x1400) AM_MIRROR(0x03ff) AM_READ(jedi_audio_ack_latch_r) AM_WRITENOP AM_RANGE(0x1800, 0x1800) AM_MIRROR(0x03ff) AM_READ(a2d_data_r) AM_WRITENOP - AM_RANGE(0x1c00, 0x1c01) AM_MIRROR(0x007f) AM_READNOP AM_WRITE(nvram_enable_w) + AM_RANGE(0x1c00, 0x1c01) AM_MIRROR(0x007e) AM_READNOP AM_WRITE(nvram_enable_w) AM_RANGE(0x1c80, 0x1c82) AM_MIRROR(0x0078) AM_READNOP AM_WRITE(a2d_select_w) AM_RANGE(0x1c83, 0x1c87) AM_MIRROR(0x0078) AM_NOP AM_RANGE(0x1d00, 0x1d00) AM_MIRROR(0x007f) AM_NOP /* write: NVRAM store */ diff --git a/src/mame/drivers/juicebox.cpp b/src/mame/drivers/juicebox.cpp index cb9d4fa068b..f0e58b3138c 100644 --- a/src/mame/drivers/juicebox.cpp +++ b/src/mame/drivers/juicebox.cpp @@ -262,23 +262,23 @@ void juicebox_state::machine_start() smc_init(); - space.install_readwrite_handler(0x01c00000, 0x01c0000b, 0, 0, read32_delegate(FUNC(s3c44b0_device::cpuwrap_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::cpuwrap_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01d00000, 0x01d0002b, 0, 0, read32_delegate(FUNC(s3c44b0_device::uart_0_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::uart_0_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01d04000, 0x01d0402b, 0, 0, read32_delegate(FUNC(s3c44b0_device::uart_1_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::uart_1_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01d14000, 0x01d14013, 0, 0, read32_delegate(FUNC(s3c44b0_device::sio_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::sio_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01d18000, 0x01d18013, 0, 0, read32_delegate(FUNC(s3c44b0_device::iis_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::iis_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01d20000, 0x01d20057, 0, 0, read32_delegate(FUNC(s3c44b0_device::gpio_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::gpio_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01d30000, 0x01d3000b, 0, 0, read32_delegate(FUNC(s3c44b0_device::wdt_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::wdt_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01d40000, 0x01d4000b, 0, 0, read32_delegate(FUNC(s3c44b0_device::adc_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::adc_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01d50000, 0x01d5004f, 0, 0, read32_delegate(FUNC(s3c44b0_device::pwm_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::pwm_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01d60000, 0x01d6000f, 0, 0, read32_delegate(FUNC(s3c44b0_device::iic_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::iic_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01d80000, 0x01d8000f, 0, 0, read32_delegate(FUNC(s3c44b0_device::clkpow_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::clkpow_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01e00000, 0x01e0003f, 0, 0, read32_delegate(FUNC(s3c44b0_device::irq_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::irq_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01e80000, 0x01e8001b, 0, 0, read32_delegate(FUNC(s3c44b0_device::zdma_0_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::zdma_0_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01e80020, 0x01e8003b, 0, 0, read32_delegate(FUNC(s3c44b0_device::zdma_1_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::zdma_1_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01f00000, 0x01f00047, 0, 0, read32_delegate(FUNC(s3c44b0_device::lcd_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::lcd_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01f80000, 0x01f8001b, 0, 0, read32_delegate(FUNC(s3c44b0_device::bdma_0_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::bdma_0_w), &(*m_s3c44b0))); - space.install_readwrite_handler(0x01f80020, 0x01f8003b, 0, 0, read32_delegate(FUNC(s3c44b0_device::bdma_1_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::bdma_1_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01c00000, 0x01c0000b, read32_delegate(FUNC(s3c44b0_device::cpuwrap_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::cpuwrap_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01d00000, 0x01d0002b, read32_delegate(FUNC(s3c44b0_device::uart_0_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::uart_0_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01d04000, 0x01d0402b, read32_delegate(FUNC(s3c44b0_device::uart_1_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::uart_1_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01d14000, 0x01d14013, read32_delegate(FUNC(s3c44b0_device::sio_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::sio_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01d18000, 0x01d18013, read32_delegate(FUNC(s3c44b0_device::iis_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::iis_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01d20000, 0x01d20057, read32_delegate(FUNC(s3c44b0_device::gpio_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::gpio_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01d30000, 0x01d3000b, read32_delegate(FUNC(s3c44b0_device::wdt_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::wdt_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01d40000, 0x01d4000b, read32_delegate(FUNC(s3c44b0_device::adc_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::adc_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01d50000, 0x01d5004f, read32_delegate(FUNC(s3c44b0_device::pwm_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::pwm_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01d60000, 0x01d6000f, read32_delegate(FUNC(s3c44b0_device::iic_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::iic_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01d80000, 0x01d8000f, read32_delegate(FUNC(s3c44b0_device::clkpow_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::clkpow_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01e00000, 0x01e0003f, read32_delegate(FUNC(s3c44b0_device::irq_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::irq_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01e80000, 0x01e8001b, read32_delegate(FUNC(s3c44b0_device::zdma_0_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::zdma_0_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01e80020, 0x01e8003b, read32_delegate(FUNC(s3c44b0_device::zdma_1_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::zdma_1_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01f00000, 0x01f00047, read32_delegate(FUNC(s3c44b0_device::lcd_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::lcd_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01f80000, 0x01f8001b, read32_delegate(FUNC(s3c44b0_device::bdma_0_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::bdma_0_w), &(*m_s3c44b0))); + space.install_readwrite_handler(0x01f80020, 0x01f8003b, read32_delegate(FUNC(s3c44b0_device::bdma_1_r), &(*m_s3c44b0)), write32_delegate(FUNC(s3c44b0_device::bdma_1_w), &(*m_s3c44b0))); } void juicebox_state::machine_reset() diff --git a/src/mame/drivers/jupace.cpp b/src/mame/drivers/jupace.cpp index 802b0c68530..2809fcc0daa 100644 --- a/src/mame/drivers/jupace.cpp +++ b/src/mame/drivers/jupace.cpp @@ -418,7 +418,7 @@ ADDRESS_MAP_END //------------------------------------------------- static ADDRESS_MAP_START( ace_io, AS_IO, 8, ace_state ) - AM_RANGE(0x00, 0x00) AM_MIRROR(0xfffe) AM_MASK(0xff00) AM_READWRITE(io_r, io_w) + AM_RANGE(0x00, 0x00) AM_MIRROR(0x00fe) AM_SELECT(0xff00) AM_READWRITE(io_r, io_w) AM_RANGE(0x01, 0x01) AM_MIRROR(0xff00) AM_READ_PORT("JOY") AM_RANGE(0x41, 0x41) AM_MIRROR(0xff80) AM_READWRITE(ppi_pa_r, ppi_pa_w) AM_RANGE(0x43, 0x43) AM_MIRROR(0xff80) AM_READWRITE(ppi_pb_r, ppi_pb_w) diff --git a/src/mame/drivers/kangaroo.cpp b/src/mame/drivers/kangaroo.cpp index 54ef454f871..c213279a5f8 100644 --- a/src/mame/drivers/kangaroo.cpp +++ b/src/mame/drivers/kangaroo.cpp @@ -158,6 +158,7 @@ #include "emu.h" #include "cpu/mb88xx/mb88xx.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/ay8910.h" #include "includes/kangaroo.h" @@ -256,7 +257,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, kangaroo_state ) AM_RANGE(0xe000, 0xe3ff) AM_RAM AM_RANGE(0xe400, 0xe400) AM_MIRROR(0x03ff) AM_READ_PORT("DSW0") AM_RANGE(0xe800, 0xe80a) AM_MIRROR(0x03f0) AM_WRITE(kangaroo_video_control_w) AM_SHARE("video_control") - AM_RANGE(0xec00, 0xec00) AM_MIRROR(0x00ff) AM_READ_PORT("IN0") AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xec00, 0xec00) AM_MIRROR(0x00ff) AM_READ_PORT("IN0") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xed00, 0xed00) AM_MIRROR(0x00ff) AM_READ_PORT("IN1") AM_WRITE(kangaroo_coin_counter_w) AM_RANGE(0xee00, 0xee00) AM_MIRROR(0x00ff) AM_READ_PORT("IN2") ADDRESS_MAP_END @@ -272,7 +273,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, kangaroo_state ) AM_RANGE(0x0000, 0x0fff) AM_ROM AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0x0c00) AM_RAM - AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x0fff) AM_READ(soundlatch_byte_r) + AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x0fff) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x7000, 0x7000) AM_MIRROR(0x0fff) AM_DEVWRITE("aysnd", ay8910_device, data_w) AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x0fff) AM_DEVWRITE("aysnd", ay8910_device, address_w) ADDRESS_MAP_END @@ -282,7 +283,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, kangaroo_state ) AM_RANGE(0x0000, 0x0fff) AM_ROM AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0x0c00) AM_RAM - AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x0fff) AM_READ(soundlatch_byte_r) + AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x0fff) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x7000, 0x7000) AM_MIRROR(0x0fff) AM_DEVWRITE("aysnd", ay8910_device, data_w) AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x0fff) AM_DEVWRITE("aysnd", ay8910_device, address_w) ADDRESS_MAP_END @@ -447,6 +448,9 @@ static MACHINE_CONFIG_START( nomcu, kangaroo_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, MASTER_CLOCK/8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END diff --git a/src/mame/drivers/kas89.cpp b/src/mame/drivers/kas89.cpp index cf7cd47487f..3876b2f2da5 100644 --- a/src/mame/drivers/kas89.cpp +++ b/src/mame/drivers/kas89.cpp @@ -34,7 +34,7 @@ 1x Z80 (audio) @ 3.578 MHz. AY-3-8910 @ 1789 kHz. - 1x Unknown metallick brick (Yamaha MSX2 VDP inside). + 1x Unknown metallic brick (Yamaha MSX2 VDP inside). 1x 8 DIP switches bank. @@ -197,6 +197,7 @@ #include "cpu/z80/z80.h" #include "sound/ay8910.h" #include "video/v9938.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "kas89.lh" @@ -209,6 +210,7 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_v9938(*this, "v9938"), + m_soundlatch(*this, "soundlatch"), m_pl1(*this, "PL1"), m_pl2(*this, "PL2"), m_pl3(*this, "PL3"), @@ -230,6 +232,7 @@ public: required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; required_device<v9938_device> m_v9938; + required_device<generic_latch_8_device> m_soundlatch; required_ioport m_pl1; required_ioport m_pl2; required_ioport m_pl3; @@ -384,7 +387,7 @@ WRITE8_MEMBER(kas89_state::sound_comm_w) else { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(0, ASSERT_LINE ); } } @@ -583,7 +586,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( audio_io, AS_IO, 8, kas89_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_WRITE(int_ack_w) // comm out (1st Z80). seems to write here the value previously read through soundlatch (port 0x02). - AM_RANGE(0x02, 0x02) AM_READ(soundlatch_byte_r) + AM_RANGE(0x02, 0x02) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x04, 0x04) AM_DEVREAD("aysnd", ay8910_device, data_r) AM_RANGE(0x04, 0x05) AM_DEVWRITE("aysnd", ay8910_device, data_address_w) ADDRESS_MAP_END @@ -780,6 +783,9 @@ static MACHINE_CONFIG_START( kas89, kas89_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, MASTER_CLOCK/12) /* Confirmed */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/kickgoal.cpp b/src/mame/drivers/kickgoal.cpp index 818748e417e..f1f84912c10 100644 --- a/src/mame/drivers/kickgoal.cpp +++ b/src/mame/drivers/kickgoal.cpp @@ -480,7 +480,7 @@ static ADDRESS_MAP_START( kickgoal_program_map, AS_PROGRAM, 16, kickgoal_state ) /// AM_RANGE(0x30001e, 0x30001f) AM_WRITE(kickgoal_snd_w) AM_RANGE(0x800000, 0x800001) AM_READ_PORT("P1_P2") AM_RANGE(0x800002, 0x800003) AM_READ_PORT("SYSTEM") -/// AM_RANGE(0x800004, 0x800005) AM_WRITE(soundlatch_word_w) +/// AM_RANGE(0x800004, 0x800005) AM_DEVWRITE("soundlatch", generic_latch_16_device, write) AM_RANGE(0x800004, 0x800005) AM_WRITE(actionhw_snd_w) AM_RANGE(0x900000, 0x900005) AM_WRITE(kickgoal_eeprom_w) AM_RANGE(0x900006, 0x900007) AM_READ(kickgoal_eeprom_r) @@ -633,7 +633,7 @@ static MACHINE_CONFIG_START( kickgoal, kickgoal_state ) MCFG_CPU_PERIODIC_INT_DRIVER(kickgoal_state, kickgoal_interrupt, 240) MCFG_CPU_ADD("audiocpu", PIC16C57, 12000000/4) /* 3MHz ? */ - MCFG_DEVICE_DISABLE() /* Disables since the internal rom isn't dumped */ + MCFG_DEVICE_DISABLE() /* Disabled since the internal rom isn't dumped */ /* Program and Data Maps are internal to the MCU */ MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") @@ -656,6 +656,9 @@ static MACHINE_CONFIG_START( kickgoal, kickgoal_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + //MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", 12000000/8, OKIM6295_PIN7_LOW) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) MACHINE_CONFIG_END @@ -668,7 +671,7 @@ static MACHINE_CONFIG_START( actionhw, kickgoal_state ) MCFG_CPU_VBLANK_INT_DRIVER("screen", kickgoal_state, irq6_line_hold) MCFG_CPU_ADD("audiocpu", PIC16C57, XTAL_12MHz/3) /* verified on pcb */ - MCFG_DEVICE_DISABLE() /* Disables since the internal rom isn't dumped */ + MCFG_DEVICE_DISABLE() /* Disabled since the internal rom isn't dumped */ /* Program and Data Maps are internal to the MCU */ MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") @@ -691,6 +694,9 @@ static MACHINE_CONFIG_START( actionhw, kickgoal_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + //MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", XTAL_12MHz/12, OKIM6295_PIN7_HIGH) /* verified on pcb */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) MACHINE_CONFIG_END diff --git a/src/mame/drivers/kingdrby.cpp b/src/mame/drivers/kingdrby.cpp index ac0f42de2bd..59174b9abfe 100644 --- a/src/mame/drivers/kingdrby.cpp +++ b/src/mame/drivers/kingdrby.cpp @@ -303,7 +303,7 @@ WRITE8_MEMBER(kingdrby_state::sound_cmd_w) m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); m_sound_cmd = data; /* soundlatch is unneeded since we are already using perfect interleave. */ - // soundlatch_byte_w(space,0, data); + // m_soundlatch->write(space,0, data); } diff --git a/src/mame/drivers/kingpin.cpp b/src/mame/drivers/kingpin.cpp index 6f72cd2ee2c..58026f44ccc 100644 --- a/src/mame/drivers/kingpin.cpp +++ b/src/mame/drivers/kingpin.cpp @@ -35,6 +35,7 @@ Todo: #include "cpu/z80/z80.h" #include "video/tms9928a.h" #include "sound/ay8910.h" +#include "machine/gen_latch.h" #include "machine/i8255.h" #include "machine/nvram.h" @@ -45,20 +46,21 @@ public: kingpin_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu") + m_audiocpu(*this, "audiocpu"), + m_soundlatch(*this, "soundlatch") { } required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE8_MEMBER(sound_nmi_w); - DECLARE_WRITE_LINE_MEMBER(vdp_interrupt); }; WRITE8_MEMBER(kingpin_state::sound_nmi_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -86,7 +88,7 @@ static ADDRESS_MAP_START( kingpin_sound_map, AS_PROGRAM, 8, kingpin_state ) //AM_RANGE(0x8400, 0x8400) AM_READNOP // ? //AM_RANGE(0x8401, 0x8401) AM_WRITENOP // ? AM_RANGE(0x8800, 0x8fff) AM_RAM - AM_RANGE(0x9000, 0x9000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x9000, 0x9000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -124,11 +126,6 @@ static INPUT_PORTS_START( kingpin ) INPUT_PORTS_END -WRITE_LINE_MEMBER(kingpin_state::vdp_interrupt) -{ - m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - static MACHINE_CONFIG_START( kingpin, kingpin_state ) /* basic machine hardware */ @@ -155,13 +152,16 @@ static MACHINE_CONFIG_START( kingpin, kingpin_state ) /* video hardware */ MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL_10_738635MHz / 2 ) MCFG_TMS9928A_VRAM_SIZE(0x4000) - MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(kingpin_state, vdp_interrupt)) + MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", 0)) MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" ) MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8912, XTAL_3_579545MHz) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END diff --git a/src/mame/drivers/kinst.cpp b/src/mame/drivers/kinst.cpp index 46775f6378b..00786922e1c 100644 --- a/src/mame/drivers/kinst.cpp +++ b/src/mame/drivers/kinst.cpp @@ -170,7 +170,6 @@ public: DECLARE_WRITE32_MEMBER(kinst_ide_w); DECLARE_READ32_MEMBER(kinst_ide_extra_r); DECLARE_WRITE32_MEMBER(kinst_ide_extra_w); - DECLARE_WRITE_LINE_MEMBER(ide_interrupt); DECLARE_DRIVER_INIT(kinst); DECLARE_DRIVER_INIT(kinst2); virtual void machine_start() override; @@ -305,13 +304,6 @@ INTERRUPT_GEN_MEMBER(kinst_state::irq0_start) } -WRITE_LINE_MEMBER(kinst_state::ide_interrupt) -{ - m_maincpu->set_input_line(1, state); -} - - - /************************************* * * IDE controller access @@ -680,7 +672,7 @@ static MACHINE_CONFIG_START( kinst, kinst_state ) MCFG_ATA_INTERFACE_ADD("ata", ata_devices, "hdd", nullptr, true) - MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE(kinst_state, ide_interrupt)) + MCFG_ATA_INTERFACE_IRQ_HANDLER(INPUTLINE("maincpu", 1)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/kissproto.cpp b/src/mame/drivers/kissproto.cpp index 4ba8f744db8..3f0f801a4e4 100644 --- a/src/mame/drivers/kissproto.cpp +++ b/src/mame/drivers/kissproto.cpp @@ -32,7 +32,7 @@ public: static ADDRESS_MAP_START( kissp_map, AS_PROGRAM, 8, kissp_state ) - AM_RANGE(0x0000, 0xffff) AM_NOP + AM_RANGE(0x0000, 0x0fff) AM_NOP ADDRESS_MAP_END static INPUT_PORTS_START( kissp ) diff --git a/src/mame/drivers/kncljoe.cpp b/src/mame/drivers/kncljoe.cpp index 4b52111a3b9..2343e57c5c6 100644 --- a/src/mame/drivers/kncljoe.cpp +++ b/src/mame/drivers/kncljoe.cpp @@ -30,7 +30,6 @@ Updates: #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m6800/m6800.h" -#include "sound/ay8910.h" #include "sound/sn76496.h" #include "includes/kncljoe.h" @@ -38,7 +37,7 @@ Updates: WRITE8_MEMBER(kncljoe_state::sound_cmd_w) { if ((data & 0x80) == 0) - soundlatch_byte_w(space, 0, data & 0x7f); + m_soundlatch->write(space, 0, data & 0x7f); else m_soundcpu->set_input_line(0, ASSERT_LINE); } @@ -70,24 +69,20 @@ WRITE8_MEMBER(kncljoe_state::m6803_port1_w) WRITE8_MEMBER(kncljoe_state::m6803_port2_w) { - ay8910_device *ay8910 = machine().device<ay8910_device>("aysnd"); - /* write latch */ if ((m_port2 & 0x01) && !(data & 0x01)) { /* control or data port? */ if (m_port2 & 0x08) - ay8910->data_address_w(space, m_port2 >> 2, m_port1); + m_ay8910->data_address_w(space, m_port2 >> 2, m_port1); } m_port2 = data; } READ8_MEMBER(kncljoe_state::m6803_port1_r) { - ay8910_device *ay8910 = machine().device<ay8910_device>("aysnd"); - if (m_port2 & 0x08) - return ay8910->data_r(space, 0); + return m_ay8910->data_r(space, 0); return 0xff; } @@ -286,8 +281,10 @@ static MACHINE_CONFIG_START( kncljoe, kncljoe_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, XTAL_3_579545MHz/4) /* verified on pcb */ - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(kncljoe_state, unused_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) diff --git a/src/mame/drivers/ksayakyu.cpp b/src/mame/drivers/ksayakyu.cpp index 050a11fc592..15707b5314d 100644 --- a/src/mame/drivers/ksayakyu.cpp +++ b/src/mame/drivers/ksayakyu.cpp @@ -89,7 +89,7 @@ WRITE8_MEMBER(ksayakyu_state::bank_select_w) WRITE8_MEMBER(ksayakyu_state::latch_w) { m_sound_status &= ~0x80; - soundlatch_byte_w(space, 0, data | 0x80); + m_soundlatch->write(space, 0, data | 0x80); } READ8_MEMBER(ksayakyu_state::sound_status_r) @@ -100,7 +100,7 @@ READ8_MEMBER(ksayakyu_state::sound_status_r) WRITE8_MEMBER(ksayakyu_state::tomaincpu_w) { m_sound_status |= 0x80; - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); } static ADDRESS_MAP_START( maincpu_map, AS_PROGRAM, 8, ksayakyu_state ) @@ -276,8 +276,10 @@ static MACHINE_CONFIG_START( ksayakyu, ksayakyu_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, MAIN_CLOCK/16) //unknown clock - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(ksayakyu_state, dummy1_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/drivers/kurukuru.cpp b/src/mame/drivers/kurukuru.cpp index af9ca15215c..97583306a37 100644 --- a/src/mame/drivers/kurukuru.cpp +++ b/src/mame/drivers/kurukuru.cpp @@ -9,7 +9,7 @@ This hardware seems to be a derivative of MSX2 'on steroids'. - It has many similarites with sothello.c and tonton.c + It has many similarities with sothello.cpp and tonton.cpp Special thanks to Charles MacDonald, for all the hardware traces: clocks, ports, descriptions and a lot of things... :) @@ -147,9 +147,9 @@ Insert tokens (medals). You can bet to any (or all) of the following 5 characters: Bote, Oume, Pyoko, Kunio, and Pyon Pyon. Press start, and the reels start to roll. You'll win if - you can get 3 of the choosen character(s) in a row, column or diagonal. + you can get 3 of the chosen character(s) in a row, column or diagonal. - The black tadpoles behave just like jokers... If you have 2 choosen characters + The black tadpoles behave just like jokers... If you have 2 chosen characters in a row and the remaining one is a black tadpole, it will transform into another character to complete the 3 in a row, allowing you to win. @@ -252,22 +252,29 @@ #include "video/v9938.h" #include "machine/ticket.h" #include "machine/nvram.h" +#include "machine/gen_latch.h" class kurukuru_state : public driver_device { public: kurukuru_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_v9938(*this, "v9938"), - m_maincpu(*this, "maincpu"), m_adpcm(*this, "adpcm"), m_hopper(*this, "hopper"), + m_soundlatch(*this, "soundlatch"), m_bank1(*this, "bank1") { } + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; required_device<v9938_device> m_v9938; + required_device<msm5205_device> m_adpcm; + required_device<ticket_dispenser_device> m_hopper; + required_device<generic_latch_8_device> m_soundlatch; + required_memory_bank m_bank1; UINT8 m_sound_irq_cause; UINT8 m_adpcm_data; @@ -287,10 +294,6 @@ public: virtual void machine_reset() override; DECLARE_WRITE_LINE_MEMBER(kurukuru_msm5205_vck); DECLARE_WRITE_LINE_MEMBER(kurukuru_vdp_interrupt); - required_device<cpu_device> m_maincpu; - required_device<msm5205_device> m_adpcm; - required_device<ticket_dispenser_device> m_hopper; - required_memory_bank m_bank1; }; #define MAIN_CLOCK XTAL_21_4772MHz @@ -391,7 +394,7 @@ WRITE8_MEMBER(kurukuru_state::kurukuru_bankswitch_w) WRITE8_MEMBER(kurukuru_state::kurukuru_soundlatch_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); update_sound_irq(m_sound_irq_cause | 1); } @@ -431,7 +434,7 @@ static ADDRESS_MAP_START( ppj_io, AS_IO, 8, kurukuru_state ) AM_RANGE(0x60, 0x60) AM_MIRROR(0x0f) AM_READ_PORT("IN1") AM_RANGE(0x70, 0x70) AM_MIRROR(0x0f) AM_READ_PORT("IN0") AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x0f) AM_DEVWRITE("ym2149", ay8910_device, address_w) - AM_RANGE(0xc8, 0xc8) AM_MIRROR(0x0f) AM_DEVREAD("ym2149", ay8910_device, data_r) + AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x0f) AM_DEVREAD("ym2149", ay8910_device, data_r) AM_RANGE(0xd0, 0xd0) AM_MIRROR(0x0f) AM_DEVWRITE("ym2149", ay8910_device, data_w) ADDRESS_MAP_END /* @@ -481,7 +484,7 @@ WRITE8_MEMBER(kurukuru_state::kurukuru_adpcm_reset_w) READ8_MEMBER(kurukuru_state::kurukuru_soundlatch_r) { update_sound_irq(m_sound_irq_cause & ~1); - return soundlatch_byte_r(space, 0); + return m_soundlatch->read(space, 0); } READ8_MEMBER(kurukuru_state::kurukuru_adpcm_timer_irqack_r) @@ -739,6 +742,9 @@ static MACHINE_CONFIG_START( kurukuru, kurukuru_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym2149", YM2149, YM2149_CLOCK) MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW2")) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(kurukuru_state, ym2149_aout_w)) @@ -774,6 +780,9 @@ static MACHINE_CONFIG_START( ppj, kurukuru_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym2149", YM2149, YM2149_CLOCK) // pin 26 (/SEL) is low so final clock is clk/2, handled inside the ym2149 core MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW2")) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(kurukuru_state, ym2149_aout_w)) diff --git a/src/mame/drivers/ladyfrog.cpp b/src/mame/drivers/ladyfrog.cpp index cf99c2192eb..14cd8b2c7dc 100644 --- a/src/mame/drivers/ladyfrog.cpp +++ b/src/mame/drivers/ladyfrog.cpp @@ -81,7 +81,7 @@ TIMER_CALLBACK_MEMBER(ladyfrog_state::nmi_callback) WRITE8_MEMBER(ladyfrog_state::sound_command_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(ladyfrog_state::nmi_callback),this), data); } @@ -139,7 +139,7 @@ static ADDRESS_MAP_START( ladyfrog_sound_map, AS_PROGRAM, 8, ladyfrog_state ) AM_RANGE(0xca00, 0xca00) AM_WRITENOP AM_RANGE(0xcb00, 0xcb00) AM_WRITENOP AM_RANGE(0xcc00, 0xcc00) AM_WRITENOP - AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r) AM_WRITE(to_main_w) + AM_RANGE(0xd000, 0xd000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(to_main_w) AM_RANGE(0xd200, 0xd200) AM_READNOP AM_WRITE(nmi_enable_w) AM_RANGE(0xd400, 0xd400) AM_WRITE(nmi_disable_w) AM_RANGE(0xd600, 0xd600) AM_WRITENOP @@ -308,6 +308,8 @@ static MACHINE_CONFIG_START( ladyfrog, ladyfrog_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, 8000000/4) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(ladyfrog_state, unk_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(ladyfrog_state, unk_w)) diff --git a/src/mame/drivers/lasso.cpp b/src/mame/drivers/lasso.cpp index f8048f908de..77b0c1d8ac8 100644 --- a/src/mame/drivers/lasso.cpp +++ b/src/mame/drivers/lasso.cpp @@ -48,7 +48,7 @@ INPUT_CHANGED_MEMBER(lasso_state::coin_inserted) /* Write to the sound latch and generate an IRQ on the sound CPU */ WRITE8_MEMBER(lasso_state::sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -93,7 +93,7 @@ static ADDRESS_MAP_START( lasso_audio_map, AS_PROGRAM, 8, lasso_state ) AM_RANGE(0xb000, 0xb000) AM_WRITEONLY AM_SHARE("chip_data") AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_select_w) AM_RANGE(0xb004, 0xb004) AM_READ(sound_status_r) - AM_RANGE(0xb005, 0xb005) AM_READ(soundlatch_byte_r) + AM_RANGE(0xb005, 0xb005) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION("audiocpu", 0x7000) ADDRESS_MAP_END @@ -131,7 +131,7 @@ static ADDRESS_MAP_START( chameleo_audio_map, AS_PROGRAM, 8, lasso_state ) AM_RANGE(0xb000, 0xb000) AM_WRITEONLY AM_SHARE("chip_data") AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_select_w) AM_RANGE(0xb004, 0xb004) AM_READ(sound_status_r) - AM_RANGE(0xb005, 0xb005) AM_READ(soundlatch_byte_r) + AM_RANGE(0xb005, 0xb005) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION("audiocpu", 0x7000) ADDRESS_MAP_END @@ -162,7 +162,7 @@ static ADDRESS_MAP_START( wwjgtin_audio_map, AS_PROGRAM, 8, lasso_state ) AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_select_w) AM_RANGE(0xb003, 0xb003) AM_DEVWRITE("dac", dac_device, write_unsigned8) AM_RANGE(0xb004, 0xb004) AM_READ(sound_status_r) - AM_RANGE(0xb005, 0xb005) AM_READ(soundlatch_byte_r) + AM_RANGE(0xb005, 0xb005) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -196,7 +196,7 @@ static ADDRESS_MAP_START( pinbo_audio_io_map, AS_IO, 8, lasso_state ) AM_RANGE(0x02, 0x02) AM_DEVREAD("ay1", ay8910_device, data_r) AM_RANGE(0x04, 0x05) AM_DEVWRITE("ay2", ay8910_device, address_data_w) AM_RANGE(0x06, 0x06) AM_DEVREAD("ay2", ay8910_device, data_r) - AM_RANGE(0x08, 0x08) AM_READ(soundlatch_byte_r) AM_WRITENOP /* ??? */ + AM_RANGE(0x08, 0x08) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITENOP /* ??? */ AM_RANGE(0x14, 0x14) AM_WRITENOP /* ??? */ ADDRESS_MAP_END @@ -503,6 +503,8 @@ static MACHINE_CONFIG_START( base, lasso_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("sn76489.1", SN76489, 2000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/lastduel.cpp b/src/mame/drivers/lastduel.cpp index d6ecd7739ce..a6fddcd68c2 100644 --- a/src/mame/drivers/lastduel.cpp +++ b/src/mame/drivers/lastduel.cpp @@ -445,12 +445,6 @@ GFXDECODE_END /******************************************************************************/ -/* handler called by the 2203 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(lastduel_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - TIMER_DEVICE_CALLBACK_MEMBER(lastduel_state::lastduel_timer_cb) { m_maincpu->set_input_line(4, HOLD_LINE); /* Controls */ @@ -523,7 +517,7 @@ static MACHINE_CONFIG_START( lastduel, lastduel_state ) MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_SOUND_ADD("ym1", YM2203, XTAL_3_579545MHz) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(lastduel_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MCFG_SOUND_ADD("ym2", YM2203, XTAL_3_579545MHz) @@ -568,7 +562,7 @@ static MACHINE_CONFIG_START( madgear, lastduel_state ) MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_SOUND_ADD("ym1", YM2203, XTAL_3_579545MHz) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(lastduel_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MCFG_SOUND_ADD("ym2", YM2203, XTAL_3_579545MHz) diff --git a/src/mame/drivers/legionna.cpp b/src/mame/drivers/legionna.cpp index b8fcdc151c4..7b695977d9a 100644 --- a/src/mame/drivers/legionna.cpp +++ b/src/mame/drivers/legionna.cpp @@ -398,7 +398,7 @@ static ADDRESS_MAP_START( cupsocbl_sound_mem, AS_PROGRAM, 8, legionna_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x9000, 0x9000) AM_WRITE(okim_rombank_w) AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END /*****************************************************************************/ @@ -1500,6 +1500,8 @@ static MACHINE_CONFIG_START( cupsocbl, legionna_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", 1000000, OKIM6295_PIN7_HIGH) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END @@ -2767,7 +2769,7 @@ GAME( 1992, heatbrlo, heatbrl, heatbrl, heatbrl, driver_device, 0, RO GAME( 1992, heatbrlu, heatbrl, heatbrl, heatbrl, driver_device, 0, ROT0, "TAD Corporation", "Heated Barrel (US)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) GAME( 1992, heatbrle, heatbrl, heatbrl, heatbrl, driver_device, 0, ROT0, "TAD Corporation (Electronic Devices license)", "Heated Barrel (Electronic Devices license)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) -GAME( 1993, godzilla, 0, godzilla, godzilla, driver_device, 0, ROT0, "Banpresto", "Godzilla (Japan)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) +GAME( 1993, godzilla, 0, godzilla, godzilla, driver_device, 0, ROT0, "Banpresto", "Godzilla (Japan)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1993, grainbow, 0, grainbow, grainbow, driver_device, 0, ROT0, "Banpresto", "SD Gundam Sangokushi Rainbow Tairiku Senki", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) GAME( 1993, denjinmk, 0, denjinmk, denjinmk, legionna_state,denjinmk, ROT0, "Winkysoft (Banpresto license)", "Denjin Makai", MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/drivers/lgp.cpp b/src/mame/drivers/lgp.cpp index aa1f18ff8b6..82fa4de476c 100644 --- a/src/mame/drivers/lgp.cpp +++ b/src/mame/drivers/lgp.cpp @@ -86,14 +86,14 @@ public: required_device<pioneer_ldv1000_device> m_laserdisc; required_shared_ptr<UINT8> m_tile_ram; required_shared_ptr<UINT8> m_tile_control_ram; - emu_timer *m_irq_timer; DECLARE_READ8_MEMBER(ldp_read); DECLARE_WRITE8_MEMBER(ldp_write); DECLARE_DRIVER_INIT(lgp); virtual void machine_start() override; UINT32 screen_update_lgp(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(vblank_callback_lgp); - TIMER_CALLBACK_MEMBER(irq_stop); + DECLARE_WRITE_LINE_MEMBER(ld_command_strobe_cb); + DECLARE_PALETTE_INIT(lgp); required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; @@ -160,7 +160,7 @@ static ADDRESS_MAP_START( main_program_map, AS_PROGRAM, 8, lgp_state ) // AM_RANGE(0xef00,0xef00) AM_READ_PORT("IN_TEST") AM_RANGE(0xef80,0xef80) AM_READWRITE(ldp_read,ldp_write) - AM_RANGE(0xefb8,0xefb8) AM_READ(ldp_read) /* Likely not right, calms it down though */ + AM_RANGE(0xefb8,0xefb8) AM_READNOP // watchdog AM_RANGE(0xefc0,0xefc0) AM_READ_PORT("DSWA") /* Not tested */ AM_RANGE(0xefc8,0xefc8) AM_READ_PORT("DSWB") AM_RANGE(0xefd0,0xefd0) AM_READ_PORT("DSWC") @@ -341,27 +341,59 @@ static GFXDECODE_START( lgp ) GFXDECODE_ENTRY("gfx4", 0, lgp_gfx_layout_16x32, 0x0, 0x100) GFXDECODE_END -TIMER_CALLBACK_MEMBER(lgp_state::irq_stop) -{ - m_maincpu->set_input_line(0, CLEAR_LINE); -} - INTERRUPT_GEN_MEMBER(lgp_state::vblank_callback_lgp) { // NMI //device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); // IRQ - device.execute().set_input_line(0, ASSERT_LINE); - m_irq_timer->adjust(attotime::from_usec(50)); + device.execute().set_input_line(0, HOLD_LINE); } void lgp_state::machine_start() { - m_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(lgp_state::irq_stop),this)); } +WRITE_LINE_MEMBER(lgp_state::ld_command_strobe_cb) +{ + //m_maincpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE); +} + +PALETTE_INIT_MEMBER(lgp_state, lgp) +{ + const UINT8 *color_prom = memregion("proms")->base(); + int i; + +// for (i = 0; i < palette.entries(); i++) + for (i = 0; i < 0x20; i++) + { + int r,g,b; + int bit0,bit1,bit2; + + /* red component */ + bit0 = 0; //(color_prom[i] >> 0) & 0x01; + bit1 = (color_prom[i] >> 0) & 0x01; + bit2 = (color_prom[i] >> 1) & 0x01; + r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + /* green component */ + bit0 = 0; //(color_prom[i] >> 3) & 0x01; + bit1 = (color_prom[i] >> 2) & 0x01; + bit2 = (color_prom[i] >> 3) & 0x01; + g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + /* blue component */ + bit0 = 0; //(color_prom[i] >> 5) & 0x01; + bit1 = (color_prom[i] >> 4) & 0x01; + bit2 = (color_prom[i] >> 5) & 0x01; + b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + + palette.set_pen_color(i,rgb_t(r,g,b)); + } + +} /* DRIVER */ static MACHINE_CONFIG_START( lgp, lgp_state ) @@ -378,6 +410,7 @@ static MACHINE_CONFIG_START( lgp, lgp_state ) MCFG_LASERDISC_LDV1000_ADD("laserdisc") + MCFG_LASERDISC_LDV1000_COMMAND_STROBE_CB(WRITELINE(lgp_state, ld_command_strobe_cb)) MCFG_LASERDISC_OVERLAY_DRIVER(256, 256, lgp_state, screen_update_lgp) MCFG_LASERDISC_OVERLAY_PALETTE("palette") @@ -385,7 +418,7 @@ static MACHINE_CONFIG_START( lgp, lgp_state ) MCFG_LASERDISC_SCREEN_ADD_NTSC("screen", "laserdisc") MCFG_PALETTE_ADD("palette", 256) - /* MCFG_PALETTE_INIT_OWNER(lgp_state,lgp) */ + MCFG_PALETTE_INIT_OWNER(lgp_state,lgp) MCFG_GFXDECODE_ADD("gfxdecode", "palette", lgp) @@ -470,14 +503,17 @@ ROM_START( lgp ) ROM_LOAD( "a02_28.114", 0x24000, 0x4000, CRC(cd69ed20) SHA1(d60782637085491527814889856eb3553950ab55) ) /* Small ROM dumping ground - color? */ - ROM_REGION( 0x520, "user4", 0 ) + ROM_REGION( 0x20, "proms", 0 ) + ROM_LOAD( "a02_37.43", 0x00000, 0x20, CRC(925ba961) SHA1(6715d80f2346374a0e880cf44cadc36e4a5316ed) ) + + ROM_REGION( 0x500, "user4", 0 ) ROM_LOAD( "a02_35.23", 0x00000, 0x100, CRC(7b9d44f1) SHA1(bbd7c35a03ca6de116a01f6dcfa2ecd13a7ddb53) ) ROM_LOAD( "a02_36.24", 0x00100, 0x100, CRC(169c4216) SHA1(23921e9ef61a68fdd8afceb3b95bbac48190cf1a) ) - ROM_LOAD( "a02_37.43", 0x00200, 0x20, CRC(925ba961) SHA1(6715d80f2346374a0e880cf44cadc36e4a5316ed) ) - ROM_LOAD( "a02_38.44", 0x00220, 0x100, CRC(6f37212a) SHA1(32b891dc9b97637620b2f1f9d9d76509c333cb2d) ) - ROM_LOAD( "a02_39.109", 0x00320, 0x100, CRC(88363809) SHA1(b22a7bd8ce6b28bf7cfa64c3a08e4cf7f9b4cd20) ) - ROM_LOAD( "a02_40.110", 0x00420, 0x100, CRC(fdfc7aac) SHA1(2413f7f9ad11c91d2adc0aab37bf70ff5c68ab6f) ) + ROM_LOAD( "a02_38.44", 0x00200, 0x100, CRC(6f37212a) SHA1(32b891dc9b97637620b2f1f9d9d76509c333cb2d) ) + ROM_LOAD( "a02_39.109", 0x00300, 0x100, CRC(88363809) SHA1(b22a7bd8ce6b28bf7cfa64c3a08e4cf7f9b4cd20) ) + ROM_LOAD( "a02_40.110", 0x00400, 0x100, CRC(fdfc7aac) SHA1(2413f7f9ad11c91d2adc0aab37bf70ff5c68ab6f) ) + DISK_REGION( "laserdisc" ) DISK_IMAGE_READONLY( "lgp", 0, NO_DUMP ) ROM_END @@ -554,13 +590,15 @@ ROM_START( lgpalt ) ROM_LOAD( "a02_28.114", 0x24000, 0x4000, CRC(cd69ed20) SHA1(d60782637085491527814889856eb3553950ab55) ) /* Small ROM dumping ground - color? */ - ROM_REGION( 0x520, "user4", 0 ) + ROM_REGION( 0x20, "proms", 0 ) + ROM_LOAD( "a02_37.43", 0x00000, 0x20, CRC(925ba961) SHA1(6715d80f2346374a0e880cf44cadc36e4a5316ed) ) + + ROM_REGION( 0x500, "user4", 0 ) ROM_LOAD( "a02_35.23", 0x00000, 0x100, CRC(7b9d44f1) SHA1(bbd7c35a03ca6de116a01f6dcfa2ecd13a7ddb53) ) ROM_LOAD( "a02_36.24", 0x00100, 0x100, CRC(169c4216) SHA1(23921e9ef61a68fdd8afceb3b95bbac48190cf1a) ) - ROM_LOAD( "a02_37.43", 0x00200, 0x20, CRC(925ba961) SHA1(6715d80f2346374a0e880cf44cadc36e4a5316ed) ) - ROM_LOAD( "a02_38.44", 0x00220, 0x100, CRC(6f37212a) SHA1(32b891dc9b97637620b2f1f9d9d76509c333cb2d) ) - ROM_LOAD( "a02_39.109", 0x00320, 0x100, CRC(88363809) SHA1(b22a7bd8ce6b28bf7cfa64c3a08e4cf7f9b4cd20) ) - ROM_LOAD( "a02_40.110", 0x00420, 0x100, CRC(fdfc7aac) SHA1(2413f7f9ad11c91d2adc0aab37bf70ff5c68ab6f) ) + ROM_LOAD( "a02_38.44", 0x00200, 0x100, CRC(6f37212a) SHA1(32b891dc9b97637620b2f1f9d9d76509c333cb2d) ) + ROM_LOAD( "a02_39.109", 0x00300, 0x100, CRC(88363809) SHA1(b22a7bd8ce6b28bf7cfa64c3a08e4cf7f9b4cd20) ) + ROM_LOAD( "a02_40.110", 0x00400, 0x100, CRC(fdfc7aac) SHA1(2413f7f9ad11c91d2adc0aab37bf70ff5c68ab6f) ) DISK_REGION( "laserdisc" ) DISK_IMAGE_READONLY( "lgp", 0, NO_DUMP ) diff --git a/src/mame/drivers/limenko.cpp b/src/mame/drivers/limenko.cpp index 1d7870d50dc..cdc9f64e97b 100644 --- a/src/mame/drivers/limenko.cpp +++ b/src/mame/drivers/limenko.cpp @@ -27,6 +27,7 @@ #include "emu.h" #include "cpu/e132xs/e132xs.h" #include "machine/eepromser.h" +#include "machine/gen_latch.h" #include "sound/qs1000.h" #include "sound/okim6295.h" @@ -41,6 +42,7 @@ public: m_qs1000(*this, "qs1000"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_mainram(*this, "mainram"), m_fg_videoram(*this, "fg_videoram"), m_md_videoram(*this, "md_videoram"), @@ -54,6 +56,7 @@ public: optional_device<qs1000_device> m_qs1000; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT32> m_mainram; required_shared_ptr<UINT32> m_fg_videoram; @@ -176,7 +179,7 @@ WRITE32_MEMBER(limenko_state::spriteram_buffer_w) WRITE32_MEMBER(limenko_state::limenko_soundlatch_w) { - soundlatch_byte_w(space, 0, data >> 16); + m_soundlatch->write(space, 0, data >> 16); m_qs1000->set_irq(ASSERT_LINE); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); @@ -184,12 +187,12 @@ WRITE32_MEMBER(limenko_state::limenko_soundlatch_w) WRITE32_MEMBER(limenko_state::spotty_soundlatch_w) { - soundlatch_byte_w(space, 0, data >> 16); + m_soundlatch->write(space, 0, data >> 16); } READ8_MEMBER(limenko_state::qs1000_p1_r) { - return soundlatch_byte_r(space, 0); + return m_soundlatch->read(space, 0); } WRITE8_MEMBER(limenko_state::qs1000_p1_w) @@ -283,7 +286,7 @@ READ8_MEMBER(limenko_state::spotty_sound_r) // check m_spotty_sound_cmd bits... if(m_spotty_sound_cmd == 0xf7) - return soundlatch_byte_r(space,0); + return m_soundlatch->read(space,0); else return m_oki->read(space,0); } @@ -749,6 +752,8 @@ static MACHINE_CONFIG_START( limenko, limenko_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("qs1000", QS1000, XTAL_24MHz) MCFG_QS1000_EXTERNAL_ROM(true) MCFG_QS1000_IN_P1_CB(READ8(limenko_state, qs1000_p1_r)) @@ -787,6 +792,8 @@ static MACHINE_CONFIG_START( spotty, limenko_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", 4000000 / 4 , OKIM6295_PIN7_HIGH) //? MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/lkage.cpp b/src/mame/drivers/lkage.cpp index 5aa2b49a471..d8d6a58e181 100644 --- a/src/mame/drivers/lkage.cpp +++ b/src/mame/drivers/lkage.cpp @@ -107,7 +107,7 @@ TIMER_CALLBACK_MEMBER(lkage_state::nmi_callback) WRITE8_MEMBER(lkage_state::lkage_sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(lkage_state::nmi_callback),this), data); } @@ -187,7 +187,7 @@ static ADDRESS_MAP_START( lkage_sound_map, AS_PROGRAM, 8, lkage_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ym1", ym2203_device, read, write) AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ym2", ym2203_device, read, write) - AM_RANGE(0xb000, 0xb000) AM_READ(soundlatch_byte_r) AM_WRITENOP /* ??? */ + AM_RANGE(0xb000, 0xb000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITENOP /* ??? */ AM_RANGE(0xb001, 0xb001) AM_READNOP /* ??? */ AM_WRITE(lkage_sh_nmi_enable_w) AM_RANGE(0xb002, 0xb002) AM_WRITE(lkage_sh_nmi_disable_w) AM_RANGE(0xb003, 0xb003) AM_WRITENOP @@ -476,10 +476,6 @@ static GFXDECODE_START( lkage ) GFXDECODE_ENTRY( "gfx1", 0x0000, sprite_layout, 0, 16 ) GFXDECODE_END -WRITE_LINE_MEMBER(lkage_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} void lkage_state::machine_start() { @@ -566,8 +562,10 @@ static MACHINE_CONFIG_START( lkage, lkage_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM2203, AUDIO_CLOCK ) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(lkage_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.15) MCFG_SOUND_ROUTE(1, "mono", 0.15) MCFG_SOUND_ROUTE(2, "mono", 0.15) @@ -611,8 +609,10 @@ static MACHINE_CONFIG_START( lkageb, lkage_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM2203, AUDIO_CLOCK) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(lkage_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.15) MCFG_SOUND_ROUTE(1, "mono", 0.15) MCFG_SOUND_ROUTE(2, "mono", 0.15) diff --git a/src/mame/drivers/looping.cpp b/src/mame/drivers/looping.cpp index c7ec5bfc4ba..661e9610700 100644 --- a/src/mame/drivers/looping.cpp +++ b/src/mame/drivers/looping.cpp @@ -57,6 +57,7 @@ L056-6 9A " " VLI-8-4 7A " #include "emu.h" #include "cpu/tms9900/tms9995.h" #include "cpu/tms9900/tms9980a.h" +#include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" #include "sound/dac.h" @@ -110,7 +111,8 @@ public: m_audiocpu(*this, "audiocpu"), m_dac(*this, "dac"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_videoram; @@ -162,6 +164,7 @@ public: required_device<dac_device> m_dac; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; }; @@ -392,7 +395,7 @@ WRITE_LINE_MEMBER(looping_state::looping_spcint) WRITE8_MEMBER(looping_state::looping_soundlatch_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(INT_9980A_LEVEL2, ASSERT_LINE); } @@ -570,11 +573,11 @@ static ADDRESS_MAP_START( looping_sound_map, AS_PROGRAM, 8, looping_state ) AM_RANGE(0x0000, 0x37ff) AM_ROM AM_RANGE(0x3800, 0x3bff) AM_RAM AM_RANGE(0x3c00, 0x3c00) AM_MIRROR(0x00f4) AM_DEVREADWRITE("aysnd", ay8910_device, data_r, address_w) + AM_RANGE(0x3c01, 0x3c01) AM_MIRROR(0x00f6) AM_NOP AM_RANGE(0x3c02, 0x3c02) AM_MIRROR(0x00f4) AM_READNOP AM_DEVWRITE("aysnd", ay8910_device, data_w) - AM_RANGE(0x3c03, 0x3c03) AM_MIRROR(0x00f6) AM_NOP AM_RANGE(0x3e00, 0x3e00) AM_MIRROR(0x00f4) AM_READNOP AM_DEVWRITE("tms", tms5220_device, data_w) + AM_RANGE(0x3e01, 0x3e01) AM_MIRROR(0x00f6) AM_NOP AM_RANGE(0x3e02, 0x3e02) AM_MIRROR(0x00f4) AM_DEVREAD("tms", tms5220_device, status_r) AM_WRITENOP - AM_RANGE(0x3e03, 0x3e03) AM_MIRROR(0x00f6) AM_NOP ADDRESS_MAP_END static ADDRESS_MAP_START( looping_sound_io_map, AS_IO, 8, looping_state ) @@ -650,8 +653,10 @@ static MACHINE_CONFIG_START( looping, looping_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, SOUND_CLOCK/4) - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) MCFG_SOUND_ADD("tms", TMS5220, TMS_CLOCK) diff --git a/src/mame/drivers/lsasquad.cpp b/src/mame/drivers/lsasquad.cpp index 75c3ae5af63..7f2a5357e6d 100644 --- a/src/mame/drivers/lsasquad.cpp +++ b/src/mame/drivers/lsasquad.cpp @@ -539,12 +539,6 @@ static GFXDECODE_START( lsasquad ) GFXDECODE_END - -WRITE_LINE_MEMBER(lsasquad_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - WRITE8_MEMBER(lsasquad_state::unk) { } @@ -633,7 +627,7 @@ static MACHINE_CONFIG_START( lsasquad, lsasquad_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.12) MCFG_SOUND_ADD("ymsnd", YM2203, MASTER_CLOCK / 8) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(lsasquad_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(lsasquad_state, unk)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(lsasquad_state, unk)) MCFG_SOUND_ROUTE(0, "mono", 0.12) @@ -690,7 +684,7 @@ static MACHINE_CONFIG_START( daikaiju, lsasquad_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.12) MCFG_SOUND_ADD("ymsnd", YM2203, MASTER_CLOCK / 8) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(lsasquad_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(lsasquad_state, unk)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(lsasquad_state, unk)) MCFG_SOUND_ROUTE(0, "mono", 0.12) diff --git a/src/mame/drivers/m20.cpp b/src/mame/drivers/m20.cpp index 4fc27f81f58..d2c60e88f4b 100644 --- a/src/mame/drivers/m20.cpp +++ b/src/mame/drivers/m20.cpp @@ -333,75 +333,75 @@ void m20_state::install_memory() /* install mainboard memory (aka DRAM0) */ /* <0>0000 */ - pspace.install_readwrite_bank(0x0000, 0x3fff, 0x3fff, 0, "dram0_4000"); - dspace.install_readwrite_bank(0x0000, 0x3fff, 0x3fff, 0, "dram0_4000"); + pspace.install_readwrite_bank(0x0000, 0x3fff, 0, "dram0_4000"); + dspace.install_readwrite_bank(0x0000, 0x3fff, 0, "dram0_4000"); /* <0>4000 */ - pspace.install_readwrite_bank(0x4000, 0x7fff, 0x3fff, 0, "dram0_8000"); + pspace.install_readwrite_bank(0x4000, 0x7fff, 0, "dram0_8000"); /* <0>8000 */ - pspace.install_readwrite_bank(0x8000, 0xbfff, 0x3fff, 0, "dram0_c000"); + pspace.install_readwrite_bank(0x8000, 0xbfff, 0, "dram0_c000"); /* <0>C000 */ - pspace.install_readwrite_bank(0xc000, 0xcfff, 0x3fff, 0, "dram0_10000"); + pspace.install_readwrite_bank(0xc000, 0xcfff, 0, "dram0_10000"); /* <1>0000 */ - pspace.install_readwrite_bank(0x10000, 0x13fff, 0x3fff, 0, "dram0_8000"); - dspace.install_readwrite_bank(0x10000, 0x13fff, 0x3fff, 0, "dram0_14000"); + pspace.install_readwrite_bank(0x10000, 0x13fff, 0, "dram0_8000"); + dspace.install_readwrite_bank(0x10000, 0x13fff, 0, "dram0_14000"); /* <1>4000 */ - pspace.install_readwrite_bank(0x14000, 0x17fff, 0x3fff, 0, "dram0_c000"); - dspace.install_readwrite_bank(0x14000, 0x17fff, 0x3fff, 0, "dram0_18000"); + pspace.install_readwrite_bank(0x14000, 0x17fff, 0, "dram0_c000"); + dspace.install_readwrite_bank(0x14000, 0x17fff, 0, "dram0_18000"); /* <1>8000 */ - pspace.install_readwrite_bank(0x18000, 0x1bfff, 0x3fff, 0, "dram0_10000"); - dspace.install_readwrite_bank(0x18000, 0x1bfff, 0x3fff, 0, "dram0_1c000"); + pspace.install_readwrite_bank(0x18000, 0x1bfff, 0, "dram0_10000"); + dspace.install_readwrite_bank(0x18000, 0x1bfff, 0, "dram0_1c000"); /* <1>c000 empty*/ /* <2>0000 */ - pspace.install_readwrite_bank(0x20000, 0x23fff, 0x3fff, 0, "dram0_14000"); - dspace.install_readwrite_bank(0x20000, 0x23fff, 0x3fff, 0, "dram0_14000"); + pspace.install_readwrite_bank(0x20000, 0x23fff, 0, "dram0_14000"); + dspace.install_readwrite_bank(0x20000, 0x23fff, 0, "dram0_14000"); /* <2>4000 */ - pspace.install_readwrite_bank(0x24000, 0x27fff, 0x3fff, 0, "dram0_18000"); - dspace.install_readwrite_bank(0x24000, 0x27fff, 0x3fff, 0, "dram0_18000"); + pspace.install_readwrite_bank(0x24000, 0x27fff, 0, "dram0_18000"); + dspace.install_readwrite_bank(0x24000, 0x27fff, 0, "dram0_18000"); /* <2>8000 */ - pspace.install_readwrite_bank(0x28000, 0x2bfff, 0x3fff, 0, "dram0_1c000"); - dspace.install_readwrite_bank(0x28000, 0x2bfff, 0x3fff, 0, "dram0_1c000"); + pspace.install_readwrite_bank(0x28000, 0x2bfff, 0, "dram0_1c000"); + dspace.install_readwrite_bank(0x28000, 0x2bfff, 0, "dram0_1c000"); /* <2>c000 empty*/ /* <3>0000 (video buffer) - pspace.install_readwrite_bank(0x30000, 0x33fff, 0x3fff, 0, "dram0_0000"); - dspace.install_readwrite_bank(0x30000, 0x33fff, 0x3fff, 0, "dram0_0000"); + pspace.install_readwrite_bank(0x30000, 0x33fff, 0, "dram0_0000"); + dspace.install_readwrite_bank(0x30000, 0x33fff, 0, "dram0_0000"); */ /* <5>0000 */ - dspace.install_readwrite_bank(0x50000, 0x53fff, 0x3fff, 0, "dram0_8000"); + dspace.install_readwrite_bank(0x50000, 0x53fff, 0, "dram0_8000"); /* <5>4000 */ - dspace.install_readwrite_bank(0x54000, 0x57fff, 0x3fff, 0, "dram0_c000"); + dspace.install_readwrite_bank(0x54000, 0x57fff, 0, "dram0_c000"); /* <5>8000 */ - dspace.install_readwrite_bank(0x58000, 0x5bfff, 0x3fff, 0, "dram0_10000"); + dspace.install_readwrite_bank(0x58000, 0x5bfff, 0, "dram0_10000"); /* <5>c000 expansion bus */ /* <6>0000 */ - pspace.install_readwrite_bank(0x60000, 0x63fff, 0x3fff, 0, "dram0_8000"); - dspace.install_readwrite_bank(0x60000, 0x63fff, 0x3fff, 0, "dram0_8000"); + pspace.install_readwrite_bank(0x60000, 0x63fff, 0, "dram0_8000"); + dspace.install_readwrite_bank(0x60000, 0x63fff, 0, "dram0_8000"); /* <6>4000 */ - pspace.install_readwrite_bank(0x64000, 0x67fff, 0x3fff, 0, "dram0_c000"); - dspace.install_readwrite_bank(0x64000, 0x67fff, 0x3fff, 0, "dram0_c000"); + pspace.install_readwrite_bank(0x64000, 0x67fff, 0, "dram0_c000"); + dspace.install_readwrite_bank(0x64000, 0x67fff, 0, "dram0_c000"); /* <6>8000 */ - pspace.install_readwrite_bank(0x68000, 0x6bfff, 0x3fff, 0, "dram0_10000"); - dspace.install_readwrite_bank(0x68000, 0x6bfff, 0x3fff, 0, "dram0_10000"); + pspace.install_readwrite_bank(0x68000, 0x6bfff, 0, "dram0_10000"); + dspace.install_readwrite_bank(0x68000, 0x6bfff, 0, "dram0_10000"); /* <6>c000 empty*/ /* segment <7> expansion ROM? */ /* <8>0000 */ - pspace.install_readwrite_bank(0x80000, 0x83fff, 0x3fff, 0, "dram0_8000"); - dspace.install_readwrite_bank(0x80000, 0x83fff, 0x3fff, 0, "dram0_18000"); + pspace.install_readwrite_bank(0x80000, 0x83fff, 0, "dram0_8000"); + dspace.install_readwrite_bank(0x80000, 0x83fff, 0, "dram0_18000"); /* <8>4000 */ - pspace.install_readwrite_bank(0x84000, 0x87fff, 0x3fff, 0, "dram0_c000"); - dspace.install_readwrite_bank(0x84000, 0x87fff, 0x3fff, 0, "dram0_1c000"); + pspace.install_readwrite_bank(0x84000, 0x87fff, 0, "dram0_c000"); + dspace.install_readwrite_bank(0x84000, 0x87fff, 0, "dram0_1c000"); /* <9>0000 */ - pspace.install_readwrite_bank(0x90000, 0x93fff, 0x3fff, 0, "dram0_18000"); - dspace.install_readwrite_bank(0x90000, 0x93fff, 0x3fff, 0, "dram0_18000"); + pspace.install_readwrite_bank(0x90000, 0x93fff, 0, "dram0_18000"); + dspace.install_readwrite_bank(0x90000, 0x93fff, 0, "dram0_18000"); /* <9>4000 */ - pspace.install_readwrite_bank(0x94000, 0x97fff, 0x3fff, 0, "dram0_1c000"); - dspace.install_readwrite_bank(0x94000, 0x97fff, 0x3fff, 0, "dram0_1c000"); + pspace.install_readwrite_bank(0x94000, 0x97fff, 0, "dram0_1c000"); + dspace.install_readwrite_bank(0x94000, 0x97fff, 0, "dram0_1c000"); /* <A>0000 */ - pspace.install_readwrite_bank(0xa0000, 0xa3fff, 0x3fff, 0, "dram0_8000"); - dspace.install_readwrite_bank(0xa0000, 0xa3fff, 0x3fff, 0, "dram0_8000"); + pspace.install_readwrite_bank(0xa0000, 0xa3fff, 0, "dram0_8000"); + dspace.install_readwrite_bank(0xa0000, 0xa3fff, 0, "dram0_8000"); /* <A>4000 */ - pspace.install_readwrite_bank(0xa4000, 0xa7fff, 0x3fff, 0, "dram0_c000"); - dspace.install_readwrite_bank(0xa4000, 0xa7fff, 0x3fff, 0, "dram0_c000"); + pspace.install_readwrite_bank(0xa4000, 0xa7fff, 0, "dram0_c000"); + dspace.install_readwrite_bank(0xa4000, 0xa7fff, 0, "dram0_c000"); //membank("dram0_0000")->set_base(memptr); membank("dram0_4000")->set_base(memptr + 0x4000); @@ -425,9 +425,9 @@ void m20_state::install_memory() AM_RANGE( 0x88000, 0x8bfff ) AM_RAM AM_SHARE("dram1_4000") AM_RANGE( 0xa8000, 0xabfff ) AM_RAM AM_SHARE("dram1_4000") */ - pspace.install_readwrite_bank(0x2c000, 0x2ffff, 0x3fff, 0, "dram1_0000"); - pspace.install_readwrite_bank(0x88000, 0x8bfff, 0x3fff, 0, "dram1_4000"); - pspace.install_readwrite_bank(0xa8000, 0xabfff, 0x3fff, 0, "dram1_4000"); + pspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000"); + pspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram1_4000"); + pspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000"); /* data @@ -436,10 +436,10 @@ void m20_state::install_memory() AM_RANGE( 0x2c000, 0x2ffff ) AM_RAM AM_SHARE("dram1_0000") AM_RANGE( 0xa8000, 0xabfff ) AM_RAM AM_SHARE("dram1_4000") */ - dspace.install_readwrite_bank(0x4000, 0x7fff, 0x3fff, 0, "dram1_4000"); - dspace.install_readwrite_bank(0x1c000, 0x1ffff, 0x3fff, 0, "dram1_0000"); - dspace.install_readwrite_bank(0x2c000, 0x2ffff, 0x3fff, 0, "dram1_0000"); - dspace.install_readwrite_bank(0xa8000, 0xabfff, 0x3fff, 0, "dram1_4000"); + dspace.install_readwrite_bank(0x4000, 0x7fff, 0, "dram1_4000"); + dspace.install_readwrite_bank(0x1c000, 0x1ffff, 0, "dram1_0000"); + dspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000"); + dspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000"); membank("dram1_0000")->set_base(memptr + 0x20000); membank("dram1_4000")->set_base(memptr + 0x24000); @@ -452,9 +452,9 @@ void m20_state::install_memory() AM_RANGE( 0x98000, 0x9bfff ) AM_RAM AM_SHARE("dram2_4000") AM_RANGE( 0xac000, 0xaffff ) AM_RAM AM_SHARE("dram2_0000") */ - pspace.install_readwrite_bank(0x8c000, 0x8ffff, 0x3fff, 0, "dram2_0000"); - pspace.install_readwrite_bank(0x98000, 0x9bfff, 0x3fff, 0, "dram2_4000"); - pspace.install_readwrite_bank(0xac000, 0xaffff, 0x3fff, 0, "dram2_0000"); + pspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram2_0000"); + pspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram2_4000"); + pspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram2_0000"); /* data AM_RANGE( 0x08000, 0x0bfff ) AM_RAM AM_SHARE("dram2_0000") @@ -463,11 +463,11 @@ void m20_state::install_memory() AM_RANGE( 0x98000, 0x9bfff ) AM_RAM AM_SHARE("dram2_4000") AM_RANGE( 0xac000, 0xaffff ) AM_RAM AM_SHARE("dram2_0000") */ - dspace.install_readwrite_bank(0x8000, 0xbfff, 0x3fff, 0, "dram2_0000"); - dspace.install_readwrite_bank(0xc000, 0xffff, 0x3fff, 0, "dram2_4000"); - dspace.install_readwrite_bank(0x88000, 0x8bfff, 0x3fff, 0, "dram2_4000"); - dspace.install_readwrite_bank(0x98000, 0x9bfff, 0x3fff, 0, "dram2_4000"); - dspace.install_readwrite_bank(0xac000, 0xaffff, 0x3fff, 0, "dram2_0000"); + dspace.install_readwrite_bank(0x8000, 0xbfff, 0, "dram2_0000"); + dspace.install_readwrite_bank(0xc000, 0xffff, 0, "dram2_4000"); + dspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram2_4000"); + dspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram2_4000"); + dspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram2_0000"); membank("dram2_0000")->set_base(memptr + 0x28000); membank("dram2_4000")->set_base(memptr + 0x2c000); @@ -479,8 +479,8 @@ void m20_state::install_memory() AM_RANGE( 0x9c000, 0x9ffff ) AM_RAM AM_SHARE("dram3_0000") AM_RANGE( 0xb0000, 0xb3fff ) AM_RAM AM_SHARE("dram3_4000") */ - pspace.install_readwrite_bank(0x9c000, 0x9ffff, 0x3fff, 0, "dram3_0000"); - pspace.install_readwrite_bank(0xb0000, 0xb3fff, 0x3fff, 0, "dram3_4000"); + pspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram3_0000"); + pspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram3_4000"); /* data AM_RANGE( 0x44000, 0x47fff ) AM_RAM AM_SHARE("dram3_0000") @@ -490,12 +490,12 @@ void m20_state::install_memory() AM_RANGE( 0xb0000, 0xb3fff ) AM_RAM AM_SHARE("dram3_4000") AM_RANGE( 0xc0000, 0xc3fff ) AM_RAM AM_SHARE("dram3_4000") */ - dspace.install_readwrite_bank(0x44000, 0x47fff, 0x3fff, 0, "dram3_0000"); - dspace.install_readwrite_bank(0x48000, 0x4bfff, 0x3fff, 0, "dram3_4000"); - dspace.install_readwrite_bank(0x8c000, 0x8ffff, 0x3fff, 0, "dram3_0000"); - dspace.install_readwrite_bank(0x9c000, 0x9ffff, 0x3fff, 0, "dram3_0000"); - dspace.install_readwrite_bank(0xb0000, 0xb3fff, 0x3fff, 0, "dram3_4000"); - dspace.install_readwrite_bank(0xc0000, 0xc3fff, 0x3fff, 0, "dram3_4000"); + dspace.install_readwrite_bank(0x44000, 0x47fff, 0, "dram3_0000"); + dspace.install_readwrite_bank(0x48000, 0x4bfff, 0, "dram3_4000"); + dspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram3_0000"); + dspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram3_0000"); + dspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram3_4000"); + dspace.install_readwrite_bank(0xc0000, 0xc3fff, 0, "dram3_4000"); membank("dram3_0000")->set_base(memptr + 0x30000); membank("dram3_4000")->set_base(memptr + 0x34000); @@ -518,16 +518,16 @@ void m20_state::install_memory() AM_RANGE( 0xb4000, 0xb7fff ) AM_RAM AM_SHARE("dram1_18000") AM_RANGE( 0xb8000, 0xbbfff ) AM_RAM AM_SHARE("dram1_1c000") */ - pspace.install_readwrite_bank(0x2c000, 0x2ffff, 0x3fff, 0, "dram1_0000"); - pspace.install_readwrite_bank(0x88000, 0x8bfff, 0x3fff, 0, "dram1_4000"); - pspace.install_readwrite_bank(0x8c000, 0x8ffff, 0x3fff, 0, "dram1_8000"); - pspace.install_readwrite_bank(0x98000, 0x9bfff, 0x3fff, 0, "dram1_c000"); - pspace.install_readwrite_bank(0x9c000, 0x9ffff, 0x3fff, 0, "dram1_10000"); - pspace.install_readwrite_bank(0xa8000, 0xabfff, 0x3fff, 0, "dram1_4000"); - pspace.install_readwrite_bank(0xac000, 0xaffff, 0x3fff, 0, "dram1_8000"); - pspace.install_readwrite_bank(0xb0000, 0xb3fff, 0x3fff, 0, "dram1_14000"); - pspace.install_readwrite_bank(0xb4000, 0xb7fff, 0x3fff, 0, "dram1_18000"); - pspace.install_readwrite_bank(0xb8000, 0xbbfff, 0x3fff, 0, "dram1_1c000"); + pspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000"); + pspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram1_4000"); + pspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram1_8000"); + pspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram1_c000"); + pspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram1_10000"); + pspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000"); + pspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram1_8000"); + pspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram1_14000"); + pspace.install_readwrite_bank(0xb4000, 0xb7fff, 0, "dram1_18000"); + pspace.install_readwrite_bank(0xb8000, 0xbbfff, 0, "dram1_1c000"); /* data AM_RANGE( 0x04000, 0x07fff ) AM_RAM AM_SHARE("dram1_4000") @@ -543,18 +543,18 @@ void m20_state::install_memory() AM_RANGE( 0xb4000, 0xb7fff ) AM_RAM AM_SHARE("dram1_18000") AM_RANGE( 0xb8000, 0xbbfff ) AM_RAM AM_SHARE("dram1_1c000") */ - dspace.install_readwrite_bank(0x4000, 0x7fff, 0x3fff, 0, "dram1_4000"); - dspace.install_readwrite_bank(0x1c000, 0x1ffff, 0x3fff, 0, "dram1_0000"); - dspace.install_readwrite_bank(0x2c000, 0x2ffff, 0x3fff, 0, "dram1_0000"); - dspace.install_readwrite_bank(0x88000, 0x8bfff, 0x3fff, 0, "dram1_c000"); - dspace.install_readwrite_bank(0x8c000, 0x8ffff, 0x3fff, 0, "dram1_10000"); - dspace.install_readwrite_bank(0x98000, 0x9bfff, 0x3fff, 0, "dram1_c000"); - dspace.install_readwrite_bank(0x9c000, 0x9ffff, 0x3fff, 0, "dram1_10000"); - dspace.install_readwrite_bank(0xa8000, 0xabfff, 0x3fff, 0, "dram1_4000"); - dspace.install_readwrite_bank(0xac000, 0xaffff, 0x3fff, 0, "dram1_8000"); - dspace.install_readwrite_bank(0xb0000, 0xb3fff, 0x3fff, 0, "dram1_14000"); - dspace.install_readwrite_bank(0xb4000, 0xb7fff, 0x3fff, 0, "dram1_18000"); - dspace.install_readwrite_bank(0xb8000, 0xbbfff, 0x3fff, 0, "dram1_1c000"); + dspace.install_readwrite_bank(0x4000, 0x7fff, 0, "dram1_4000"); + dspace.install_readwrite_bank(0x1c000, 0x1ffff, 0, "dram1_0000"); + dspace.install_readwrite_bank(0x2c000, 0x2ffff, 0, "dram1_0000"); + dspace.install_readwrite_bank(0x88000, 0x8bfff, 0, "dram1_c000"); + dspace.install_readwrite_bank(0x8c000, 0x8ffff, 0, "dram1_10000"); + dspace.install_readwrite_bank(0x98000, 0x9bfff, 0, "dram1_c000"); + dspace.install_readwrite_bank(0x9c000, 0x9ffff, 0, "dram1_10000"); + dspace.install_readwrite_bank(0xa8000, 0xabfff, 0, "dram1_4000"); + dspace.install_readwrite_bank(0xac000, 0xaffff, 0, "dram1_8000"); + dspace.install_readwrite_bank(0xb0000, 0xb3fff, 0, "dram1_14000"); + dspace.install_readwrite_bank(0xb4000, 0xb7fff, 0, "dram1_18000"); + dspace.install_readwrite_bank(0xb8000, 0xbbfff, 0, "dram1_1c000"); membank("dram1_0000")->set_base(memptr + 0x20000); membank("dram1_4000")->set_base(memptr + 0x24000); @@ -580,14 +580,14 @@ void m20_state::install_memory() AM_RANGE( 0xd4000, 0xd7fff ) AM_RAM AM_SHARE("dram2_18000") AM_RANGE( 0xd8000, 0xdbfff ) AM_RAM AM_SHARE("dram2_1c000") */ - pspace.install_readwrite_bank(0xbc000, 0xbffff, 0x3fff, 0, "dram2_0000"); - pspace.install_readwrite_bank(0xc0000, 0xc3fff, 0x3fff, 0, "dram2_4000"); - pspace.install_readwrite_bank(0xc4000, 0xc7fff, 0x3fff, 0, "dram2_8000"); - pspace.install_readwrite_bank(0xc8000, 0xcbfff, 0x3fff, 0, "dram2_c000"); - pspace.install_readwrite_bank(0xcc000, 0xcffff, 0x3fff, 0, "dram2_10000"); - pspace.install_readwrite_bank(0xd0000, 0xd3fff, 0x3fff, 0, "dram2_14000"); - pspace.install_readwrite_bank(0xd4000, 0xd7fff, 0x3fff, 0, "dram2_18000"); - pspace.install_readwrite_bank(0xd8000, 0xdbfff, 0x3fff, 0, "dram2_1c000"); + pspace.install_readwrite_bank(0xbc000, 0xbffff, 0, "dram2_0000"); + pspace.install_readwrite_bank(0xc0000, 0xc3fff, 0, "dram2_4000"); + pspace.install_readwrite_bank(0xc4000, 0xc7fff, 0, "dram2_8000"); + pspace.install_readwrite_bank(0xc8000, 0xcbfff, 0, "dram2_c000"); + pspace.install_readwrite_bank(0xcc000, 0xcffff, 0, "dram2_10000"); + pspace.install_readwrite_bank(0xd0000, 0xd3fff, 0, "dram2_14000"); + pspace.install_readwrite_bank(0xd4000, 0xd7fff, 0, "dram2_18000"); + pspace.install_readwrite_bank(0xd8000, 0xdbfff, 0, "dram2_1c000"); /* data AM_RANGE( 0x08000, 0x0bfff ) AM_RAM AM_SHARE("dram2_0000") @@ -604,16 +604,16 @@ void m20_state::install_memory() AM_RANGE( 0xd4000, 0xd7fff ) AM_RAM AM_SHARE("dram2_18000") AM_RANGE( 0xd8000, 0xdbfff ) AM_RAM AM_SHARE("dram2_1c000") */ - dspace.install_readwrite_bank(0x8000, 0xbfff, 0x3fff, 0, "dram2_0000"); - dspace.install_readwrite_bank(0xc000, 0xffff, 0x3fff, 0, "dram2_4000"); - dspace.install_readwrite_bank(0xbc000, 0xbffff, 0x3fff, 0, "dram2_0000"); - dspace.install_readwrite_bank(0xc0000, 0xc3fff, 0x3fff, 0, "dram2_4000"); - dspace.install_readwrite_bank(0xc4000, 0xc7fff, 0x3fff, 0, "dram2_8000"); - dspace.install_readwrite_bank(0xc8000, 0xcbfff, 0x3fff, 0, "dram2_c000"); - dspace.install_readwrite_bank(0xcc000, 0xcffff, 0x3fff, 0, "dram2_10000"); - dspace.install_readwrite_bank(0xd0000, 0xd3fff, 0x3fff, 0, "dram2_14000"); - dspace.install_readwrite_bank(0xd4000, 0xd7fff, 0x3fff, 0, "dram2_18000"); - dspace.install_readwrite_bank(0xd8000, 0xdbfff, 0x3fff, 0, "dram2_1c000"); + dspace.install_readwrite_bank(0x8000, 0xbfff, 0, "dram2_0000"); + dspace.install_readwrite_bank(0xc000, 0xffff, 0, "dram2_4000"); + dspace.install_readwrite_bank(0xbc000, 0xbffff, 0, "dram2_0000"); + dspace.install_readwrite_bank(0xc0000, 0xc3fff, 0, "dram2_4000"); + dspace.install_readwrite_bank(0xc4000, 0xc7fff, 0, "dram2_8000"); + dspace.install_readwrite_bank(0xc8000, 0xcbfff, 0, "dram2_c000"); + dspace.install_readwrite_bank(0xcc000, 0xcffff, 0, "dram2_10000"); + dspace.install_readwrite_bank(0xd0000, 0xd3fff, 0, "dram2_14000"); + dspace.install_readwrite_bank(0xd4000, 0xd7fff, 0, "dram2_18000"); + dspace.install_readwrite_bank(0xd8000, 0xdbfff, 0, "dram2_1c000"); membank("dram2_0000")->set_base(memptr + 0x40000); membank("dram2_4000")->set_base(memptr + 0x44000); @@ -640,15 +640,15 @@ void m20_state::install_memory() AM_RANGE( 0xf8000, 0xfbfff ) AM_RAM AM_SHARE("dram3_1c000") AM_RANGE( 0xfc000, 0xfffff ) AM_RAM AM_SHARE("dram3_0000") */ - pspace.install_readwrite_bank(0xdc000, 0xdffff, 0x3fff, 0, "dram3_0000"); - pspace.install_readwrite_bank(0xe0000, 0xe3fff, 0x3fff, 0, "dram3_4000"); - pspace.install_readwrite_bank(0xe4000, 0xe7fff, 0x3fff, 0, "dram3_8000"); - pspace.install_readwrite_bank(0xe8000, 0xebfff, 0x3fff, 0, "dram3_c000"); - pspace.install_readwrite_bank(0xec000, 0xeffff, 0x3fff, 0, "dram3_10000"); - pspace.install_readwrite_bank(0xf0000, 0xf3fff, 0x3fff, 0, "dram3_14000"); - pspace.install_readwrite_bank(0xf4000, 0xf7fff, 0x3fff, 0, "dram3_18000"); - pspace.install_readwrite_bank(0xf8000, 0xfbfff, 0x3fff, 0, "dram3_1c000"); - pspace.install_readwrite_bank(0xfc000, 0xfffff, 0x3fff, 0, "dram3_0000"); + pspace.install_readwrite_bank(0xdc000, 0xdffff, 0, "dram3_0000"); + pspace.install_readwrite_bank(0xe0000, 0xe3fff, 0, "dram3_4000"); + pspace.install_readwrite_bank(0xe4000, 0xe7fff, 0, "dram3_8000"); + pspace.install_readwrite_bank(0xe8000, 0xebfff, 0, "dram3_c000"); + pspace.install_readwrite_bank(0xec000, 0xeffff, 0, "dram3_10000"); + pspace.install_readwrite_bank(0xf0000, 0xf3fff, 0, "dram3_14000"); + pspace.install_readwrite_bank(0xf4000, 0xf7fff, 0, "dram3_18000"); + pspace.install_readwrite_bank(0xf8000, 0xfbfff, 0, "dram3_1c000"); + pspace.install_readwrite_bank(0xfc000, 0xfffff, 0, "dram3_0000"); /* data AM_RANGE( 0x44000, 0x47fff ) AM_RAM AM_SHARE("dram3_0000") @@ -665,17 +665,17 @@ void m20_state::install_memory() AM_RANGE( 0xf8000, 0xfbfff ) AM_RAM AM_SHARE("dram3_1c000") AM_RANGE( 0xfc000, 0xfffff ) AM_RAM AM_SHARE("dram3_0000") */ - dspace.install_readwrite_bank(0x44000, 0x47fff, 0x3fff, 0, "dram3_0000"); - dspace.install_readwrite_bank(0x48000, 0x4bfff, 0x3fff, 0, "dram3_4000"); - dspace.install_readwrite_bank(0xdc000, 0xdffff, 0x3fff, 0, "dram3_0000"); - dspace.install_readwrite_bank(0xe0000, 0xe3fff, 0x3fff, 0, "dram3_4000"); - dspace.install_readwrite_bank(0xe4000, 0xe7fff, 0x3fff, 0, "dram3_8000"); - dspace.install_readwrite_bank(0xe8000, 0xebfff, 0x3fff, 0, "dram3_c000"); - dspace.install_readwrite_bank(0xec000, 0xeffff, 0x3fff, 0, "dram3_10000"); - dspace.install_readwrite_bank(0xf0000, 0xf3fff, 0x3fff, 0, "dram3_14000"); - dspace.install_readwrite_bank(0xf4000, 0xf7fff, 0x3fff, 0, "dram3_18000"); - dspace.install_readwrite_bank(0xf8000, 0xfbfff, 0x3fff, 0, "dram3_1c000"); - dspace.install_readwrite_bank(0xfc000, 0xfffff, 0x3fff, 0, "dram3_0000"); + dspace.install_readwrite_bank(0x44000, 0x47fff, 0, "dram3_0000"); + dspace.install_readwrite_bank(0x48000, 0x4bfff, 0, "dram3_4000"); + dspace.install_readwrite_bank(0xdc000, 0xdffff, 0, "dram3_0000"); + dspace.install_readwrite_bank(0xe0000, 0xe3fff, 0, "dram3_4000"); + dspace.install_readwrite_bank(0xe4000, 0xe7fff, 0, "dram3_8000"); + dspace.install_readwrite_bank(0xe8000, 0xebfff, 0, "dram3_c000"); + dspace.install_readwrite_bank(0xec000, 0xeffff, 0, "dram3_10000"); + dspace.install_readwrite_bank(0xf0000, 0xf3fff, 0, "dram3_14000"); + dspace.install_readwrite_bank(0xf4000, 0xf7fff, 0, "dram3_18000"); + dspace.install_readwrite_bank(0xf8000, 0xfbfff, 0, "dram3_1c000"); + dspace.install_readwrite_bank(0xfc000, 0xfffff, 0, "dram3_0000"); membank("dram3_0000")->set_base(memptr + 0x60000); membank("dram3_4000")->set_base(memptr + 0x64000); diff --git a/src/mame/drivers/m72.cpp b/src/mame/drivers/m72.cpp index acab1dcb3e6..84e51098f57 100644 --- a/src/mame/drivers/m72.cpp +++ b/src/mame/drivers/m72.cpp @@ -480,8 +480,8 @@ DRIVER_INIT_MEMBER(m72_state,m72_8751) io.install_write_handler(0xc0, 0xc1, write16_delegate(FUNC(m72_state::main_mcu_sound_w),this)); /* sound cpu */ - sndio.install_write_handler(0x82, 0x82, 0xff, 0, write8_delegate(FUNC(dac_device::write_unsigned8),(dac_device*)m_dac)); - sndio.install_read_handler (0x84, 0x84, 0xff, 0, read8_delegate(FUNC(m72_state::snd_cpu_sample_r),this)); + sndio.install_write_handler(0x82, 0x82, write8_delegate(FUNC(dac_device::write_unsigned8),(dac_device*)m_dac)); + sndio.install_read_handler (0x84, 0x84, read8_delegate(FUNC(m72_state::snd_cpu_sample_r),this)); /* lohtb2 */ #if 0 diff --git a/src/mame/drivers/mac.cpp b/src/mame/drivers/mac.cpp index 18c28e059a4..395c53057b8 100644 --- a/src/mame/drivers/mac.cpp +++ b/src/mame/drivers/mac.cpp @@ -799,7 +799,6 @@ static ADDRESS_MAP_START(quadra700_map, AS_PROGRAM, 32, mac_state ) AM_RANGE(0x50014000, 0x50015fff) AM_DEVREADWRITE8("asc", asc_device, read, write, 0xffffffff) AM_MIRROR(0x00fc0000) AM_RANGE(0x5001e000, 0x5001ffff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, 0xffffffff) AM_MIRROR(0x00fc0000) - AM_RANGE(0x50040000, 0x50041fff) AM_READWRITE16(mac_via_r, mac_via_w, 0xffffffff) AM_MIRROR(0x00fc0000) // f9800000 = VDAC / DAFB AM_RANGE(0xf9000000, 0xf91fffff) AM_RAM AM_SHARE("vram") AM_RANGE(0xf9800000, 0xf98001ff) AM_READWRITE(dafb_r, dafb_w) diff --git a/src/mame/drivers/mainsnk.cpp b/src/mame/drivers/mainsnk.cpp index 29ba1642308..c75e8ebda0f 100644 --- a/src/mame/drivers/mainsnk.cpp +++ b/src/mame/drivers/mainsnk.cpp @@ -74,7 +74,7 @@ Canvas Croquis, SNK 1984 Note: The bproms(MB7054) was read as 74s572. -I have not tested this PCB yet so i have no idea if it's workin. +I have not tested this PCB yet so I have no idea if it's working. All Bproms and P1-P8 is on top pcb, P9-P14 on bottom board, see pictures. Documentation: @@ -123,7 +123,7 @@ void mainsnk_state::machine_start() WRITE8_MEMBER(mainsnk_state::sound_command_w) { m_sound_cpu_busy = 1; - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -159,7 +159,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, mainsnk_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xc000, 0xc000) AM_READ(sound_ack_r) AM_RANGE(0xe000, 0xe001) AM_DEVWRITE("ay1", ay8910_device, address_data_w) AM_RANGE(0xe002, 0xe003) AM_WRITENOP // ? always FFFF, snkwave leftover? @@ -412,6 +412,8 @@ static MACHINE_CONFIG_START( mainsnk, mainsnk_state ) MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 2000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) diff --git a/src/mame/drivers/majorpkr.cpp b/src/mame/drivers/majorpkr.cpp index 1d544a938db..83450003bdb 100644 --- a/src/mame/drivers/majorpkr.cpp +++ b/src/mame/drivers/majorpkr.cpp @@ -1,6 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Roberto Fresca -// thanks-to:Tomasz Slanina,Rob Ragon +// thanks-to:Tomasz Slanina, Rob Ragon /********************************************************************************** Major Poker / Major Joker @@ -18,26 +18,30 @@ 1x Z80 @ 6 MHz. (main CPU) - 1x M6295 @ 1.5 MHz. (4 channel mixing ADPCM voice synthesis). Pin7 high. + 1x OKI M6295 @ 1.5 MHz. (4 channel mixing ADPCM voice synthesis). Pin7 high. - 1x 6845 (CRT Controller) @ 750 kHz. - Hs 15625 Hz - Vs 52.786 Hz + 1x Hitachi HD6845 (CRT Controller) @ 750 kHz. + Hs 15625 Hz. + Vs 52.786 Hz. - 2x MB8464 (Video?)8kx8 + 1x Logic box (like CPU boxes) with 5 PLDs, maybe for protection. + + 2x MB8464 (Video?)8Kx8 1x MB8416 (NVRAM) 2Kx8 - 1x MB8464 (?) 8kx8 + 1x MB8464 (?) 8Kx8 - 2x 27C040 (Roms P1 & P2) (GFX ROMs). + 2x 27C040 (Roms 1 & 2) (GFX ROMs). 2x 27C010 (Roms 3 & 4) (GFX ROMs). - 1x 27C020 (Rom 5) (sound) - 1x 27C512 (Rom 6) (program) + 1x 27C020 (Rom 5) (4-bit ADPCM samples) + 1x 27C512 (Rom 6) (main program) 1x Xtal @ 12 MHz. 4x 8 DIP switches banks. 2x switches (SW1, SW2). + 1x 2x6-pin male connector. (jumper1) + 1x 2x10-pin edge connector. 1x 2x22-pin edge connector. @@ -446,9 +450,9 @@ **********************************************************************************/ #define MASTER_CLOCK XTAL_12MHz -#define CPU_CLOCK (MASTER_CLOCK / 2) /* 6 MHz, measured */ -#define OKI_CLOCK (MASTER_CLOCK / 8) /* 1.5 MHz, measured */ -#define CRTC_CLOCK (MASTER_CLOCK / 16) /* 750 kHz, measured */ +#define CPU_CLOCK (MASTER_CLOCK / 2) // 6 MHz, measured. +#define OKI_CLOCK (MASTER_CLOCK / 8) // 1.5 MHz, measured. +#define CRTC_CLOCK (MASTER_CLOCK / 16) // 750 kHz, measured. #include "emu.h" #include "cpu/z80/z80.h" @@ -615,12 +619,12 @@ WRITE8_MEMBER(majorpkr_state::vidreg_w) READ8_MEMBER(majorpkr_state::mux_port_r) { - switch( (m_mux_data & 0xf0) ) /* 00-10-20-30-0F-1F-2F-3F */ + switch( (m_mux_data & 0xf0) ) // 00-10-20-30-0F-1F-2F-3F. { - case 0x00: return ioport("DSW1")->read(); /* confirmed */ - case 0x10: return ioport("DSW2")->read(); /* confirmed */ - case 0x20: return ioport("DSW3")->read(); /* confirmed */ - case 0x30: return ioport("DSW4")->read(); /* confirmed */ + case 0x00: return ioport("DSW1")->read(); // confirmed. + case 0x10: return ioport("DSW2")->read(); // confirmed. + case 0x20: return ioport("DSW3")->read(); // confirmed. + case 0x30: return ioport("DSW4")->read(); // confirmed. } return 0xff; @@ -640,7 +644,7 @@ READ8_MEMBER(majorpkr_state::mux_port2_r) WRITE8_MEMBER(majorpkr_state::mux_sel_w) { - m_mux_data = data; /* 00-10-20-30-0F-1F-2F-3F */ + m_mux_data = data; // 00-10-20-30-0F-1F-2F-3F. } @@ -663,13 +667,13 @@ WRITE8_MEMBER(majorpkr_state::lamps_a_w) -x-- ---- Small lamp. x--- ---- Unknown. */ - output().set_lamp_value(0, (data) & 1); /* Lamp 0: Hold 1 */ - output().set_lamp_value(1, (data >> 1) & 1); /* Lamp 1: Hold 2 */ - output().set_lamp_value(2, (data >> 2) & 1); /* Lamp 2: Hold 3 */ - output().set_lamp_value(3, (data >> 3) & 1); /* Lamp 3: Hold 4 */ - output().set_lamp_value(4, (data >> 4) & 1); /* Lamp 4: Hold 5 */ - output().set_lamp_value(5, (data >> 5) & 1); /* Lamp 5: Big or Small (need identification) */ - output().set_lamp_value(6, (data >> 6) & 1); /* Lamp 6: Big or Small (need identification) */ + output().set_lamp_value(0, (data) & 1); // Lamp 0: Hold 1. + output().set_lamp_value(1, (data >> 1) & 1); // Lamp 1: Hold 2. + output().set_lamp_value(2, (data >> 2) & 1); // Lamp 2: Hold 3. + output().set_lamp_value(3, (data >> 3) & 1); // Lamp 3: Hold 4. + output().set_lamp_value(4, (data >> 4) & 1); // Lamp 4: Hold 5. + output().set_lamp_value(5, (data >> 5) & 1); // Lamp 5: Big or Small (need identification). + output().set_lamp_value(6, (data >> 6) & 1); // Lamp 6: Big or Small (need identification). if (data & 0x80) logerror("Lamps A: Write to 13h: %02x\n", data); @@ -689,12 +693,12 @@ WRITE8_MEMBER(majorpkr_state::lamps_b_w) --x- ---- Fever lamp. xx-- ---- Unknown. */ - output().set_lamp_value(7, (data) & 1); /* Lamp 7: Bet */ - output().set_lamp_value(8, (data >> 1) & 1); /* Lamp 8: Draw */ - output().set_lamp_value(9, (data >> 2) & 1); /* Lamp 9: Cancel */ - output().set_lamp_value(10, (data >> 3) & 1); /* Lamp 10: Take */ - output().set_lamp_value(11, (data >> 4) & 1); /* Lamp 11: D-UP */ - output().set_lamp_value(12, (data >> 5) & 1); /* Lamp 12: Fever */ + output().set_lamp_value(7, (data) & 1); // Lamp 7: Bet. + output().set_lamp_value(8, (data >> 1) & 1); // Lamp 8: Draw. + output().set_lamp_value(9, (data >> 2) & 1); // Lamp 9: Cancel. + output().set_lamp_value(10, (data >> 3) & 1); // Lamp 10: Take. + output().set_lamp_value(11, (data >> 4) & 1); // Lamp 11: D-UP. + output().set_lamp_value(12, (data >> 5) & 1); // Lamp 12: Fever. if (data & 0xc0) logerror("Lamps B: Write to 14h: %02x\n", data); @@ -713,10 +717,10 @@ WRITE8_MEMBER(majorpkr_state::pulses_w) ---x ---- Watchdog? (constant writes). xxx- ---- Unknown. */ - machine().bookkeeping().coin_counter_w(3, data & 0x01); /* Credits Out (all) */ - machine().bookkeeping().coin_counter_w(2, data & 0x02); /* Credits 3 */ - machine().bookkeeping().coin_counter_w(0, data & 0x04); /* Credits 1 */ - machine().bookkeeping().coin_counter_w(1, data & 0x08); /* Credits 2 */ + machine().bookkeeping().coin_counter_w(3, data & 0x01); // Credits Out (all). + machine().bookkeeping().coin_counter_w(2, data & 0x02); // Credits 3. + machine().bookkeeping().coin_counter_w(0, data & 0x04); // Credits 1. + machine().bookkeeping().coin_counter_w(1, data & 0x08); // Credits 2. if (data & 0xe0) logerror("Pulse: Write to 10h: %02x\n", data); @@ -772,22 +776,22 @@ static ADDRESS_MAP_START( portmap, AS_IO, 8, majorpkr_state ) AM_RANGE(0x01, 0x01) AM_WRITE(palette_bank_w) AM_RANGE(0x02, 0x02) AM_WRITE(vram_bank_w) - AM_RANGE(0x10, 0x10) AM_READ(mux_port2_r) /* muxed set of controls */ - AM_RANGE(0x10, 0x10) AM_WRITE(pulses_w) /* kind of watchdog on bit4... mech counters on bits 0-1-2-3 */ + AM_RANGE(0x10, 0x10) AM_READ(mux_port2_r) // muxed set of controls. + AM_RANGE(0x10, 0x10) AM_WRITE(pulses_w) // kind of watchdog on bit4... mech counters on bits 0-1-2-3. AM_RANGE(0x11, 0x11) AM_READ_PORT("IN1") - AM_RANGE(0x11, 0x11) AM_WRITE(mux_sel_w) /* multiplexer selector */ + AM_RANGE(0x11, 0x11) AM_WRITE(mux_sel_w) // multiplexer selector. AM_RANGE(0x12, 0x12) AM_READ_PORT("IN2") - AM_RANGE(0x12, 0x12) AM_WRITE(vidreg_w) /* video registers: normal or up down screen */ - AM_RANGE(0x13, 0x13) AM_READ(mux_port_r) /* all 4 DIP switches banks multiplexed */ - AM_RANGE(0x13, 0x13) AM_WRITE(lamps_a_w) /* lamps a out */ - AM_RANGE(0x14, 0x14) AM_READ_PORT("TEST") /* "freeze" switch */ - AM_RANGE(0x14, 0x14) AM_WRITE(lamps_b_w) /* lamps b out */ + AM_RANGE(0x12, 0x12) AM_WRITE(vidreg_w) // video registers: normal or up down screen. + AM_RANGE(0x13, 0x13) AM_READ(mux_port_r) // all 4 DIP switches banks multiplexed. + AM_RANGE(0x13, 0x13) AM_WRITE(lamps_a_w) // lamps a out. + AM_RANGE(0x14, 0x14) AM_READ_PORT("TEST") // "freeze" switch. + AM_RANGE(0x14, 0x14) AM_WRITE(lamps_b_w) // lamps b out. AM_RANGE(0x30, 0x30) AM_DEVWRITE("crtc", mc6845_device, address_w) AM_RANGE(0x31, 0x31) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w) AM_RANGE(0x50, 0x50) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0x60, 0x60) AM_WRITENOP /* leftover from a PSG SN76489/96? */ + AM_RANGE(0x60, 0x60) AM_WRITENOP // leftover from a PSG SN76489/96?... ADDRESS_MAP_END @@ -977,7 +981,7 @@ GFXDECODE_END static MACHINE_CONFIG_START( majorpkr, majorpkr_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) /* 6 MHz */ + MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) // 6 MHz. MCFG_CPU_PROGRAM_MAP(map) MCFG_CPU_IO_MAP(portmap) MCFG_CPU_VBLANK_INT_DRIVER("screen", majorpkr_state, irq0_line_hold) @@ -1000,7 +1004,7 @@ static MACHINE_CONFIG_START( majorpkr, majorpkr_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(CRTC_CLOCK*16, (47+1)*16, 0, (36*16)-16, (36+1)*8, 0, (28*8)) /* from CRTC registers */ + MCFG_SCREEN_RAW_PARAMS(CRTC_CLOCK*16, (47+1)*16, 0, (36*16)-16, (36+1)*8, 0, (28*8)) // from CRTC registers. MCFG_SCREEN_UPDATE_DRIVER(majorpkr_state, screen_update_majorpkr) MCFG_SCREEN_PALETTE("palette") @@ -1009,14 +1013,14 @@ static MACHINE_CONFIG_START( majorpkr, majorpkr_state ) MCFG_PALETTE_ADD("palette", 0x100 * 16) MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB) - MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK) /* verified */ + MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK) // verified. MCFG_MC6845_SHOW_BORDER_AREA(false) - MCFG_MC6845_VISAREA_ADJUST(0,-16,0,0) + MCFG_MC6845_VISAREA_ADJUST(0, -16, 0, 0) MCFG_MC6845_CHAR_WIDTH(16) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_OKIM6295_ADD("oki", OKI_CLOCK, OKIM6295_PIN7_HIGH) /* clock frequency & pin 7 verified */ + MCFG_OKIM6295_ADD("oki", OKI_CLOCK, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 verified. MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END @@ -1025,13 +1029,17 @@ MACHINE_CONFIG_END * Rom Load * *************************/ +/* + Major Poker. + Original PAL System game. +*/ ROM_START( majorpkr ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "6_27c512_823b.bin", 0x00000, 0x10000, CRC(a3d5475e) SHA1(cb41508b55da8b8c658a2f2ccc6ebda09db29040) ) + ROM_LOAD( "6_pp_27c512_823b.bin", 0x00000, 0x10000, CRC(a3d5475e) SHA1(cb41508b55da8b8c658a2f2ccc6ebda09db29040) ) ROM_REGION( 0x100000, "bg_gfx", 0 ) - ROM_LOAD( "p1_27c040_7d3b.bin", 0x00000, 0x80000, CRC(67299eff) SHA1(34d3d8baf08dea495b699dd63272b445e2acb42d) ) - ROM_LOAD( "p2_27c040_6039.bin", 0x80000, 0x80000, CRC(2d68b177) SHA1(01c934e0383991f2208b915cc5015463a8b6a8fd) ) + ROM_LOAD( "1_27c040_7d3b.bin", 0x00000, 0x80000, CRC(67299eff) SHA1(34d3d8baf08dea495b699dd63272b445e2acb42d) ) + ROM_LOAD( "2_27c040_6039.bin", 0x80000, 0x80000, CRC(2d68b177) SHA1(01c934e0383991f2208b915cc5015463a8b6a8fd) ) ROM_REGION( 0x40000, "fg_gfx", 0 ) ROM_LOAD( "3_27c010_af18.bin", 0x00000, 0x20000, CRC(54452bb8) SHA1(9d13c17b85dd0185ba64fc6f90425e0c75363960) ) @@ -1039,9 +1047,121 @@ ROM_START( majorpkr ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "5_27c020_8630.bin", 0x00000, 0x40000, CRC(4843858e) SHA1(27629829cf7753d7801a6eb42bb77ca2a467bebd) ) + + ROM_REGION( 0x1000, "plds1", 0 ) // from protection box. + ROM_LOAD( "u1_box_palce16v8h.bin", 0x0000, 0x0117, NO_DUMP ) // need to be extracted from the box and cracked... + ROM_LOAD( "u2_box_palce16v8h.bin", 0x0200, 0x0117, NO_DUMP ) // need to be extracted from the box and cracked... + ROM_LOAD( "u3_box_palce16v8h.bin", 0x0400, 0x0117, NO_DUMP ) // need to be extracted from the box and cracked... + ROM_LOAD( "u4_box_palce16v8h.bin", 0x0600, 0x0117, NO_DUMP ) // need to be extracted from the box and cracked... + ROM_LOAD( "u5_box_palce20v8h.bin", 0x0800, 0x0157, NO_DUMP ) // need to be extracted from the box and cracked... + + ROM_REGION( 0x2000, "plds2", 0 ) // from PCB + ROM_LOAD( "g1_gal16v8d.bin", 0x0000, 0x0117, CRC(5ec2527a) SHA1(af9832a75efc25578ca79a08fae4bb169d4eb5ec) ) + ROM_LOAD( "g2_gal16v8d.bin", 0x0200, 0x0117, CRC(f6a04079) SHA1(fd9e7fac2867de9746138e5aa22fdac10c370d65) ) // protected, but cracked... + ROM_LOAD( "g3_gal16v8d.bin", 0x0400, 0x0117, CRC(8b36df82) SHA1(b629557a8ebc88edd9e13372906f393f9fbc0669) ) + ROM_LOAD( "g4_gal16v8d.bin", 0x0600, 0x0117, CRC(8b36df82) SHA1(b629557a8ebc88edd9e13372906f393f9fbc0669) ) + ROM_LOAD( "g5_gal16v8d.bin", 0x0800, 0x0117, CRC(8b36df82) SHA1(b629557a8ebc88edd9e13372906f393f9fbc0669) ) + ROM_LOAD( "g6_gal16v8d.bin", 0x0a00, 0x0117, CRC(5ec2527a) SHA1(af9832a75efc25578ca79a08fae4bb169d4eb5ec) ) + ROM_LOAD( "g7_gal20v8b.bin", 0x0c00, 0x0157, CRC(9f45d431) SHA1(c3c9e6ed25a7cd7536974b906c993f5d7a58e65d) ) + ROM_LOAD( "g8_gal20v8b.bin", 0x0e00, 0x0157, CRC(9f45d431) SHA1(c3c9e6ed25a7cd7536974b906c993f5d7a58e65d) ) + ROM_LOAD( "g9_gal16v8d.bin", 0x1000, 0x0117, CRC(5ec2527a) SHA1(af9832a75efc25578ca79a08fae4bb169d4eb5ec) ) + ROM_LOAD( "g10_gal16v8d.bin", 0x1200, 0x0117, CRC(5bdfd9f3) SHA1(5bca47c1fa4b1a6b7d1041a12f98153fc1b23065) ) ROM_END +/* + Major Poker. + Micro Manufacturing intro. + Program is totally different. + Graphics ROMs are identical to the parent set. +*/ +ROM_START( majorpkra ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "27c512__a.rom6", 0x00000, 0x10000, CRC(0213a933) SHA1(0c3238f037bcbe096c85b5c57ac735d707361f87) ) + + ROM_REGION( 0x100000, "bg_gfx", 0 ) + ROM_LOAD( "27c040.rom1", 0x00000, 0x80000, CRC(67299eff) SHA1(34d3d8baf08dea495b699dd63272b445e2acb42d) ) + ROM_LOAD( "27c040.rom2", 0x80000, 0x80000, CRC(2d68b177) SHA1(01c934e0383991f2208b915cc5015463a8b6a8fd) ) + + ROM_REGION( 0x40000, "fg_gfx", 0 ) + ROM_LOAD( "27c1001.rom3", 0x00000, 0x20000, CRC(54452bb8) SHA1(9d13c17b85dd0185ba64fc6f90425e0c75363960) ) + ROM_LOAD( "27c1001.rom4", 0x20000, 0x20000, CRC(2e1e0972) SHA1(729dba2ef6ae8a7299c7ceb38835bebb0c42d28e) ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "27c2001.rom5", 0x00000, 0x40000, CRC(4843858e) SHA1(27629829cf7753d7801a6eb42bb77ca2a467bebd) ) +ROM_END + +/* + Major Poker. + Micro Manufacturing intro. + Graphics ROMs are identical to the parent set. + + Only one byte of difference against set C. + Offset 0x38a7 = 0x08 (instead of 0x10). +*/ +ROM_START( majorpkrb ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "27c512__b.rom6", 0x00000, 0x10000, CRC(3ab1e2c2) SHA1(11339fe32bb372f01b0983d2d571440530353b2a) ) + + ROM_REGION( 0x100000, "bg_gfx", 0 ) + ROM_LOAD( "27c040.rom1", 0x00000, 0x80000, CRC(67299eff) SHA1(34d3d8baf08dea495b699dd63272b445e2acb42d) ) + ROM_LOAD( "27c040.rom2", 0x80000, 0x80000, CRC(2d68b177) SHA1(01c934e0383991f2208b915cc5015463a8b6a8fd) ) + + ROM_REGION( 0x40000, "fg_gfx", 0 ) + ROM_LOAD( "27c1001.rom3", 0x00000, 0x20000, CRC(54452bb8) SHA1(9d13c17b85dd0185ba64fc6f90425e0c75363960) ) + ROM_LOAD( "27c1001.rom4", 0x20000, 0x20000, CRC(2e1e0972) SHA1(729dba2ef6ae8a7299c7ceb38835bebb0c42d28e) ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "27c2001.rom5", 0x00000, 0x40000, CRC(4843858e) SHA1(27629829cf7753d7801a6eb42bb77ca2a467bebd) ) +ROM_END + +/* + Major Poker. + Micro Manufacturing intro. + Graphics ROMs are identical to the parent set. + + Only one byte of difference against set B. + Offset 0x38a7 = 0x10 (instead of 0x08). +*/ +ROM_START( majorpkrc ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "27c512__c.rom6", 0x00000, 0x10000, CRC(7379026b) SHA1(49e4f935ba3d27c70df351e3e61fb94e00f1536e) ) + + ROM_REGION( 0x100000, "bg_gfx", 0 ) + ROM_LOAD( "27c040.rom1", 0x00000, 0x80000, CRC(67299eff) SHA1(34d3d8baf08dea495b699dd63272b445e2acb42d) ) + ROM_LOAD( "27c040.rom2", 0x80000, 0x80000, CRC(2d68b177) SHA1(01c934e0383991f2208b915cc5015463a8b6a8fd) ) + + ROM_REGION( 0x40000, "fg_gfx", 0 ) + ROM_LOAD( "27c1001.rom3", 0x00000, 0x20000, CRC(54452bb8) SHA1(9d13c17b85dd0185ba64fc6f90425e0c75363960) ) + ROM_LOAD( "27c1001.rom4", 0x20000, 0x20000, CRC(2e1e0972) SHA1(729dba2ef6ae8a7299c7ceb38835bebb0c42d28e) ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "27c2001.rom5", 0x00000, 0x40000, CRC(4843858e) SHA1(27629829cf7753d7801a6eb42bb77ca2a467bebd) ) +ROM_END + +/* + Lucky Poker. + Looks like a bootleg/hack of Major Joker. + Graphics ROMs are identical to the parent set. +*/ +ROM_START( luckypkr ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "27c512__luckypkr.rom6", 0x00000, 0x10000, CRC(e5e6d79d) SHA1(2c4b54d8cc9083cfa1508a73269baff923504778) ) + + ROM_REGION( 0x100000, "bg_gfx", 0 ) + ROM_LOAD( "27c040.rom1", 0x00000, 0x80000, CRC(67299eff) SHA1(34d3d8baf08dea495b699dd63272b445e2acb42d) ) + ROM_LOAD( "27c040.rom2", 0x80000, 0x80000, CRC(2d68b177) SHA1(01c934e0383991f2208b915cc5015463a8b6a8fd) ) + + ROM_REGION( 0x40000, "fg_gfx", 0 ) + ROM_LOAD( "27c1001.rom3", 0x00000, 0x20000, CRC(54452bb8) SHA1(9d13c17b85dd0185ba64fc6f90425e0c75363960) ) + ROM_LOAD( "27c1001.rom4", 0x20000, 0x20000, CRC(2e1e0972) SHA1(729dba2ef6ae8a7299c7ceb38835bebb0c42d28e) ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "27c2001.rom5", 0x00000, 0x40000, CRC(4843858e) SHA1(27629829cf7753d7801a6eb42bb77ca2a467bebd) ) +ROM_END + + + /************************* * Driver Init * *************************/ @@ -1057,5 +1177,9 @@ DRIVER_INIT_MEMBER(majorpkr_state, majorpkr) * Game Drivers * *************************/ -/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ -GAMEL( 1994, majorpkr, 0, majorpkr, majorpkr, majorpkr_state, majorpkr, ROT0, "PAL System", "Major Poker (v2.0)", 0, layout_majorpkr ) +/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ +GAMEL( 1994, majorpkr, 0, majorpkr, majorpkr, majorpkr_state, majorpkr, ROT0, "PAL System", "Major Poker (set 1, v2.0)", 0, layout_majorpkr ) +GAMEL( 1994, majorpkra, majorpkr, majorpkr, majorpkr, majorpkr_state, majorpkr, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 2, Micro Manufacturing intro)", 0, layout_majorpkr ) +GAMEL( 1994, majorpkrb, majorpkr, majorpkr, majorpkr, majorpkr_state, majorpkr, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 3, Micro Manufacturing intro)", 0, layout_majorpkr ) +GAMEL( 1994, majorpkrc, majorpkr, majorpkr, majorpkr, majorpkr_state, majorpkr, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 4, Micro Manufacturing intro)", 0, layout_majorpkr ) +GAMEL( 1994, luckypkr, majorpkr, majorpkr, majorpkr, majorpkr_state, majorpkr, ROT0, "bootleg", "Lucky Poker (bootleg/hack of Major Poker)", 0, layout_majorpkr ) diff --git a/src/mame/drivers/marywu.cpp b/src/mame/drivers/marywu.cpp index 288b244e670..445127d7a2f 100644 --- a/src/mame/drivers/marywu.cpp +++ b/src/mame/drivers/marywu.cpp @@ -63,28 +63,28 @@ static INPUT_PORTS_START( marywu ) PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_START("DSW") - PORT_DIPNAME( 0x01, 0x01, "Unknown bit #0" ) PORT_DIPLOCATION("DSW:0") + PORT_DIPNAME( 0x01, 0x01, "Unknown bit #0" ) PORT_DIPLOCATION("DSW:1") PORT_DIPSETTING(0x01, DEF_STR( On ) ) PORT_DIPSETTING(0x00, DEF_STR( Off ) ) - PORT_DIPNAME( 0x02, 0x02, "Unknown bit #1" ) PORT_DIPLOCATION("DSW:1") + PORT_DIPNAME( 0x02, 0x02, "Unknown bit #1" ) PORT_DIPLOCATION("DSW:2") PORT_DIPSETTING(0x02, DEF_STR( On ) ) PORT_DIPSETTING(0x00, DEF_STR( Off ) ) - PORT_DIPNAME( 0x04, 0x04, "Unknown bit #2" ) PORT_DIPLOCATION("DSW:2") + PORT_DIPNAME( 0x04, 0x04, "Unknown bit #2" ) PORT_DIPLOCATION("DSW:3") PORT_DIPSETTING(0x04, DEF_STR( On ) ) PORT_DIPSETTING(0x00, DEF_STR( Off ) ) - PORT_DIPNAME( 0x08, 0x08, "Unknown bit #3" ) PORT_DIPLOCATION("DSW:3") + PORT_DIPNAME( 0x08, 0x08, "Unknown bit #3" ) PORT_DIPLOCATION("DSW:4") PORT_DIPSETTING(0x08, DEF_STR( On ) ) PORT_DIPSETTING(0x00, DEF_STR( Off ) ) - PORT_DIPNAME( 0x10, 0x10, "Unknown bit #4" ) PORT_DIPLOCATION("DSW:4") + PORT_DIPNAME( 0x10, 0x10, "Unknown bit #4" ) PORT_DIPLOCATION("DSW:5") PORT_DIPSETTING(0x10, DEF_STR( On ) ) PORT_DIPSETTING(0x00, DEF_STR( Off ) ) - PORT_DIPNAME( 0x20, 0x20, "Unknown bit #5" ) PORT_DIPLOCATION("DSW:5") + PORT_DIPNAME( 0x20, 0x20, "Unknown bit #5" ) PORT_DIPLOCATION("DSW:6") PORT_DIPSETTING(0x20, DEF_STR( On ) ) PORT_DIPSETTING(0x00, DEF_STR( Off ) ) - PORT_DIPNAME( 0x40, 0x40, "Unknown bit #6" ) PORT_DIPLOCATION("DSW:6") + PORT_DIPNAME( 0x40, 0x40, "Unknown bit #6" ) PORT_DIPLOCATION("DSW:7") PORT_DIPSETTING(0x40, DEF_STR( On ) ) PORT_DIPSETTING(0x00, DEF_STR( Off ) ) - PORT_DIPNAME( 0x80, 0x80, "Unknown bit #7" ) PORT_DIPLOCATION("DSW:7") + PORT_DIPNAME( 0x80, 0x80, "Unknown bit #7" ) PORT_DIPLOCATION("DSW:8") PORT_DIPSETTING(0x80, DEF_STR( On ) ) PORT_DIPSETTING(0x00, DEF_STR( Off ) ) @@ -169,7 +169,7 @@ static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, marywu_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( io_map, AS_IO, 8, marywu_state ) - AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0100) AM_RAM /* HM6116: 2kbytes of Static RAM */ + AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_RAM /* HM6116: 2kbytes of Static RAM */ AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("i8279", i8279_device, data_r, data_w) AM_RANGE(0xb001, 0xb001) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("i8279", i8279_device, status_r, cmd_w) AM_RANGE(0x9000, 0x9000) AM_MIRROR(0x0ffc) AM_DEVWRITE("ay1", ay8910_device, data_address_w) diff --git a/src/mame/drivers/matmania.cpp b/src/mame/drivers/matmania.cpp index d227a15805d..0384e2613d5 100644 --- a/src/mame/drivers/matmania.cpp +++ b/src/mame/drivers/matmania.cpp @@ -172,13 +172,13 @@ READ8_MEMBER(matmania_state::maniach_mcu_status_r) WRITE8_MEMBER(matmania_state::matmania_sh_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); } WRITE8_MEMBER(matmania_state::maniach_sh_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); } @@ -231,7 +231,7 @@ static ADDRESS_MAP_START( matmania_sound_map, AS_PROGRAM, 8, matmania_state ) AM_RANGE(0x2000, 0x2001) AM_DEVWRITE("ay1", ay8910_device, data_address_w) AM_RANGE(0x2002, 0x2003) AM_DEVWRITE("ay2", ay8910_device, data_address_w) AM_RANGE(0x2004, 0x2004) AM_DEVWRITE("dac", dac_device, write_signed8) - AM_RANGE(0x2007, 0x2007) AM_READ(soundlatch_byte_r) + AM_RANGE(0x2007, 0x2007) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -239,7 +239,7 @@ static ADDRESS_MAP_START( maniach_sound_map, AS_PROGRAM, 8, matmania_state ) AM_RANGE(0x0000, 0x0fff) AM_RAM AM_RANGE(0x2000, 0x2001) AM_DEVWRITE("ymsnd", ym3526_device, write) AM_RANGE(0x2002, 0x2002) AM_DEVWRITE("dac", dac_device, write_signed8) - AM_RANGE(0x2004, 0x2004) AM_READ(soundlatch_byte_r) + AM_RANGE(0x2004, 0x2004) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x4000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -451,6 +451,8 @@ static MACHINE_CONFIG_START( matmania, matmania_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 1500000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) @@ -530,6 +532,8 @@ static MACHINE_CONFIG_START( maniach, matmania_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3526, 3600000) MCFG_YM3526_IRQ_HANDLER(DEVWRITELINE("audiocpu", m6809_device, firq_line)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/mbc55x.cpp b/src/mame/drivers/mbc55x.cpp index c1755113fef..05b9c6a9d5d 100644 --- a/src/mame/drivers/mbc55x.cpp +++ b/src/mame/drivers/mbc55x.cpp @@ -52,7 +52,7 @@ static ADDRESS_MAP_START(mbc55x_mem, AS_PROGRAM, 8, mbc55x_state) AM_RANGE( 0xF0000, 0xF3FFF ) AM_RAMBANK(RED_PLANE_TAG) AM_RANGE( 0xF4000, 0xF7FFF ) AM_RAMBANK(BLUE_PLANE_TAG) AM_RANGE( 0xF8000, 0xFBFFF ) AM_NOP - AM_RANGE( 0xFC000, 0xFFFFF ) AM_ROM AM_WRITENOP AM_REGION(MAINCPU_TAG, 0x0000) AM_MIRROR(0x002000) + AM_RANGE( 0xFC000, 0xFDFFF ) AM_ROM AM_WRITENOP AM_REGION(MAINCPU_TAG, 0x0000) AM_MIRROR(0x002000) ADDRESS_MAP_END static ADDRESS_MAP_START(mbc55x_io, AS_IO, 8, mbc55x_state) diff --git a/src/mame/drivers/mc80.cpp b/src/mame/drivers/mc80.cpp index d9eff85385d..a84fae0b6bb 100644 --- a/src/mame/drivers/mc80.cpp +++ b/src/mame/drivers/mc80.cpp @@ -52,7 +52,7 @@ static ADDRESS_MAP_START(mc8030_io, AS_IO, 8, mc80_state) AM_RANGE(0x80, 0x83) AM_MIRROR(0xff00) AM_DEVREADWRITE("zve_ctc", z80ctc_device, read, write) // user CTC AM_RANGE(0x84, 0x87) AM_MIRROR(0xff00) AM_DEVREADWRITE("zve_pio", z80pio_device, read, write) // PIO unknown usage AM_RANGE(0x88, 0x8f) AM_MIRROR(0xff00) AM_WRITE(mc8030_zve_write_protect_w) - AM_RANGE(0xc0, 0xcf) AM_MIRROR(0xff00) AM_WRITE(mc8030_vis_w) AM_MASK(0xffff) + AM_RANGE(0xc0, 0xcf) AM_SELECT(0xff00) AM_WRITE(mc8030_vis_w) AM_RANGE(0xd0, 0xd3) AM_MIRROR(0xff00) AM_DEVREADWRITE("asp_sio", z80sio0_device, cd_ba_r, cd_ba_w) // keyboard & IFSS? AM_RANGE(0xd4, 0xd7) AM_MIRROR(0xff00) AM_DEVREADWRITE("asp_ctc", z80ctc_device, read, write) // sio bauds, KMBG? and kbd AM_RANGE(0xd8, 0xdb) AM_MIRROR(0xff00) AM_DEVREADWRITE("asp_pio", z80pio_device, read, write) // external bus diff --git a/src/mame/drivers/mcatadv.cpp b/src/mame/drivers/mcatadv.cpp index 7e07057a7c2..a116b708976 100644 --- a/src/mame/drivers/mcatadv.cpp +++ b/src/mame/drivers/mcatadv.cpp @@ -148,7 +148,7 @@ Stephh's notes (based on the games M68000 code and some tests) : WRITE16_MEMBER(mcatadv_state::mcat_soundlatch_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -200,7 +200,7 @@ static ADDRESS_MAP_START( mcatadv_map, AS_PROGRAM, 16, mcatadv_state ) AM_RANGE(0xb00018, 0xb00019) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) // NOST Only AM_RANGE(0xb0001e, 0xb0001f) AM_READ(mcat_wd_r) // MCAT Only - AM_RANGE(0xc00000, 0xc00001) AM_READ(soundlatch2_word_r) AM_WRITE(mcat_soundlatch_w) + AM_RANGE(0xc00000, 0xc00001) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff) AM_WRITE(mcat_soundlatch_w) ADDRESS_MAP_END /*** Sound ***/ @@ -221,7 +221,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mcatadv_sound_io_map, AS_IO, 8, mcatadv_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x80, 0x80) AM_READWRITE(soundlatch_byte_r, soundlatch2_byte_w) + AM_RANGE(0x80, 0x80) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) ADDRESS_MAP_END @@ -236,7 +236,7 @@ static ADDRESS_MAP_START( nost_sound_io_map, AS_IO, 8, mcatadv_state ) AM_RANGE(0x00, 0x03) AM_DEVWRITE("ymsnd", ym2610_device, write) AM_RANGE(0x04, 0x07) AM_DEVREAD("ymsnd", ym2610_device, read) AM_RANGE(0x40, 0x40) AM_WRITE(mcatadv_sound_bw_w) - AM_RANGE(0x80, 0x80) AM_READWRITE(soundlatch_byte_r, soundlatch2_byte_w) + AM_RANGE(0x80, 0x80) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) ADDRESS_MAP_END /*** Inputs ***/ @@ -413,13 +413,6 @@ static GFXDECODE_START( mcatadv ) GFXDECODE_END -/* Stolen from Psikyo.c */ -WRITE_LINE_MEMBER(mcatadv_state::sound_irq) -{ - m_soundcpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - - void mcatadv_state::machine_start() { UINT8 *ROM = memregion("soundcpu")->base(); @@ -465,8 +458,11 @@ static MACHINE_CONFIG_START( mcatadv, mcatadv_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* verified on pcb */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(mcatadv_state, sound_irq)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.32) MCFG_SOUND_ROUTE(0, "rspeaker", 0.32) MCFG_SOUND_ROUTE(1, "lspeaker", 0.5) @@ -483,7 +479,7 @@ static MACHINE_CONFIG_DERIVED( nost, mcatadv ) MCFG_DEVICE_REMOVE("rspeaker") MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_REPLACE("ymsnd", YM2610, XTAL_16MHz/2) /* verified on pcb */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(mcatadv_state, sound_irq)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.2) MCFG_SOUND_ROUTE(1, "mono", 0.5) MCFG_SOUND_ROUTE(2, "mono", 0.5) diff --git a/src/mame/drivers/mcr.cpp b/src/mame/drivers/mcr.cpp index 1080f96513f..f95392d9bc3 100644 --- a/src/mame/drivers/mcr.cpp +++ b/src/mame/drivers/mcr.cpp @@ -2858,7 +2858,7 @@ DRIVER_INIT_MEMBER(mcr_state,twotiger) mcr_init(90010, 91399, 90913); machine().device<midway_ssio_device>("ssio")->set_custom_output(4, 0xff, write8_delegate(FUNC(mcr_state::twotiger_op4_w),this)); - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xe800, 0xefff, 0, 0x1000, read8_delegate(FUNC(mcr_state::twotiger_videoram_r),this), write8_delegate(FUNC(mcr_state::twotiger_videoram_w),this)); + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xe800, 0xefff, 0, 0x1000, 0, read8_delegate(FUNC(mcr_state::twotiger_videoram_r),this), write8_delegate(FUNC(mcr_state::twotiger_videoram_w),this)); } diff --git a/src/mame/drivers/megaplay.cpp b/src/mame/drivers/megaplay.cpp index f7533ce8fd1..1d358e75997 100644 --- a/src/mame/drivers/megaplay.cpp +++ b/src/mame/drivers/megaplay.cpp @@ -93,7 +93,6 @@ public: DECLARE_WRITE8_MEMBER(bios_6600_w); DECLARE_WRITE8_MEMBER(game_w); DECLARE_READ8_MEMBER(vdp1_count_r); - DECLARE_WRITE_LINE_MEMBER(bios_int_callback); DECLARE_DRIVER_INIT(megaplay); DECLARE_VIDEO_START(megplay); @@ -654,11 +653,6 @@ MACHINE_RESET_MEMBER(mplay_state,megaplay) MACHINE_RESET_CALL_MEMBER(megadriv); } -WRITE_LINE_MEMBER( mplay_state::bios_int_callback ) -{ - m_bioscpu->set_input_line(0, state); -} - static MACHINE_CONFIG_START( megaplay, mplay_state ) /* basic machine hardware */ MCFG_FRAGMENT_ADD(md_ntsc) @@ -686,7 +680,7 @@ static MACHINE_CONFIG_START( megaplay, mplay_state ) MCFG_DEVICE_ADD("vdp1", SEGA315_5246, 0) MCFG_SEGA315_5246_SET_SCREEN("megadriv") MCFG_SEGA315_5246_IS_PAL(false) - MCFG_SEGA315_5246_INT_CB(WRITELINE(mplay_state, bios_int_callback)) + MCFG_SEGA315_5246_INT_CB(INPUTLINE("mtbios", 0)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/megatech.cpp b/src/mame/drivers/megatech.cpp index b5e4f484a02..59c769c7125 100644 --- a/src/mame/drivers/megatech.cpp +++ b/src/mame/drivers/megatech.cpp @@ -103,8 +103,6 @@ public: m_region_maincpu(*this, "maincpu") { } - DECLARE_WRITE_LINE_MEMBER( snd_int_callback ); - DECLARE_WRITE_LINE_MEMBER( bios_int_callback ); DECLARE_READ8_MEMBER(cart_select_r); DECLARE_WRITE8_MEMBER(cart_select_w); DECLARE_READ8_MEMBER(bios_ctrl_r); @@ -368,7 +366,7 @@ void mtech_state::set_genz80_as_sms() // main ram area sms_mainram = std::make_unique<UINT8[]>(0x2000); - prg.install_ram(0xc000, 0xdfff, 0, 0x2000, sms_mainram.get()); + prg.install_ram(0xc000, 0xdfff, 0x2000, sms_mainram.get()); memset(sms_mainram.get(), 0x00, 0x2000); // fixed rom bank area @@ -380,10 +378,10 @@ void mtech_state::set_genz80_as_sms() prg.install_write_handler(0xfffc, 0xffff, write8_delegate(FUNC(mtech_state::mt_sms_standard_rom_bank_w),this)); // ports - io.install_read_handler (0x40, 0x41, 0xff, 0x3e, read8_delegate(FUNC(mtech_state::sms_count_r),this)); - io.install_write_handler (0x40, 0x41, 0xff, 0x3e, write8_delegate(FUNC(sn76496_device::write),(sn76496_base_device *)m_snsnd)); - io.install_readwrite_handler (0x80, 0x80, 0xff, 0x3e, read8_delegate(FUNC(sega315_5124_device::vram_read),(sega315_5124_device *)m_vdp), write8_delegate(FUNC(sega315_5124_device::vram_write),(sega315_5124_device *)m_vdp)); - io.install_readwrite_handler (0x81, 0x81, 0xff, 0x3e, read8_delegate(FUNC(sega315_5124_device::register_read),(sega315_5124_device *)m_vdp), write8_delegate(FUNC(sega315_5124_device::register_write),(sega315_5124_device *)m_vdp)); + io.install_read_handler (0x40, 0x41, 0, 0x3e, 0, read8_delegate(FUNC(mtech_state::sms_count_r),this)); + io.install_write_handler (0x40, 0x41, 0, 0x3e, 0, write8_delegate(FUNC(sn76496_device::write),(sn76496_base_device *)m_snsnd)); + io.install_readwrite_handler (0x80, 0x80, 0, 0x3e, 0, read8_delegate(FUNC(sega315_5124_device::vram_read),(sega315_5124_device *)m_vdp), write8_delegate(FUNC(sega315_5124_device::vram_write),(sega315_5124_device *)m_vdp)); + io.install_readwrite_handler (0x81, 0x81, 0, 0x3e, 0, read8_delegate(FUNC(sega315_5124_device::register_read),(sega315_5124_device *)m_vdp), write8_delegate(FUNC(sega315_5124_device::register_write),(sega315_5124_device *)m_vdp)); io.install_read_handler (0x10, 0x10, read8_delegate(FUNC(mtech_state::sms_ioport_dd_r),this)); // super tetris @@ -678,17 +676,6 @@ UINT32 mtech_state::screen_update_menu(screen_device &screen, bitmap_rgb32 &bitm } - -WRITE_LINE_MEMBER( mtech_state::bios_int_callback ) -{ - m_bioscpu->set_input_line(0, state); -} - -WRITE_LINE_MEMBER( mtech_state::snd_int_callback ) -{ - m_z80snd->set_input_line(0, state); -} - static MACHINE_CONFIG_START( megatech, mtech_state ) /* basic machine hardware */ MCFG_FRAGMENT_ADD(md_ntsc) @@ -710,7 +697,7 @@ static MACHINE_CONFIG_START( megatech, mtech_state ) MCFG_SCREEN_VBLANK_DRIVER(mtech_state, screen_eof_main) MCFG_DEVICE_MODIFY("gen_vdp") - MCFG_SEGA315_5313_INT_CB(WRITELINE(mtech_state, snd_int_callback)) + MCFG_SEGA315_5313_INT_CB(INPUTLINE("genesis_snd_z80", 0)) MCFG_SCREEN_ADD("menu", RASTER) // check frq @@ -722,7 +709,7 @@ static MACHINE_CONFIG_START( megatech, mtech_state ) MCFG_DEVICE_ADD("vdp1", SEGA315_5246, 0) MCFG_SEGA315_5246_SET_SCREEN("menu") MCFG_SEGA315_5246_IS_PAL(false) - MCFG_SEGA315_5246_INT_CB(WRITELINE(mtech_state, bios_int_callback)) + MCFG_SEGA315_5246_INT_CB(INPUTLINE("mtbios", 0)) /* sound hardware */ MCFG_SOUND_ADD("sn2", SN76496, MASTER_CLOCK/15) @@ -1473,4 +1460,17 @@ ROM_END /* 61 */ GAME( 1992, mt_tout, megatech, megatech_fixedslot, megatech, mtech_state, mt_crt, ROT0, "Sega", "Turbo Outrun (Mega-Tech)", MACHINE_NOT_WORKING ) /* 62 */ GAME( 1992, mt_soni2, megatech, megatech_fixedslot, megatech, mtech_state, mt_crt, ROT0, "Sega", "Sonic The Hedgehog 2 (Mega-Tech)", MACHINE_NOT_WORKING ) -/* more? */ +/* Games seen in auction (#122011114579), but no confirmed number +- Action Fighter +- Enduro Racer + +Games seen in auction (#122011114579) known not to be original but manufactured/bootlegged on actual megatech carts. +The labels are noticably different than expected. Be careful if thinking of obtaining! +- After Burner II (GEN) +- Castle of Illusion Starring Mickey Mouse (GEN) +- Double Dragon (SMS) +- Kung Fu Kid (SMS) +- Quackshot Starring Donald Duck (GEN) +- Wonderboy (SMS) + +more? */ diff --git a/src/mame/drivers/merit.cpp b/src/mame/drivers/merit.cpp index d4498a7874d..1c412342ab9 100644 --- a/src/mame/drivers/merit.cpp +++ b/src/mame/drivers/merit.cpp @@ -114,7 +114,6 @@ public: DECLARE_WRITE8_MEMBER(casino5_bank_w); DECLARE_CUSTOM_INPUT_MEMBER(rndbit_r); DECLARE_WRITE_LINE_MEMBER(hsync_changed); - DECLARE_WRITE_LINE_MEMBER(vsync_changed); DECLARE_WRITE8_MEMBER(led1_w); DECLARE_WRITE8_MEMBER(led2_w); DECLARE_WRITE8_MEMBER(misc_w); @@ -310,11 +309,6 @@ WRITE_LINE_MEMBER(merit_state::hsync_changed) m_screen->update_partial(m_screen->vpos()); } -WRITE_LINE_MEMBER(merit_state::vsync_changed) -{ - m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - WRITE8_MEMBER(merit_state::led1_w) { /* 5 button lamps player 1 */ @@ -1334,7 +1328,7 @@ static MACHINE_CONFIG_START( pitboss, merit_state ) MCFG_MC6845_BEGIN_UPDATE_CB(merit_state, crtc_begin_update) MCFG_MC6845_UPDATE_ROW_CB(merit_state, crtc_update_row) MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(merit_state, hsync_changed)) - MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(merit_state, vsync_changed)) + MCFG_MC6845_OUT_VSYNC_CB(INPUTLINE("maincpu", 0)) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/metlfrzr.cpp b/src/mame/drivers/metlfrzr.cpp index 67dc182944d..b14b55d8044 100644 --- a/src/mame/drivers/metlfrzr.cpp +++ b/src/mame/drivers/metlfrzr.cpp @@ -4,8 +4,9 @@ Metal Freezer (c) 1989 Seibu - preliminary driver by Angelo Salese - + driver by Angelo Salese, based off initial work by David Haywood + thanks to Peter Wilhelmsen for the decryption + HW seems the natural evolution of Dark Mist type. TODO: diff --git a/src/mame/drivers/midxunit.cpp b/src/mame/drivers/midxunit.cpp index aa9a23d4564..bbe705f1bfd 100644 --- a/src/mame/drivers/midxunit.cpp +++ b/src/mame/drivers/midxunit.cpp @@ -114,7 +114,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, midxunit_state ) AM_RANGE(0xa0440000, 0xa047ffff) AM_READWRITE(midxunit_cmos_r, midxunit_cmos_w) AM_SHARE("nvram") AM_RANGE(0xa0800000, 0xa08fffff) AM_READWRITE(midxunit_paletteram_r, midxunit_paletteram_w) AM_SHARE("palette") AM_RANGE(0xc0000000, 0xc00003ff) AM_DEVREADWRITE("maincpu", tms34020_device, io_register_r, io_register_w) - AM_RANGE(0xc0c00000, 0xc0c000ff) AM_MIRROR(0x00400000) AM_READWRITE(midtunit_dma_r, midtunit_dma_w) + AM_RANGE(0xc0800000, 0xc08000ff) AM_MIRROR(0x00400000) AM_READWRITE(midtunit_dma_r, midtunit_dma_w) AM_RANGE(0xf8000000, 0xfeffffff) AM_READ(midwunit_gfxrom_r) AM_RANGE(0xff000000, 0xffffffff) AM_ROM AM_REGION("maincpu", 0) ADDRESS_MAP_END diff --git a/src/mame/drivers/midyunit.cpp b/src/mame/drivers/midyunit.cpp index c09981584a8..aa4ca3619d3 100644 --- a/src/mame/drivers/midyunit.cpp +++ b/src/mame/drivers/midyunit.cpp @@ -180,7 +180,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, midyunit_state ) AM_RANGE(0x01000000, 0x010fffff) AM_RAM AM_SHARE("mainram") AM_RANGE(0x01400000, 0x0140ffff) AM_READWRITE(midyunit_cmos_r, midyunit_cmos_w) AM_RANGE(0x01800000, 0x0181ffff) AM_RAM_WRITE(midyunit_paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0x01a80000, 0x01a8009f) AM_MIRROR(0x00080000) AM_READWRITE(midyunit_dma_r, midyunit_dma_w) + AM_RANGE(0x01a00000, 0x01a0009f) AM_MIRROR(0x00080000) AM_READWRITE(midyunit_dma_r, midyunit_dma_w) AM_RANGE(0x01c00000, 0x01c0005f) AM_READ(midyunit_input_r) AM_RANGE(0x01c00060, 0x01c0007f) AM_READWRITE(midyunit_protection_r, midyunit_cmos_enable_w) AM_RANGE(0x01e00000, 0x01e0001f) AM_WRITE(midyunit_sound_w) diff --git a/src/mame/drivers/mirax.cpp b/src/mame/drivers/mirax.cpp index ec3bdaf751c..c4b11028968 100644 --- a/src/mame/drivers/mirax.cpp +++ b/src/mame/drivers/mirax.cpp @@ -102,6 +102,7 @@ Stephh's notes (based on the games Z80 code and some tests) : #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/ay8910.h" @@ -114,6 +115,7 @@ public: m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_videoram(*this, "videoram"), m_spriteram(*this, "spriteram"), m_colorram(*this, "colorram") { } @@ -122,6 +124,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_videoram; required_shared_ptr<UINT8> m_spriteram; @@ -282,7 +285,7 @@ WRITE8_MEMBER(mirax_state::nmi_mask_w) WRITE8_MEMBER(mirax_state::sound_cmd_w) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -329,7 +332,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mirax_sound_map, AS_PROGRAM, 8, mirax_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x8000, 0x8fff) AM_RAM - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xe000, 0xe000) AM_WRITENOP AM_RANGE(0xe001, 0xe001) AM_WRITENOP @@ -492,6 +495,9 @@ static MACHINE_CONFIG_START( mirax, mirax_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", mirax) MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 12000000/4) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) diff --git a/src/mame/drivers/missb2.cpp b/src/mame/drivers/missb2.cpp index 85475271f05..cf3f597be5c 100644 --- a/src/mame/drivers/missb2.cpp +++ b/src/mame/drivers/missb2.cpp @@ -199,7 +199,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, missb2_state ) AM_RANGE(0x8000, 0x8fff) AM_RAM AM_RANGE(0x9000, 0x9000) AM_DEVREADWRITE("oki", okim6295_device, read, write) AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym3526_device, read, write) - AM_RANGE(0xb000, 0xb000) AM_READ(soundlatch_byte_r) AM_WRITENOP // message for main cpu + AM_RANGE(0xb000, 0xb000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITENOP // message for main cpu AM_RANGE(0xb001, 0xb001) AM_READNOP AM_WRITE(bublbobl_sh_nmi_enable_w) // bit 0: message pending for main cpu, bit 1: message pending for sound cpu AM_RANGE(0xb002, 0xb002) AM_WRITE(bublbobl_sh_nmi_disable_w) AM_RANGE(0xe000, 0xefff) AM_ROM // space for diagnostic ROM? @@ -474,6 +474,8 @@ static MACHINE_CONFIG_START( missb2, missb2_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3526, MAIN_XTAL/8) MCFG_YM3526_IRQ_HANDLER(WRITELINE(missb2_state, irqhandler)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp index f25666833f0..b09e9b7c57b 100644 --- a/src/mame/drivers/model2.cpp +++ b/src/mame/drivers/model2.cpp @@ -690,7 +690,16 @@ WRITE32_MEMBER(model2_state::copro_prg_w) if (m_coproctl & 0x80000000) { logerror("copro_prg_w: %08X: %08X\n", m_coprocnt, data); - m_tgpx4_program[m_coprocnt] = data; + if (m_coprocnt & 1) + { + m_tgpx4_program[m_coprocnt / 2] &= U64(0xffffffff); + m_tgpx4_program[m_coprocnt / 2] |= (UINT64)(data) << 32; + } + else + { + m_tgpx4_program[m_coprocnt / 2] &= U64(0xffffffff00000000); + m_tgpx4_program[m_coprocnt / 2] |= data; + } m_coprocnt++; } else @@ -2598,7 +2607,7 @@ static MACHINE_CONFIG_DERIVED( model2b_0229, model2b ) MACHINE_CONFIG_END -static ADDRESS_MAP_START( copro_tgpx4_map, AS_PROGRAM, 32, model2_state ) +static ADDRESS_MAP_START( copro_tgpx4_map, AS_PROGRAM, 64, model2_state ) AM_RANGE(0x00000000, 0x00007fff) AM_RAM AM_SHARE("tgpx4_program") ADDRESS_MAP_END diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp index 70673ba93ea..ad81aa4ef73 100644 --- a/src/mame/drivers/model3.cpp +++ b/src/mame/drivers/model3.cpp @@ -5701,9 +5701,9 @@ DRIVER_INIT_MEMBER(model3_state, genprot) { // std::string key = parameter(":315_5881:key"); - m_maincpu->space(AS_PROGRAM).install_ram(0xf0180000, 0xf019ffff, 0, 0x0e000000); + m_maincpu->space(AS_PROGRAM).install_ram(0xf0180000, 0xf019ffff, 0x0e000000); - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf01a0000, 0xf01a003f, 0, 0x0e000000, read64_delegate(FUNC(model3_state::model3_5881prot_r), this), write64_delegate(FUNC(model3_state::model3_5881prot_w), this) ); + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf01a0000, 0xf01a003f, 0, 0x0e000000, 0, read64_delegate(FUNC(model3_state::model3_5881prot_r), this), write64_delegate(FUNC(model3_state::model3_5881prot_w), this) ); } diff --git a/src/mame/drivers/mpu4.cpp b/src/mame/drivers/mpu4.cpp index 72091506257..ea9465e7298 100644 --- a/src/mame/drivers/mpu4.cpp +++ b/src/mame/drivers/mpu4.cpp @@ -2113,14 +2113,14 @@ void mpu4_state::mpu4_install_mod4oki_space(address_space &space) pia6821_device *pia_ic4ss = space.machine().device<pia6821_device>("pia_ic4ss"); ptm6840_device *ptm_ic3ss = space.machine().device<ptm6840_device>("ptm_ic3ss"); - space.install_readwrite_handler(0x0880, 0x0883, 0, 0, read8_delegate(FUNC(pia6821_device::read), pia_ic4ss), write8_delegate(FUNC(pia6821_device::write), pia_ic4ss)); - space.install_read_handler(0x08c0, 0x08c7, 0, 0, read8_delegate(FUNC(ptm6840_device::read), ptm_ic3ss)); - space.install_write_handler(0x08c0, 0x08c7, 0, 0, write8_delegate(FUNC(mpu4_state::ic3ss_w),this)); + space.install_readwrite_handler(0x0880, 0x0883, read8_delegate(FUNC(pia6821_device::read), pia_ic4ss), write8_delegate(FUNC(pia6821_device::write), pia_ic4ss)); + space.install_read_handler(0x08c0, 0x08c7, read8_delegate(FUNC(ptm6840_device::read), ptm_ic3ss)); + space.install_write_handler(0x08c0, 0x08c7, write8_delegate(FUNC(mpu4_state::ic3ss_w),this)); } void mpu4_state::mpu4_install_mod4bwb_space(address_space &space) { - space.install_readwrite_handler(0x0810, 0x0810, 0, 0, read8_delegate(FUNC(mpu4_state::bwb_characteriser_r),this),write8_delegate(FUNC(mpu4_state::bwb_characteriser_w),this)); + space.install_readwrite_handler(0x0810, 0x0810, read8_delegate(FUNC(mpu4_state::bwb_characteriser_r),this),write8_delegate(FUNC(mpu4_state::bwb_characteriser_w),this)); mpu4_install_mod4oki_space(space); } @@ -2376,8 +2376,8 @@ DRIVER_INIT_MEMBER(mpu4_state,m4default_big) else { m_bwb_bank=1; - space.install_write_handler(0x0858, 0x0858, 0, 0, write8_delegate(FUNC(mpu4_state::bankswitch_w),this)); - space.install_write_handler(0x0878, 0x0878, 0, 0, write8_delegate(FUNC(mpu4_state::bankset_w),this)); + space.install_write_handler(0x0858, 0x0858, write8_delegate(FUNC(mpu4_state::bankswitch_w),this)); + space.install_write_handler(0x0878, 0x0878, write8_delegate(FUNC(mpu4_state::bankset_w),this)); UINT8 *rom = memregion("maincpu")->base(); m_numbanks = size / 0x10000; @@ -2412,8 +2412,8 @@ DRIVER_INIT_MEMBER(mpu4_state,m_frkstn) { address_space &space = m_maincpu->space(AS_PROGRAM); DRIVER_INIT_CALL(m4default_big); - space.install_read_handler(0x0880, 0x0880, 0, 0, read8_delegate(FUNC(mpu4_state::crystal_sound_r),this)); - space.install_write_handler(0x0881, 0x0881, 0, 0, write8_delegate(FUNC(mpu4_state::crystal_sound_w),this)); + space.install_read_handler(0x0880, 0x0880, read8_delegate(FUNC(mpu4_state::crystal_sound_r),this)); + space.install_write_handler(0x0881, 0x0881, write8_delegate(FUNC(mpu4_state::crystal_sound_w),this)); } // thanks to Project Amber for descramble information diff --git a/src/mame/drivers/ms32.cpp b/src/mame/drivers/ms32.cpp index 8fd5e12aa70..dc191beddcc 100644 --- a/src/mame/drivers/ms32.cpp +++ b/src/mame/drivers/ms32.cpp @@ -339,7 +339,7 @@ WRITE32_MEMBER(ms32_state::pip_w) static ADDRESS_MAP_START( ms32_map, AS_PROGRAM, 32, ms32_state ) /* RAM areas verified by testing on real hw - usually accessed at the 0xfc000000 + mirror */ - AM_RANGE(0xc0000000, 0xc0007fff) AM_READWRITE8(ms32_nvram_r8, ms32_nvram_w8, 0x000000ff) AM_MIRROR(0x3c1fe000) // nvram is 8-bit wide, 0x2000 in size */ + AM_RANGE(0xc0000000, 0xc0007fff) AM_READWRITE8(ms32_nvram_r8, ms32_nvram_w8, 0x000000ff) AM_MIRROR(0x3c1f8000) // nvram is 8-bit wide, 0x2000 in size */ /* AM_RANGE(0xc0008000, 0xc01fffff) // mirrors of nvramram, handled above */ AM_RANGE(0xc1180000, 0xc1187fff) AM_READWRITE8(ms32_priram_r8, ms32_priram_w8, 0x000000ff) AM_MIRROR(0x3c038000) AM_SHARE("priram") /* priram is 8-bit wide, 0x2000 in size */ /* AM_RANGE(0xc1188000, 0xc11bffff) // mirrors of priram, handled above */ diff --git a/src/mame/drivers/msisaac.cpp b/src/mame/drivers/msisaac.cpp index 0d97a8662f7..0e90da0184a 100644 --- a/src/mame/drivers/msisaac.cpp +++ b/src/mame/drivers/msisaac.cpp @@ -18,7 +18,7 @@ TO DO: - sprites are probably banked differently (no way to be sure until MCU dump is available) - TA7630 emulation needs filter support (characteristics depend on the frequency) - - TA7630 volume table is hand tuned to match the sample, but still slighty off. + - TA7630 volume table is hand tuned to match the sample, but still slightly off. */ @@ -32,7 +32,7 @@ TIMER_CALLBACK_MEMBER(msisaac_state::nmi_callback) WRITE8_MEMBER(msisaac_state::sound_command_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(msisaac_state::nmi_callback),this), data); } @@ -262,7 +262,7 @@ static ADDRESS_MAP_START( msisaac_sound_map, AS_PROGRAM, 8, msisaac_state ) AM_RANGE(0x8010, 0x801d) AM_DEVWRITE("msm", msm5232_device, write) AM_RANGE(0x8020, 0x8020) AM_WRITE(sound_control_0_w) AM_RANGE(0x8030, 0x8030) AM_WRITE(sound_control_1_w) - AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc000, 0xc000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xc001, 0xc001) AM_WRITE(nmi_enable_w) AM_RANGE(0xc002, 0xc002) AM_WRITE(nmi_disable_w) AM_RANGE(0xc003, 0xc003) AM_WRITENOP /*???*/ /* this is NOT mixer_enable */ @@ -494,6 +494,8 @@ static MACHINE_CONFIG_START( msisaac, msisaac_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 2000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) diff --git a/src/mame/drivers/munchmo.cpp b/src/mame/drivers/munchmo.cpp index 86d5c2e0669..24a4d96cd49 100644 --- a/src/mame/drivers/munchmo.cpp +++ b/src/mame/drivers/munchmo.cpp @@ -58,7 +58,7 @@ INTERRUPT_GEN_MEMBER(munchmo_state::mnchmobl_sound_irq) WRITE8_MEMBER(munchmo_state::mnchmobl_soundlatch_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(0, HOLD_LINE ); } @@ -114,7 +114,7 @@ ADDRESS_MAP_END /* memory map provided thru schematics */ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, munchmo_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM - AM_RANGE(0x2000, 0x3fff) AM_READ(soundlatch_byte_r) + AM_RANGE(0x2000, 0x3fff) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x4000, 0x4fff) AM_DEVWRITE("ay1", ay8910_device, data_w) AM_RANGE(0x5000, 0x5fff) AM_DEVWRITE("ay1", ay8910_device, address_w) AM_RANGE(0x6000, 0x6fff) AM_DEVWRITE("ay2", ay8910_device, data_w) @@ -345,7 +345,9 @@ static MACHINE_CONFIG_START( mnchmobl, munchmo_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - /* AY clock speeds confirmed to match known recording */ + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + + /* AY clock speeds confirmed to match known recording */ MCFG_SOUND_ADD("ay1", AY8910, XTAL_15MHz/4/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) diff --git a/src/mame/drivers/mvme147.cpp b/src/mame/drivers/mvme147.cpp index 84b09c1dd87..1360a77e9d7 100644 --- a/src/mame/drivers/mvme147.cpp +++ b/src/mame/drivers/mvme147.cpp @@ -651,11 +651,11 @@ MACHINE_CONFIG_END /* ROM definitions */ ROM_START (mvme147) -ROM_REGION32_BE(0xfff00000, "maincpu", 0) - -ROM_LOAD16_BYTE("147bug-2.44-U22.BIN", 0xff800000, 0x20000, CRC (da09ce8a) SHA1 (3eaa8fa802187d9b08f453ff1ba64f5113a195a9)) -ROM_LOAD16_BYTE("147bug-2.44-U30.BIN", 0xff800001, 0x20000, CRC (f883e17d) SHA1 (01fe43e5ddfd3cf8aabb5a5959c80a8b5ec5d895)) + ROM_REGION32_BE(0xfff00000, "maincpu", 0) + ROM_SYSTEM_BIOS(0, "147bug v2.44", "MVME147 147bug v2.44") + ROMX_LOAD("147bug-2.44-U22.BIN", 0xff800000, 0x20000, CRC (da09ce8a) SHA1 (3eaa8fa802187d9b08f453ff1ba64f5113a195a9), ROM_SKIP(1) | ROM_BIOS(1)) + ROMX_LOAD("147bug-2.44-U30.BIN", 0xff800001, 0x20000, CRC (f883e17d) SHA1 (01fe43e5ddfd3cf8aabb5a5959c80a8b5ec5d895), ROM_SKIP(1) | ROM_BIOS(1)) /* * System ROM information * @@ -679,6 +679,17 @@ ROM_LOAD16_BYTE("147bug-2.44-U30.BIN", 0xff800001, 0x20000, CRC (f883e17d) SHA1 * 10 * channel B is identical but resets Channel B of course, SCC2 is also identical except using interrupt vector 71 */ + + ROM_SYSTEM_BIOS(1, "147bug v2.43", "MVME147 147bug v2.43") + ROMX_LOAD("5741B42E.BIN", 0xff800000, 0x20000, CRC (2ba98f97) SHA1 (5f18c6dd6a7b03067890f0164ef3d37ced907d7f), ROM_SKIP(1) | ROM_BIOS(2)) + ROMX_LOAD("5741B41E.BIN", 0xff800001, 0x20000, CRC (dfa014f2) SHA1 (ff9db90a05c295819ce7ca7c1a6ac67b04003728), ROM_SKIP(1) | ROM_BIOS(2)) +/* + * System ROM information + * + * 147bug version 2.43 is released 1992, coprighted by Motorola Inc from 1988 + * + */ + ROM_END /* Driver */ diff --git a/src/mame/drivers/mystwarr.cpp b/src/mame/drivers/mystwarr.cpp index 869035e065a..a552f78e3b4 100644 --- a/src/mame/drivers/mystwarr.cpp +++ b/src/mame/drivers/mystwarr.cpp @@ -92,6 +92,44 @@ Notes: HSync - 15.2042kHz VSync - 59.1879Hz + +Notes on metamrpha. Research done by Vas Crabb +The one rom that is different than the parent set has 2 bytes which have switched values (0 to 1 and 1 to 0). +This appears to be a deliberate change in the main CPU progam function that begins at 03A86E, affecting a +fragment towards the end of the function where it sets the return value: + +03A8FC moveq #$0, D0 +03A8FE move.w ($0,A5), D1 +03A902 move.w ($2,A5), D2 +03A906 move.w #$b61d, D7 +03A90A addi.w #$3f1b, D7 +03A90E cmp.w D7, D1 +03A910 bne $3a916 +03A912 bset #$1, D0 +03A916 move.w #$6b6e, D7 +03A91A addi.w #$7f92, D7 +03A91E cmp.w D7, D2 +03A920 bne $3a926 +03A922 bset #$0, D0 + +The bset #$1,D0 and bset #$0,D0 instructions are reversed. This code looks like poorly optimised compiled +C code. Remember D0 is the integer return value register in M68k C ABI and int is a 16-bit integer. +The code as above amounts to: + +unsigned result = 0; +if (a == (46621U + 16155U)) result |= 2; +if (b == (27502U + 32658U)) result |= 1; + +In the alternate set this is changed to: + +unsigned result = 0; +if (a == (46621U + 16155U)) result |= 1; +if (b == (27502U + 32658U)) result |= 2; + +So I would bet one is a bug fix to the other because someone forgot what each bit in the return value meant. +There's no way a bad dump could be that precise and logical. However without further investigation/tracing +we have no way of knowing which is the later/corrected version. + **************************************************************************/ #include "emu.h" @@ -1646,6 +1684,43 @@ ROM_START( metamrph ) ROM_LOAD( "metamrph.nv", 0x0000, 0x080, CRC(2c51229a) SHA1(7f056792cc44ec3d4aacc33c825ab796a913488e) ) ROM_END +ROM_START( metamrpha ) /* alternate set - possibly a bugfix version. Only 2 adjusted bytes causing a swap in commands */ + /* main program */ + ROM_REGION( 0x200000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "3.15h", 0x000001, 0x40000, CRC(8b9f1ba3) SHA1(cccbaf117800a030c8218a91740dc98182a27901) ) + ROM_LOAD16_BYTE( "224eaa02.15f", 0x000000, 0x40000, CRC(e314330a) SHA1(728a18d604eca58409551e52b7dc18e2d807700a) ) + ROM_LOAD16_BYTE( "224a03", 0x100001, 0x80000, CRC(a5bedb01) SHA1(5e7a0b93af654ba6a87be8d449c7080a0f0e2a43) ) + ROM_LOAD16_BYTE( "224a04", 0x100000, 0x80000, CRC(ada53ba4) SHA1(f77bf854dff1f8f718579fe6d3730066708396e2) ) + + /* sound program */ + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD("224a05", 0x000000, 0x40000, CRC(4b4c985c) SHA1(c83cce05355023be9cd55b4aa595c61f8236269c) ) + + /* tiles */ + ROM_REGION( 0x500000, "gfx1", ROMREGION_ERASE00 ) + ROM_LOADTILE_WORD( "224a09", 0x000000, 1*1024*1024, CRC(1931afce) SHA1(78838c0fd2a9c80f130db1fcf6c88b14f7363639) ) + ROM_LOADTILE_WORD( "224a08", 0x000002, 1*1024*1024, CRC(dc94d53a) SHA1(91e16371a335f078a81c06a1045759653080aba0) ) + + /* sprites */ + ROM_REGION( 0x800000, "gfx2", ROMREGION_ERASE00 ) + ROM_LOAD64_WORD( "224a10", 0x000000, 2*1024*1024, CRC(161287f0) SHA1(a13b197a98fa1cebb11fb87b54e277c72852c4ee) ) + ROM_LOAD64_WORD( "224a11", 0x000002, 2*1024*1024, CRC(df5960e1) SHA1(ee7794dd119f5f2c52e7ba589d78067a89ff3cab) ) + ROM_LOAD64_WORD( "224a12", 0x000004, 2*1024*1024, CRC(ca72a4b3) SHA1(a09deb6d7cb8be4edaeb78e0e676ea2d6055e9e0) ) + ROM_LOAD64_WORD( "224a13", 0x000006, 2*1024*1024, CRC(86b58feb) SHA1(5a43746e2cd3c7aca21496c092aef83e64b3ab2c) ) + + /* K053250 linescroll/zoom thingy */ + ROM_REGION( 0x40000, "k053250_1", 0 ) + ROM_LOAD( "224a14", 0x000000, 0x40000, CRC(3c79b404) SHA1(7c6bb4cbf050f314ea0cd3e8bc6e1947d0573084) ) + + /* sound data */ + ROM_REGION( 0x400000, "shared", 0 ) + ROM_LOAD( "224a06", 0x000000, 2*1024*1024, CRC(972f6abe) SHA1(30907495fc49fe3424c092b074c1dc137aa14306) ) + ROM_LOAD( "224a07", 0x200000, 1*1024*1024, CRC(61b2f97a) SHA1(34bf835d6361c7809d40fa20fd238c9e2a84b101) ) + + ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error + ROM_LOAD( "metamrph.nv", 0x0000, 0x080, CRC(2c51229a) SHA1(7f056792cc44ec3d4aacc33c825ab796a913488e) ) +ROM_END + ROM_START( metamrphu ) /* main program */ ROM_REGION( 0x200000, "maincpu", 0 ) @@ -2196,6 +2271,7 @@ GAME( 1993, viostorma, viostorm, viostorm, viostorm, driver_device, 0, ROT0, " GAME( 1993, viostormab, viostorm, viostorm, viostorm, driver_device, 0, ROT0, "Konami", "Violent Storm (ver AAB)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1993, metamrph, 0, metamrph, metamrph, driver_device, 0, ROT0, "Konami", "Metamorphic Force (ver EAA)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1993, metamrpha, metamrph, metamrph, metamrph, driver_device, 0, ROT0, "Konami", "Metamorphic Force (ver EAA - alternate)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1993, metamrphu, metamrph, metamrph, metamrph, driver_device, 0, ROT0, "Konami", "Metamorphic Force (ver UAA)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1993, metamrphj, metamrph, metamrph, metamrph, driver_device, 0, ROT0, "Konami", "Metamorphic Force (ver JAA)", MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp index 1e6fb5cc6e4..c76b5268429 100644 --- a/src/mame/drivers/naomi.cpp +++ b/src/mame/drivers/naomi.cpp @@ -405,7 +405,7 @@ House of the Dead 2 (USA) 834-13636-01 21585 20 (64Mb) Idol Janshi Suchie-Pai 3 841-0002C 21979 14 (64Mb) ? 315-6213 317-5047-JPN requires mahjong panel Jambo! Safari (Rev A) 840-0013C 22826A 8 (64Mb) ? 315-6213 317-0264-COM Mars TV 840-0025C 22993 15 (64Mb) present 315-6213 317-0274-JPN -Marvel Vs. Capcom 2 (USA, Rev A) 841-0007C-01 23062A 14 (64Mb) ? 315-6213 ? +Marvel Vs. Capcom 2 (USA) (Rev A) 841-0007C-01 23062A 14 (64Mb) present 315-6213 317-5053-COM OutTrigger 840-0017C 22163 19 (64Mb) ? 315-6213 317-0266-COM requires regular 837-13551 and 837-13938 rotary JVS boards, and special panel Power Stone 841-0001C 21597 8 (64Mb) present 315-6213 317-5046-COM joystick + 3 buttons Power Stone 2 841-0008C 23127 9 (64Mb) present 315-6213 317-5054-COM joystick + 3 buttons @@ -531,7 +531,8 @@ Club Kart Prize (Rev A) 840-0129C 24082A Club Kart Prize Ver. B 840-0137C 24149 16 (64Mb) present 317-0368-COM requires 837-14438 "SH I/O BD" hopper controller (not dumped) Giant Gram 2000 840-0039C 23377 20 (64Mb) present 317-0296-COM Kick '4' Cash 840-0140C 24212 16 (64Mb) present 317-0397-COM requires 837-14438 "SH I/O BD" hopper controller (not dumped) -Marvel Vs. Capcom 2 New Age of Heroes (Export, Rev A) 841-0007C-02 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) +Marvel Vs. Capcom 2 New Age of Heroes (Export) (Rev A) 841-0007C-02 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin +Marvel Vs. Capcom 2 New Age of Heroes (Korea) (Rev A) 841-0007C-03 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin MushiKing The King of Beetles 2K3 2ND 840-0150C 24217 6 (64Mb) present 317-0394-COM requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip Quiz Ah Megamisama 840-0030C 23227 16 (64Mb) present 317-0280-JPN Shootout Pool 840-0098C 23844 4 (64Mb) present 317-0336-COM requires regular 837-13551 and 837-13938 rotary JVS boards @@ -4576,16 +4577,40 @@ ROM_START( shangril ) ROM_PARAMETER( ":rom_board:segam2crypt:key", "-1") // Unknown ROM_END -/* -SYSTEMID: NAOMI -JAP: MARVEL VS. CAPCOM 2 -USA: MARVEL VS. CAPCOM 2 -EXP: MARVEL VS. CAPCOM 2 +// 841-0007C-01, uses 171-7919A type ROM board +ROM_START( mvsc2u ) + NAOMI_BIOS + NAOMI_DEFAULT_EEPROM -Note: the following game is one of the few known regular Naomi game to have a rom test item in its specific test mode menu. -So the Naomi regular board test item is unreliable in this circumstance. + ROM_REGION( 0x7800000, "rom_board", ROMREGION_ERASEFF) + ROM_LOAD("epr-23062a.ic22", 0x0000000, 0x0400000, CRC(96038276) SHA1(877ba02c92082567280afcb1ae40b3bbfc8a63e8) ) + ROM_LOAD("mpr-23048.ic1", 0x0800000, 0x0800000, CRC(93d7a63a) SHA1(c50d10b4a3f9db51eae5749f5b665d7c8ab6c898) ) + ROM_LOAD("mpr-23049.ic2", 0x1000000, 0x0800000, CRC(003dcce0) SHA1(fb71c8ca9271d2155878c72d8fe2df3031e6c014) ) + ROM_LOAD("mpr-23050.ic3", 0x1800000, 0x0800000, CRC(1d6b88a7) SHA1(ba42e9d1d912d88a7ad839b878975ba590634320) ) + ROM_LOAD("mpr-23051.ic4", 0x2000000, 0x0800000, CRC(01226aaa) SHA1(a4c6a0eda05e53d0e51b92a4317a86a708a7efdb) ) + ROM_LOAD("mpr-23052.ic5", 0x2800000, 0x0800000, CRC(74bee120) SHA1(5a0fb48fa758a2be2e08e3b1298103c5aa748835) ) + ROM_LOAD("mpr-23053.ic6", 0x3000000, 0x0800000, CRC(d92d4401) SHA1(a868780f8d2e176ff10781e1c08bf932f34ac504) ) + ROM_LOAD("mpr-23054.ic7", 0x3800000, 0x0800000, CRC(78ba02e8) SHA1(0f696a33e1e6671001efc309ed62f084a246ad24) ) + ROM_LOAD("mpr-23055.ic8", 0x4000000, 0x0800000, CRC(84319604) SHA1(c3dde162e043a54e1325202b46191b32e8784a1c) ) + ROM_LOAD("mpr-23056.ic9", 0x4800000, 0x0800000, CRC(d7386034) SHA1(be1f3ca5f283e428dc59dc072de3e7d36e122d53) ) + ROM_LOAD("mpr-23057.ic10", 0x5000000, 0x0800000, CRC(a3f087db) SHA1(b52d7c072cb5c2fdd10d0ac0b62cebe48b229ae3) ) + ROM_LOAD("mpr-23058.ic11", 0x5800000, 0x0800000, CRC(61a6cc5d) SHA1(34e52cb076888313a80f2b87876b8d37b91d85a0) ) + ROM_LOAD("mpr-23059.ic12s", 0x6000000, 0x0800000, CRC(64808024) SHA1(1a6c60c330642b273978d3dd02d95d17d36ee3f2) ) + ROM_LOAD("mpr-23060.ic13s", 0x6800000, 0x0800000, CRC(67519942) SHA1(fc758d9075625f8140d5d828c8f6b7a91bcc9119) ) + ROM_LOAD("mpr-23061.ic14s", 0x7000000, 0x0800000, CRC(fb1844c4) SHA1(1d1571516a6dbed0c4ded3b80efde9cc9281f66f) ) -*/ + ROM_REGION(0x84, "some_eeprom", 0) + ROM_LOAD("sflash.ic37", 0x000000, 0x000084, CRC(37a66f3c) SHA1(df6cd2cdc2813caa5da4dc9f171998485bcbdc44)) + + // 841-0007-01 2000 317-5053-COM Naomi + ROM_PARAMETER( ":rom_board:segam2crypt:key", "0002c840" ) +ROM_END + +// 841-0007C-02 / 841-0007C-03, uses 171-7978B type ROM board +// reuses MPR 23048-23061 MaskROMs from 841-0007C-01 set, which contain regular non-interleaved data, not native/normal for such ROM board type +// have added IC31-32 32Mbit MaskROMs with interleaved M1-encrypted data +// mentioned above ROMs mapping is unsupported by NAOMI BIOS, so it's ROM BOARD TEST and shown sums is unreliable, +// because of it this game version have it's own ROM BOARD TEST in GAME TEST MODE, which perform test and show sums correctly ROM_START( mvsc2 ) NAOMI_BIOS @@ -4614,6 +4639,9 @@ ROM_START( mvsc2 ) ROM_COPY( "rom_board", 0x1200000, 0x400000, 0x400000 ) + ROM_REGION(0x74, "some_eeprom", 0) + ROM_LOAD("sflash.ic13s", 0x000000, 0x000074, CRC(5fbc2d5e) SHA1(fd762b81d1bbb65d28ad223874db198918fb0853)) + // 841-0007-02 2000 317-5058-COM Naomi ROM_PARAMETER( ":rom_board:key", "c18b6e7c" ) ROM_END @@ -9620,8 +9648,8 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", " /* 0004 */ GAME( 1999, shangril, naomi, naomim2, naomi_mp,naomi_state,naomi_mp,ROT0, "Marvelous Ent.", "Dengen Tenshi Taisen Janshi Shangri-la", GAME_FLAGS ) /* 0005 */ GAME( 1999, spawn, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Todd Mc Farlane / Capcom","Spawn In the Demon's Hand (Rev B)", GAME_FLAGS ) /* 0006 */ GAME( 1999, puyoda, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Compile", "Puyo Puyo Da!", GAME_FLAGS ) -// 0007-01 GAME(2000, mvsc2u, mvsc2, naomim2, naomi, naomi_state, mvsc2, ROT0, "Capcom / Marvel", "Marvel Vs. Capcom 2 New Age of Heroes (USA, Rev A)", GAME_FLAGS) -/* 0007-02 */ GAME(2000, mvsc2, naomi, naomim1, naomi, naomi_state, mvsc2, ROT0, "Capcom / Marvel", "Marvel Vs. Capcom 2 New Age of Heroes (Export, Rev A)", GAME_FLAGS) +/* 0007-01 */ GAME(2000, mvsc2u, mvsc2, naomim2, naomi, naomi_state, mvsc2, ROT0, "Capcom / Marvel", "Marvel Vs. Capcom 2 New Age of Heroes (USA) (Rev A)", GAME_FLAGS) +/* 0007-02 -03 */ GAME(2000, mvsc2, naomi, naomim1, naomi, naomi_state, mvsc2, ROT0, "Capcom / Marvel", "Marvel Vs. Capcom 2 New Age of Heroes (Export, Korea) (Rev A)", GAME_FLAGS) /* 0008 */ GAME( 2000, pstone2, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Capcom", "Power Stone 2", GAME_FLAGS ) /* 0011 */ GAME( 2000, capsnk, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Capcom / SNK", "Capcom Vs. SNK Millennium Fight 2000 (Rev C)", GAME_FLAGS ) /* 0011 */ GAME( 2000, capsnka, capsnk,naomim2, naomi, naomi_state, naomi, ROT0, "Capcom / SNK", "Capcom Vs. SNK Millennium Fight 2000 (Rev A)", GAME_FLAGS ) diff --git a/src/mame/drivers/nbmj9195.cpp b/src/mame/drivers/nbmj9195.cpp index da6720a65b6..27e964bfef0 100644 --- a/src/mame/drivers/nbmj9195.cpp +++ b/src/mame/drivers/nbmj9195.cpp @@ -87,7 +87,7 @@ WRITE8_MEMBER(nbmj9195_state::dipswbitsel_w) WRITE8_MEMBER(nbmj9195_state::mscoutm_inputportsel_w) { - m_mscoutm_inputport = (data ^ 0xff); + m_mscoutm_inputport = (data ^ 0x1f); } READ8_MEMBER(nbmj9195_state::mscoutm_dipsw_0_r) diff --git a/src/mame/drivers/nemesis.cpp b/src/mame/drivers/nemesis.cpp index f76f2f92c33..ee481f5040e 100644 --- a/src/mame/drivers/nemesis.cpp +++ b/src/mame/drivers/nemesis.cpp @@ -406,7 +406,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, nemesis_state ) AM_RANGE(0xe004, 0xe004) AM_DEVWRITE("k005289", k005289_device, tg2_w) AM_RANGE(0xe005, 0xe005) AM_DEVWRITE("ay2", ay8910_device, address_w) AM_RANGE(0xe006, 0xe006) AM_DEVWRITE("ay1", ay8910_device, address_w) - AM_RANGE(0xe007, 0xe007) AM_MIRROR(0x1ff8) AM_MASK(0x1ff8) AM_WRITE(nemesis_filter_w) + AM_RANGE(0xe007, 0xe007) AM_SELECT(0x1ff8) AM_WRITE(nemesis_filter_w) AM_RANGE(0xe086, 0xe086) AM_DEVREAD("ay1", ay8910_device, data_r) AM_RANGE(0xe106, 0xe106) AM_DEVWRITE("ay1", ay8910_device, data_w) AM_RANGE(0xe205, 0xe205) AM_DEVREAD("ay2", ay8910_device, data_r) @@ -425,7 +425,7 @@ static ADDRESS_MAP_START( gx400_sound_map, AS_PROGRAM, 8, nemesis_state ) AM_RANGE(0xe004, 0xe004) AM_DEVWRITE("k005289", k005289_device, tg2_w) AM_RANGE(0xe005, 0xe005) AM_DEVWRITE("ay2", ay8910_device, address_w) AM_RANGE(0xe006, 0xe006) AM_DEVWRITE("ay1", ay8910_device, address_w) - AM_RANGE(0xe007, 0xe007) AM_MIRROR(0x1ff8) AM_MASK(0x1ff8) AM_WRITE(nemesis_filter_w) + AM_RANGE(0xe007, 0xe007) AM_SELECT(0x1ff8) AM_WRITE(nemesis_filter_w) AM_RANGE(0xe030, 0xe030) AM_WRITE(gx400_speech_start_w) AM_RANGE(0xe086, 0xe086) AM_DEVREAD("ay1", ay8910_device, data_r) AM_RANGE(0xe106, 0xe106) AM_DEVWRITE("ay1", ay8910_device, data_w) diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp index ad5757cf0b6..a88d6d11d26 100644 --- a/src/mame/drivers/neogeo.cpp +++ b/src/mame/drivers/neogeo.cpp @@ -1172,12 +1172,12 @@ void neogeo_state::set_slot_idx(int slot) space.unmap_readwrite(0x000080, 0x0fffff); space.unmap_readwrite(0x200000, 0x2fffff); if (!m_slots[m_curr_slot] || m_slots[m_curr_slot]->get_rom_size() == 0) - space.install_rom(0x000080, 0x0fffff, 0, 0, (UINT16 *)m_region_maincpu->base() + 0x80/2); + space.install_rom(0x000080, 0x0fffff, (UINT16 *)m_region_maincpu->base() + 0x80/2); else - space.install_rom(0x000080, 0x0fffff, 0, 0, (UINT16 *)m_slots[m_curr_slot]->get_rom_base() + 0x80/2); + space.install_rom(0x000080, 0x0fffff, (UINT16 *)m_slots[m_curr_slot]->get_rom_base() + 0x80/2); - space.install_read_bank(0x200000, 0x2fffff, 0, 0, "cartridge"); + space.install_read_bank(0x200000, 0x2fffff, "cartridge"); space.install_write_handler(0x2ffff0, 0x2fffff, write16_delegate(FUNC(neogeo_state::write_banksel),this)); m_bank_cartridge = membank("cartridge"); @@ -1289,7 +1289,7 @@ void neogeo_state::set_slot_idx(int slot) case NEOGEO_VLINER: space.install_readwrite_handler(0x200000, 0x201fff, read16_delegate(FUNC(neogeo_cart_slot_device::ram_r),(neogeo_cart_slot_device*)m_slots[m_curr_slot]), write16_delegate(FUNC(neogeo_cart_slot_device::ram_w),(neogeo_cart_slot_device*)m_slots[m_curr_slot])); // custom input handling... install it here for the moment. - space.install_read_port(0x300000, 0x300001, 0, 0x01ff7e, "DSW"); + space.install_read_port(0x300000, 0x300001, 0x01ff7e, "DSW"); space.install_read_port(0x280000, 0x280001, "IN5"); space.install_read_port(0x2c0000, 0x2c0001, "IN6"); break; @@ -1524,8 +1524,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( audio_io_map, AS_IO, 8, neogeo_state ) AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READ(audio_command_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, clear_w) AM_RANGE(0x04, 0x07) AM_MIRROR(0xff00) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) - AM_RANGE(0x08, 0x08) AM_MIRROR(0xff10) AM_MASK(0x0010) AM_WRITE(audio_cpu_enable_nmi_w) - AM_RANGE(0x08, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xff03) AM_READ(audio_cpu_bank_select_r) + AM_RANGE(0x08, 0x08) AM_MIRROR(0xff00) AM_SELECT(0x0010) AM_WRITE(audio_cpu_enable_nmi_w) + AM_RANGE(0x08, 0x0b) AM_MIRROR(0x00f0) AM_SELECT(0xff00) AM_READ(audio_cpu_bank_select_r) AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) ADDRESS_MAP_END @@ -2026,9 +2026,9 @@ DRIVER_INIT_MEMBER(neogeo_state, neogeo) { // install controllers if (m_ctrl1) - m_maincpu->space(AS_PROGRAM).install_read_handler(0x300000, 0x300001, 0, 0x01ff7e, read16_delegate(FUNC(neogeo_state::in0_r), this)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x300000, 0x300001, 0, 0x01ff7e, 0, read16_delegate(FUNC(neogeo_state::in0_r), this)); if (m_ctrl2) - m_maincpu->space(AS_PROGRAM).install_read_handler(0x340000, 0x340001, 0, 0x01fffe, read16_delegate(FUNC(neogeo_state::in1_r), this)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x340000, 0x340001, 0, 0x01fffe, 0, read16_delegate(FUNC(neogeo_state::in1_r), this)); } diff --git a/src/mame/drivers/neogeocd.cpp b/src/mame/drivers/neogeocd.cpp index 9aadcb830b4..1e2890a2be3 100644 --- a/src/mame/drivers/neogeocd.cpp +++ b/src/mame/drivers/neogeocd.cpp @@ -926,9 +926,9 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( neocd_audio_io_map, AS_IO, 8, ngcd_state ) AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READ(audio_command_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, clear_w) AM_RANGE(0x04, 0x07) AM_MIRROR(0xff00) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) - AM_RANGE(0x08, 0x08) AM_MIRROR(0xff10) AM_MASK(0x0010) AM_WRITE(audio_cpu_enable_nmi_w) + AM_RANGE(0x08, 0x08) AM_MIRROR(0xff00) AM_SELECT(0x0010) AM_WRITE(audio_cpu_enable_nmi_w) // banking reads are actually NOP on NeoCD? but some games still access them -// AM_RANGE(0x08, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xff03) AM_READ(audio_cpu_bank_select_r) +// AM_RANGE(0x08, 0x0b) AM_MIRROR(0x00f0) AM_SELECT(0xff00) AM_READ(audio_cpu_bank_select_r) AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // ?? diff --git a/src/mame/drivers/neopcb.cpp b/src/mame/drivers/neopcb.cpp index e33e82c9113..f2802a5070b 100644 --- a/src/mame/drivers/neopcb.cpp +++ b/src/mame/drivers/neopcb.cpp @@ -418,8 +418,8 @@ WRITE16_MEMBER(neopcb_state::write_bankpvc) void neopcb_state::install_common() { // install memory bank - m_maincpu->space(AS_PROGRAM).install_rom(0x000080, 0x0fffff, 0, 0, (UINT16 *)m_region_maincpu->base() + 0x80/2); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x200000, 0x2fffff, 0, 0, "cpu_bank"); + m_maincpu->space(AS_PROGRAM).install_rom(0x000080, 0x0fffff, (UINT16 *)m_region_maincpu->base() + 0x80/2); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x200000, 0x2fffff, "cpu_bank"); membank("cpu_bank")->set_base(m_region_maincpu->base() + 0x100000); // install protection handlers + bankswitch handler @@ -436,7 +436,7 @@ void neopcb_state::install_common() void neopcb_state::install_banked_bios() { - m_maincpu->space(AS_PROGRAM).install_read_bank(0xc00000, 0xc1ffff, 0, 0x0e0000, "bios_bank"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xc00000, 0xc1ffff, 0x0e0000, "bios_bank"); membank("bios_bank")->configure_entries(0, 2, memregion("mainbios")->base(), 0x20000); membank("bios_bank")->set_entry(1); @@ -505,7 +505,7 @@ DRIVER_INIT_MEMBER(neopcb_state, kf2k3pcb) m_cmc_prot->sfix_decrypt(spr_region, spr_region_size, fix_region, fix_region_size); kf2k3pcb_decrypt_s1data(); - m_maincpu->space(AS_PROGRAM).install_rom(0xc00000, 0xc7ffff, 0, 0x080000, memregion("mainbios")->base()); // 512k bios + m_maincpu->space(AS_PROGRAM).install_rom(0xc00000, 0xc7ffff, 0x080000, memregion("mainbios")->base()); // 512k bios } diff --git a/src/mame/drivers/neoprint.cpp b/src/mame/drivers/neoprint.cpp index bfa5cf007bd..9078f3e1d51 100644 --- a/src/mame/drivers/neoprint.cpp +++ b/src/mame/drivers/neoprint.cpp @@ -23,6 +23,7 @@ #include "emu.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "sound/2610intf.h" #include "machine/upd1990a.h" @@ -41,6 +42,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_generic_paletteram_16(*this, "paletteram") { } required_shared_ptr<UINT16> m_npvidram; @@ -51,6 +53,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; optional_shared_ptr<UINT16> m_generic_paletteram_16; UINT8 m_audio_result; @@ -78,7 +81,6 @@ public: UINT32 screen_update_nprsp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_layer(bitmap_ind16 &bitmap,const rectangle &cliprect,int layer,int data_shift); void audio_cpu_assert_nmi(); - DECLARE_WRITE_LINE_MEMBER(audio_cpu_irq); }; @@ -198,7 +200,7 @@ WRITE8_MEMBER(neoprint_state::audio_cpu_clear_nmi_w) WRITE8_MEMBER(neoprint_state::audio_command_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); audio_cpu_assert_nmi(); @@ -211,7 +213,7 @@ WRITE8_MEMBER(neoprint_state::audio_command_w) READ8_MEMBER(neoprint_state::audio_command_r) { - UINT8 ret = soundlatch_byte_r(space, 0); + UINT8 ret = m_soundlatch->read(space, 0); //if (LOG_CPU_COMM) logerror(" AUD CPU PC %04x: audio_command_r %02x\n", space.device().safe_pc(), ret); @@ -347,10 +349,10 @@ static ADDRESS_MAP_START( neoprint_audio_io_map, AS_IO, 8, neoprint_state ) AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READ(audio_command_r) AM_WRITENOP AM_RANGE(0x04, 0x07) AM_MIRROR(0xff00) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) // AM_RANGE(0x08, 0x08) AM_MIRROR(0xff00) /* write - NMI enable / acknowledge? (the data written doesn't matter) */ -// AM_RANGE(0x08, 0x08) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_f000_f7ff_r) -// AM_RANGE(0x09, 0x09) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_e000_efff_r) -// AM_RANGE(0x0a, 0x0a) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_c000_dfff_r) -// AM_RANGE(0x0b, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_8000_bfff_r) +// AM_RANGE(0x08, 0x08) AM_SELECT(0xfff0) AM_READ(audio_cpu_bank_select_f000_f7ff_r) +// AM_RANGE(0x09, 0x09) AM_SELECT(0xfff0) AM_READ(audio_cpu_bank_select_e000_efff_r) +// AM_RANGE(0x0a, 0x0a) AM_SELECT(0xfff0) AM_READ(audio_cpu_bank_select_c000_dfff_r) +// AM_RANGE(0x0b, 0x0b) AM_SELECT(0xfff0) AM_READ(audio_cpu_bank_select_8000_bfff_r) AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_WRITE(audio_result_w) // AM_RANGE(0x18, 0x18) AM_MIRROR(0xff00) /* write - NMI disable? (the data written doesn't matter) */ ADDRESS_MAP_END @@ -463,11 +465,6 @@ static GFXDECODE_START( neoprint ) GFXDECODE_ENTRY( "gfx1", 0, neoprint_layout, 0x0, 0x1000 ) GFXDECODE_END -WRITE_LINE_MEMBER(neoprint_state::audio_cpu_irq) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - void neoprint_state::machine_start() { // enable rtc and serial mode @@ -506,8 +503,10 @@ static MACHINE_CONFIG_START( neoprint, neoprint_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, 24000000 / 3) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(neoprint_state, audio_cpu_irq)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.60) MCFG_SOUND_ROUTE(0, "rspeaker", 0.60) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) @@ -549,8 +548,10 @@ static MACHINE_CONFIG_START( nprsp, neoprint_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, 24000000 / 3) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(neoprint_state, audio_cpu_irq)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.60) MCFG_SOUND_ROUTE(0, "rspeaker", 0.60) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) diff --git a/src/mame/drivers/ninjakd2.cpp b/src/mame/drivers/ninjakd2.cpp index 4b975ec2293..c11ce132fbf 100644 --- a/src/mame/drivers/ninjakd2.cpp +++ b/src/mame/drivers/ninjakd2.cpp @@ -153,6 +153,7 @@ TODO: #include "emu.h" #include "cpu/z80/z80.h" #include "sound/2203intf.h" +#include "machine/gen_latch.h" #include "machine/mc8123.h" #include "includes/ninjakd2.h" @@ -376,7 +377,7 @@ static ADDRESS_MAP_START( ninjakd2_main_cpu, AS_PROGRAM, 8, ninjakd2_state ) AM_RANGE(0xc002, 0xc002) AM_READ_PORT("PAD2") AM_RANGE(0xc003, 0xc003) AM_READ_PORT("DIPSW1") AM_RANGE(0xc004, 0xc004) AM_READ_PORT("DIPSW2") - AM_RANGE(0xc200, 0xc200) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xc200, 0xc200) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xc201, 0xc201) AM_WRITE(ninjakd2_soundreset_w) AM_RANGE(0xc202, 0xc202) AM_WRITE(ninjakd2_bankselect_w) AM_RANGE(0xc203, 0xc203) AM_WRITE(ninjakd2_sprite_overdraw_w) @@ -401,7 +402,7 @@ static ADDRESS_MAP_START( mnight_main_cpu, AS_PROGRAM, 8, ninjakd2_state ) AM_RANGE(0xf802, 0xf802) AM_READ_PORT("PAD2") AM_RANGE(0xf803, 0xf803) AM_READ_PORT("DIPSW1") AM_RANGE(0xf804, 0xf804) AM_READ_PORT("DIPSW2") - AM_RANGE(0xfa00, 0xfa00) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xfa00, 0xfa00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xfa01, 0xfa01) AM_WRITE(ninjakd2_soundreset_w) AM_RANGE(0xfa02, 0xfa02) AM_WRITE(ninjakd2_bankselect_w) AM_RANGE(0xfa03, 0xfa03) AM_WRITE(ninjakd2_sprite_overdraw_w) @@ -417,7 +418,7 @@ static ADDRESS_MAP_START( robokid_main_cpu, AS_PROGRAM, 8, ninjakd2_state ) AM_RANGE(0xd000, 0xd3ff) AM_READWRITE(robokid_bg2_videoram_r, robokid_bg2_videoram_w) // banked AM_RANGE(0xd400, 0xd7ff) AM_READWRITE(robokid_bg1_videoram_r, robokid_bg1_videoram_w) // banked AM_RANGE(0xd800, 0xdbff) AM_READWRITE(robokid_bg0_videoram_r, robokid_bg0_videoram_w) // banked - AM_RANGE(0xdc00, 0xdc00) AM_READ_PORT("KEYCOIN") AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xdc00, 0xdc00) AM_READ_PORT("KEYCOIN") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xdc01, 0xdc01) AM_READ_PORT("PAD1") AM_WRITE(ninjakd2_soundreset_w) AM_RANGE(0xdc02, 0xdc02) AM_READ_PORT("PAD2") AM_WRITE(ninjakd2_bankselect_w) AM_RANGE(0xdc03, 0xdc03) AM_READ_PORT("DIPSW1") AM_WRITE(ninjakd2_sprite_overdraw_w) @@ -436,7 +437,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( omegaf_main_cpu, AS_PROGRAM, 8, ninjakd2_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") - AM_RANGE(0xc000, 0xc000) AM_READ_PORT("KEYCOIN") AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xc000, 0xc000) AM_READ_PORT("KEYCOIN") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xc001, 0xc003) AM_READ(omegaf_io_protection_r) AM_RANGE(0xc001, 0xc001) AM_WRITE(ninjakd2_soundreset_w) AM_RANGE(0xc002, 0xc002) AM_WRITE(ninjakd2_bankselect_w) @@ -463,7 +464,7 @@ static ADDRESS_MAP_START( ninjakd2_sound_cpu, AS_PROGRAM, 8, ninjakd2_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc7ff) AM_RAM - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf000, 0xf000) AM_WRITE(ninjakd2_pcm_play_w) ADDRESS_MAP_END @@ -471,7 +472,7 @@ static ADDRESS_MAP_START( ninjakid_nopcm_sound_cpu, AS_PROGRAM, 8, ninjakd2_stat AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc7ff) AM_RAM - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf000, 0xf000) AM_NOP ADDRESS_MAP_END @@ -882,18 +883,6 @@ static GFXDECODE_START( robokid ) GFXDECODE_END - -/************************************* - * - * Sound definitions - * - *************************************/ - -WRITE_LINE_MEMBER(ninjakd2_state::irqhandler) -{ - m_soundcpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - /************************************* * * Machine drivers @@ -963,8 +952,10 @@ static MACHINE_CONFIG_START( ninjakd2_core, ninjakd2_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("2203.1", YM2203, MAIN_CLOCK_12/8) /* verified */ - MCFG_YM2203_IRQ_HANDLER(WRITELINE(ninjakd2_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.10) MCFG_SOUND_ROUTE(1, "mono", 0.10) MCFG_SOUND_ROUTE(2, "mono", 0.10) diff --git a/src/mame/drivers/nmg5.cpp b/src/mame/drivers/nmg5.cpp index 6a808ce11d4..51fd41f22e0 100644 --- a/src/mame/drivers/nmg5.cpp +++ b/src/mame/drivers/nmg5.cpp @@ -209,7 +209,7 @@ Stephh's notes (based on the games M68000 code and some tests) : ("do you want to draw a medal ?" question) : * BUTTON5 : Yes * BUTTON6 : No - - As hopper and other mecanisms aren't emulated, you can't + - As hopper and other mechanisms aren't emulated, you can't draw a medal (winnings are always converted to credits). I hope that someone will be able to fix that as I can't do it. @@ -224,6 +224,7 @@ Stephh's notes (based on the games M68000 code and some tests) : #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" +#include "machine/gen_latch.h" #include "sound/okim6295.h" #include "sound/3812intf.h" #include "video/decospr.h" @@ -238,11 +239,12 @@ public: m_bg_videoram(*this, "bg_videoram"), m_fg_videoram(*this, "fg_videoram"), m_bitmap(*this, "bitmap"), - m_sprgen(*this, "spritegen"), m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), m_oki(*this, "oki"), - m_gfxdecode(*this, "gfxdecode") + m_gfxdecode(*this, "gfxdecode"), + m_sprgen(*this, "spritegen"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ @@ -251,7 +253,6 @@ public: required_shared_ptr<UINT16> m_bg_videoram; required_shared_ptr<UINT16> m_fg_videoram; required_shared_ptr<UINT16> m_bitmap; - optional_device<decospr_device> m_sprgen; /* video-related */ tilemap_t *m_bg_tilemap; @@ -268,6 +269,8 @@ public: required_device<cpu_device> m_soundcpu; required_device<okim6295_device> m_oki; required_device<gfxdecode_device> m_gfxdecode; + optional_device<decospr_device> m_sprgen; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE16_MEMBER(fg_videoram_w); DECLARE_WRITE16_MEMBER(bg_videoram_w); @@ -308,7 +311,7 @@ WRITE16_MEMBER(nmg5_state::nmg5_soundlatch_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -410,7 +413,7 @@ static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, nmg5_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_WRITE(oki_banking_w) AM_RANGE(0x10, 0x11) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write) - AM_RANGE(0x18, 0x18) AM_READ(soundlatch_byte_r) + AM_RANGE(0x18, 0x18) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x1c, 0x1c) AM_DEVREADWRITE("oki", okim6295_device, read, write) ADDRESS_MAP_END @@ -1004,6 +1007,8 @@ static MACHINE_CONFIG_START( nmg5, nmg5_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, 4000000) /* 4MHz */ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/nycaptor.cpp b/src/mame/drivers/nycaptor.cpp index df2b1fe7583..d0baed92afe 100644 --- a/src/mame/drivers/nycaptor.cpp +++ b/src/mame/drivers/nycaptor.cpp @@ -12,7 +12,7 @@ What's new : - added bootlegs - Bronx and Colt - - Cycle Shooting added (bigger VRAM than nycpator, dfferent (unknwn yet) banking and + - Cycle Shooting added (bigger VRAM than nycpator, different (unknown yet) banking and gfx control , ROMs probably are wrong mapped, gfx too) - Sub CPU halt (cpu #0 ,$d001) - Improved communication between main cpu and sound cpu ($d400 cpu#0 , $d000 sound cpu) @@ -159,14 +159,14 @@ Stephh's additional notes (based on the game Z80 code and some tests) : Furthermore, shooting birds kills you instead of recovering 3 "steps" of damage ! - I can't tell if it's an ingame bug of this bootleg, but the game hangs after bonus stage (level 4) instead of looping back to level 1 with higher difficulty. - The game also frezees sometimes for some unknown reasons. + The game also freezes sometimes for some unknown reasons. 2) 'cyclshtg' and clones 2a) 'cyclshtg' - Lives (BCD coded) settings are not read from MCU, but from table at 0x0fee. - - Even if it isn't mentionned in the manual, DSWB bit 7 allows you to reset damage to 0 + - Even if it isn't mentioned in the manual, DSWB bit 7 allows you to reset damage to 0 at the end of a level (check code at 0x328d). - When "Infinite Bullets" is set to ON, there is no timer to reload the bullets. However, it's hard to notice as you don't see an indicator as in 'nycaptor'. @@ -271,7 +271,7 @@ TIMER_CALLBACK_MEMBER(nycaptor_state::nmi_callback) WRITE8_MEMBER(nycaptor_state::sound_command_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(nycaptor_state::nmi_callback),this), data); } @@ -360,7 +360,7 @@ static ADDRESS_MAP_START( nycaptor_sound_map, AS_PROGRAM, 8, nycaptor_state ) AM_RANGE(0xca00, 0xca00) AM_WRITENOP AM_RANGE(0xcb00, 0xcb00) AM_WRITENOP AM_RANGE(0xcc00, 0xcc00) AM_WRITENOP - AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r) AM_WRITE(to_main_w) + AM_RANGE(0xd000, 0xd000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(to_main_w) AM_RANGE(0xd200, 0xd200) AM_READNOP AM_WRITE(nmi_enable_w) AM_RANGE(0xd400, 0xd400) AM_WRITE(nmi_disable_w) AM_RANGE(0xd600, 0xd600) AM_WRITENOP @@ -837,6 +837,8 @@ static MACHINE_CONFIG_START( nycaptor, nycaptor_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 8000000/4) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(nycaptor_state, unk_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(nycaptor_state, unk_w)) @@ -898,6 +900,8 @@ static MACHINE_CONFIG_START( cyclshtg, nycaptor_state ) MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 8000000/4) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(nycaptor_state, unk_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(nycaptor_state, unk_w)) @@ -959,6 +963,8 @@ static MACHINE_CONFIG_START( bronx, nycaptor_state ) MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 8000000/4) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(nycaptor_state, unk_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(nycaptor_state, unk_w)) diff --git a/src/mame/drivers/nyny.cpp b/src/mame/drivers/nyny.cpp index 3bd05899748..85e18877188 100644 --- a/src/mame/drivers/nyny.cpp +++ b/src/mame/drivers/nyny.cpp @@ -28,7 +28,7 @@ * The Crosshatch switch only works on the title screen * The Service Mode switch, which displays the total number of credits stored in the NVRAM, only works on the "Start Game" - screen after a coin has been insered. Hold down the key to + screen after a coin has been inserted. Hold down the key to display the coin count * The schematics mixed up port A and B on both AY-8910 @@ -72,6 +72,7 @@ #include "cpu/m6809/m6809.h" #include "sound/ay8910.h" #include "sound/dac.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" @@ -100,7 +101,10 @@ public: m_mc6845(*this, "crtc"), m_palette(*this, "palette"), m_pia1(*this, "pia1"), - m_pia2(*this, "pia2") { } + m_pia2(*this, "pia2"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2"), + m_soundlatch3(*this, "soundlatch3") { } /* memory pointers */ required_shared_ptr<UINT8> m_videoram1; @@ -123,6 +127,9 @@ public: required_device<palette_device> m_palette; required_device<pia6821_device> m_pia1; required_device<pia6821_device> m_pia2; + required_device<generic_latch_8_device> m_soundlatch; + required_device<generic_latch_8_device> m_soundlatch2; + required_device<generic_latch_8_device> m_soundlatch3; DECLARE_WRITE8_MEMBER(audio_1_command_w); DECLARE_WRITE8_MEMBER(audio_1_answer_w); @@ -355,14 +362,14 @@ WRITE_LINE_MEMBER(nyny_state::display_enable_changed) WRITE8_MEMBER(nyny_state::audio_1_command_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(M6800_IRQ_LINE, HOLD_LINE); } WRITE8_MEMBER(nyny_state::audio_1_answer_w) { - soundlatch3_byte_w(space, 0, data); + m_soundlatch3->write(space, 0, data); m_maincpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); } @@ -382,7 +389,7 @@ WRITE8_MEMBER(nyny_state::nyny_ay8910_37_port_a_w) WRITE8_MEMBER(nyny_state::audio_2_command_w) { - soundlatch2_byte_w(space, 0, (data & 0x60) >> 5); + m_soundlatch2->write(space, 0, (data & 0x60) >> 5); m_audiocpu2->set_input_line(M6800_IRQ_LINE, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE); } @@ -424,7 +431,7 @@ static ADDRESS_MAP_START( nyny_main_map, AS_PROGRAM, 8, nyny_state ) AM_RANGE(0xa100, 0xa100) AM_MIRROR(0x00fe) AM_DEVWRITE("crtc", mc6845_device, address_w) AM_RANGE(0xa101, 0xa101) AM_MIRROR(0x00fe) AM_DEVWRITE("crtc", mc6845_device, register_w) AM_RANGE(0xa200, 0xa20f) AM_MIRROR(0x00f0) AM_READWRITE(nyny_pia_1_2_r, nyny_pia_1_2_w) - AM_RANGE(0xa300, 0xa300) AM_MIRROR(0x00ff) AM_READ(soundlatch3_byte_r) AM_WRITE(audio_1_command_w) + AM_RANGE(0xa300, 0xa300) AM_MIRROR(0x00ff) AM_DEVREAD("soundlatch3", generic_latch_8_device, read) AM_WRITE(audio_1_command_w) AM_RANGE(0xa400, 0xa7ff) AM_NOP AM_RANGE(0xa800, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xdfff) AM_RAM @@ -436,7 +443,7 @@ static ADDRESS_MAP_START( nyny_audio_1_map, AS_PROGRAM, 8, nyny_state ) ADDRESS_MAP_GLOBAL_MASK(0x7fff) AM_RANGE(0x0000, 0x007f) AM_RAM /* internal RAM */ AM_RANGE(0x0080, 0x0fff) AM_NOP - AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x0fff) AM_READ(soundlatch_byte_r) AM_WRITE(audio_1_answer_w) + AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x0fff) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(audio_1_answer_w) AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x0fff) AM_READ_PORT("SW3") AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x0ffc) AM_DEVREAD("ay1", ay8910_device, data_r) AM_RANGE(0x3000, 0x3001) AM_MIRROR(0x0ffc) AM_DEVWRITE("ay1", ay8910_device, data_address_w) @@ -453,7 +460,7 @@ static ADDRESS_MAP_START( nyny_audio_2_map, AS_PROGRAM, 8, nyny_state ) ADDRESS_MAP_GLOBAL_MASK(0x7fff) AM_RANGE(0x0000, 0x007f) AM_RAM /* internal RAM */ AM_RANGE(0x0080, 0x0fff) AM_NOP - AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x0fff) AM_READ(soundlatch2_byte_r) + AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x0fff) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x0ffe) AM_DEVREAD("ay3", ay8910_device, data_r) AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x0ffe) AM_DEVWRITE("ay3", ay8910_device, data_address_w) AM_RANGE(0x3000, 0x6fff) AM_NOP @@ -632,6 +639,10 @@ static MACHINE_CONFIG_START( nyny, nyny_state ) /* audio hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_GENERIC_LATCH_8_ADD("soundlatch3") + MCFG_SOUND_ADD("ay1", AY8910, AUDIO_CPU_1_CLOCK) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(nyny_state, nyny_ay8910_37_port_a_w)) MCFG_AY8910_PORT_B_WRITE_CB(DEVWRITE8("dac", dac_device, write_unsigned8)) diff --git a/src/mame/drivers/odyssey2.cpp b/src/mame/drivers/odyssey2.cpp index 22b0404efcc..c206427343b 100644 --- a/src/mame/drivers/odyssey2.cpp +++ b/src/mame/drivers/odyssey2.cpp @@ -53,7 +53,6 @@ public: virtual void machine_reset() override; DECLARE_PALETTE_INIT(odyssey2); UINT32 screen_update_odyssey2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(irq_callback); DECLARE_WRITE16_MEMBER(scanline_postprocess); @@ -276,13 +275,6 @@ PALETTE_INIT_MEMBER(g7400_state, g7400) } } - -WRITE_LINE_MEMBER(odyssey2_state::irq_callback) -{ - m_maincpu->set_input_line(0, state); -} - - DRIVER_INIT_MEMBER(odyssey2_state,odyssey2) { UINT8 *gfx = memregion("gfx1")->base(); @@ -690,7 +682,7 @@ static MACHINE_CONFIG_START( odyssey2, odyssey2_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_I8244_ADD( "i8244", XTAL_7_15909MHz/2 * 2, "screen", WRITELINE( odyssey2_state, irq_callback ), WRITE16( odyssey2_state, scanline_postprocess ) ) + MCFG_I8244_ADD( "i8244", XTAL_7_15909MHz/2 * 2, "screen", INPUTLINE( "maincpu", 0 ), WRITE16( odyssey2_state, scanline_postprocess ) ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MCFG_FRAGMENT_ADD(odyssey2_cartslot) @@ -716,7 +708,7 @@ static MACHINE_CONFIG_START( videopac, odyssey2_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_I8245_ADD( "i8244", XTAL_17_73447MHz/5 * 2, "screen", WRITELINE( odyssey2_state, irq_callback ), WRITE16( odyssey2_state, scanline_postprocess ) ) + MCFG_I8245_ADD( "i8244", XTAL_17_73447MHz/5 * 2, "screen", INPUTLINE( "maincpu", 0 ), WRITE16( odyssey2_state, scanline_postprocess ) ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MCFG_FRAGMENT_ADD(odyssey2_cartslot) @@ -745,7 +737,7 @@ static MACHINE_CONFIG_START( g7400, g7400_state ) MCFG_EF9340_1_ADD( "ef9340_1", 3540000, "screen" ) MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_I8245_ADD( "i8244", 3540000 * 2, "screen", WRITELINE( odyssey2_state, irq_callback ), WRITE16( g7400_state, scanline_postprocess ) ) + MCFG_I8245_ADD( "i8244", 3540000 * 2, "screen", INPUTLINE( "maincpu", 0 ), WRITE16( g7400_state, scanline_postprocess ) ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MCFG_FRAGMENT_ADD(odyssey2_cartslot) @@ -777,7 +769,7 @@ static MACHINE_CONFIG_START( odyssey3, g7400_state ) MCFG_EF9340_1_ADD( "ef9340_1", 3540000, "screen" ) MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_I8244_ADD( "i8244", 3540000 * 2, "screen", WRITELINE( odyssey2_state, irq_callback ), WRITE16( g7400_state, scanline_postprocess ) ) + MCFG_I8244_ADD( "i8244", 3540000 * 2, "screen", INPUTLINE( "maincpu", 0 ), WRITE16( g7400_state, scanline_postprocess ) ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MCFG_FRAGMENT_ADD(odyssey2_cartslot) diff --git a/src/mame/drivers/oneshot.cpp b/src/mame/drivers/oneshot.cpp index e6b0fee887d..cad1f105fa4 100644 --- a/src/mame/drivers/oneshot.cpp +++ b/src/mame/drivers/oneshot.cpp @@ -14,7 +14,7 @@ Notes : - Gun X range is 0x0000-0x01ff and gun Y range is 0x0000-0x00ff, so you can shoot sometimes out of the "visible area" ... NOT A BUG ! - Player 1 and 2 guns do NOT use the same routine to determine the - coordonates of an impact on the screen : position both guns in the + coordinates of an impact on the screen : position both guns in the "upper left" corner in the "gun test" to see what I mean. - I've assumed that the shot was right at the place the shot was made, but I don't have any more information about that @@ -39,6 +39,7 @@ NOTE: An eBay auction of the PCB shows "1996.9.16 PROMAT" on the JAMMA+ adapter #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" #include "includes/oneshot.h" +#include "machine/gen_latch.h" #include "sound/okim6295.h" #include "sound/3812intf.h" @@ -110,8 +111,8 @@ static ADDRESS_MAP_START( oneshot_map, AS_PROGRAM, 16, oneshot_state ) AM_RANGE(0x181000, 0x181fff) AM_RAM_WRITE(oneshot_fg_videoram_w) AM_SHARE("fg_videoram") // credits etc. AM_RANGE(0x182000, 0x182fff) AM_RAM_WRITE(oneshot_bg_videoram_w) AM_SHARE("bg_videoram") // credits etc. AM_RANGE(0x188000, 0x18800f) AM_WRITEONLY AM_SHARE("scroll") // scroll registers - AM_RANGE(0x190002, 0x190003) AM_READ(soundlatch_word_r) - AM_RANGE(0x190010, 0x190011) AM_WRITE(soundlatch_word_w) + AM_RANGE(0x190002, 0x190003) AM_DEVREAD8("soundlatch", generic_latch_8_device, read, 0x00ff) + AM_RANGE(0x190010, 0x190011) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x190018, 0x190019) AM_WRITE(soundbank_w) AM_RANGE(0x190026, 0x190027) AM_READ(oneshot_gun_x_p1_r) AM_RANGE(0x19002e, 0x19002f) AM_READ(oneshot_gun_x_p2_r) @@ -126,7 +127,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( oneshot_sound_map, AS_PROGRAM, 8, oneshot_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0x8000) AM_READWRITE(soundlatch_byte_r,soundlatch_byte_w) + AM_RANGE(0x8000, 0x8000) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, write) AM_RANGE(0x8001, 0x87ff) AM_RAM AM_RANGE(0xe000, 0xe001) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write) AM_RANGE(0xe010, 0xe010) AM_DEVREADWRITE("oki", okim6295_device, read, write) @@ -377,6 +378,8 @@ static MACHINE_CONFIG_START( oneshot, oneshot_state ) MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, 3500000) MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/onetwo.cpp b/src/mame/drivers/onetwo.cpp index 363b98e85c7..c89629a8673 100644 --- a/src/mame/drivers/onetwo.cpp +++ b/src/mame/drivers/onetwo.cpp @@ -43,6 +43,7 @@ Note: this is quite clearly a 'Korean bootleg' of Shisensho - Joshiryo-Hen / Mat #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/okim6295.h" #include "sound/3812intf.h" @@ -61,7 +62,8 @@ public: m_audiocpu(*this, "audiocpu"), m_watchdog(*this, "watchdog"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_paletteram; @@ -77,6 +79,7 @@ public: required_device<watchdog_timer_device> m_watchdog; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE8_MEMBER(onetwo_fgram_w); DECLARE_WRITE8_MEMBER(onetwo_cpubank_w); @@ -146,7 +149,7 @@ WRITE8_MEMBER(onetwo_state::onetwo_coin_counters_w) WRITE8_MEMBER(onetwo_state::onetwo_soundlatch_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -199,7 +202,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_cpu, AS_PROGRAM, 8, onetwo_state ) AM_RANGE(0x0000, 0x5fff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( sound_cpu_io, AS_IO, 8, onetwo_state ) @@ -207,7 +210,7 @@ static ADDRESS_MAP_START( sound_cpu_io, AS_IO, 8, onetwo_state ) AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("ymsnd", ym3812_device, status_port_r, control_port_w) AM_RANGE(0x20, 0x20) AM_DEVWRITE("ymsnd", ym3812_device, write_port_w) AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xc0, 0xc0) AM_WRITE(soundlatch_clear_byte_w) + AM_RANGE(0xc0, 0xc0) AM_DEVWRITE("soundlatch", generic_latch_8_device, clear_w) ADDRESS_MAP_END /************************************* @@ -380,6 +383,8 @@ static MACHINE_CONFIG_START( onetwo, onetwo_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, MASTER_CLOCK) MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/onyx.cpp b/src/mame/drivers/onyx.cpp index b9b66872201..182c912be03 100644 --- a/src/mame/drivers/onyx.cpp +++ b/src/mame/drivers/onyx.cpp @@ -81,7 +81,7 @@ MACHINE_RESET_MEMBER(onyx_state, c8002) static ADDRESS_MAP_START(c8002_mem, AS_PROGRAM, 16, onyx_state) AM_RANGE(0x00000, 0x00fff) AM_ROM AM_SHARE("share0") AM_RANGE(0x01000, 0x07fff) AM_RAM AM_SHARE("share1") - AM_RANGE(0x08000, 0xfffff) AM_RAM AM_SHARE("share2") + AM_RANGE(0x08000, 0x0ffff) AM_RAM AM_SHARE("share2") // Z8002 has 64k memory ADDRESS_MAP_END //static ADDRESS_MAP_START(c8002_data, AS_DATA, 16, onyx_state) diff --git a/src/mame/drivers/osbexec.cpp b/src/mame/drivers/osbexec.cpp index e9542df1ff9..b2c73cf2462 100644 --- a/src/mame/drivers/osbexec.cpp +++ b/src/mame/drivers/osbexec.cpp @@ -219,7 +219,7 @@ static ADDRESS_MAP_START( osbexec_io, AS_IO, 8, osbexec_state ) AM_RANGE( 0x08, 0x0B ) AM_MIRROR( 0xff00 ) AM_DEVREADWRITE("mb8877", wd_fdc_t, read, write ) /* MB8877 @ UB17 input clock = 1MHz */ AM_RANGE( 0x0C, 0x0F ) AM_MIRROR( 0xff00 ) AM_DEVREADWRITE("sio", z80sio2_device, ba_cd_r, ba_cd_w ) /* SIO @ UD4 */ AM_RANGE( 0x10, 0x13 ) AM_MIRROR( 0xff00 ) AM_DEVREADWRITE( "pia_1", pia6821_device, read, write) /* 6821 PIA @ UD8 */ - AM_RANGE( 0x14, 0x17 ) AM_MIRROR( 0xff00 ) AM_MASK( 0xff00 ) AM_READ(osbexec_kbd_r ) /* KBD */ + AM_RANGE( 0x14, 0x17 ) AM_SELECT( 0xff00 ) AM_READ(osbexec_kbd_r ) /* KBD */ AM_RANGE( 0x18, 0x1b ) AM_MIRROR( 0xff00 ) AM_READ(osbexec_rtc_r ) /* "RTC" @ UE13/UF13 */ /* ?? - vid ? */ ADDRESS_MAP_END diff --git a/src/mame/drivers/othello.cpp b/src/mame/drivers/othello.cpp index 82f8959a507..06cf16dbce4 100644 --- a/src/mame/drivers/othello.cpp +++ b/src/mame/drivers/othello.cpp @@ -16,7 +16,7 @@ CPU Board: D8243 - I/O Expander for D7751C (8048 based) Video Board: - almost empty - 3/4 sodlering pins not populated + almost empty - 3/4 soldering pins not populated @@ -40,6 +40,7 @@ Limit for help/undo (matta): #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/mcs48/mcs48.h" +#include "machine/gen_latch.h" #include "machine/i8243.h" #include "sound/dac.h" #include "sound/ay8910.h" @@ -58,7 +59,8 @@ public: m_maincpu(*this, "maincpu"), m_ay1(*this, "ay1"), m_ay2(*this, "ay2"), - m_palette(*this, "palette") + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } @@ -83,6 +85,7 @@ public: mc6845_device *m_mc6845; device_t *m_n7751; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_READ8_MEMBER(unk_87_r); DECLARE_WRITE8_MEMBER(unk_8a_w); @@ -212,14 +215,14 @@ static ADDRESS_MAP_START( main_portmap, AS_IO, 8, othello_state ) AM_RANGE(0x87, 0x87) AM_READ(unk_87_r) AM_RANGE(0x8a, 0x8a) AM_WRITE(unk_8a_w) AM_RANGE(0x8c, 0x8c) AM_READWRITE(unk_8c_r, unk_8c_w) - AM_RANGE(0x8d, 0x8d) AM_READWRITE(sound_ack_r, soundlatch_byte_w) + AM_RANGE(0x8d, 0x8d) AM_READ(sound_ack_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x8f, 0x8f) AM_WRITE(unk_8f_w) ADDRESS_MAP_END READ8_MEMBER(othello_state::latch_r) { - int retval = soundlatch_byte_r(space, 0); - soundlatch_clear_byte_w(space, 0, 0); + int retval = m_soundlatch->read(space, 0); + m_soundlatch->clear_w(space, 0, 0); return retval; } @@ -434,6 +437,8 @@ static MACHINE_CONFIG_START( othello, othello_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 2000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15) diff --git a/src/mame/drivers/othunder.cpp b/src/mame/drivers/othunder.cpp index caebeaaed1e..327af7a29a7 100644 --- a/src/mame/drivers/othunder.cpp +++ b/src/mame/drivers/othunder.cpp @@ -651,19 +651,6 @@ static GFXDECODE_START( othunder ) GFXDECODE_END - -/************************************************************** - YM2610 (SOUND) -**************************************************************/ - -/* handler called by the YM2610 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(othunder_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - - - /*********************************************************** MACHINE DRIVERS ***********************************************************/ @@ -730,7 +717,7 @@ static MACHINE_CONFIG_START( othunder, othunder_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, 16000000/2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(othunder_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "2610.0l", 0.25) MCFG_SOUND_ROUTE(0, "2610.0r", 0.25) MCFG_SOUND_ROUTE(1, "2610.1l", 1.0) diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp index 128d858a5cb..587050556ad 100644 --- a/src/mame/drivers/pacman.cpp +++ b/src/mame/drivers/pacman.cpp @@ -1221,32 +1221,32 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( s2650games_map, AS_PROGRAM, 8, pacman_state ) - AM_RANGE(0x0000, 0x0fff) AM_MIRROR(0x8000) AM_ROMBANK("bank1") - AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0xe000) AM_WRITE(s2650games_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x1400, 0x141f) AM_MIRROR(0xe000) AM_WRITE(s2650games_scroll_w) - AM_RANGE(0x1420, 0x148f) AM_MIRROR(0xe000) AM_WRITEONLY - AM_RANGE(0x1490, 0x149f) AM_MIRROR(0xe000) AM_WRITEONLY AM_SHARE("s2650_spriteram") - AM_RANGE(0x14a0, 0x14bf) AM_MIRROR(0xe000) AM_WRITE(s2650games_tilesbank_w) AM_SHARE("s2650_tileram") - AM_RANGE(0x14c0, 0x14ff) AM_MIRROR(0xe000) AM_WRITEONLY - AM_RANGE(0x1500, 0x1502) AM_MIRROR(0xe000) AM_WRITENOP - AM_RANGE(0x1503, 0x1503) AM_MIRROR(0xe000) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x1504, 0x1506) AM_MIRROR(0xe000) AM_WRITENOP - AM_RANGE(0x1507, 0x1507) AM_MIRROR(0xe000) AM_WRITE(pacman_coin_counter_w) - AM_RANGE(0x1508, 0x155f) AM_MIRROR(0xe000) AM_WRITEONLY - AM_RANGE(0x1560, 0x156f) AM_MIRROR(0xe000) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x1570, 0x157f) AM_MIRROR(0xe000) AM_WRITEONLY - AM_RANGE(0x1586, 0x1587) AM_MIRROR(0xe000) AM_WRITENOP - AM_RANGE(0x15c0, 0x15c0) AM_MIRROR(0xe000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x15c7, 0x15c7) AM_MIRROR(0xe000) AM_WRITE(porky_banking_w) - AM_RANGE(0x1500, 0x1500) AM_MIRROR(0xe000) AM_READ_PORT("IN0") - AM_RANGE(0x1540, 0x1540) AM_MIRROR(0xe000) AM_READ_PORT("IN1") - AM_RANGE(0x1580, 0x1580) AM_MIRROR(0xe000) AM_READ_PORT("DSW0") - AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0xe000) AM_WRITE(s2650games_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x1c00, 0x1fef) AM_MIRROR(0xe000) AM_RAM - AM_RANGE(0x1ff0, 0x1fff) AM_MIRROR(0xe000) AM_WRITEONLY AM_SHARE("spriteram") - AM_RANGE(0x2000, 0x2fff) AM_MIRROR(0x8000) AM_ROMBANK("bank2") - AM_RANGE(0x4000, 0x4fff) AM_MIRROR(0x8000) AM_ROMBANK("bank3") - AM_RANGE(0x6000, 0x6fff) AM_MIRROR(0x8000) AM_ROMBANK("bank4") + AM_RANGE(0x0000, 0x0fff) AM_ROMBANK("bank1") + AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0x6000) AM_WRITE(s2650games_colorram_w) AM_SHARE("colorram") + AM_RANGE(0x1400, 0x141f) AM_MIRROR(0x6000) AM_WRITE(s2650games_scroll_w) + AM_RANGE(0x1420, 0x148f) AM_MIRROR(0x6000) AM_WRITEONLY + AM_RANGE(0x1490, 0x149f) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("s2650_spriteram") + AM_RANGE(0x14a0, 0x14bf) AM_MIRROR(0x6000) AM_WRITE(s2650games_tilesbank_w) AM_SHARE("s2650_tileram") + AM_RANGE(0x14c0, 0x14ff) AM_MIRROR(0x6000) AM_WRITEONLY + AM_RANGE(0x1500, 0x1502) AM_MIRROR(0x6000) AM_WRITENOP + AM_RANGE(0x1503, 0x1503) AM_MIRROR(0x6000) AM_WRITE(pacman_flipscreen_w) + AM_RANGE(0x1504, 0x1506) AM_MIRROR(0x6000) AM_WRITENOP + AM_RANGE(0x1507, 0x1507) AM_MIRROR(0x6000) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x1508, 0x155f) AM_MIRROR(0x6000) AM_WRITEONLY + AM_RANGE(0x1560, 0x156f) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("spriteram2") + AM_RANGE(0x1570, 0x157f) AM_MIRROR(0x6000) AM_WRITEONLY + AM_RANGE(0x1586, 0x1587) AM_MIRROR(0x6000) AM_WRITENOP + AM_RANGE(0x15c0, 0x15c0) AM_MIRROR(0x6000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) + AM_RANGE(0x15c7, 0x15c7) AM_MIRROR(0x6000) AM_WRITE(porky_banking_w) + AM_RANGE(0x1500, 0x1500) AM_MIRROR(0x6000) AM_READ_PORT("IN0") + AM_RANGE(0x1540, 0x1540) AM_MIRROR(0x6000) AM_READ_PORT("IN1") + AM_RANGE(0x1580, 0x1580) AM_MIRROR(0x6000) AM_READ_PORT("DSW0") + AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0x6000) AM_WRITE(s2650games_videoram_w) AM_SHARE("videoram") + AM_RANGE(0x1c00, 0x1fef) AM_MIRROR(0x6000) AM_RAM + AM_RANGE(0x1ff0, 0x1fff) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("spriteram") + AM_RANGE(0x2000, 0x2fff) AM_ROMBANK("bank2") + AM_RANGE(0x4000, 0x4fff) AM_ROMBANK("bank3") + AM_RANGE(0x6000, 0x6fff) AM_ROMBANK("bank4") ADDRESS_MAP_END diff --git a/src/mame/drivers/palm.cpp b/src/mame/drivers/palm.cpp index da0eca4c26d..f00bf63e44d 100644 --- a/src/mame/drivers/palm.cpp +++ b/src/mame/drivers/palm.cpp @@ -135,8 +135,8 @@ WRITE_LINE_MEMBER(palm_state::palm_spim_exchange) void palm_state::machine_start() { address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_read_bank (0x000000, m_ram->size() - 1, m_ram->size() - 1, 0, "bank1"); - space.install_write_bank(0x000000, m_ram->size() - 1, m_ram->size() - 1, 0, "bank1"); + space.install_read_bank (0x000000, m_ram->size() - 1, "bank1"); + space.install_write_bank(0x000000, m_ram->size() - 1, "bank1"); membank("bank1")->set_base(m_ram->pointer()); save_item(NAME(m_port_f_latch)); diff --git a/src/mame/drivers/paranoia.cpp b/src/mame/drivers/paranoia.cpp index 3e0fe691587..71d233a30ac 100644 --- a/src/mame/drivers/paranoia.cpp +++ b/src/mame/drivers/paranoia.cpp @@ -193,7 +193,7 @@ static MACHINE_CONFIG_START( paranoia, paranoia_state ) MCFG_HUC6260_HSYNC_CHANGED_CB(DEVWRITELINE("huc6270", huc6270_device, hsync_changed)) MCFG_DEVICE_ADD( "huc6270", HUC6270, 0 ) MCFG_HUC6270_VRAM_SIZE(0x10000) - MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(pce_common_state, pce_irq_changed)) + MCFG_HUC6270_IRQ_CHANGED_CB(INPUTLINE("maincpu", 0)) MCFG_SPEAKER_STANDARD_STEREO("lspeaker","rspeaker") MCFG_SOUND_ADD("c6280", C6280, PCE_MAIN_CLOCK/6) diff --git a/src/mame/drivers/pass.cpp b/src/mame/drivers/pass.cpp index dc4a83ef6b0..6177ecc7ff2 100644 --- a/src/mame/drivers/pass.cpp +++ b/src/mame/drivers/pass.cpp @@ -92,7 +92,7 @@ --- Game Notes --- Graphical Glitches caused when 2 sprites are close together are NOT bugs, the Sprites are - infact contructed from a tilemap made of 4x4 tiles. + infact constructed from a tilemap made of 4x4 tiles. I imagine flicker on the main character at times is also correct. @@ -104,6 +104,7 @@ #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" +#include "machine/gen_latch.h" #include "sound/2203intf.h" #include "sound/okim6295.h" #include "includes/pass.h" @@ -116,7 +117,7 @@ static ADDRESS_MAP_START( pass_map, AS_PROGRAM, 16, pass_state ) AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(pass_bg_videoram_w) AM_SHARE("bg_videoram") // Background AM_RANGE(0x210000, 0x213fff) AM_RAM_WRITE(pass_fg_videoram_w) AM_SHARE("fg_videoram") // Foreground AM_RANGE(0x220000, 0x2203ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - AM_RANGE(0x230000, 0x230001) AM_WRITE(soundlatch_word_w) + AM_RANGE(0x230000, 0x230001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x230100, 0x230101) AM_READ_PORT("DSW") AM_RANGE(0x230200, 0x230201) AM_READ_PORT("INPUTS") ADDRESS_MAP_END @@ -129,10 +130,10 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( pass_sound_io_map, AS_IO, 8, pass_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r) + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x70, 0x71) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) AM_RANGE(0x80, 0x80) AM_DEVWRITE("oki", okim6295_device, write) - AM_RANGE(0xc0, 0xc0) AM_WRITE(soundlatch_clear_byte_w) + AM_RANGE(0xc0, 0xc0) AM_DEVWRITE("soundlatch", generic_latch_8_device, clear_w) ADDRESS_MAP_END /* todo : work out function of unknown but used dsw */ @@ -262,6 +263,8 @@ static MACHINE_CONFIG_START( pass, pass_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, 14318180/4) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) diff --git a/src/mame/drivers/pbaction.cpp b/src/mame/drivers/pbaction.cpp index 626a2e690c4..824a7c8f698 100644 --- a/src/mame/drivers/pbaction.cpp +++ b/src/mame/drivers/pbaction.cpp @@ -38,7 +38,7 @@ Stephh's notes (based on the game Z80 code and some tests) : - There is an ingame bug that prevents you to get a bonus life at 1000000 points when you set the "Bonus Life" Dip Switch to "200k 1000k" : - * Bonus life table index starts at 0x63c6 (8 * 2 butes, LSB first) : + * Bonus life table index starts at 0x63c6 (8 * 2 bites, LSB first) : 63C6: D6 63 "70k 200k" -> 04 07 03 02 01 10 63C8: DC 63 "70k 200k 1000k" -> 04 07 03 02 02 01 01 10 @@ -74,7 +74,7 @@ Stephh's notes (based on the game Z80 code and some tests) : WRITE8_MEMBER(pbaction_state::pbaction_sh_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0x00); } @@ -109,7 +109,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( pbaction_sound_map, AS_PROGRAM, 8, pbaction_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x4000, 0x47ff) AM_RAM - AM_RANGE(0x8000, 0x8000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x8000, 0x8000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xffff, 0xffff) AM_WRITENOP /* watchdog? */ ADDRESS_MAP_END @@ -262,11 +262,13 @@ INTERRUPT_GEN_MEMBER(pbaction_state::pbaction_interrupt) void pbaction_state::machine_start() { + save_item(NAME(m_nmi_mask)); save_item(NAME(m_scroll)); } void pbaction_state::machine_reset() { + m_nmi_mask = 0; m_scroll = 0; } @@ -306,6 +308,8 @@ static MACHINE_CONFIG_START( pbaction, pbaction_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 1500000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/drivers/pc9801.cpp b/src/mame/drivers/pc9801.cpp index 0ecec169a0f..6fa412a978c 100644 --- a/src/mame/drivers/pc9801.cpp +++ b/src/mame/drivers/pc9801.cpp @@ -102,7 +102,6 @@ - Sorcerian, Twilight Zone 3: Fails initial booting, issue with 2dd irq? - The Incredible Machine: hangs at main menu (YM mis-fires irq?) - Uchiyama Aki no Chou Bangai: keyboard irq is fussy (sometimes it doesn't register a key press); - - Uno: has minor EGC gfx bugs; - Windows 2: EGC drawing issue (byte wide writes?) per-game TODO (PC-9821): @@ -984,7 +983,8 @@ WRITE8_MEMBER(pc9801_state::rtc_w) WRITE8_MEMBER(pc9801_state::dmapg4_w) { - m_dma_offset[(offset+1) & 3] = data & 0x0f; + if(offset < 4) + m_dma_offset[(offset+1) & 3] = data & 0x0f; } WRITE8_MEMBER(pc9801_state::dmapg8_w) @@ -1021,7 +1021,7 @@ WRITE8_MEMBER(pc9801_state::pc9801_video_ff_w) m_gfx_ff = 1; if(data & 1) logerror("Graphic f/f actually enabled!\n"); - break; + break; case 4: if(m_gfx_ff) { @@ -1055,13 +1055,16 @@ READ8_MEMBER(pc9801_state::txt_scrl_r) { //logerror("Read to display register [%02x]\n",offset+0x70); /* TODO: ok? */ - return m_txt_scroll_reg[offset >> 1]; + if(offset <= 5) + return m_txt_scroll_reg[offset]; + return 0xff; } WRITE8_MEMBER(pc9801_state::txt_scrl_w) { //logerror("Write to display register [%02x] %02x\n",offset+0x70,data); - m_txt_scroll_reg[offset >> 1] = data; + if(offset <= 5) + m_txt_scroll_reg[offset] = data; //popmessage("%02x %02x %02x %02x",m_txt_scroll_reg[0],m_txt_scroll_reg[1],m_txt_scroll_reg[2],m_txt_scroll_reg[3]); } @@ -1687,7 +1690,6 @@ WRITE8_MEMBER( pc9801_state::sasi_ctrl_w ) } static ADDRESS_MAP_START( pc9801_map, AS_PROGRAM, 16, pc9801_state ) - AM_RANGE(0x00000, 0x9ffff) AM_RAM //work RAM AM_RANGE(0xa0000, 0xa3fff) AM_READWRITE(tvram_r,tvram_w) //TVRAM AM_RANGE(0xa8000, 0xbffff) AM_READWRITE8(gvram_r,gvram_w,0xffff) //bitmap VRAM AM_RANGE(0xcc000, 0xcdfff) AM_ROM AM_REGION("sound_bios",0) //sound BIOS @@ -1700,18 +1702,18 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( pc9801_common_io, AS_IO, 16, pc9801_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("i8237", am9517a_device, read, write, 0xff00) - AM_RANGE(0x0000, 0x000f) AM_READWRITE8(pic_r, pic_w, 0x00ff) // i8259 PIC (bit 3 ON slave / master) / i8237 DMA - AM_RANGE(0x0020, 0x0021) AM_WRITE8(rtc_w,0x00ff) + AM_RANGE(0x0000, 0x001f) AM_READWRITE8(pic_r, pic_w, 0x00ff) // i8259 PIC (bit 3 ON slave / master) / i8237 DMA + AM_RANGE(0x0020, 0x002f) AM_WRITE8(rtc_w,0x00ff) AM_RANGE(0x0030, 0x0037) AM_DEVREADWRITE8("ppi8255_sys", i8255_device, read, write, 0xff00) //i8251 RS232c / i8255 system port AM_RANGE(0x0040, 0x0047) AM_DEVREADWRITE8("ppi8255_prn", i8255_device, read, write, 0x00ff) - AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8("keyb", pc9801_kbd_device, rx_r, tx_w, 0xff00) //i8255 printer port / i8251 keyboard + AM_RANGE(0x0040, 0x0047) AM_DEVREADWRITE8("keyb", pc9801_kbd_device, rx_r, tx_w, 0xff00) //i8255 printer port / i8251 keyboard AM_RANGE(0x0050, 0x0057) AM_DEVREADWRITE8("ppi8255_fdd", i8255_device, read, write, 0xff00) - AM_RANGE(0x0050, 0x0053) AM_WRITE8(nmi_ctrl_w,0x00ff) // NMI FF / i8255 floppy port (2d?) + AM_RANGE(0x0050, 0x0057) AM_WRITE8(nmi_ctrl_w,0x00ff) // NMI FF / i8255 floppy port (2d?) AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("upd7220_chr", upd7220_device, read, write, 0x00ff) //upd7220 character ports / <undefined> AM_RANGE(0x0064, 0x0065) AM_WRITE8(vrtc_clear_w,0x00ff) // AM_RANGE(0x006c, 0x006f) border color / <undefined> AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("pit8253", pit8253_device, read, write, 0xff00) - AM_RANGE(0x0070, 0x007b) AM_READWRITE8(txt_scrl_r,txt_scrl_w,0x00ff) //display registers / i8253 pit + AM_RANGE(0x0070, 0x007f) AM_READWRITE8(txt_scrl_r,txt_scrl_w,0x00ff) //display registers / i8253 pit AM_RANGE(0x0080, 0x0081) AM_READWRITE8(sasi_data_r, sasi_data_w, 0x00ff) AM_RANGE(0x0082, 0x0083) AM_READWRITE8(sasi_status_r, sasi_ctrl_w,0x00ff) AM_RANGE(0x0090, 0x0091) AM_DEVREAD8("upd765_2hd", upd765a_device, msr_r, 0x00ff) @@ -1723,7 +1725,7 @@ static ADDRESS_MAP_START( pc9801_common_io, AS_IO, 16, pc9801_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( pc9801_io, AS_IO, 16, pc9801_state ) - AM_RANGE(0x0020, 0x0027) AM_WRITE8(dmapg4_w,0xff00) + AM_RANGE(0x0020, 0x002f) AM_WRITE8(dmapg4_w,0xff00) AM_RANGE(0x0068, 0x0069) AM_WRITE8(pc9801_video_ff_w,0x00ff) //mode FF / <undefined> AM_RANGE(0x00a0, 0x00af) AM_READWRITE8(pc9801_a0_r,pc9801_a0_w,0xffff) //upd7220 bitmap ports / display registers AM_RANGE(0x00c8, 0x00cb) AM_DEVICE8("upd765_2dd", upd765a_device, map, 0x00ff) @@ -1824,7 +1826,7 @@ WRITE8_MEMBER(pc9801_state::a20_ctrl_w) /* reset POR bit, TODO: is there any other way? */ por = machine().device<i8255_device>("ppi8255_sys")->read(space, 2) & ~0x20; machine().device<i8255_device>("ppi8255_sys")->write(space, 2,por); - m_maincpu->set_input_line(INPUT_LINE_A20, 0); + m_maincpu->set_input_line(INPUT_LINE_A20, CLEAR_LINE); m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); m_gate_a20 = 0; } @@ -2101,7 +2103,6 @@ static ADDRESS_MAP_START( ipl_bank, AS_0, 16, pc9801_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( pc9801ux_map, AS_PROGRAM, 16, pc9801_state ) - AM_RANGE(0x000000, 0x09ffff) AM_RAMBANK("wram") AM_RANGE(0x0a0000, 0x0a3fff) AM_READWRITE(tvram_r, tvram_w) AM_RANGE(0x0a4000, 0x0a4fff) AM_READWRITE8(pc9801rs_knjram_r, pc9801rs_knjram_w, 0xffff) AM_RANGE(0x0a8000, 0x0bffff) AM_READWRITE(grcg_gvram_r, grcg_gvram_w) @@ -2331,7 +2332,6 @@ WRITE8_MEMBER(pc9801_state::winram_w) }*/ static ADDRESS_MAP_START( pc9821_map, AS_PROGRAM, 32, pc9801_state ) - AM_RANGE(0x00000000, 0x0009ffff) AM_RAMBANK("wram") //AM_RANGE(0x00080000, 0x0009ffff) AM_READWRITE8(winram_r, winram_w, 0xffffffff) AM_RANGE(0x000a0000, 0x000a3fff) AM_READWRITE16(tvram_r, tvram_w, 0xffffffff) AM_RANGE(0x000a4000, 0x000a4fff) AM_READWRITE8(pc9801rs_knjram_r, pc9801rs_knjram_w, 0xffffffff) @@ -2349,12 +2349,12 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( pc9821_io, AS_IO, 32, pc9801_state ) // ADDRESS_MAP_UNMAP_HIGH // TODO: a read to somewhere makes this to fail at POST AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("i8237", am9517a_device, read, write, 0xff00ff00) - AM_RANGE(0x0000, 0x000f) AM_READWRITE8(pic_r, pic_w, 0x00ff00ff) // i8259 PIC (bit 3 ON slave / master) / i8237 DMA - AM_RANGE(0x0020, 0x0023) AM_WRITE8(rtc_w,0x000000ff) + AM_RANGE(0x0000, 0x001f) AM_READWRITE8(pic_r, pic_w, 0x00ff00ff) // i8259 PIC (bit 3 ON slave / master) / i8237 DMA + AM_RANGE(0x0020, 0x002f) AM_WRITE8(rtc_w,0x000000ff) AM_RANGE(0x0020, 0x002f) AM_WRITE8(dmapg8_w,0xff00ff00) AM_RANGE(0x0030, 0x0037) AM_DEVREADWRITE8("ppi8255_sys", i8255_device, read, write, 0xff00ff00) //i8251 RS232c / i8255 system port AM_RANGE(0x0040, 0x0047) AM_DEVREADWRITE8("ppi8255_prn", i8255_device, read, write, 0x00ff00ff) - AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8("keyb", pc9801_kbd_device, rx_r, tx_w, 0xff00ff00) //i8255 printer port / i8251 keyboard + AM_RANGE(0x0040, 0x0047) AM_DEVREADWRITE8("keyb", pc9801_kbd_device, rx_r, tx_w, 0xff00ff00) //i8255 printer port / i8251 keyboard AM_RANGE(0x0050, 0x0053) AM_WRITE8(nmi_ctrl_w, 0x00ff00ff) AM_RANGE(0x005c, 0x005f) AM_READ16(timestamp_r,0xffffffff) AM_WRITENOP // artic AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("upd7220_chr", upd7220_device, read, write, 0x00ff00ff) //upd7220 character ports / <undefined> @@ -2964,9 +2964,17 @@ MACHINE_START_MEMBER(pc9801_state,pc9801_common) m_vbirq = timer_alloc(TIMER_VBIRQ); + int ram_size = m_ram->size() - (640*1024); + + address_space& space = m_maincpu->space(AS_PROGRAM); + space.install_ram(0, (ram_size < 0) ? m_ram->size() - 1 : (640*1024) - 1, m_ram->pointer()); + if(ram_size > 0) + space.install_ram(1024*1024, (1024*1024) + ram_size - 1, &m_ram->pointer()[(640*1024)]); + save_item(NAME(m_sasi_data)); save_item(NAME(m_sasi_data_enable)); save_item(NAME(m_sasi_ctrl)); + save_pointer(NAME(m_egc.regs), 8); } MACHINE_START_MEMBER(pc9801_state,pc9801f) @@ -2982,17 +2990,6 @@ MACHINE_START_MEMBER(pc9801_state,pc9801rs) { MACHINE_START_CALL_MEMBER(pc9801_common); - int ram_size = m_ram->size() - 0xa0000; - - address_space& space = m_maincpu->space(AS_PROGRAM); - membank("wram")->set_base(m_ram->pointer()); - if(ram_size) - { - space.install_read_bank(0x100000, 0x100000 + ram_size - 1, "ext_wram"); - space.install_write_bank(0x100000, 0x100000 + ram_size - 1, "ext_wram"); - membank("ext_wram")->set_base(m_ram->pointer() + 0xa0000); - } - m_sys_type = 0x80 >> 6; } @@ -3276,11 +3273,11 @@ static MACHINE_CONFIG_START( pc9801, pc9801_state ) MCFG_MACHINE_START_OVERRIDE(pc9801_state,pc9801f) MCFG_MACHINE_RESET_OVERRIDE(pc9801_state,pc9801f) -#if 0 + + // TODO: maybe force dips to avoid beep error MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("128K") - MCFG_RAM_EXTRA_OPTIONS("256K,384K,512K,640K") -#endif + MCFG_RAM_DEFAULT_SIZE("640K") + MCFG_RAM_EXTRA_OPTIONS("128K,256K,384K,512K") MCFG_UPD765A_ADD("upd765_2dd", false, true) MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(pc9801_state, fdc_2dd_irq)) @@ -3555,9 +3552,9 @@ ROM_START( pc9801bx2 ) ROM_LOAD( "pc98bank2.bin", 0x00000, 0x08000, BAD_DUMP CRC(12818a14) SHA1(9c31e8ac85d78fa779d6bbc2095557065294ec09) ) ROM_LOAD( "pc98bank3.bin", 0x00000, 0x08000, BAD_DUMP CRC(d0bda44e) SHA1(c1022a3b2be4d2a1e43914df9e4605254e5f99d5) ) ROM_LOAD( "pc98bank4.bin", 0x10000, 0x08000, BAD_DUMP CRC(be8092f4) SHA1(12c8a166b8c6ebbef85568b67e1f098562883365) ) - ROM_LOAD( "pc98bank5.bin", 0x00000, 0x08000, BAD_DUMP CRC(4e32081e) SHA1(e23571273b7cad01aa116cb7414c5115a1093f85) ) - ROM_LOAD( "pc98bank6.bin", 0x00000, 0x08000, BAD_DUMP CRC(f878c160) SHA1(cad47f09075ffe4f7b51bb937c9f716c709d4596) ) - ROM_LOAD( "pc98bank7.bin", 0x00000, 0x08000, BAD_DUMP CRC(1bd6537b) SHA1(ff9ee1c976a12b87851635ce8991ac4ad607675b) ) + ROM_LOAD( "pc98bank5.bin", 0x18000, 0x08000, BAD_DUMP CRC(4e32081e) SHA1(e23571273b7cad01aa116cb7414c5115a1093f85) ) + ROM_LOAD( "pc98bank6.bin", 0x20000, 0x08000, BAD_DUMP CRC(f878c160) SHA1(cad47f09075ffe4f7b51bb937c9f716c709d4596) ) + ROM_LOAD( "pc98bank7.bin", 0x28000, 0x08000, BAD_DUMP CRC(1bd6537b) SHA1(ff9ee1c976a12b87851635ce8991ac4ad607675b) ) ROM_REGION( 0x10000, "sound_bios", 0 ) ROM_LOAD( "sound.rom", 0x0000, 0x4000, CRC(80eabfde) SHA1(e09c54152c8093e1724842c711aed6417169db23) ) diff --git a/src/mame/drivers/pcd.cpp b/src/mame/drivers/pcd.cpp index 542ab0a32fc..1077358b1c8 100644 --- a/src/mame/drivers/pcd.cpp +++ b/src/mame/drivers/pcd.cpp @@ -449,7 +449,8 @@ static ADDRESS_MAP_START( pcd_io, AS_IO, 16, pcd_state ) AM_RANGE(0xf9d0, 0xf9d3) AM_DEVREADWRITE8("usart2",mc2661_device,read,write,0xffff) AM_RANGE(0xf9e0, 0xf9e3) AM_DEVREADWRITE8("usart3",mc2661_device,read,write,0xffff) // AM_RANGE(0xfa00, 0xfa7f) // pcs4-n (peripheral chip select) - AM_RANGE(0xfb00, 0xffff) AM_READWRITE8(nmi_io_r, nmi_io_w, 0xffff) + AM_RANGE(0xfb00, 0xfb01) AM_READWRITE8(nmi_io_r, nmi_io_w, 0x00ff) + AM_RANGE(0xfb02, 0xffff) AM_READWRITE8(nmi_io_r, nmi_io_w, 0xffff) ADDRESS_MAP_END static ADDRESS_MAP_START( pcx_io, AS_IO, 16, pcd_state ) diff --git a/src/mame/drivers/pce.cpp b/src/mame/drivers/pce.cpp index 4a2db078dcd..95320c6ab96 100644 --- a/src/mame/drivers/pce.cpp +++ b/src/mame/drivers/pce.cpp @@ -292,12 +292,6 @@ UINT32 pce_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, con } -WRITE_LINE_MEMBER(pce_state::pce_irq_changed) -{ - m_maincpu->set_input_line(0, state); -} - - static SLOT_INTERFACE_START(pce_cart) SLOT_INTERFACE_INTERNAL("rom", PCE_ROM_STD) SLOT_INTERFACE_INTERNAL("cdsys3u", PCE_ROM_CDSYS3) @@ -330,7 +324,7 @@ static MACHINE_CONFIG_START( pce_common, pce_state ) MCFG_DEVICE_ADD( "huc6270", HUC6270, 0 ) MCFG_HUC6270_VRAM_SIZE(0x10000) - MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(pce_state, pce_irq_changed)) + MCFG_HUC6270_IRQ_CHANGED_CB(INPUTLINE("maincpu", 0)) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD(C6280_TAG, C6280, MAIN_CLOCK/6) @@ -379,10 +373,10 @@ static MACHINE_CONFIG_START( sgx, pce_state ) MCFG_HUC6260_HSYNC_CHANGED_CB(DEVWRITELINE("huc6202", huc6202_device, hsync_changed)) MCFG_DEVICE_ADD( "huc6270_0", HUC6270, 0 ) MCFG_HUC6270_VRAM_SIZE(0x10000) - MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(pce_state, pce_irq_changed)) + MCFG_HUC6270_IRQ_CHANGED_CB(INPUTLINE("maincpu", 0)) MCFG_DEVICE_ADD( "huc6270_1", HUC6270, 0 ) MCFG_HUC6270_VRAM_SIZE(0x10000) - MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(pce_state, pce_irq_changed)) + MCFG_HUC6270_IRQ_CHANGED_CB(INPUTLINE("maincpu", 0)) MCFG_DEVICE_ADD( "huc6202", HUC6202, 0 ) MCFG_HUC6202_NEXT_PIXEL_0_CB(DEVREAD16("huc6270_0", huc6270_device, next_pixel)) MCFG_HUC6202_TIME_TIL_NEXT_EVENT_0_CB(DEVREAD16("huc6270_0", huc6270_device, time_until_next_event)) diff --git a/src/mame/drivers/pcxt.cpp b/src/mame/drivers/pcxt.cpp index 00c618c2f17..30ea12866e9 100644 --- a/src/mame/drivers/pcxt.cpp +++ b/src/mame/drivers/pcxt.cpp @@ -161,7 +161,7 @@ void isa8_cga_tetriskr_device::device_start() { m_bg_bank = 0; isa8_cga_superimpose_device::device_start(); - m_isa->install_device(0x3c0, 0x3c0, 0, 0, read8_delegate( FUNC(isa8_cga_tetriskr_device::bg_bank_r), this ), write8_delegate( FUNC(isa8_cga_tetriskr_device::bg_bank_w), this ) ); + m_isa->install_device(0x3c0, 0x3c0, read8_delegate( FUNC(isa8_cga_tetriskr_device::bg_bank_r), this ), write8_delegate( FUNC(isa8_cga_tetriskr_device::bg_bank_w), this ) ); } WRITE8_MEMBER(isa8_cga_tetriskr_device::bg_bank_w) diff --git a/src/mame/drivers/pentagon.cpp b/src/mame/drivers/pentagon.cpp index 7b3a5e4bd9c..454fb5b7380 100644 --- a/src/mame/drivers/pentagon.cpp +++ b/src/mame/drivers/pentagon.cpp @@ -189,7 +189,7 @@ static ADDRESS_MAP_START (pentagon_io, AS_IO, 8, pentagon_state ) AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, track_r, track_w) AM_MIRROR(0xff00) AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, sector_r, sector_w) AM_MIRROR(0xff00) AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, data_r, data_w) AM_MIRROR(0xff00) - AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff) + AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_SELECT(0xff00) AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, state_r, param_w) AM_MIRROR(0xff00) AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("ay8912", ay8910_device, data_w) AM_MIRROR(0x3ffd) AM_RANGE(0xc000, 0xc000) AM_DEVREADWRITE("ay8912", ay8910_device, data_r, address_w) AM_MIRROR(0x3ffd) diff --git a/src/mame/drivers/pgm.cpp b/src/mame/drivers/pgm.cpp index 41868a2de66..843e83111aa 100644 --- a/src/mame/drivers/pgm.cpp +++ b/src/mame/drivers/pgm.cpp @@ -289,10 +289,6 @@ WRITE8_MEMBER(pgm_state::z80_l3_w) m_soundlatch3->write(space, 0, data); } -WRITE_LINE_MEMBER(pgm_state::pgm_sound_irq) -{ - m_soundcpu->set_input_line(0, state); -} /*** Memory Maps *************************************************************/ @@ -544,7 +540,7 @@ MACHINE_CONFIG_FRAGMENT( pgmbase ) MCFG_GENERIC_LATCH_8_ADD("soundlatch3") MCFG_ICS2115_ADD("ics", 0) - MCFG_ICS2115_IRQ_CB(WRITELINE(pgm_state, pgm_sound_irq)) + MCFG_ICS2115_IRQ_CB(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 5.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/pipedrm.cpp b/src/mame/drivers/pipedrm.cpp index d73d18bd93c..9fc4984a3a2 100644 --- a/src/mame/drivers/pipedrm.cpp +++ b/src/mame/drivers/pipedrm.cpp @@ -188,7 +188,6 @@ public: DECLARE_WRITE8_MEMBER( pending_command_clear_w ); DECLARE_READ8_MEMBER( pending_command_r ); DECLARE_READ8_MEMBER( sound_command_r ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); }; @@ -570,18 +569,6 @@ static GFXDECODE_START( hatris ) GFXDECODE_END - -/************************************* - * - * Sound definitions - * - *************************************/ - -WRITE_LINE_MEMBER(pipedrm_state::irqhandler) -{ - m_subcpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - /************************************* * * Machine driver @@ -669,7 +656,7 @@ static MACHINE_CONFIG_START( pipedrm, pipedrm_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(pipedrm_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("sub", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -710,7 +697,7 @@ static MACHINE_CONFIG_START( hatris, pipedrm_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2608, 8000000) - MCFG_YM2608_IRQ_HANDLER(WRITELINE(pipedrm_state, irqhandler)) + MCFG_YM2608_IRQ_HANDLER(INPUTLINE("sub", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) diff --git a/src/mame/drivers/pitnrun.cpp b/src/mame/drivers/pitnrun.cpp index 0ce750d583c..6c2d6d7565f 100644 --- a/src/mame/drivers/pitnrun.cpp +++ b/src/mame/drivers/pitnrun.cpp @@ -10,7 +10,7 @@ TODO: - analog sound writes to $a8xx triggering analog sound : - $a800 - drivers are gettin into the cars + $a800 - drivers are getting into the cars $a801 - collisions $a802 - same as above $a803 - slide on water @@ -68,6 +68,7 @@ K1000233A #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m6805/m6805.h" +#include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" #include "includes/pitnrun.h" @@ -107,7 +108,7 @@ static ADDRESS_MAP_START( pitnrun_map, AS_PROGRAM, 8, pitnrun_state ) AM_RANGE(0xb005, 0xb005) AM_WRITE(char_bank_select) AM_RANGE(0xb006, 0xb006) AM_WRITE(hflip_w) AM_RANGE(0xb007, 0xb007) AM_WRITE(vflip_w) - AM_RANGE(0xb800, 0xb800) AM_READ_PORT("INPUTS") AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xb800, 0xb800) AM_READ_PORT("INPUTS") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xc800, 0xc801) AM_WRITE(scroll_w) AM_RANGE(0xc802, 0xc802) AM_WRITENOP/* VP(VF?)MCV - not used ?*/ AM_RANGE(0xc804, 0xc804) AM_WRITE(mcu_data_w) @@ -126,7 +127,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( pitnrun_sound_io_map, AS_IO, 8, pitnrun_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_WRITE(soundlatch_clear_byte_w) + AM_RANGE(0x00, 0x00) AM_DEVWRITE("soundlatch", generic_latch_8_device, clear_w) AM_RANGE(0x8c, 0x8d) AM_DEVWRITE("ay2", ay8910_device, address_data_w) AM_RANGE(0x8e, 0x8f) AM_DEVWRITE("ay1", ay8910_device, address_data_w) AM_RANGE(0x8f, 0x8f) AM_DEVREAD("ay1", ay8910_device, data_r) @@ -253,14 +254,16 @@ static MACHINE_CONFIG_START( pitnrun, pitnrun_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, XTAL_18_432MHz/12) /* verified on pcb */ - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) - MCFG_AY8910_PORT_B_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) + MCFG_AY8910_PORT_B_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MCFG_SOUND_ADD("ay2", AY8910, XTAL_18_432MHz/12) /* verified on pcb */ - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) - MCFG_AY8910_PORT_B_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) + MCFG_AY8910_PORT_B_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END diff --git a/src/mame/drivers/portfoli.cpp b/src/mame/drivers/pofo.cpp index ba6d02805d7..5476eb3e4af 100644 --- a/src/mame/drivers/portfoli.cpp +++ b/src/mame/drivers/pofo.cpp @@ -9,62 +9,12 @@ http://www.best-electronics-ca.com/portfoli.htm http://www.atari-portfolio.co.uk/pfnews/pf9.txt - - Undumped Atari cartridges: - - Utility-Card HPC-701 - Finance-Card HPC-702 - Science-Card HPC-703 - File Manager / Tutorial HPC-704 - PowerBASIC HPC-705 - Instant Spell HPC-709 - Hyperlist HPC-713 - Bridge Baron HPC-724 - Wine Companion HPC-725 - Diet / Cholesterol Counter HPC-726 - Astrologer HPC-728 - Stock Tracker HPC-729 - Chess HPC-750 - - - Undumped 3rd party cartridges: - - Adcalc AAC-1000 - Alpha Paging Interface SAMpage - Business Contacts and Information Manager BCIM - Checkwriter - Colossal Cave Adventure - Drug Interactions - Dynapulse 200M-A - Form Letters - FORTH programming system UTIL - FX-3 DUAT Flight Software - FX-4 Flight Planner - Graphics Screens - Marine Device Interface CM380 UMPIRE - Message Mover (Mac) MSG-PKG6 - Message Mover (PC) MSG-PKG5 - Micro Hedge - Micro-Roentgen Radiation Monitor RM-60 - Patient Management - PBase - PDD2 Utilities - Pharmaceuticals - Physician's Reference I - PIPELINE Fuel Management - REACT - Stocks Games - Terminal+ - Timekeeper - TIMEPAC-5 - */ /* TODO: - - expansion port slot interface - clock is running too fast - create chargen ROM from tech manual - memory error interrupt vector @@ -73,38 +23,127 @@ - system tick frequency selection (1 or 128 Hz) - speaker - credit card memory (A:/B:) - - software list */ -#include "includes/portfoli.h" -#include "bus/rs232/rs232.h" +#include "emu.h" #include "rendlay.h" #include "softlist.h" +#include "cpu/i86/i86.h" +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" +#include "bus/pofo/exp.h" +#include "machine/nvram.h" +#include "machine/ram.h" +#include "sound/speaker.h" +#include "video/hd61830.h" + +#define M80C88A_TAG "u1" +#define HD61830_TAG "hd61830" +#define TIMER_TICK_TAG "tick" +#define SCREEN_TAG "screen" + +class portfolio_state : public driver_device +{ +public: + portfolio_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, M80C88A_TAG), + m_lcdc(*this, HD61830_TAG), + m_speaker(*this, "speaker"), + m_exp(*this, PORTFOLIO_EXPANSION_SLOT_TAG), + m_timer_tick(*this, TIMER_TICK_TAG), + m_rom(*this, M80C88A_TAG), + m_char_rom(*this, HD61830_TAG), + m_y0(*this, "Y0"), + m_y1(*this, "Y1"), + m_y2(*this, "Y2"), + m_y3(*this, "Y3"), + m_y4(*this, "Y4"), + m_y5(*this, "Y5"), + m_y6(*this, "Y6"), + m_y7(*this, "Y7"), + m_battery(*this, "BATTERY"), + m_contrast(*this, "contrast"), + m_ram(*this, RAM_TAG) + { } + + required_device<cpu_device> m_maincpu; + required_device<hd61830_device> m_lcdc; + required_device<speaker_sound_device> m_speaker; + required_device<portfolio_expansion_slot_t> m_exp; + required_device<timer_device> m_timer_tick; + required_region_ptr<UINT8> m_rom; + required_region_ptr<UINT8> m_char_rom; + required_ioport m_y0; + required_ioport m_y1; + required_ioport m_y2; + required_ioport m_y3; + required_ioport m_y4; + required_ioport m_y5; + required_ioport m_y6; + required_ioport m_y7; + required_ioport m_battery; + + virtual void machine_start() override; + virtual void machine_reset() override; + + void check_interrupt(); + void trigger_interrupt(int level); + void scan_keyboard(); + + enum + { + INT_TICK = 0, + INT_KEYBOARD, + INT_ERROR, + INT_EXTERNAL + }; + + DECLARE_READ8_MEMBER( irq_status_r ); + DECLARE_READ8_MEMBER( keyboard_r ); + DECLARE_READ8_MEMBER( battery_r ); + DECLARE_READ8_MEMBER( counter_r ); + + DECLARE_WRITE8_MEMBER( irq_mask_w ); + DECLARE_WRITE8_MEMBER( speaker_w ); + DECLARE_WRITE8_MEMBER( power_w ); + DECLARE_WRITE8_MEMBER( unknown_w ); + DECLARE_WRITE8_MEMBER( counter_w ); + + DECLARE_WRITE_LINE_MEMBER( iint_w ); + DECLARE_WRITE_LINE_MEMBER( eint_w ); + + /* interrupt state */ + UINT8 m_ip; /* interrupt pending */ + UINT8 m_ie; /* interrupt enable */ + + /* counter state */ + UINT16 m_counter; + + /* keyboard state */ + UINT8 m_keylatch; + + /* video state */ + required_shared_ptr<UINT8> m_contrast; + + /* peripheral state */ + DECLARE_PALETTE_INIT(portfolio); + TIMER_DEVICE_CALLBACK_MEMBER(keyboard_tick); + TIMER_DEVICE_CALLBACK_MEMBER(system_tick); + TIMER_DEVICE_CALLBACK_MEMBER(counter_tick); + DECLARE_READ8_MEMBER(hd61830_rd_r); + IRQ_CALLBACK_MEMBER(portfolio_int_ack); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( portfolio_cart ); + required_device<ram_device> m_ram; +}; + //************************************************************************** // MACROS / CONSTANTS //************************************************************************** -enum -{ - INT_TICK = 0, - INT_KEYBOARD, - INT_ERROR, - INT_EXTERNAL -}; - -enum -{ - PID_COMMCARD = 0x00, - PID_SERIAL, - PID_PARALLEL, - PID_PRINTER, - PID_MODEM, - PID_NONE = 0xff -}; - static const UINT8 INTERRUPT_VECTOR[] = { 0x08, 0x09, 0x00 }; @@ -162,23 +201,12 @@ WRITE8_MEMBER( portfolio_state::irq_mask_w ) //------------------------------------------------- -// sivr_w - serial interrupt vector register -//------------------------------------------------- - -WRITE8_MEMBER( portfolio_state::sivr_w ) -{ - m_sivr = data; - //logerror("SIVR %02x\n", data); -} - - -//------------------------------------------------- // IRQ_CALLBACK_MEMBER( portfolio_int_ack ) //------------------------------------------------- IRQ_CALLBACK_MEMBER(portfolio_state::portfolio_int_ack) { - UINT8 vector = m_sivr; + UINT8 vector = 0; for (int i = 0; i < 4; i++) { @@ -188,7 +216,7 @@ IRQ_CALLBACK_MEMBER(portfolio_state::portfolio_int_ack) m_ip &= ~(1 << i); if (i == 3) - vector = m_sivr; + vector = m_exp->eack_r(); else vector = INTERRUPT_VECTOR[i]; @@ -363,7 +391,7 @@ READ8_MEMBER( portfolio_state::battery_r ) UINT8 data = 0; /* peripheral detect */ - data |= (m_pid != PID_NONE) << 5; + data |= m_exp->pdet_r() << 5; /* battery status */ data |= BIT(m_battery->read(), 0) << 6; @@ -451,60 +479,6 @@ WRITE8_MEMBER( portfolio_state::counter_w ) //************************************************************************** -// EXPANSION -//************************************************************************** - -//------------------------------------------------- -// ncc1_w - credit card memory select -//------------------------------------------------- - -WRITE8_MEMBER( portfolio_state::ncc1_w ) -{ - address_space &program = m_maincpu->space(AS_PROGRAM); - - if (BIT(data, 0)) - { - // system ROM - program.install_rom(0xc0000, 0xdffff, m_rom); - } - else - { - // credit card memory - program.unmap_readwrite(0xc0000, 0xdffff); - } - - //logerror("NCC %02x\n", data); -} - - -//------------------------------------------------- -// pid_r - peripheral identification -//------------------------------------------------- - -READ8_MEMBER( portfolio_state::pid_r ) -{ - /* - - PID peripheral - - 00 communication card - 01 serial port - 02 parallel port - 03 printer peripheral - 04 modem - 05-3f reserved - 40-7f user peripherals - 80 file-transfer interface - 81-ff reserved - - */ - - return m_pid; -} - - - -//************************************************************************** // ADDRESS MAPS //************************************************************************** @@ -535,10 +509,6 @@ static ADDRESS_MAP_START( portfolio_io, AS_IO, 8, portfolio_state ) AM_RANGE(0x8050, 0x8050) AM_READWRITE(irq_status_r, irq_mask_w) AM_RANGE(0x8051, 0x8051) AM_READWRITE(battery_r, unknown_w) AM_RANGE(0x8060, 0x8060) AM_RAM AM_SHARE("contrast") -// AM_RANGE(0x8070, 0x8077) AM_DEVREADWRITE(M82C50A_TAG, ins8250_device, ins8250_r, ins8250_w) // Serial Interface -// AM_RANGE(0x8078, 0x807b) AM_DEVREADWRITE(M82C55A_TAG, i8255_device, read, write) // Parallel Interface - AM_RANGE(0x807c, 0x807c) AM_WRITE(ncc1_w) - AM_RANGE(0x807f, 0x807f) AM_READWRITE(pid_r, sivr_w) ADDRESS_MAP_END @@ -636,12 +606,6 @@ static INPUT_PORTS_START( portfolio ) PORT_CONFNAME( 0x01, 0x01, "Battery Status" ) PORT_CONFSETTING( 0x01, DEF_STR( Normal ) ) PORT_CONFSETTING( 0x00, "Low Battery" ) - - PORT_START("PERIPHERAL") - PORT_CONFNAME( 0xff, PID_NONE, "Peripheral" ) - PORT_CONFSETTING( PID_NONE, DEF_STR( None ) ) - PORT_CONFSETTING( PID_PARALLEL, "Intelligent Parallel Interface (HPC-101)" ) - PORT_CONFSETTING( PID_SERIAL, "Serial Interface (HPC-102)" ) INPUT_PORTS_END @@ -700,11 +664,11 @@ GFXDECODE_END // DEVICE CONFIGURATION //************************************************************************** -//------------------------------------------------- -// ins8250_interface i8250_intf -//------------------------------------------------- +WRITE_LINE_MEMBER( portfolio_state::iint_w ) +{ +} -WRITE_LINE_MEMBER( portfolio_state::i8250_intrpt_w ) +WRITE_LINE_MEMBER( portfolio_state::eint_w ) { if (state) trigger_interrupt(INT_EXTERNAL); @@ -751,17 +715,13 @@ void portfolio_state::machine_start() /* set initial values */ m_keylatch = 0xff; - m_sivr = 0x2a; - m_pid = 0xff; /* register for state saving */ save_item(NAME(m_ip)); save_item(NAME(m_ie)); - save_item(NAME(m_sivr)); save_item(NAME(m_counter)); save_item(NAME(m_keylatch)); save_pointer(NAME(m_contrast.target()), m_contrast.bytes()); - save_item(NAME(m_pid)); } @@ -771,24 +731,6 @@ void portfolio_state::machine_start() void portfolio_state::machine_reset() { - address_space &io = m_maincpu->space(AS_IO); - - // peripherals - m_pid = ioport("PERIPHERAL")->read(); - - io.unmap_readwrite(0x8070, 0x807b); - io.unmap_readwrite(0x807d, 0x807e); - - switch (m_pid) - { - case PID_SERIAL: - io.install_readwrite_handler(0x8070, 0x8077, READ8_DEVICE_DELEGATE(m_uart, ins8250_device, ins8250_r), WRITE8_DEVICE_DELEGATE(m_uart, ins8250_device, ins8250_w)); - break; - - case PID_PARALLEL: - io.install_readwrite_handler(0x8078, 0x807b, READ8_DEVICE_DELEGATE(m_ppi, i8255_device, read), WRITE8_DEVICE_DELEGATE(m_ppi, i8255_device, write)); - break; - } } @@ -832,43 +774,16 @@ static MACHINE_CONFIG_START( portfolio, portfolio_state ) MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - /* devices */ - MCFG_DEVICE_ADD(M82C55A_TAG, I8255A, 0) - MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write)) - MCFG_I8255_OUT_PORTB_CB(DEVWRITE8("cent_ctrl_out", output_latch_device, write)) - MCFG_I8255_IN_PORTC_CB(DEVREAD8("cent_status_in", input_buffer_device, read)) - - MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer") - MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit5)) - MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit4)) - MCFG_CENTRONICS_FAULT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit3)) - MCFG_CENTRONICS_SELECT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit1)) - MCFG_CENTRONICS_PERROR_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit0)) - - MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG) - MCFG_DEVICE_ADD("cent_status_in", INPUT_BUFFER, 0) - - MCFG_DEVICE_ADD("cent_ctrl_out", OUTPUT_LATCH, 0) - MCFG_OUTPUT_LATCH_BIT0_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_strobe)) - MCFG_OUTPUT_LATCH_BIT1_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_autofd)) - MCFG_OUTPUT_LATCH_BIT2_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_init)) - MCFG_OUTPUT_LATCH_BIT3_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_select_in)) - - MCFG_DEVICE_ADD(M82C50A_TAG, INS8250, XTAL_1_8432MHz) // should be INS8250A - MCFG_INS8250_OUT_TX_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd)) - MCFG_INS8250_OUT_DTR_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_dtr)) - MCFG_INS8250_OUT_RTS_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_rts)) - MCFG_INS8250_OUT_INT_CB(WRITELINE(portfolio_state, i8250_intrpt_w)) + // devices + MCFG_PORTFOLIO_EXPANSION_SLOT_ADD(PORTFOLIO_EXPANSION_SLOT_TAG, XTAL_4_9152MHz, portfolio_expansion_cards, nullptr) + MCFG_PORTFOLIO_EXPANSION_SLOT_IINT_CALLBACK(WRITELINE(portfolio_state, iint_w)) + MCFG_PORTFOLIO_EXPANSION_SLOT_EINT_CALLBACK(WRITELINE(portfolio_state, eint_w)) + MCFG_PORTFOLIO_EXPANSION_SLOT_NMIO_CALLBACK(INPUTLINE(M80C88A_TAG, INPUT_LINE_NMI)) + //MCFG_PORTFOLIO_EXPANSION_SLOT_WAKE_CALLBACK() + MCFG_TIMER_DRIVER_ADD_PERIODIC("counter", portfolio_state, counter_tick, attotime::from_hz(XTAL_32_768kHz/16384)) MCFG_TIMER_DRIVER_ADD_PERIODIC(TIMER_TICK_TAG, portfolio_state, system_tick, attotime::from_hz(XTAL_32_768kHz/32768)) - MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, rx_w)) - MCFG_RS232_DCD_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, dcd_w)) - MCFG_RS232_DSR_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, dsr_w)) - MCFG_RS232_RI_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, ri_w)) - MCFG_RS232_CTS_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, cts_w)) - /* fake keyboard */ MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard", portfolio_state, keyboard_tick, attotime::from_usec(2500)) @@ -876,19 +791,8 @@ static MACHINE_CONFIG_START( portfolio, portfolio_state ) MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "portfolio_cart") MCFG_GENERIC_LOAD(portfolio_state, portfolio_cart) - /* memory card */ -/* MCFG_MEMCARD_ADD("memcard_a") - MCFG_MEMCARD_EXTENSION_LIST("bin") - MCFG_MEMCARD_LOAD(portfolio_memcard) - MCFG_MEMCARD_SIZE_OPTIONS("32K,64K,128K") - - MCFG_MEMCARD_ADD("memcard_b") - MCFG_MEMCARD_EXTENSION_LIST("bin") - MCFG_MEMCARD_LOAD(portfolio_memcard) - MCFG_MEMCARD_SIZE_OPTIONS("32K,64K,128K")*/ - /* software lists */ -// MCFG_SOFTWARE_LIST_ADD("cart_list", "pofo") + MCFG_SOFTWARE_LIST_ADD("cart_list", "pofo") /* internal ram */ MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mame/drivers/pong.cpp b/src/mame/drivers/pong.cpp index d454b462766..b960e6e55a1 100644 --- a/src/mame/drivers/pong.cpp +++ b/src/mame/drivers/pong.cpp @@ -372,10 +372,10 @@ static MACHINE_CONFIG_START( pong, pong_state ) MCFG_NETLIST_ANALOG_MULT_OFFSET(1.0 / 100.0 * RES_K(50), RES_K(56) ) MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot0", "ic_b9_POT.DIAL") MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot1", "ic_a9_POT.DIAL") - MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1a", "sw1a.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1b", "sw1b.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw", "coinsw.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "antenna", "antenna.IN", 0, 0x01) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1a", "sw1a.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1b", "sw1b.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw", "coinsw.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "antenna", "antenna.IN", 0) MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "snd0", "sound", pong_state, sound_cb, "") MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "videomix", fixedfreq_device, update_vid, "fixfreq") @@ -403,21 +403,21 @@ static MACHINE_CONFIG_START( breakout, breakout_state ) MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot1", "POTP1.DIAL") MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot2", "POTP2.DIAL") - MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw1", "COIN1.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw2", "COIN2.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw1", "START1.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw2", "START2.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "servesw", "SERVE.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw4", "S4.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw3", "S3.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw2", "S2.POS", 0, 0x01) - - MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_1", "S1_1.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_2", "S1_2.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_3", "S1_3.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_4", "S1_4.POS", 0, 0x01) - - MCFG_NETLIST_LOGIC_INPUT("maincpu", "antenna", "antenna.IN", 0, 0x01) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw1", "COIN1.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw2", "COIN2.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw1", "START1.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw2", "START2.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "servesw", "SERVE.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw4", "S4.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw3", "S3.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw2", "S2.POS", 0) + + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_1", "S1_1.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_2", "S1_2.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_3", "S1_3.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_4", "S1_4.POS", 0) + + MCFG_NETLIST_LOGIC_INPUT("maincpu", "antenna", "antenna.IN", 0) MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "snd0", "sound", breakout_state, sound_cb, "") MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "videomix", fixedfreq_device, update_vid, "fixfreq") @@ -462,20 +462,14 @@ static MACHINE_CONFIG_START( pongd, pong_state ) MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) MCFG_NETLIST_SETUP(pongdoubles) -#if 0 - MCFG_NETLIST_ANALOG_INPUT("maincpu", "vr0", "ic_b9_R.R") - MCFG_NETLIST_ANALOG_INPUT_MULT_OFFSET(1.0 / 100.0 * RES_K(50), RES_K(56) ) - MCFG_NETLIST_ANALOG_INPUT("maincpu", "vr1", "ic_a9_R.R") - MCFG_NETLIST_ANALOG_INPUT_MULT_OFFSET(1.0 / 100.0 * RES_K(50), RES_K(56) ) -#endif MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot0", "A10_POT.DIAL") MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot1", "B10_POT.DIAL") MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot2", "B9B_POT.DIAL") MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot3", "B9A_POT.DIAL") - MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1a", "DIPSW1.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1b", "DIPSW2.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw", "COIN_SW.POS", 0, 0x01) - MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw", "START_SW.POS", 0, 0x01) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1a", "DIPSW1.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1b", "DIPSW2.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw", "COIN_SW.POS", 0) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw", "START_SW.POS", 0) #if 0 MCFG_NETLIST_LOGIC_INPUT("maincpu", "antenna", "antenna.IN", 0, 0x01) #endif diff --git a/src/mame/drivers/prehisle.cpp b/src/mame/drivers/prehisle.cpp index 7a384a033cb..1bca554476d 100644 --- a/src/mame/drivers/prehisle.cpp +++ b/src/mame/drivers/prehisle.cpp @@ -20,7 +20,7 @@ WRITE16_MEMBER(prehisle_state::soundcmd_w) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -55,7 +55,7 @@ WRITE8_MEMBER(prehisle_state::D7759_upd_reset_w) static ADDRESS_MAP_START( prehisle_sound_map, AS_PROGRAM, 8, prehisle_state ) AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf800, 0xf800) AM_WRITENOP // ??? ADDRESS_MAP_END @@ -220,6 +220,8 @@ static MACHINE_CONFIG_START( prehisle, prehisle_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_4MHz) /* verified on pcb */ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/prof180x.cpp b/src/mame/drivers/prof180x.cpp index d6e8f0e32d9..3b4235f670b 100644 --- a/src/mame/drivers/prof180x.cpp +++ b/src/mame/drivers/prof180x.cpp @@ -191,7 +191,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( prof180x_io , AS_IO, 8, prof180x_state ) AM_RANGE(0x08, 0x08) AM_MIRROR(0xff00) AM_WRITE(flr_w) - AM_RANGE(0x09, 0x09) AM_MASK(0xff00) AM_READ(status_r) + AM_RANGE(0x09, 0x09) AM_SELECT(0xff00) AM_READ(status_r) AM_RANGE(0x0a, 0x0a) AM_MIRROR(0xff00) AM_DEVREADWRITE(FDC9268_TAG, upd765a_device, mdma_r, mdma_w) AM_RANGE(0x0b, 0x0b) AM_MIRROR(0xff00) AM_DEVWRITE("cent_data_out", output_latch_device, write) AM_RANGE(0x0c, 0x0d) AM_MIRROR(0xff00) AM_DEVICE(FDC9268_TAG, upd765a_device, map) diff --git a/src/mame/drivers/prof80.cpp b/src/mame/drivers/prof80.cpp index 19f7fdeeec1..7dea1756b37 100644 --- a/src/mame/drivers/prof80.cpp +++ b/src/mame/drivers/prof80.cpp @@ -348,7 +348,7 @@ static ADDRESS_MAP_START( prof80_io, AS_IO, 8, prof80_state ) AM_RANGE(0xda, 0xda) AM_MIRROR(0xff00) AM_READ(status_r) AM_RANGE(0xdb, 0xdb) AM_MIRROR(0xff00) AM_READ(status2_r) AM_RANGE(0xdc, 0xdd) AM_MIRROR(0xff00) AM_DEVICE(UPD765_TAG, upd765a_device, map) - AM_RANGE(0xde, 0xde) AM_MIRROR(0xff01) AM_MASK(0xff00) AM_DEVWRITE(MMU_TAG, prof80_mmu_device, par_w) + AM_RANGE(0xde, 0xde) AM_MIRROR(0x0001) AM_SELECT(0xff00) AM_DEVWRITE(MMU_TAG, prof80_mmu_device, par_w) ADDRESS_MAP_END diff --git a/src/mame/drivers/punchout.cpp b/src/mame/drivers/punchout.cpp index 777cc13f30b..48619c32e3a 100644 --- a/src/mame/drivers/punchout.cpp +++ b/src/mame/drivers/punchout.cpp @@ -255,7 +255,7 @@ WRITE8_MEMBER(punchout_state::spunchout_rp5h01_clock_w) static ADDRESS_MAP_START( spnchout_io_map, AS_IO, 8, punchout_state ) AM_RANGE(0x05, 0x05) AM_MIRROR(0xf0) AM_WRITE(spunchout_rp5h01_reset_w) AM_RANGE(0x06, 0x06) AM_MIRROR(0xf0) AM_WRITE(spunchout_rp5h01_clock_w) - AM_RANGE(0x07, 0x07) AM_MIRROR(0xf0) AM_MASK(0xf0) AM_READWRITE(spunchout_exp_r, spunchout_exp_w) // protection ports + AM_RANGE(0x07, 0x07) AM_SELECT(0xf0) AM_READWRITE(spunchout_exp_r, spunchout_exp_w) // protection ports AM_IMPORT_FROM( punchout_io_map ) ADDRESS_MAP_END diff --git a/src/mame/drivers/pve500.cpp b/src/mame/drivers/pve500.cpp index 52c05d15912..bf93d40c12d 100644 --- a/src/mame/drivers/pve500.cpp +++ b/src/mame/drivers/pve500.cpp @@ -126,7 +126,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(subcpu_prg, AS_PROGRAM, 8, pve500_state) AM_RANGE (0x0000, 0x7FFF) AM_ROM // ICG5: 32kbytes EPROM - AM_RANGE (0x8000, 0xBFFF) AM_MIRROR(0x3FF8) AM_READWRITE(io_expander_r, io_expander_w) // ICG3: I/O Expander + AM_RANGE (0x8000, 0x8007) AM_MIRROR(0x3FF8) AM_READWRITE(io_expander_r, io_expander_w) // ICG3: I/O Expander AM_RANGE (0xC000, 0xC7FF) AM_MIRROR(0x3800) AM_DEVREADWRITE("mb8421", mb8421_device, right_r, right_w) ADDRESS_MAP_END diff --git a/src/mame/drivers/px4.cpp b/src/mame/drivers/px4.cpp index 64c5d769861..2d0f10e592d 100644 --- a/src/mame/drivers/px4.cpp +++ b/src/mame/drivers/px4.cpp @@ -492,18 +492,18 @@ READ8_MEMBER( px4_state::str_r ) void px4_state::install_rom_capsule(address_space &space, int size, memory_region *mem) { // ram, part 1 - space.install_ram(0x0000, 0xdfff - size, 0, 0, m_ram->pointer()); + space.install_ram(0x0000, 0xdfff - size, m_ram->pointer()); // actual rom data, part 1 if (mem) - space.install_rom(0xe000 - size, 0xffff, 0, 0, mem->base() + (size - 0x2000)); + space.install_rom(0xe000 - size, 0xffff, mem->base() + (size - 0x2000)); // rom data, part 2 if (mem && size != 0x2000) - space.install_rom(0x10000 - size, 0xdfff, 0, 0, mem->base()); + space.install_rom(0x10000 - size, 0xdfff, mem->base()); // ram, continued - space.install_ram(0xe000, 0xffff, 0, 0, m_ram->pointer() + 0xe000); + space.install_ram(0xe000, 0xffff, m_ram->pointer() + 0xe000); } // bank register @@ -521,13 +521,13 @@ WRITE8_MEMBER( px4_state::bankr_w ) { case 0x00: // system bank - space_program.install_rom(0x0000, 0x7fff, 0, 0, memregion("os")->base()); - space_program.install_ram(0x8000, 0xffff, 0, 0, m_ram->pointer() + 0x8000); + space_program.install_rom(0x0000, 0x7fff, memregion("os")->base()); + space_program.install_ram(0x8000, 0xffff, m_ram->pointer() + 0x8000); break; case 0x04: // memory - space_program.install_ram(0x0000, 0xffff, 0, 0, m_ram->pointer()); + space_program.install_ram(0x0000, 0xffff, m_ram->pointer()); break; case 0x08: install_rom_capsule(space_program, 0x2000, m_caps1_rom); break; diff --git a/src/mame/drivers/quizpun2.cpp b/src/mame/drivers/quizpun2.cpp index 91743602a1d..eeaad4a06d4 100644 --- a/src/mame/drivers/quizpun2.cpp +++ b/src/mame/drivers/quizpun2.cpp @@ -7,7 +7,7 @@ Quiz Punch 2 (C)1989 Space Computer Preliminary driver by Luca Elia - It uses an unknown DIP40 device for protection, that supplies - the address to jump to (same as mosaic.c) and handles the EEPROM + the address to jump to (same as mosaic.cpp) and handles the EEPROM PCB Layout ---------- @@ -78,6 +78,7 @@ Notes: #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/2203intf.h" @@ -100,7 +101,8 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } struct prot_t m_prot; required_shared_ptr<UINT8> m_fg_ram; @@ -123,6 +125,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; }; @@ -364,7 +367,7 @@ WRITE8_MEMBER(quizpun2_state::quizpun2_irq_ack) WRITE8_MEMBER(quizpun2_state::quizpun2_soundlatch_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -405,7 +408,7 @@ static ADDRESS_MAP_START( quizpun2_sound_io_map, AS_IO, 8, quizpun2_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE( 0x00, 0x00 ) AM_WRITENOP // IRQ end AM_RANGE( 0x20, 0x20 ) AM_WRITENOP // NMI end - AM_RANGE( 0x40, 0x40 ) AM_READ(soundlatch_byte_r ) + AM_RANGE( 0x40, 0x40 ) AM_DEVREAD("soundlatch", generic_latch_8_device, read ) AM_RANGE( 0x60, 0x61 ) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write ) ADDRESS_MAP_END @@ -524,6 +527,8 @@ static MACHINE_CONFIG_START( quizpun2, quizpun2_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_8MHz / 4 ) // 2 MHz? MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/qx10.cpp b/src/mame/drivers/qx10.cpp index 291dee7e24e..0ac10280aba 100644 --- a/src/mame/drivers/qx10.cpp +++ b/src/mame/drivers/qx10.cpp @@ -653,7 +653,7 @@ WRITE16_MEMBER( qx10_state::vram_w ) } static ADDRESS_MAP_START( upd7220_map, AS_0, 16, qx10_state ) - AM_RANGE(0x00000, 0x5ffff) AM_READWRITE(vram_r,vram_w) + AM_RANGE(0x00000, 0x3ffff) AM_READWRITE(vram_r,vram_w) ADDRESS_MAP_END static SLOT_INTERFACE_START(keyboard) diff --git a/src/mame/drivers/r2dtank.cpp b/src/mame/drivers/r2dtank.cpp index 135fe3e83a8..771bf1a6500 100644 --- a/src/mame/drivers/r2dtank.cpp +++ b/src/mame/drivers/r2dtank.cpp @@ -40,6 +40,7 @@ RAM = 4116 (x11) #include "cpu/m6800/m6800.h" #include "cpu/m6809/m6809.h" #include "sound/ay8910.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" @@ -58,7 +59,9 @@ public: m_colorram(*this, "colorram"), m_maincpu(*this, "maincpu"), m_palette(*this, "palette"), - m_audiocpu(*this, "audiocpu") { } + m_audiocpu(*this, "audiocpu"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2") { } required_shared_ptr<UINT8> m_videoram; required_shared_ptr<UINT8> m_colorram; @@ -86,6 +89,8 @@ public: required_device<cpu_device> m_maincpu; required_device<palette_device> m_palette; required_device<cpu_device> m_audiocpu; + required_device<generic_latch_8_device> m_soundlatch; + required_device<generic_latch_8_device> m_soundlatch2; }; @@ -126,7 +131,7 @@ WRITE_LINE_MEMBER(r2dtank_state::main_cpu_irq) READ8_MEMBER(r2dtank_state::audio_command_r) { - UINT8 ret = soundlatch_byte_r(space, 0); + UINT8 ret = m_soundlatch->read(space, 0); if (LOG_AUDIO_COMM) logerror("%08X CPU#1 Audio Command Read: %x\n", space.device().safe_pc(), ret); @@ -136,7 +141,7 @@ if (LOG_AUDIO_COMM) logerror("%08X CPU#1 Audio Command Read: %x\n", space.devi WRITE8_MEMBER(r2dtank_state::audio_command_w) { - soundlatch_byte_w(space, 0, ~data); + m_soundlatch->write(space, 0, ~data); m_audiocpu->set_input_line(M6800_IRQ_LINE, HOLD_LINE); if (LOG_AUDIO_COMM) logerror("%08X CPU#0 Audio Command Write: %x\n", space.device().safe_pc(), data^0xff); @@ -145,7 +150,7 @@ if (LOG_AUDIO_COMM) logerror("%08X CPU#0 Audio Command Write: %x\n", space.de READ8_MEMBER(r2dtank_state::audio_answer_r) { - UINT8 ret = soundlatch2_byte_r(space, 0); + UINT8 ret = m_soundlatch2->read(space, 0); if (LOG_AUDIO_COMM) logerror("%08X CPU#0 Audio Answer Read: %x\n", space.device().safe_pc(), ret); return ret; @@ -158,7 +163,7 @@ WRITE8_MEMBER(r2dtank_state::audio_answer_w) if (space.device().safe_pc() == 0xfb12) data = 0x00; - soundlatch2_byte_w(space, 0, data); + m_soundlatch2->write(space, 0, data); m_maincpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); if (LOG_AUDIO_COMM) logerror("%08X CPU#1 Audio Answer Write: %x\n", space.device().safe_pc(), data); @@ -484,6 +489,9 @@ static MACHINE_CONFIG_START( r2dtank, r2dtank_state ) /* audio hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ay1", AY8910, (4000000 / 4)) MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSWB")) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp index ae8033b4ecf..31fa8996eee 100644 --- a/src/mame/drivers/rainbow.cpp +++ b/src/mame/drivers/rainbow.cpp @@ -531,7 +531,7 @@ AM_RANGE(0x10000, END_OF_RAM) AM_RAM // 'diagnostic_w' handler (similar to real hardware). // - Address bits 8-12 are ignored (-> AM_MIRROR). -AM_RANGE(0xed000, 0xed0ff) AM_RAM AM_SHARE("vol_ram") AM_MIRROR(0x1f00) +AM_RANGE(0xec000, 0xec0ff) AM_RAM AM_SHARE("vol_ram") AM_MIRROR(0x1f00) AM_RANGE(0xed100, 0xed1ff) AM_RAM AM_SHARE("nvram") AM_RANGE(0xee000, 0xeffff) AM_RAM AM_SHARE("p_ram") @@ -782,25 +782,25 @@ void rainbow_state::machine_reset() // * Reset RTC to a defined state * #define RTC_RESET 0xFC104 // read $FC104 or mirror $FE104 - program.install_read_handler(RTC_RESET, RTC_RESET, 0, 0, read8_delegate(FUNC(rainbow_state::rtc_reset), this)); - program.install_read_handler(RTC_RESET + 0x2000, RTC_RESET + 0x2000, 0, 0, read8_delegate(FUNC(rainbow_state::rtc_reset2), this)); + program.install_read_handler(RTC_RESET, RTC_RESET, read8_delegate(FUNC(rainbow_state::rtc_reset), this)); + program.install_read_handler(RTC_RESET + 0x2000, RTC_RESET + 0x2000, read8_delegate(FUNC(rainbow_state::rtc_reset2), this)); // A magic pattern enables reads or writes (-> RTC_WRITE_DATA_0 / RTC_WRITE_DATA_1) // 64 bits read from two alternating addresses (see DS1315.C) #define RTC_PATTERN_0 0xFC100 // MIRROR: FE100 #define RTC_PATTERN_1 0xFC101 // MIRROR: FE101 - program.install_read_handler(RTC_PATTERN_0, RTC_PATTERN_1, 0, 0, read8_delegate(FUNC(rainbow_state::rtc_enable), this)); - program.install_read_handler(RTC_PATTERN_0 + 0x2000, RTC_PATTERN_1 + 0x2000, 0, 0, read8_delegate(FUNC(rainbow_state::rtc_enable2), this)); + program.install_read_handler(RTC_PATTERN_0, RTC_PATTERN_1, read8_delegate(FUNC(rainbow_state::rtc_enable), this)); + program.install_read_handler(RTC_PATTERN_0 + 0x2000, RTC_PATTERN_1 + 0x2000, read8_delegate(FUNC(rainbow_state::rtc_enable2), this)); // * Read actual time/date from ClikClok * #define RTC_READ_DATA 0xFC004 // Single byte - delivers one bit (if RTC enabled). MIRROR: FE004 - program.install_read_handler(RTC_READ_DATA, RTC_READ_DATA, 0, 0, read8_delegate(FUNC(rainbow_state::rtc_r), this)); - program.install_read_handler(RTC_READ_DATA + 0x2000, RTC_READ_DATA + 0x2000, 0, 0, read8_delegate(FUNC(rainbow_state::rtc_r2), this)); + program.install_read_handler(RTC_READ_DATA, RTC_READ_DATA, read8_delegate(FUNC(rainbow_state::rtc_r), this)); + program.install_read_handler(RTC_READ_DATA + 0x2000, RTC_READ_DATA + 0x2000, read8_delegate(FUNC(rainbow_state::rtc_r2), this)); // * Secretly transmit data to RTC (set time / date) * Works only if magic pattern enabled RTC. Look ma, no writes! #define RTC_WRITE_DATA_0 0xFE000 #define RTC_WRITE_DATA_1 0xFE001 - program.install_read_handler(RTC_WRITE_DATA_0, RTC_WRITE_DATA_1, 0, 0, read8_delegate(FUNC(rainbow_state::rtc_w), this)); + program.install_read_handler(RTC_WRITE_DATA_0, RTC_WRITE_DATA_1, read8_delegate(FUNC(rainbow_state::rtc_w), this)); m_rtc->chip_reset(); // *********************************** / DS1315 'PHANTOM CLOCK' IMPLEMENTATION FOR 'DEC-100-B' *************************************** diff --git a/src/mame/drivers/rc759.cpp b/src/mame/drivers/rc759.cpp index 6ced8faca32..68c18116b75 100644 --- a/src/mame/drivers/rc759.cpp +++ b/src/mame/drivers/rc759.cpp @@ -461,8 +461,8 @@ void rc759_state::machine_reset() static ADDRESS_MAP_START( rc759_map, AS_PROGRAM, 16, rc759_state ) AM_RANGE(0x00000, 0x3ffff) AM_RAM - AM_RANGE(0xd8000, 0xdffff) AM_MIRROR(0x08000) AM_RAM AM_SHARE("vram") - AM_RANGE(0xf8000, 0xfffff) AM_MIRROR(0x10000) AM_ROM AM_REGION("bios", 0) + AM_RANGE(0xd0000, 0xd7fff) AM_MIRROR(0x08000) AM_RAM AM_SHARE("vram") + AM_RANGE(0xe8000, 0xeffff) AM_MIRROR(0x10000) AM_ROM AM_REGION("bios", 0) ADDRESS_MAP_END static ADDRESS_MAP_START( rc759_io, AS_IO, 16, rc759_state ) diff --git a/src/mame/drivers/renegade.cpp b/src/mame/drivers/renegade.cpp index d3379c75062..c42ac577d1b 100644 --- a/src/mame/drivers/renegade.cpp +++ b/src/mame/drivers/renegade.cpp @@ -170,7 +170,7 @@ WRITE_LINE_MEMBER(renegade_state::adpcm_int) WRITE8_MEMBER(renegade_state::sound_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); } @@ -621,7 +621,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( renegade_sound_map, AS_PROGRAM, 8, renegade_state ) AM_RANGE(0x0000, 0x0fff) AM_RAM - AM_RANGE(0x1000, 0x1000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x1000, 0x1000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x1800, 0x1800) AM_WRITE(adpcm_start_w) AM_RANGE(0x2000, 0x2000) AM_WRITE(adpcm_addr_w) AM_RANGE(0x2800, 0x2801) AM_DEVREADWRITE("ymsnd", ym3526_device, read, write) @@ -872,6 +872,8 @@ static MACHINE_CONFIG_START( renegade, renegade_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3526, 12000000/4) MCFG_YM3526_IRQ_HANDLER(DEVWRITELINE("audiocpu", m6809_device, firq_line)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/retofinv.cpp b/src/mame/drivers/retofinv.cpp index ae14e05be51..023d848dca6 100644 --- a/src/mame/drivers/retofinv.cpp +++ b/src/mame/drivers/retofinv.cpp @@ -91,7 +91,7 @@ READ8_MEMBER(retofinv_state::cpu0_mf800_r) WRITE8_MEMBER(retofinv_state::soundcommand_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -161,7 +161,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, retofinv_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x2000, 0x27ff) AM_RAM - AM_RANGE(0x4000, 0x4000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x4000, 0x4000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x6000, 0x6000) AM_WRITE(cpu2_m6000_w) AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("sn1", sn76496_device, write) AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("sn2", sn76496_device, write) @@ -406,6 +406,8 @@ static MACHINE_CONFIG_START( retofinv, retofinv_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("sn1", SN76496, 18432000/6) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) diff --git a/src/mame/drivers/rex6000.cpp b/src/mame/drivers/rex6000.cpp index 31d57ea5042..df3e7118928 100644 --- a/src/mame/drivers/rex6000.cpp +++ b/src/mame/drivers/rex6000.cpp @@ -702,7 +702,6 @@ PALETTE_INIT_MEMBER(rex6000_state, rex6000) QUICKLOAD_LOAD_MEMBER( rex6000_state,rex6000) { static const char magic[] = "ApplicationName:Addin"; - address_space& flash = m_flash0b->space(0); UINT32 img_start = 0; dynamic_buffer data(image.length()); @@ -715,7 +714,7 @@ QUICKLOAD_LOAD_MEMBER( rex6000_state,rex6000) img_start += 0xa0; //skip the icon (40x32 pixel) for (UINT32 i=0; i<image.length() - img_start ;i++) - flash.write_byte(i, data[img_start + i]); + m_flash0b->write_raw(i, data[img_start + i]); return IMAGE_INIT_PASS; } diff --git a/src/mame/drivers/rollrace.cpp b/src/mame/drivers/rollrace.cpp index 9b7137cd9bc..a6af5eb7edc 100644 --- a/src/mame/drivers/rollrace.cpp +++ b/src/mame/drivers/rollrace.cpp @@ -11,6 +11,7 @@ Issues: #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/ay8910.h" #include "includes/rollrace.h" @@ -59,7 +60,7 @@ static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8, rollrace_state ) AM_RANGE(0xd900, 0xd900) AM_READWRITE(fake_d800_r,fake_d800_w) /* protection ??*/ AM_RANGE(0xe000, 0xe3ff) AM_RAM AM_SHARE("videoram") AM_RANGE(0xe400, 0xe47f) AM_RAM AM_SHARE("colorram") - AM_RANGE(0xe800, 0xe800) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xe800, 0xe800) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xec00, 0xec0f) AM_NOP /* Analog sound effects ?? ec00 sound enable ?*/ AM_RANGE(0xf000, 0xf0ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xf400, 0xf400) AM_WRITE(backgroundcolor_w) @@ -80,7 +81,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( rollrace_sound_map, AS_PROGRAM, 8, rollrace_state ) AM_RANGE(0x0000, 0x0fff) AM_ROM AM_RANGE(0x2000, 0x2fff) AM_RAM - AM_RANGE(0x3000, 0x3000) AM_READ(soundlatch_byte_r) AM_WRITE(sound_nmi_mask_w) + AM_RANGE(0x3000, 0x3000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(sound_nmi_mask_w) AM_RANGE(0x4000, 0x4001) AM_DEVWRITE("ay1", ay8910_device, address_data_w) AM_RANGE(0x5000, 0x5001) AM_DEVWRITE("ay2", ay8910_device, address_data_w) AM_RANGE(0x6000, 0x6001) AM_DEVWRITE("ay3", ay8910_device, address_data_w) @@ -263,6 +264,8 @@ static MACHINE_CONFIG_START( rollrace, rollrace_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910,XTAL_24MHz/16) /* verified on pcb */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10) diff --git a/src/mame/drivers/roul.cpp b/src/mame/drivers/roul.cpp index e6634a6aa41..2e6814b95cc 100644 --- a/src/mame/drivers/roul.cpp +++ b/src/mame/drivers/roul.cpp @@ -64,6 +64,7 @@ Stephh's notes (based on the game Z80 code and some tests) : #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/ay8910.h" #include "roul.lh" #include "machine/nvram.h" @@ -75,10 +76,12 @@ public: roul_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_soundcpu(*this, "soundcpu") { } + m_soundcpu(*this, "soundcpu"), + m_soundlatch(*this, "soundlatch") { } required_device<cpu_device> m_maincpu; required_device<cpu_device> m_soundcpu; + required_device<generic_latch_8_device> m_soundlatch; UINT8 m_reg[0x10]; std::unique_ptr<UINT8[]> m_videobuf; @@ -180,7 +183,7 @@ WRITE8_MEMBER(roul_state::blitter_cmd_w) WRITE8_MEMBER(roul_state::sound_latch_w) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_soundcpu->set_input_line(0, HOLD_LINE); } @@ -216,7 +219,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_cpu_io_map, AS_IO, 8, roul_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r) + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x00, 0x01) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) ADDRESS_MAP_END @@ -315,6 +318,9 @@ static MACHINE_CONFIG_START( roul, roul_state ) MCFG_PALETTE_INIT_OWNER(roul_state, roul) MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, 1000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/s6.cpp b/src/mame/drivers/s6.cpp index 876c855ef8e..00e82e3500a 100644 --- a/src/mame/drivers/s6.cpp +++ b/src/mame/drivers/s6.cpp @@ -127,7 +127,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( s6_audio_map, AS_PROGRAM, 8, s6_state ) ADDRESS_MAP_GLOBAL_MASK(0x7fff) AM_RANGE(0x0000, 0x00ff) AM_RAM - AM_RANGE(0x0400, 0x0403) AM_MIRROR(0x8000) AM_DEVREADWRITE("pias", pia6821_device, read, write) + AM_RANGE(0x0400, 0x0403) AM_DEVREADWRITE("pias", pia6821_device, read, write) AM_RANGE(0x3000, 0x7fff) AM_ROM AM_REGION("audioroms", 0) ADDRESS_MAP_END diff --git a/src/mame/drivers/safarir.cpp b/src/mame/drivers/safarir.cpp index 44e064e5188..879fcff9558 100644 --- a/src/mame/drivers/safarir.cpp +++ b/src/mame/drivers/safarir.cpp @@ -341,11 +341,11 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, safarir_state ) AM_RANGE(0x0000, 0x17ff) AM_ROM AM_RANGE(0x2000, 0x27ff) AM_READWRITE(ram_r, ram_w) AM_SHARE("ram") AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x03ff) AM_READNOP AM_WRITE(ram_bank_w) - AM_RANGE(0x2c00, 0x2cff) AM_MIRROR(0x03ff) AM_READNOP AM_WRITEONLY AM_SHARE("bg_scroll") - AM_RANGE(0x3000, 0x30ff) AM_MIRROR(0x03ff) AM_WRITE(safarir_audio_w) /* goes to SN76477 */ + AM_RANGE(0x2c00, 0x2c00) AM_MIRROR(0x03ff) AM_READNOP AM_WRITEONLY AM_SHARE("bg_scroll") + AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x03ff) AM_WRITE(safarir_audio_w) /* goes to SN76477 */ AM_RANGE(0x3400, 0x3400) AM_MIRROR(0x03ff) AM_WRITENOP /* cleared at the beginning */ - AM_RANGE(0x3800, 0x38ff) AM_MIRROR(0x03ff) AM_READ_PORT("INPUTS") AM_WRITENOP - AM_RANGE(0x3c00, 0x3cff) AM_MIRROR(0x03ff) AM_READ_PORT("DSW") AM_WRITENOP + AM_RANGE(0x3800, 0x3800) AM_MIRROR(0x03ff) AM_READ_PORT("INPUTS") AM_WRITENOP + AM_RANGE(0x3c00, 0x3c00) AM_MIRROR(0x03ff) AM_READ_PORT("DSW") AM_WRITENOP ADDRESS_MAP_END diff --git a/src/mame/drivers/samcoupe.cpp b/src/mame/drivers/samcoupe.cpp index 743c76a58cf..945d02e64f1 100644 --- a/src/mame/drivers/samcoupe.cpp +++ b/src/mame/drivers/samcoupe.cpp @@ -311,22 +311,22 @@ static ADDRESS_MAP_START( samcoupe_mem, AS_PROGRAM, 8, samcoupe_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( samcoupe_io, AS_IO, 8, samcoupe_state ) - AM_RANGE(0x0080, 0x0081) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_WRITE(samcoupe_ext_mem_w) - AM_RANGE(0x00e0, 0x00e7) AM_MIRROR(0xff10) AM_MASK(0xffff) AM_READWRITE(samcoupe_disk_r, samcoupe_disk_w) - AM_RANGE(0x00e8, 0x00e8) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_DEVWRITE("lpt1_data_out", output_latch_device, write) - AM_RANGE(0x00e9, 0x00e9) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_lpt1_busy_r, samcoupe_lpt1_strobe_w) - AM_RANGE(0x00ea, 0x00ea) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_DEVWRITE("lpt2_data_out", output_latch_device, write) - AM_RANGE(0x00eb, 0x00eb) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_lpt2_busy_r, samcoupe_lpt2_strobe_w) - AM_RANGE(0x00f8, 0x00f8) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_pen_r, samcoupe_clut_w) - AM_RANGE(0x00f9, 0x00f9) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_status_r, samcoupe_line_int_w) - AM_RANGE(0x00fa, 0x00fa) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_lmpr_r, samcoupe_lmpr_w) - AM_RANGE(0x00fb, 0x00fb) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_hmpr_r, samcoupe_hmpr_w) - AM_RANGE(0x00fc, 0x00fc) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_vmpr_r, samcoupe_vmpr_w) - AM_RANGE(0x00fd, 0x00fd) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_midi_r, samcoupe_midi_w) - AM_RANGE(0x00fe, 0x00fe) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_keyboard_r, samcoupe_border_w) - AM_RANGE(0x00ff, 0x00ff) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READ(samcoupe_attributes_r) - AM_RANGE(0x00ff, 0x00ff) AM_MIRROR(0xfe00) AM_MASK(0xffff) AM_DEVWRITE("saa1099", saa1099_device, data_w) - AM_RANGE(0x01ff, 0x01ff) AM_MIRROR(0xfe00) AM_MASK(0xffff) AM_DEVWRITE("saa1099", saa1099_device, control_w) + AM_RANGE(0x0080, 0x0081) AM_SELECT(0xff00) AM_WRITE(samcoupe_ext_mem_w) + AM_RANGE(0x00e0, 0x00e7) AM_SELECT(0xff10) AM_READWRITE(samcoupe_disk_r, samcoupe_disk_w) + AM_RANGE(0x00e8, 0x00e8) AM_SELECT(0xff00) AM_DEVWRITE("lpt1_data_out", output_latch_device, write) + AM_RANGE(0x00e9, 0x00e9) AM_SELECT(0xff00) AM_READWRITE(samcoupe_lpt1_busy_r, samcoupe_lpt1_strobe_w) + AM_RANGE(0x00ea, 0x00ea) AM_SELECT(0xff00) AM_DEVWRITE("lpt2_data_out", output_latch_device, write) + AM_RANGE(0x00eb, 0x00eb) AM_SELECT(0xff00) AM_READWRITE(samcoupe_lpt2_busy_r, samcoupe_lpt2_strobe_w) + AM_RANGE(0x00f8, 0x00f8) AM_SELECT(0xff00) AM_READWRITE(samcoupe_pen_r, samcoupe_clut_w) + AM_RANGE(0x00f9, 0x00f9) AM_SELECT(0xff00) AM_READWRITE(samcoupe_status_r, samcoupe_line_int_w) + AM_RANGE(0x00fa, 0x00fa) AM_SELECT(0xff00) AM_READWRITE(samcoupe_lmpr_r, samcoupe_lmpr_w) + AM_RANGE(0x00fb, 0x00fb) AM_SELECT(0xff00) AM_READWRITE(samcoupe_hmpr_r, samcoupe_hmpr_w) + AM_RANGE(0x00fc, 0x00fc) AM_SELECT(0xff00) AM_READWRITE(samcoupe_vmpr_r, samcoupe_vmpr_w) + AM_RANGE(0x00fd, 0x00fd) AM_SELECT(0xff00) AM_READWRITE(samcoupe_midi_r, samcoupe_midi_w) + AM_RANGE(0x00fe, 0x00fe) AM_SELECT(0xff00) AM_READWRITE(samcoupe_keyboard_r, samcoupe_border_w) + AM_RANGE(0x00ff, 0x00ff) AM_SELECT(0xff00) AM_READ(samcoupe_attributes_r) + AM_RANGE(0x00ff, 0x00ff) AM_SELECT(0xfe00) AM_DEVWRITE("saa1099", saa1099_device, data_w) + AM_RANGE(0x01ff, 0x01ff) AM_SELECT(0xfe00) AM_DEVWRITE("saa1099", saa1099_device, control_w) ADDRESS_MAP_END diff --git a/src/mame/drivers/sauro.cpp b/src/mame/drivers/sauro.cpp index 025bb01e388..46661a8cd2f 100644 --- a/src/mame/drivers/sauro.cpp +++ b/src/mame/drivers/sauro.cpp @@ -26,7 +26,7 @@ Ports: 20 R DSW #2 40 R Input Ports Player 1 60 R Input Ports Player 2 -80 W Sound Commnand +80 W Sound Command c0 W Flip Screen c1 W ??? c2-c4 W ??? @@ -81,7 +81,7 @@ Stephh's notes (based on the games Z80 code and some tests) : - Press START1 while in "test mode" to cycle through different screens (colors, Dip Switches, Inputs) - When "Freeze" Dip Switch is ON, press START1 to freeze and START2 to unfreeze. - This setting (as well as others) must be defined before reseting the games. + This setting (as well as others) must be defined before resetting the games. - "Test mode" crashes when trying to display "Difficult" ("Hard") because the full string is 15 bytes long while other string are 14, so the 15th "char" is NOT 0x00 : * 0xd49f : mask (0x30) @@ -95,7 +95,7 @@ Stephh's notes (based on the games Z80 code and some tests) : - Press START1 while in "test mode" to cycle through different screens (colors, Dip Switches, Inputs) - When "Freeze" Dip Switch is ON, press START1 to freeze and START2 to unfreeze. - This setting (as well as others) must be defined before reseting the games. + This setting (as well as others) must be defined before resetting the games. 2a) 'trckydoc' @@ -133,13 +133,13 @@ Stephh's notes (based on the games Z80 code and some tests) : WRITE8_MEMBER(sauro_state::sauro_sound_command_w) { data |= 0x80; - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); } READ8_MEMBER(sauro_state::sauro_sound_command_r) { - int ret = soundlatch_byte_r(space, offset); - soundlatch_clear_byte_w(space, offset, 0); + int ret = m_soundlatch->read(space, offset); + m_soundlatch->clear_w(space, offset, 0); return ret; } @@ -420,6 +420,8 @@ static MACHINE_CONFIG_DERIVED( sauro, tecfri ) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE_DRIVER(sauro_state, screen_update_sauro) + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("speech", SP0256, 3120000) MCFG_SP0256_DATA_REQUEST_CB(INPUTLINE("audiocpu", INPUT_LINE_NMI)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/scorpion.cpp b/src/mame/drivers/scorpion.cpp index 9de1d420c18..0eda0e24da8 100644 --- a/src/mame/drivers/scorpion.cpp +++ b/src/mame/drivers/scorpion.cpp @@ -176,7 +176,7 @@ static ADDRESS_MAP_START (scorpion_io, AS_IO, 8, scorpion_state ) AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, track_r, track_w) AM_MIRROR(0xff00) AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, sector_r, sector_w) AM_MIRROR(0xff00) AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, data_r, data_w) AM_MIRROR(0xff00) - AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff) + AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_SELECT(0xff00) AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE(BETA_DISK_TAG, beta_disk_device, state_r, param_w) AM_MIRROR(0xff00) AM_RANGE(0x4021, 0x4021) AM_WRITE(scorpion_port_7ffd_w) AM_MIRROR(0x3fdc) AM_RANGE(0x8021, 0x8021) AM_DEVWRITE("ay8912", ay8910_device, data_w) AM_MIRROR(0x3fdc) diff --git a/src/mame/drivers/segac2.cpp b/src/mame/drivers/segac2.cpp index 2074655f3b6..723153270ad 100644 --- a/src/mame/drivers/segac2.cpp +++ b/src/mame/drivers/segac2.cpp @@ -2064,7 +2064,7 @@ void segac2_state::segac2_common_init(segac2_prot_delegate prot_func) m_prot_func = prot_func; if (m_upd7759 != nullptr) - m_maincpu->space(AS_PROGRAM).install_write_handler(0x880000, 0x880001, 0, 0x13fefe, write16_delegate(FUNC(segac2_state::segac2_upd7759_w),this)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x880000, 0x880001, 0, 0x13fefe, 0, write16_delegate(FUNC(segac2_state::segac2_upd7759_w),this)); } int segac2_state::prot_func_dummy(int in) diff --git a/src/mame/drivers/segae.cpp b/src/mame/drivers/segae.cpp index 9e26251263d..80833a11b15 100644 --- a/src/mame/drivers/segae.cpp +++ b/src/mame/drivers/segae.cpp @@ -319,7 +319,6 @@ public: m_bank1d(*this, "bank1d") { } DECLARE_WRITE8_MEMBER( bank_write ); - DECLARE_WRITE_LINE_MEMBER( int_callback ); DECLARE_READ8_MEMBER( ridleofp_port_f8_read ); DECLARE_WRITE8_MEMBER( ridleofp_port_fa_write ); @@ -953,12 +952,6 @@ ROM_START( opaopa ) ROM_END -WRITE_LINE_MEMBER( systeme_state::int_callback ) -{ - m_maincpu->set_input_line(0, state); -} - - UINT32 systeme_state::screen_update_systeme(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { bitmap_rgb32 &vdp1_bitmap = m_vdp1->get_bitmap(); @@ -999,7 +992,7 @@ static MACHINE_CONFIG_START( systeme, systeme_state ) MCFG_DEVICE_ADD("vdp2", SEGA315_5124, 0) MCFG_SEGA315_5124_IS_PAL(false) - MCFG_SEGA315_5124_INT_CB(WRITELINE(systeme_state, int_callback)) + MCFG_SEGA315_5124_INT_CB(INPUTLINE("maincpu", 0)) MCFG_DEVICE_ADDRESS_MAP(AS_0, vdp2_map) /* sound hardware */ diff --git a/src/mame/drivers/segag80r.cpp b/src/mame/drivers/segag80r.cpp index bc79d600800..ce6bfb195c5 100644 --- a/src/mame/drivers/segag80r.cpp +++ b/src/mame/drivers/segag80r.cpp @@ -77,7 +77,7 @@ **************************************************************************** - See also sega.c for the Sega G-80 Vector games. + See also segag80v.cpp for the Sega G-80 Vector games. Many thanks go to Dave Fish for the fine detective work he did into the G-80 security chips (315-0064, 315-0070, 315-0076, 315-0082) which provided @@ -283,7 +283,7 @@ WRITE8_MEMBER(segag80r_state::coin_count_w) WRITE8_MEMBER(segag80r_state::sindbadm_soundport_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50)); } @@ -371,7 +371,7 @@ static ADDRESS_MAP_START( sindbadm_sound_map, AS_PROGRAM, 8, segag80r_state ) AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x1800) AM_RAM AM_RANGE(0xa000, 0xa003) AM_MIRROR(0x1ffc) AM_WRITE(sindbadm_sn1_SN76496_w) AM_RANGE(0xc000, 0xc003) AM_MIRROR(0x1ffc) AM_WRITE(sindbadm_sn2_SN76496_w) - AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x1fff) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x1fff) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -933,6 +933,8 @@ static MACHINE_CONFIG_DERIVED( sindbadm, g80r_base ) MCFG_CPU_PROGRAM_MAP(sindbadm_sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(segag80r_state, irq0_line_hold, 4*60) + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + /* sound hardware */ MCFG_SOUND_ADD("sn1", SN76496, SINDBADM_SOUND_CLOCK/4) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/segahang.cpp b/src/mame/drivers/segahang.cpp index f75a5af5631..ec657f6dc01 100644 --- a/src/mame/drivers/segahang.cpp +++ b/src/mame/drivers/segahang.cpp @@ -17,7 +17,6 @@ #include "emu.h" #include "includes/segahang.h" -#include "machine/segaic16.h" #include "machine/fd1089.h" #include "machine/fd1094.h" #include "sound/2203intf.h" @@ -306,21 +305,10 @@ READ8_MEMBER( segahang_state::sound_data_r ) { // assert ACK m_i8255_1->pc6_w(CLEAR_LINE); - return soundlatch_read(); + return m_soundlatch->read(space, 0); } -//------------------------------------------------- -// sound_irq - signal an IRQ to the sound CPU -//------------------------------------------------- - -WRITE_LINE_MEMBER( segahang_state::sound_irq ) -{ - m_soundcpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - - - //************************************************************************** // I8751-RELATED VBLANK INTERRUPT HANDLERS //************************************************************************** @@ -775,7 +763,7 @@ static MACHINE_CONFIG_START( shared_base, segahang_state ) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) MCFG_DEVICE_ADD("i8255_1", I8255, 0) - MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w)) + MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write)) MCFG_I8255_OUT_PORTB_CB(WRITE8(segahang_state, video_lamps_w)) MCFG_I8255_OUT_PORTC_CB(WRITE8(segahang_state, tilemap_sound_w)) @@ -795,6 +783,8 @@ static MACHINE_CONFIG_START( shared_base, segahang_state ) MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK_25MHz/4, 400, 0, 320, 262, 0, 224) MCFG_SCREEN_UPDATE_DRIVER(segahang_state, screen_update) MCFG_SCREEN_PALETTE("palette") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") MACHINE_CONFIG_END @@ -846,7 +836,7 @@ static MACHINE_CONFIG_FRAGMENT( sound_board_2203 ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2203, MASTER_CLOCK_8MHz/2) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(segahang_state, sound_irq)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.13) MCFG_SOUND_ROUTE(0, "rspeaker", 0.13) MCFG_SOUND_ROUTE(1, "lspeaker", 0.13) @@ -874,7 +864,7 @@ static MACHINE_CONFIG_FRAGMENT( sound_board_2203x2 ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ym1", YM2203, MASTER_CLOCK_8MHz/2) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(segahang_state, sound_irq)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.13) MCFG_SOUND_ROUTE(0, "rspeaker", 0.13) MCFG_SOUND_ROUTE(1, "lspeaker", 0.13) diff --git a/src/mame/drivers/segajw.cpp b/src/mame/drivers/segajw.cpp index a58adaa4e5a..fa372b4ea55 100644 --- a/src/mame/drivers/segajw.cpp +++ b/src/mame/drivers/segajw.cpp @@ -30,6 +30,7 @@ Also seem to be running on the same/similar hardware: #include "emu.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "sound/2612intf.h" #include "video/hd63484.h" @@ -43,7 +44,8 @@ public: segajw_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu") + m_audiocpu(*this, "audiocpu"), + m_soundlatch(*this, "soundlatch") { } DECLARE_READ16_MEMBER(coin_counter_r); @@ -64,6 +66,7 @@ protected: // devices required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; + required_device<generic_latch_8_device> m_soundlatch; // driver_device overrides virtual void machine_start() override; @@ -131,7 +134,7 @@ WRITE16_MEMBER(segajw_state::coinlockout_w) WRITE8_MEMBER(segajw_state::audiocpu_cmd_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -190,7 +193,7 @@ static ADDRESS_MAP_START( segajw_map, AS_PROGRAM, 16, segajw_state ) AM_RANGE(0x080002, 0x080003) AM_DEVREADWRITE("hd63484", hd63484_device, data_r, data_w) AM_RANGE(0x180000, 0x180001) AM_READ_PORT("DSW0") - AM_RANGE(0x180004, 0x180005) AM_READWRITE8(soundlatch2_byte_r, audiocpu_cmd_w, 0x00ff) + AM_RANGE(0x180004, 0x180005) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff) AM_WRITE8(audiocpu_cmd_w, 0x00ff) AM_RANGE(0x180008, 0x180009) AM_READ_PORT("DSW1") AM_RANGE(0x18000a, 0x18000b) AM_READ_PORT("DSW3") AM_RANGE(0x18000c, 0x18000d) AM_READ_PORT("DSW2") @@ -223,7 +226,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( segajw_audiocpu_io_map, AS_IO, 8, segajw_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x80, 0x83) AM_DEVREADWRITE("ymsnd", ym3438_device, read, write) - AM_RANGE(0xc0, 0xc0) AM_READWRITE(soundlatch_byte_r, soundlatch2_byte_w) + AM_RANGE(0xc0, 0xc0) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) ADDRESS_MAP_END static ADDRESS_MAP_START( segajw_hd63484_map, AS_0, 16, segajw_state ) @@ -416,6 +419,10 @@ static MACHINE_CONFIG_START( segajw, segajw_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM3438, 8000000) // unknown clock MCFG_YM2612_IRQ_HANDLER(INPUTLINE("maincpu", 5)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) diff --git a/src/mame/drivers/segaorun.cpp b/src/mame/drivers/segaorun.cpp index a07de247de8..a3e33761331 100644 --- a/src/mame/drivers/segaorun.cpp +++ b/src/mame/drivers/segaorun.cpp @@ -274,7 +274,6 @@ Notes: #include "emu.h" #include "includes/segaorun.h" #include "machine/fd1089.h" -#include "machine/segaic16.h" #include "sound/2151intf.h" #include "sound/segapcm.h" #include "includes/segaipt.h" @@ -550,7 +549,7 @@ WRITE16_MEMBER( segaorun_state::nop_w ) READ8_MEMBER( segaorun_state::sound_data_r ) { m_soundcpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - return soundlatch_read(); + return m_soundlatch->read(space, 0); } @@ -587,7 +586,7 @@ void segaorun_state::device_timer(emu_timer &timer, device_timer_id id, int para switch (id) { case TID_SOUND_WRITE: - soundlatch_write(param); + m_soundlatch->write(m_soundcpu->space(AS_PROGRAM), 0, param); m_soundcpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); break; @@ -1197,6 +1196,8 @@ static MACHINE_CONFIG_START( outrun_base, segaorun_state ) // sound hardware MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK/4) MCFG_SOUND_ROUTE(0, "lspeaker", 0.43) MCFG_SOUND_ROUTE(1, "rspeaker", 0.43) diff --git a/src/mame/drivers/segas16a.cpp b/src/mame/drivers/segas16a.cpp index caed5dd589b..daece602870 100644 --- a/src/mame/drivers/segas16a.cpp +++ b/src/mame/drivers/segas16a.cpp @@ -315,7 +315,7 @@ READ8_MEMBER( segas16a_state::sound_data_r ) { // assert ACK m_i8255->pc6_w(CLEAR_LINE); - return soundlatch_read(); + return m_soundlatch->read(space, 0); } @@ -1911,7 +1911,7 @@ static MACHINE_CONFIG_START( system16a, segas16a_state ) MCFG_WATCHDOG_ADD("watchdog") MCFG_DEVICE_ADD("i8255", I8255, 0) - MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w)) + MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write)) MCFG_I8255_OUT_PORTB_CB(WRITE8(segas16a_state, misc_control_w)) MCFG_I8255_OUT_PORTC_CB(WRITE8(segas16a_state, tilemap_sound_w)) @@ -1933,6 +1933,8 @@ static MACHINE_CONFIG_START( system16a, segas16a_state ) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", 4000000) MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(segas16a_state, n7751_control_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.43) diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index 171530fa06e..1e71a6afb92 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -870,7 +870,6 @@ S11 S13 S15 S17 |EPR12194 - - - EPR12195 - - #include "emu.h" #include "includes/segas16b.h" -#include "machine/segaic16.h" #include "machine/mc8123.h" #include "includes/segaipt.h" #include "sound/okim6295.h" @@ -983,7 +982,8 @@ UINT8 segas16b_state::mapper_sound_r() void segas16b_state::mapper_sound_w(UINT8 data) { - soundlatch_write(data & 0xff); + if (m_soundlatch != nullptr) + m_soundlatch->write(m_soundcpu->space(AS_PROGRAM), 0, data & 0xff); if (m_soundcpu != nullptr) m_soundcpu->set_input_line(0, HOLD_LINE); } @@ -1775,7 +1775,7 @@ static ADDRESS_MAP_START( lockonph_map, AS_PROGRAM, 16, segas16b_state ) AM_RANGE(0xC42000, 0xC42001) AM_READ_PORT("DSW1") AM_RANGE(0xC42002, 0xC42003) AM_READ_PORT("DSW2") - AM_RANGE(0x777706, 0x777707) AM_WRITE(sound_w16) // AM_WRITE8(soundlatch_byte_w, 0xff00) + AM_RANGE(0x777706, 0x777707) AM_WRITE(sound_w16) // AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0xff00) AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("workram") ADDRESS_MAP_END @@ -1810,7 +1810,7 @@ ADDRESS_MAP_END */ static ADDRESS_MAP_START( fpointbl_sound_map, AS_PROGRAM, 8, segas16b_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END @@ -1834,7 +1834,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas16b_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xdfff) AM_ROMBANK("soundbank") - AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe800, 0xe800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END @@ -1850,7 +1850,7 @@ static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas16b_state ) AM_RANGE(0x00, 0x01) AM_MIRROR(0x3e) AM_DEVREADWRITE("ym2151", ym2151_device, read, write) AM_RANGE(0x40, 0x40) AM_MIRROR(0x3f) AM_WRITE(upd7759_control_w) AM_RANGE(0x80, 0x80) AM_MIRROR(0x3f) AM_READ(upd7759_status_r) AM_DEVWRITE("upd", upd7759_device, port_w) - AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x3f) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x3f) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END // similar to whizz / other philko games in sidearms.cpp, but with the m6295 @@ -1865,7 +1865,7 @@ static ADDRESS_MAP_START( lockonph_sound_iomap, AS_IO, 8, segas16b_state ) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x40, 0x40) AM_WRITENOP // ?? AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc0, 0xc0) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -3606,6 +3606,8 @@ static MACHINE_CONFIG_START( system16b, segas16b_state ) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ym2151", MASTER_CLOCK_8MHz/2) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.43) @@ -3755,6 +3757,8 @@ static MACHINE_CONFIG_START( lockonph, segas16b_state ) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", XTAL_16MHz/4) // ?? // MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) // does set up the timer, but end up with no sound? MCFG_SOUND_ROUTE(0, "mono", 0.5) @@ -3779,6 +3783,7 @@ static MACHINE_CONFIG_DERIVED( atomicp, system16b ) // 10MHz CPU Clock verified MCFG_DEVICE_REMOVE("sprites") // sound hardware + MCFG_DEVICE_REMOVE("soundlatch") MCFG_DEVICE_REMOVE("ym2151") MCFG_SOUND_ADD("ym2413", YM2413, XTAL_20MHz/4) // 20MHz OSC divided by 4 (verified) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/segas18.cpp b/src/mame/drivers/segas18.cpp index 0dbb04eb3cf..67f94791302 100644 --- a/src/mame/drivers/segas18.cpp +++ b/src/mame/drivers/segas18.cpp @@ -30,7 +30,6 @@ ***************************************************************************/ #include "emu.h" -#include "machine/segaic16.h" #include "machine/nvram.h" #include "includes/segas18.h" #include "sound/2612intf.h" @@ -129,7 +128,7 @@ UINT8 segas18_state::mapper_sound_r() void segas18_state::mapper_sound_w(UINT8 data) { - soundlatch_write(data & 0xff); + m_soundlatch->write(m_soundcpu->space(AS_PROGRAM), 0, data & 0xff); m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -551,7 +550,7 @@ static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas18_state ) AM_RANGE(0x80, 0x83) AM_MIRROR(0x0c) AM_DEVREADWRITE("ym1", ym3438_device, read, write) AM_RANGE(0x90, 0x93) AM_MIRROR(0x0c) AM_DEVREADWRITE("ym2", ym3438_device, read, write) AM_RANGE(0xa0, 0xa0) AM_MIRROR(0x1f) AM_WRITE(soundbank_w) - AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x1f) AM_READ(soundlatch_byte_r) AM_WRITE(mcu_data_w) + AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x1f) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(mcu_data_w) ADDRESS_MAP_END @@ -1251,6 +1250,8 @@ static MACHINE_CONFIG_START( system18, segas18_state ) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM3438, 8000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MCFG_YM2612_IRQ_HANDLER(WRITELINE(segas18_state, ym3438_irq_handler)) diff --git a/src/mame/drivers/segaufo.cpp b/src/mame/drivers/segaufo.cpp index 12007ec721c..c40aa777e08 100644 --- a/src/mame/drivers/segaufo.cpp +++ b/src/mame/drivers/segaufo.cpp @@ -104,7 +104,6 @@ public: DECLARE_WRITE_LINE_MEMBER(pit_out0); DECLARE_WRITE_LINE_MEMBER(pit_out1); DECLARE_WRITE_LINE_MEMBER(pit_out2); - DECLARE_WRITE_LINE_MEMBER(ym3438_irq); DECLARE_READ8_MEMBER(crane_limits_r); DECLARE_WRITE8_MEMBER(stepper_w); DECLARE_WRITE8_MEMBER(cp_lamps_w); @@ -747,11 +746,6 @@ void ufo_state::machine_start() save_item(NAME(m_stepper)); } -WRITE_LINE_MEMBER(ufo_state::ym3438_irq) -{ - m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - static MACHINE_CONFIG_START( newufo, ufo_state ) /* basic machine hardware */ @@ -795,7 +789,7 @@ static MACHINE_CONFIG_START( newufo, ufo_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ym", YM3438, XTAL_16MHz/2) - MCFG_YM2612_IRQ_HANDLER(WRITELINE(ufo_state, ym3438_irq)) + MCFG_YM2612_IRQ_HANDLER(INPUTLINE("maincpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.40) MCFG_SOUND_ROUTE(1, "mono", 0.40) MACHINE_CONFIG_END diff --git a/src/mame/drivers/segaxbd.cpp b/src/mame/drivers/segaxbd.cpp index 87c7cf2983a..361193da404 100644 --- a/src/mame/drivers/segaxbd.cpp +++ b/src/mame/drivers/segaxbd.cpp @@ -261,10 +261,7 @@ ROMs: ***************************************************************************/ #include "emu.h" -#include "cpu/z80/z80.h" #include "includes/segaxbd.h" -#include "cpu/m68000/m68000.h" -#include "machine/segaic16.h" #include "machine/nvram.h" #include "sound/2151intf.h" #include "sound/segapcm.h" @@ -284,6 +281,7 @@ segaxbd_state::segaxbd_state(const machine_config &mconfig, const char *tag, dev m_sprites(*this, "sprites"), m_segaic16vid(*this, "segaic16vid"), m_segaic16road(*this, "segaic16road"), + m_soundlatch(*this, "soundlatch"), m_subram0(*this, "subram0"), m_road_priority(1), m_scanline_timer(nullptr), @@ -300,8 +298,6 @@ segaxbd_state::segaxbd_state(const machine_config &mconfig, const char *tag, dev memset(m_adc_reverse, 0, sizeof(m_adc_reverse)); memset(m_iochip_regs, 0, sizeof(m_iochip_regs)); palette_init(); - memset(m_latched_value, 0, sizeof(m_latched_value)); - memset(m_latch_read, 0, sizeof(m_latch_read)); } @@ -773,7 +769,7 @@ WRITE16_MEMBER( segaxbd_state::smgp_excs_w ) READ8_MEMBER( segaxbd_state::sound_data_r ) { m_soundcpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - return soundlatch_read(); + return m_soundlatch->read(space, 0); } @@ -791,7 +787,7 @@ void segaxbd_state::device_timer(emu_timer &timer, device_timer_id id, int param switch (id) { case TID_SOUND_WRITE: - soundlatch_write(param); + m_soundlatch->write(m_soundcpu->space(AS_PROGRAM), 0, param); m_soundcpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); // if an extra sound board is attached, do an nmi there as well @@ -1858,6 +1854,8 @@ static MACHINE_CONFIG_FRAGMENT( xboard ) // sound hardware MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK/4) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.43) diff --git a/src/mame/drivers/segaybd.cpp b/src/mame/drivers/segaybd.cpp index ad60759a7d4..54212cb0da8 100644 --- a/src/mame/drivers/segaybd.cpp +++ b/src/mame/drivers/segaybd.cpp @@ -57,11 +57,8 @@ MB89372 - Uses 3 serial data transfer protocols: ASYNC, COP & BOP. Has a built ***************************************************************************/ #include "emu.h" -#include "cpu/z80/z80.h" #include "includes/segaybd.h" -#include "cpu/m68000/m68000.h" #include "machine/mb8421.h" -#include "machine/segaic16.h" #include "machine/nvram.h" #include "sound/2151intf.h" #include "sound/segapcm.h" @@ -257,7 +254,7 @@ WRITE16_MEMBER( segaybd_state::sound_data_w ) READ8_MEMBER( segaybd_state::sound_data_r ) { m_soundcpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - return soundlatch_read(); + return m_soundlatch->read(space, 0); } @@ -373,7 +370,7 @@ void segaybd_state::device_timer(emu_timer &timer, device_timer_id id, int param break; case TID_SOUND_WRITE: - soundlatch_write(param); + m_soundlatch->write(m_soundcpu->space(AS_PROGRAM), 0, param); m_soundcpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); break; @@ -1409,6 +1406,8 @@ static MACHINE_CONFIG_START( yboard, segaybd_state ) // sound hardware MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK/8) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.43) diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp index a40c080e356..9d2b4a26441 100644 --- a/src/mame/drivers/seta.cpp +++ b/src/mame/drivers/seta.cpp @@ -1559,11 +1559,11 @@ WRITE16_MEMBER(seta_state::sub_ctrl_w) break; case 4/2: // not sure - if (ACCESSING_BITS_0_7) soundlatch_byte_w(space, 0, data & 0xff); + if (ACCESSING_BITS_0_7) if(m_soundlatch != nullptr) m_soundlatch->write(space, 0, data & 0xff); break; case 6/2: // not sure - if (ACCESSING_BITS_0_7) soundlatch2_byte_w(space, 0, data & 0xff); + if (ACCESSING_BITS_0_7) if(m_soundlatch2 != nullptr) m_soundlatch2->write(space, 0, data & 0xff); break; } @@ -1708,7 +1708,7 @@ WRITE16_MEMBER(seta_state::calibr50_soundlatch_w) { if (ACCESSING_BITS_0_7) { - soundlatch_word_w(space, 0, data, mem_mask); + m_soundlatch->write(space, 0, data & 0xff); m_subcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); space.device().execute().spin_until_time(attotime::from_usec(50)); // Allow the other cpu to reply } @@ -1733,7 +1733,7 @@ static ADDRESS_MAP_START( calibr50_map, AS_PROGRAM, 16, seta_state ) /**/AM_RANGE(0xd00000, 0xd005ff) AM_RAM AM_DEVREADWRITE("spritegen", seta001_device, spriteylow_r16, spriteylow_w16) // Sprites Y AM_RANGE(0xd00600, 0xd00607) AM_RAM AM_DEVREADWRITE("spritegen", seta001_device, spritectrl_r16, spritectrl_w16) AM_RANGE(0xe00000, 0xe03fff) AM_RAM AM_DEVREADWRITE("spritegen", seta001_device, spritecode_r16, spritecode_w16) // Sprites Code + X + Attr - AM_RANGE(0xb00000, 0xb00001) AM_READ(soundlatch2_word_r) AM_WRITE(calibr50_soundlatch_w) // From Sub CPU + AM_RANGE(0xb00000, 0xb00001) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff) AM_WRITE(calibr50_soundlatch_w) // From Sub CPU /**/AM_RANGE(0xc00000, 0xc00001) AM_RAM // ? $4000 ADDRESS_MAP_END @@ -2275,7 +2275,8 @@ ADDRESS_MAP_END ***************************************************************************/ static ADDRESS_MAP_START( daiohp_map, AS_PROGRAM, 16, seta_state ) - AM_RANGE(0x000000, 0x1fffff) AM_ROM AM_MIRROR(0x080000) // ROM + AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_MIRROR(0x080000) // ROM + AM_RANGE(0x100000, 0x17ffff) AM_ROM AM_MIRROR(0x080000) // ROM AM_RANGE(0x200000, 0x20ffff) AM_RAM // RAM AM_RANGE(0x400000, 0x400001) AM_READ_PORT("P1") // P1 AM_RANGE(0x400002, 0x400003) AM_READ_PORT("P2") // P2 @@ -2890,7 +2891,7 @@ WRITE16_MEMBER(seta_state::utoukond_soundlatch_w) if (ACCESSING_BITS_0_7) { m_audiocpu->set_input_line(0, HOLD_LINE); - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); } } @@ -3145,8 +3146,8 @@ READ8_MEMBER(seta_state::ff_r){return 0xff;} static ADDRESS_MAP_START( tndrcade_sub_map, AS_PROGRAM, 8, seta_state ) AM_RANGE(0x0000, 0x01ff) AM_RAM // RAM AM_RANGE(0x0800, 0x0800) AM_READ(ff_r) // ? (bits 0/1/2/3: 1 -> do test 0-ff/100-1e0/5001-57ff/banked rom) - //AM_RANGE(0x0800, 0x0800) AM_READ(soundlatch_byte_r) // - //AM_RANGE(0x0801, 0x0801) AM_READ(soundlatch2_byte_r) // + //AM_RANGE(0x0800, 0x0800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // + //AM_RANGE(0x0801, 0x0801) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // AM_RANGE(0x1000, 0x1000) AM_READ_PORT("P1") // P1 AM_RANGE(0x1000, 0x1000) AM_WRITE(sub_bankswitch_lockout_w) // ROM Bank + Coin Lockout AM_RANGE(0x1001, 0x1001) AM_READ_PORT("P2") // P2 @@ -3166,8 +3167,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( twineagl_sub_map, AS_PROGRAM, 8, seta_state ) AM_RANGE(0x0000, 0x01ff) AM_RAM // RAM - AM_RANGE(0x0800, 0x0800) AM_READ(soundlatch_byte_r) // - AM_RANGE(0x0801, 0x0801) AM_READ(soundlatch2_byte_r) // + AM_RANGE(0x0800, 0x0800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // + AM_RANGE(0x0801, 0x0801) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // AM_RANGE(0x1000, 0x1000) AM_READ_PORT("P1") // P1 AM_RANGE(0x1000, 0x1000) AM_WRITE(sub_bankswitch_lockout_w) // ROM Bank + Coin Lockout AM_RANGE(0x1001, 0x1001) AM_READ_PORT("P2") // P2 @@ -3208,8 +3209,8 @@ READ8_MEMBER(seta_state::downtown_ip_r) static ADDRESS_MAP_START( downtown_sub_map, AS_PROGRAM, 8, seta_state ) AM_RANGE(0x0000, 0x01ff) AM_RAM // RAM - AM_RANGE(0x0800, 0x0800) AM_READ(soundlatch_byte_r) // - AM_RANGE(0x0801, 0x0801) AM_READ(soundlatch2_byte_r) // + AM_RANGE(0x0800, 0x0800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // + AM_RANGE(0x0801, 0x0801) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // AM_RANGE(0x1000, 0x1007) AM_READ(downtown_ip_r) // Input Ports AM_RANGE(0x1000, 0x1000) AM_WRITE(sub_bankswitch_lockout_w) // ROM Bank + Coin Lockout AM_RANGE(0x5000, 0x57ff) AM_RAM AM_SHARE("sharedram") // Shared RAM @@ -3231,13 +3232,13 @@ MACHINE_RESET_MEMBER(seta_state,calibr50) WRITE8_MEMBER(seta_state::calibr50_soundlatch2_w) { - soundlatch2_byte_w(space,0,data); + m_soundlatch2->write(space,0,data); space.device().execute().spin_until_time(attotime::from_usec(50)); // Allow the other cpu to reply } static ADDRESS_MAP_START( calibr50_sub_map, AS_PROGRAM, 8, seta_state ) AM_RANGE(0x0000, 0x1fff) AM_DEVREADWRITE("x1snd", x1_010_device, read ,write) // Sound - AM_RANGE(0x4000, 0x4000) AM_READ(soundlatch_byte_r) // From Main CPU + AM_RANGE(0x4000, 0x4000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU AM_RANGE(0x4000, 0x4000) AM_WRITE(sub_bankswitch_w) // Bankswitching AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") // Banked ROM AM_RANGE(0xc000, 0xffff) AM_ROM // ROM @@ -3251,8 +3252,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( metafox_sub_map, AS_PROGRAM, 8, seta_state ) AM_RANGE(0x0000, 0x01ff) AM_RAM // RAM - AM_RANGE(0x0800, 0x0800) AM_READ(soundlatch_byte_r) // - AM_RANGE(0x0801, 0x0801) AM_READ(soundlatch2_byte_r) // + AM_RANGE(0x0800, 0x0800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // + AM_RANGE(0x0801, 0x0801) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // AM_RANGE(0x1000, 0x1000) AM_READ_PORT("COINS") // Coins AM_RANGE(0x1000, 0x1000) AM_WRITE(sub_bankswitch_lockout_w) // ROM Bank + Coin Lockout AM_RANGE(0x1002, 0x1002) AM_READ_PORT("P1") // P1 @@ -3279,7 +3280,7 @@ static ADDRESS_MAP_START( utoukond_sound_io_map, AS_IO, 8, seta_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ymsnd", ym3438_device, read, write) AM_RANGE(0x80, 0x80) AM_WRITENOP //? - AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc0, 0xc0) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -7775,6 +7776,9 @@ static MACHINE_CONFIG_START( twineagl, seta_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("x1snd", X1_010, 16000000) /* 16 MHz */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END @@ -7817,6 +7821,10 @@ static MACHINE_CONFIG_START( downtown, seta_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("x1snd", X1_010, 16000000) /* 16 MHz */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END @@ -7882,6 +7890,8 @@ static MACHINE_CONFIG_START( usclssic, seta_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("x1snd", X1_010, 16000000) /* 16 MHz */ MCFG_X1_010_ADDRESS(0x1000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -7932,6 +7942,10 @@ static MACHINE_CONFIG_START( calibr50, seta_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("x1snd", X1_010, 16000000) /* 16 MHz */ MCFG_X1_010_ADDRESS(0x1000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -7976,6 +7990,9 @@ static MACHINE_CONFIG_START( metafox, seta_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("x1snd", X1_010, 16000000) /* 16 MHz */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END @@ -9292,6 +9309,8 @@ static MACHINE_CONFIG_START( utoukond, seta_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("x1snd", X1_010, 16000000) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) diff --git a/src/mame/drivers/sg1000.cpp b/src/mame/drivers/sg1000.cpp index 23790083a21..e860f5537e6 100644 --- a/src/mame/drivers/sg1000.cpp +++ b/src/mame/drivers/sg1000.cpp @@ -635,8 +635,8 @@ void sg1000_state::machine_start() { if (m_cart->get_type() == SEGA8_DAHJEE_TYPEA || m_cart->get_type() == SEGA8_DAHJEE_TYPEB) { - m_maincpu->space(AS_PROGRAM).install_read_handler(0xc000, 0xffff, 0, 0, read8_delegate(FUNC(sega8_cart_slot_device::read_ram),(sega8_cart_slot_device*)m_cart)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0xc000, 0xffff, 0, 0, write8_delegate(FUNC(sega8_cart_slot_device::write_ram),(sega8_cart_slot_device*)m_cart)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0xc000, 0xffff, read8_delegate(FUNC(sega8_cart_slot_device::read_ram),(sega8_cart_slot_device*)m_cart)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(sega8_cart_slot_device::write_ram),(sega8_cart_slot_device*)m_cart)); } if (m_cart) @@ -676,8 +676,8 @@ void sc3000_state::machine_start() if (m_cart && m_cart->exists() && (m_cart->get_type() == SEGA8_BASIC_L3 || m_cart->get_type() == SEGA8_MUSIC_EDITOR || m_cart->get_type() == SEGA8_DAHJEE_TYPEA || m_cart->get_type() == SEGA8_DAHJEE_TYPEB)) { - m_maincpu->space(AS_PROGRAM).install_read_handler(0xc000, 0xffff, 0, 0, read8_delegate(FUNC(sega8_cart_slot_device::read_ram),(sega8_cart_slot_device*)m_cart)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0xc000, 0xffff, 0, 0, write8_delegate(FUNC(sega8_cart_slot_device::write_ram),(sega8_cart_slot_device*)m_cart)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0xc000, 0xffff, read8_delegate(FUNC(sega8_cart_slot_device::read_ram),(sega8_cart_slot_device*)m_cart)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(sega8_cart_slot_device::write_ram),(sega8_cart_slot_device*)m_cart)); } if (m_cart) diff --git a/src/mame/drivers/shadfrce.cpp b/src/mame/drivers/shadfrce.cpp index 59757c5f073..434fb0f4184 100644 --- a/src/mame/drivers/shadfrce.cpp +++ b/src/mame/drivers/shadfrce.cpp @@ -260,7 +260,7 @@ WRITE16_MEMBER(shadfrce_state::sound_brt_w) { if (ACCESSING_BITS_8_15) { - soundlatch_byte_w(space, 1, data >> 8); + m_soundlatch->write(space, 1, data >> 8); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE ); } else @@ -396,7 +396,7 @@ static ADDRESS_MAP_START( shadfrce_sound_map, AS_PROGRAM, 8, shadfrce_state ) AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_RANGE(0xc800, 0xc801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0xd800, 0xd800) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xe800, 0xe800) AM_WRITE(oki_bankswitch_w) AM_RANGE(0xf000, 0xffff) AM_RAM ADDRESS_MAP_END @@ -562,6 +562,8 @@ static MACHINE_CONFIG_START( shadfrce, shadfrce_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz) /* verified on pcb */ MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) diff --git a/src/mame/drivers/shangha3.cpp b/src/mame/drivers/shangha3.cpp index f6e434c4cd8..ef29d1b67ec 100644 --- a/src/mame/drivers/shangha3.cpp +++ b/src/mame/drivers/shangha3.cpp @@ -37,7 +37,6 @@ Notes: #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" #include "sound/ay8910.h" -#include "sound/okim6295.h" #include "sound/2612intf.h" #include "includes/shangha3.h" @@ -113,7 +112,7 @@ WRITE16_MEMBER(shangha3_state::heberpop_sound_command_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); /* RST 38h */ } } @@ -183,7 +182,7 @@ static ADDRESS_MAP_START( heberpop_sound_io_map, AS_IO, 8, shangha3_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ymsnd", ym3438_device, read, write) AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc0, 0xc0) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -519,6 +518,8 @@ static MACHINE_CONFIG_START( heberpop, shangha3_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3438, XTAL_48MHz/6) /* 8 MHz? */ MCFG_YM2612_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI)) MCFG_SOUND_ROUTE(0, "mono", 0.40) @@ -560,6 +561,8 @@ static MACHINE_CONFIG_START( blocken, shangha3_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3438, XTAL_48MHz/6) /* 8 MHz? */ MCFG_YM2612_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI)) MCFG_SOUND_ROUTE(0, "mono", 0.40) diff --git a/src/mame/drivers/sigmab52.cpp b/src/mame/drivers/sigmab52.cpp index ea3947f61db..586f52e533e 100644 --- a/src/mame/drivers/sigmab52.cpp +++ b/src/mame/drivers/sigmab52.cpp @@ -127,6 +127,7 @@ #include "cpu/m6809/m6809.h" #include "machine/6840ptm.h" #include "machine/6850acia.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "sound/3812intf.h" #include "video/hd63484.h" @@ -334,7 +335,7 @@ static ADDRESS_MAP_START( jwildb52_map, AS_PROGRAM, 8, sigmab52_state ) // AM_RANGE(0xf770, 0xf77f) Bill validator AM_RANGE(0xf780, 0xf780) AM_WRITE(audiocpu_cmd_irq_w) - AM_RANGE(0xf790, 0xf790) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xf790, 0xf790) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xf7b0, 0xf7b0) AM_WRITE(coin_enable_w) AM_RANGE(0xf7d5, 0xf7d5) AM_WRITE(hopper_w) @@ -360,7 +361,7 @@ static ADDRESS_MAP_START( sound_prog_map, AS_PROGRAM, 8, sigmab52_state ) AM_RANGE(0x0000, 0x1fff) AM_RAM AM_RANGE(0x6020, 0x6027) AM_DEVREADWRITE("6840ptm_2", ptm6840_device, read, write) AM_RANGE(0x6030, 0x6030) AM_WRITE(audiocpu_irq_ack_w) - AM_RANGE(0x6050, 0x6050) AM_READ(soundlatch_byte_r) + AM_RANGE(0x6050, 0x6050) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x6060, 0x6061) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write) AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("audiocpu", 0) ADDRESS_MAP_END @@ -605,6 +606,9 @@ static MACHINE_CONFIG_START( jwildb52, sigmab52_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, AUX_CLOCK) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/skimaxx.cpp b/src/mame/drivers/skimaxx.cpp index 439f0cc874a..a4076589024 100644 --- a/src/mame/drivers/skimaxx.cpp +++ b/src/mame/drivers/skimaxx.cpp @@ -326,7 +326,7 @@ static ADDRESS_MAP_START( 68030_1_map, AS_PROGRAM, 32, skimaxx_state ) AM_RANGE(0x20000050, 0x20000057) AM_READ(skimaxx_analog_r ) AM_WRITENOP // read (0-1f), write motor? - AM_RANGE(0xfffc0000, 0xffffffff) AM_RAM AM_MIRROR(0x00020000) + AM_RANGE(0xfffc0000, 0xfffdffff) AM_RAM AM_MIRROR(0x00020000) ADDRESS_MAP_END diff --git a/src/mame/drivers/slapfght.cpp b/src/mame/drivers/slapfght.cpp index 79562e9a396..4a7be1ddf08 100644 --- a/src/mame/drivers/slapfght.cpp +++ b/src/mame/drivers/slapfght.cpp @@ -463,7 +463,7 @@ static ADDRESS_MAP_START( perfrman_sound_map, AS_PROGRAM, 8, slapfght_state ) AM_RANGE(0xa090, 0xa090) AM_DEVWRITE("ay2", ay8910_device, address_w) AM_RANGE(0xa091, 0xa091) AM_DEVREAD("ay2", ay8910_device, data_r) AM_RANGE(0xa092, 0xa092) AM_DEVWRITE("ay2", ay8910_device, data_w) - AM_RANGE(0xa0e0, 0xa0e0) AM_MIRROR(0x0010) AM_MASK(0x0010) AM_WRITE(sound_nmi_enable_w) + AM_RANGE(0xa0e0, 0xa0e0) AM_SELECT(0x0010) AM_WRITE(sound_nmi_enable_w) ADDRESS_MAP_END static ADDRESS_MAP_START( tigerh_sound_map, AS_PROGRAM, 8, slapfght_state ) @@ -474,7 +474,7 @@ static ADDRESS_MAP_START( tigerh_sound_map, AS_PROGRAM, 8, slapfght_state ) AM_RANGE(0xa090, 0xa090) AM_DEVWRITE("ay2", ay8910_device, address_w) AM_RANGE(0xa091, 0xa091) AM_DEVREAD("ay2", ay8910_device, data_r) AM_RANGE(0xa092, 0xa092) AM_DEVWRITE("ay2", ay8910_device, data_w) - AM_RANGE(0xa0e0, 0xa0e0) AM_MIRROR(0x0010) AM_MASK(0x0010) AM_WRITE(sound_nmi_enable_w) + AM_RANGE(0xa0e0, 0xa0e0) AM_SELECT(0x0010) AM_WRITE(sound_nmi_enable_w) AM_RANGE(0xc800, 0xcfff) AM_RAM AM_SHARE("share1") AM_RANGE(0xd000, 0xffff) AM_RAM ADDRESS_MAP_END diff --git a/src/mame/drivers/sliver.cpp b/src/mame/drivers/sliver.cpp index db675b6ab99..5e1984e94a8 100644 --- a/src/mame/drivers/sliver.cpp +++ b/src/mame/drivers/sliver.cpp @@ -66,10 +66,11 @@ Notes: #include "emu.h" #include "cpu/m68000/m68000.h" +#include "machine/gen_latch.h" #include "sound/okim6295.h" #include "cpu/mcs51/mcs51.h" #include "video/ramdac.h" -#include "libjpeg/jpeglib.h" +#include "jpeglib.h" #define FIFO_SIZE 1024 @@ -84,9 +85,10 @@ public: sliver_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_colorram(*this, "colorram"), m_audiocpu(*this, "audiocpu"), - m_screen(*this, "screen") { } + m_screen(*this, "screen"), + m_soundlatch(*this, "soundlatch"), + m_colorram(*this, "colorram") { } UINT16 m_io_offset; UINT16 m_io_reg[IO_SIZE]; @@ -101,6 +103,9 @@ public: int m_clr_offset; required_device<cpu_device> m_maincpu; + required_device<cpu_device> m_audiocpu; + required_device<screen_device> m_screen; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_colorram; bitmap_rgb32 m_bitmap_fg; bitmap_rgb32 m_bitmap_bg; @@ -123,8 +128,6 @@ public: void plot_pixel_pal(int x, int y, int addr); void blit_gfx(); void render_jpeg(); - required_device<cpu_device> m_audiocpu; - required_device<screen_device> m_screen; }; void sliver_state::plot_pixel_rgb(int x, int y, UINT32 r, UINT32 g, UINT32 b) @@ -316,7 +319,7 @@ WRITE16_MEMBER(sliver_state::io_data_w) WRITE16_MEMBER(sliver_state::sound_w) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(MCS51_INT0_LINE, HOLD_LINE); } @@ -363,7 +366,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( soundmem_io, AS_IO, 8, sliver_state ) AM_RANGE(0x0100, 0x0100) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0x0101, 0x0101) AM_READ(soundlatch_byte_r) + AM_RANGE(0x0101, 0x0101) AM_DEVREAD("soundlatch", generic_latch_8_device, read) /* ports */ AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_WRITE(oki_setbank ) ADDRESS_MAP_END @@ -486,6 +489,8 @@ static MACHINE_CONFIG_START( sliver, sliver_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", 1000000, OKIM6295_PIN7_HIGH) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.6) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.6) diff --git a/src/mame/drivers/slotcarn.cpp b/src/mame/drivers/slotcarn.cpp index 643f696b7fe..b3beb20042a 100644 --- a/src/mame/drivers/slotcarn.cpp +++ b/src/mame/drivers/slotcarn.cpp @@ -51,7 +51,6 @@ public: DECLARE_READ8_MEMBER(palette_r); DECLARE_WRITE8_MEMBER(palette_w); DECLARE_WRITE_LINE_MEMBER(hsync_changed); - DECLARE_WRITE_LINE_MEMBER(vsync_changed); MC6845_BEGIN_UPDATE(crtc_begin_update); MC6845_UPDATE_ROW(crtc_update_row); virtual void machine_start() override; @@ -162,10 +161,6 @@ WRITE_LINE_MEMBER(slotcarn_state::hsync_changed) m_screen->update_partial(m_screen->vpos()); } -WRITE_LINE_MEMBER(slotcarn_state::vsync_changed) -{ - m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} /******************************* * Memory Map * @@ -567,7 +562,7 @@ static MACHINE_CONFIG_START( slotcarn, slotcarn_state ) MCFG_MC6845_BEGIN_UPDATE_CB(slotcarn_state, crtc_begin_update) MCFG_MC6845_UPDATE_ROW_CB(slotcarn_state, crtc_update_row) MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(slotcarn_state, hsync_changed)) - MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(slotcarn_state, vsync_changed)) + MCFG_MC6845_OUT_VSYNC_CB(INPUTLINE("maincpu", 0)) MCFG_GFXDECODE_ADD("gfxdecode", "palette", slotcarn) MCFG_PALETTE_ADD("palette", 0x400) diff --git a/src/mame/drivers/smc777.cpp b/src/mame/drivers/smc777.cpp index 627f850559a..13d93a20afc 100644 --- a/src/mame/drivers/smc777.cpp +++ b/src/mame/drivers/smc777.cpp @@ -608,9 +608,9 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( smc777_io, AS_IO, 8, smc777_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x00, 0x07) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(vram_r, vram_w) - AM_RANGE(0x08, 0x0f) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(attr_r, attr_w) - AM_RANGE(0x10, 0x17) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(pcg_r, pcg_w) + AM_RANGE(0x00, 0x07) AM_SELECT(0xff00) AM_READWRITE(vram_r, vram_w) + AM_RANGE(0x08, 0x0f) AM_SELECT(0xff00) AM_READWRITE(attr_r, attr_w) + AM_RANGE(0x10, 0x17) AM_SELECT(0xff00) AM_READWRITE(pcg_r, pcg_w) AM_RANGE(0x18, 0x19) AM_MIRROR(0xff00) AM_WRITE(mc6845_w) AM_RANGE(0x1a, 0x1b) AM_MIRROR(0xff00) AM_READWRITE(key_r, key_w) AM_RANGE(0x1c, 0x1c) AM_MIRROR(0xff00) AM_READWRITE(system_input_r, system_output_w) @@ -633,7 +633,7 @@ static ADDRESS_MAP_START( smc777_io, AS_IO, 8, smc777_state ) // AM_RANGE(0x40, 0x47) ieee-488 // AM_RANGE(0x48, 0x4f) hdd (winchester) AM_RANGE(0x51, 0x51) AM_MIRROR(0xff00) AM_READ_PORT("JOY_1P") AM_WRITE(color_mode_w) - AM_RANGE(0x52, 0x52) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_WRITE(ramdac_w) + AM_RANGE(0x52, 0x52) AM_SELECT(0xff00) AM_WRITE(ramdac_w) AM_RANGE(0x53, 0x53) AM_MIRROR(0xff00) AM_DEVWRITE("sn1", sn76489a_device, write) // AM_RANGE(0x54, 0x59) vrt controller // AM_RANGE(0x5a, 0x5b) ram banking @@ -641,7 +641,7 @@ static ADDRESS_MAP_START( smc777_io, AS_IO, 8, smc777_state ) // AM_RANGE(0x74, 0x74) ieee-488 rom // AM_RANGE(0x75, 0x75) vrt controller rom // AM_RANGE(0x7e, 0x7f) kanji rom - AM_RANGE(0x80, 0xff) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(fbuf_r, fbuf_w) + AM_RANGE(0x80, 0xff) AM_SELECT(0xff00) AM_READWRITE(fbuf_r, fbuf_w) ADDRESS_MAP_END /* Input ports */ diff --git a/src/mame/drivers/sms.cpp b/src/mame/drivers/sms.cpp index 1144faedcf0..8f6480c28e7 100644 --- a/src/mame/drivers/sms.cpp +++ b/src/mame/drivers/sms.cpp @@ -460,12 +460,6 @@ static INPUT_PORTS_START( gg ) INPUT_PORTS_END -WRITE_LINE_MEMBER(sms_state::sms_int_callback) -{ - m_maincpu->set_input_line(0, state); -} - - static MACHINE_CONFIG_START( sms_ntsc_base, sms_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, XTAL_10_738635MHz/3) @@ -525,7 +519,7 @@ static MACHINE_CONFIG_DERIVED( sms2_ntsc, sms_ntsc_base ) MCFG_DEVICE_ADD("sms_vdp", SEGA315_5246, 0) MCFG_SEGA315_5246_SET_SCREEN("screen") MCFG_SEGA315_5246_IS_PAL(false) - MCFG_SEGA315_5246_INT_CB(WRITELINE(sms_state, sms_int_callback)) + MCFG_SEGA315_5246_INT_CB(INPUTLINE("maincpu", 0)) MCFG_SEGA315_5246_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) MACHINE_CONFIG_END @@ -568,7 +562,7 @@ static MACHINE_CONFIG_DERIVED( sms1_ntsc, sms_ntsc_base ) MCFG_DEVICE_ADD("sms_vdp", SEGA315_5124, 0) MCFG_SEGA315_5124_SET_SCREEN("screen") MCFG_SEGA315_5124_IS_PAL(false) - MCFG_SEGA315_5124_INT_CB(WRITELINE(sms_state, sms_int_callback)) + MCFG_SEGA315_5124_INT_CB(INPUTLINE("maincpu", 0)) MCFG_SEGA315_5124_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) // card and expansion slots, not present in Master System II @@ -666,7 +660,7 @@ static MACHINE_CONFIG_DERIVED( sms2_pal, sms_pal_base ) MCFG_DEVICE_ADD("sms_vdp", SEGA315_5246, 0) MCFG_SEGA315_5246_SET_SCREEN("screen") MCFG_SEGA315_5246_IS_PAL(true) - MCFG_SEGA315_5246_INT_CB(WRITELINE(sms_state, sms_int_callback)) + MCFG_SEGA315_5246_INT_CB(INPUTLINE("maincpu", 0)) MCFG_SEGA315_5246_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) MACHINE_CONFIG_END @@ -708,7 +702,7 @@ static MACHINE_CONFIG_DERIVED( sms1_pal, sms_pal_base ) MCFG_DEVICE_ADD("sms_vdp", SEGA315_5124, 0) MCFG_SEGA315_5124_SET_SCREEN("screen") MCFG_SEGA315_5124_IS_PAL(true) - MCFG_SEGA315_5124_INT_CB(WRITELINE(sms_state, sms_int_callback)) + MCFG_SEGA315_5124_INT_CB(INPUTLINE("maincpu", 0)) MCFG_SEGA315_5124_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) // card and expansion slots, not present in Master System II @@ -773,7 +767,7 @@ static MACHINE_CONFIG_START( gamegear, sms_state ) MCFG_DEVICE_ADD("sms_vdp", SEGA315_5378, 0) MCFG_SEGA315_5378_SET_SCREEN("screen") MCFG_SEGA315_5378_IS_PAL(false) - MCFG_SEGA315_5378_INT_CB(WRITELINE(sms_state, sms_int_callback)) + MCFG_SEGA315_5378_INT_CB(INPUTLINE("maincpu", 0)) MCFG_SEGA315_5378_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) /* sound hardware */ diff --git a/src/mame/drivers/sms_bootleg.cpp b/src/mame/drivers/sms_bootleg.cpp index d4641fc961b..a6874ce9e36 100644 --- a/src/mame/drivers/sms_bootleg.cpp +++ b/src/mame/drivers/sms_bootleg.cpp @@ -192,7 +192,7 @@ static MACHINE_CONFIG_START( sms_supergame, smsbootleg_state ) MCFG_DEVICE_ADD("sms_vdp", SEGA315_5246, 0) MCFG_SEGA315_5246_SET_SCREEN("screen") MCFG_SEGA315_5246_IS_PAL(false) - MCFG_SEGA315_5246_INT_CB(WRITELINE(sms_state, sms_int_callback)) + MCFG_SEGA315_5246_INT_CB(INPUTLINE("maincpu", 0)) MCFG_SEGA315_5246_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/snes.cpp b/src/mame/drivers/snes.cpp index 55f81e89d75..4309c594e36 100644 --- a/src/mame/drivers/snes.cpp +++ b/src/mame/drivers/snes.cpp @@ -1221,20 +1221,20 @@ void snes_console_state::machine_start() m_maincpu->set_5a22_map(); break; case SNES_DSP: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x208000, 0x20ffff, 0, 0x9f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x208000, 0x20ffff, 0, 0x9f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x208000, 0x20ffff, 0, 0x9f0000, 0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x208000, 0x20ffff, 0, 0x9f0000, 0, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); break; case SNES_DSP_2MB: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x600000, 0x607fff, 0, 0x8f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x600000, 0x607fff, 0, 0x8f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x600000, 0x607fff, 0, 0x8f0000, 0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x600000, 0x607fff, 0, 0x8f0000, 0, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); break; case SNES_DSP4: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x308000, 0x30ffff, 0, 0x8f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x308000, 0x30ffff, 0, 0x8f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x308000, 0x30ffff, 0, 0x8f0000, 0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x308000, 0x30ffff, 0, 0x8f0000, 0, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); break; case SNES_OBC1: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x006000, 0x007fff, 0, 0xbf0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x006000, 0x007fff, 0, 0xbf0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x006000, 0x007fff, 0, 0xbf0000, 0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x006000, 0x007fff, 0, 0xbf0000, 0, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); break; case SNES_SFX: m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snessfx_lo_r),this), write8_delegate(FUNC(snes_console_state::snessfx_lo_w),this)); @@ -1261,15 +1261,15 @@ void snes_console_state::machine_start() case SNES_DSP_MODE21: m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snes21_lo_r),this), write8_delegate(FUNC(snes_console_state::snes21_lo_w),this)); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes21_hi_r),this), write8_delegate(FUNC(snes_console_state::snes21_hi_w),this)); - m_maincpu->space(AS_PROGRAM).install_read_handler(0x006000, 0x007fff, 0, 0x9f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x006000, 0x007fff, 0, 0x9f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x006000, 0x007fff, 0, 0x9f0000, 0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x006000, 0x007fff, 0, 0x9f0000, 0, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); m_maincpu->set_5a22_map(); break; case SNES_SRTC: m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snes21_lo_r),this), write8_delegate(FUNC(snes_console_state::snes21_lo_w),this)); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes21_hi_r),this), write8_delegate(FUNC(snes_console_state::snes21_hi_w),this)); - m_maincpu->space(AS_PROGRAM).install_read_handler(0x002800, 0x002800, 0, 0xbf0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x002801, 0x002801, 0, 0xbf0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x002800, 0x002800, 0, 0xbf0000, 0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x002801, 0x002801, 0, 0xbf0000, 0, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); m_maincpu->set_5a22_map(); break; case SNES_SPC7110: @@ -1285,12 +1285,12 @@ void snes_console_state::machine_start() break; // pirate 'mappers' case SNES_POKEMON: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x800000, 0x80ffff, 0, 0x780000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x800000, 0x80ffff, 0, 0x780000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x800000, 0x80ffff, 0, 0x780000, 0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x800000, 0x80ffff, 0, 0x780000, 0, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); break; case SNES_TEKKEN2: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x8087ff, 0, 0x3f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x808000, 0x8087ff, 0, 0x3f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x8087ff, 0, 0x3f0000, 0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x808000, 0x8087ff, 0, 0x3f0000, 0, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); break; case SNES_MCPIR1: case SNES_MCPIR2: @@ -1301,13 +1301,13 @@ void snes_console_state::machine_start() break; case SNES_SOULBLAD: // reads from xxx0-xxx3in range [80-bf] return a fixed sequence of 4bits; reads in range [c0-ff] return open bus - m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x808003, 0, 0x3f7ff0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x808003, 0, 0x3f7ff0, 0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); m_maincpu->space(AS_PROGRAM).install_read_handler(0xc00000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes_open_bus_r),this)); break; case SNES_BUGS: case SNES_BANANA: -// m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x80ffff, 0, 0x780000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); -// m_maincpu->space(AS_PROGRAM).install_write_handler(0x808000, 0x80ffff, 0, 0x780000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); +// m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x80ffff, 0, 0x780000, 0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); +// m_maincpu->space(AS_PROGRAM).install_write_handler(0x808000, 0x80ffff, 0, 0x780000, 0, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); // m_maincpu->set_5a22_map(); break; } diff --git a/src/mame/drivers/snk.cpp b/src/mame/drivers/snk.cpp index e05bc0a34d9..a682a3bff67 100644 --- a/src/mame/drivers/snk.cpp +++ b/src/mame/drivers/snk.cpp @@ -328,14 +328,14 @@ enum WRITE8_MEMBER(snk_state::marvins_soundlatch_w) { m_marvins_sound_busy_flag = 1; - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(0, HOLD_LINE); } READ8_MEMBER(snk_state::marvins_soundlatch_r) { m_marvins_sound_busy_flag = 0; - return soundlatch_byte_r(space, 0); + return m_soundlatch->read(space, 0); } CUSTOM_INPUT_MEMBER(snk_state::marvins_sound_busy) @@ -374,14 +374,14 @@ TIMER_CALLBACK_MEMBER(snk_state::sgladiat_sndirq_update_callback) WRITE8_MEMBER(snk_state::sgladiat_soundlatch_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sgladiat_sndirq_update_callback),this), CMDIRQ_BUSY_ASSERT); } READ8_MEMBER(snk_state::sgladiat_soundlatch_r) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sgladiat_sndirq_update_callback),this), BUSY_CLEAR); - return soundlatch_byte_r(space,0); + return m_soundlatch->read(space,0); } READ8_MEMBER(snk_state::sgladiat_sound_nmi_ack_r) @@ -474,7 +474,7 @@ WRITE_LINE_MEMBER(snk_state::ymirq_callback_2) WRITE8_MEMBER(snk_state::snk_soundlatch_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), CMDIRQ_BUSY_ASSERT); } @@ -522,7 +522,7 @@ READ8_MEMBER(snk_state::tnk3_ymirq_ack_r) READ8_MEMBER(snk_state::tnk3_busy_clear_r) { // it's uncertain whether the latch should be cleared here or when it's read - soundlatch_clear_byte_w(space, 0, 0); + m_soundlatch->clear_w(space, 0, 0); machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), BUSY_CLEAR); return 0xff; } @@ -1410,7 +1410,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( tnk3_YM3526_sound_map, AS_PROGRAM, 8, snk_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xc000, 0xc000) AM_READ(tnk3_busy_clear_r) AM_RANGE(0xe000, 0xe001) AM_DEVREADWRITE("ym1", ym3526_device, read, write) AM_RANGE(0xe004, 0xe004) AM_READ(tnk3_cmdirq_ack_r) @@ -1420,7 +1420,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( aso_YM3526_sound_map, AS_PROGRAM, 8, snk_state ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc7ff) AM_RAM - AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xd000, 0xd000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xe000, 0xe000) AM_READ(tnk3_busy_clear_r) AM_RANGE(0xf000, 0xf001) AM_DEVREADWRITE("ym1", ym3526_device, read, write) // AM_RANGE(0xf002, 0xf002) AM_READNOP unknown @@ -1431,7 +1431,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( YM3526_YM3526_sound_map, AS_PROGRAM, 8, snk_state ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xcfff) AM_RAM - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xe800, 0xe800) AM_DEVREADWRITE("ym1", ym3526_device, status_port_r, control_port_w) AM_RANGE(0xec00, 0xec00) AM_DEVWRITE("ym1", ym3526_device, write_port_w) AM_RANGE(0xf000, 0xf000) AM_DEVREADWRITE("ym2", ym3526_device, status_port_r, control_port_w) @@ -1442,7 +1442,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( YM3812_sound_map, AS_PROGRAM, 8, snk_state ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xcfff) AM_RAM - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xe800, 0xe800) AM_DEVREADWRITE("ym1", ym3812_device, status_port_r, control_port_w) AM_RANGE(0xec00, 0xec00) AM_DEVWRITE("ym1", ym3812_device, write_port_w) AM_RANGE(0xf800, 0xf800) AM_READWRITE(snk_sound_status_r, snk_sound_status_w) @@ -1451,7 +1451,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( YM3526_Y8950_sound_map, AS_PROGRAM, 8, snk_state ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xcfff) AM_RAM - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xe800, 0xe800) AM_DEVREADWRITE("ym1", ym3526_device, status_port_r, control_port_w) AM_RANGE(0xec00, 0xec00) AM_DEVWRITE("ym1", ym3526_device, write_port_w) AM_RANGE(0xf000, 0xf000) AM_DEVREADWRITE("ym2", y8950_device, status_port_r, control_port_w) @@ -1462,7 +1462,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( YM3812_Y8950_sound_map, AS_PROGRAM, 8, snk_state ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xcfff) AM_RAM - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xe800, 0xe800) AM_DEVREADWRITE("ym1", ym3812_device, status_port_r, control_port_w) AM_RANGE(0xec00, 0xec00) AM_DEVWRITE("ym1", ym3812_device, write_port_w) AM_RANGE(0xf000, 0xf000) AM_DEVREADWRITE("ym2", y8950_device, status_port_r, control_port_w) @@ -1473,7 +1473,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( Y8950_sound_map, AS_PROGRAM, 8, snk_state ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xcfff) AM_RAM - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf000, 0xf000) AM_DEVREADWRITE("ym2", y8950_device, status_port_r, control_port_w) AM_RANGE(0xf400, 0xf400) AM_DEVWRITE("ym2", y8950_device, write_port_w) AM_RANGE(0xf800, 0xf800) AM_READWRITE(snk_sound_status_r, snk_sound_status_w) @@ -3643,6 +3643,8 @@ static MACHINE_CONFIG_START( marvins, snk_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 2000000) /* verified on schematics */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) @@ -3713,6 +3715,8 @@ static MACHINE_CONFIG_START( jcross, snk_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 2000000) /* NOT verified */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) @@ -3792,6 +3796,8 @@ static MACHINE_CONFIG_START( tnk3, snk_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM3526, XTAL_8MHz/2) /* verified on pcb */ MCFG_YM3526_IRQ_HANDLER(WRITELINE(snk_state, ymirq_callback_1)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0) @@ -3881,6 +3887,8 @@ static MACHINE_CONFIG_START( ikari, snk_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM3526, XTAL_8MHz/2) /* verified on pcb */ MCFG_YM3526_IRQ_HANDLER(WRITELINE(snk_state, ymirq_callback_1)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0) @@ -3936,6 +3944,8 @@ static MACHINE_CONFIG_START( bermudat, snk_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM3526, XTAL_8MHz/2) /* verified on pcb */ MCFG_YM3526_IRQ_HANDLER(WRITELINE(snk_state, ymirq_callback_1)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0) @@ -4034,6 +4044,8 @@ static MACHINE_CONFIG_START( tdfever, snk_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM3526, 4000000) MCFG_YM3526_IRQ_HANDLER(WRITELINE(snk_state, ymirq_callback_1)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/snk68.cpp b/src/mame/drivers/snk68.cpp index d173946a5ab..be39dc214f3 100644 --- a/src/mame/drivers/snk68.cpp +++ b/src/mame/drivers/snk68.cpp @@ -97,7 +97,7 @@ WRITE16_MEMBER(snk68_state::sound_w) { if (ACCESSING_BITS_8_15) { - soundlatch_byte_w(space, 0, data >> 8); + m_soundlatch->write(space, 0, data >> 8); m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -136,7 +136,7 @@ static ADDRESS_MAP_START( searchar_map, AS_PROGRAM, 16, snk68_state ) // AM_RANGE(0x0f0000, 0x0f0001) AM_WRITENOP /* ?? */ AM_RANGE(0x0f0000, 0x0f0001) AM_READ_PORT("DSW1") AM_RANGE(0x0f0008, 0x0f0009) AM_READ_PORT("DSW2") - AM_RANGE(0x0f8000, 0x0f8001) AM_READ8(soundlatch2_byte_r, 0xff00) + AM_RANGE(0x0f8000, 0x0f8001) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0xff00) AM_RANGE(0x100000, 0x107fff) AM_DEVREADWRITE("sprites", snk68_spr_device, spriteram_r, spriteram_w) AM_SHARE("spriteram") // only partially populated AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(searchar_fg_videoram_w) AM_MIRROR(0x1000) AM_SHARE("pow_fg_videoram") /* Mirror is used by Ikari 3 */ AM_RANGE(0x300000, 0x33ffff) AM_ROM AM_REGION("user1", 0) /* Extra code bank */ @@ -148,7 +148,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, snk68_state ) AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r) AM_WRITE(soundlatch2_byte_w) + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) ADDRESS_MAP_END WRITE8_MEMBER(snk68_state::D7759_write_port_0_w) @@ -612,13 +612,16 @@ static MACHINE_CONFIG_START( pow, snk68_state ) MCFG_PALETTE_ADD("palette", 0x800) MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0) - /* sound hardware */ - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_DEVICE_ADD("sprites", SNK68_SPR, 0) MCFG_SNK68_SPR_GFXDECODE("gfxdecode") MCFG_SNK68_SPR_SET_TILE_INDIRECT( snk68_state, tile_callback_pow ) + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2) /* verified on pcb */ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -627,16 +630,17 @@ static MACHINE_CONFIG_START( pow, snk68_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( streetsm, pow ) + MCFG_DEVICE_MODIFY("sprites") + MCFG_SNK68_SPR_SET_TILE_INDIRECT( snk68_state, tile_callback_notpow ) +MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( searchar, pow ) +static MACHINE_CONFIG_DERIVED( searchar, streetsm ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(searchar_map) MCFG_VIDEO_START_OVERRIDE(snk68_state,searchar) - - MCFG_DEVICE_MODIFY("sprites") - MCFG_SNK68_SPR_SET_TILE_INDIRECT( snk68_state, tile_callback_notpow ) MACHINE_CONFIG_END @@ -1099,7 +1103,7 @@ ROM_END GAME( 1988, pow, 0, pow, pow, driver_device, 0, ROT0, "SNK", "P.O.W. - Prisoners of War (US version 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, powj, pow, pow, powj, driver_device, 0, ROT0, "SNK", "Datsugoku - Prisoners of War (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, streetsm, 0, pow, streetsm, driver_device, 0, ROT0, "SNK", "Street Smart (US version 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, streetsm, 0, streetsm, streetsm, driver_device, 0, ROT0, "SNK", "Street Smart (US version 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, streetsm1, streetsm, searchar, streetsm, driver_device, 0, ROT0, "SNK", "Street Smart (US version 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, streetsmw, streetsm, searchar, streetsj, driver_device, 0, ROT0, "SNK", "Street Smart (World version 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, streetsmj, streetsm, searchar, streetsj, driver_device, 0, ROT0, "SNK", "Street Smart (Japan version 1)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/snowbros.cpp b/src/mame/drivers/snowbros.cpp index 0133c266302..48e763e179f 100644 --- a/src/mame/drivers/snowbros.cpp +++ b/src/mame/drivers/snowbros.cpp @@ -65,7 +65,7 @@ out of the sprite list at that point.. (verify on real hw) Ma Cheon Ru -The electrified maze + ball minigame appears unreponsive to controls, this +The electrified maze + ball minigame appears unresponsive to controls, this is because it actually requires you to move the joysticks in a circular motion through all 8 directions at a very even speed, a task which is practically impossible to perform on keyboard, and not even that easy with @@ -80,7 +80,6 @@ a joystick. This is not an emulation bug. #include "cpu/z80/z80.h" #include "sound/2151intf.h" #include "sound/3812intf.h" -#include "sound/okim6295.h" #include "cpu/mcs51/mcs51.h" // for semicom mcu #include "machine/watchdog.h" @@ -179,7 +178,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(snowbros_state::snowbros3_irq) READ16_MEMBER(snowbros_state::snowbros_68000_sound_r) { - return soundlatch_byte_r(space,offset); + return m_soundlatch->read(space,offset); } @@ -187,14 +186,14 @@ WRITE16_MEMBER(snowbros_state::snowbros_68000_sound_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } WRITE16_MEMBER(snowbros_state::semicom_soundcmd_w) { - if (ACCESSING_BITS_0_7) soundlatch_byte_w(space,0,data & 0xff); + if (ACCESSING_BITS_0_7) m_soundlatch->write(space,0,data & 0xff); } READ16_MEMBER(snowbros_state::toto_read) @@ -230,7 +229,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, snowbros_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x02, 0x03) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write) - AM_RANGE(0x04, 0x04) AM_READWRITE(soundlatch_byte_r, soundlatch_byte_w) /* goes back to the main CPU, checked during boot */ + AM_RANGE(0x04, 0x04) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, write) /* goes back to the main CPU, checked during boot */ ADDRESS_MAP_END @@ -331,7 +330,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( honeydol_sound_io_map, AS_IO, 8, snowbros_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x02, 0x03) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write) // not connected? - AM_RANGE(0x04, 0x04) AM_READWRITE(soundlatch_byte_r, soundlatch_byte_w) /* goes back to the main CPU, checked during boot */ + AM_RANGE(0x04, 0x04) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, write) /* goes back to the main CPU, checked during boot */ ADDRESS_MAP_END /* Twin Adventure */ @@ -340,7 +339,7 @@ WRITE16_MEMBER(snowbros_state::twinadv_68000_sound_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -373,7 +372,7 @@ WRITE8_MEMBER(snowbros_state::twinadv_oki_bank_w) static ADDRESS_MAP_START( twinadv_sound_io_map, AS_IO, 8, snowbros_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x02, 0x02) AM_READWRITE(soundlatch_byte_r, soundlatch_byte_w) // back to 68k? + AM_RANGE(0x02, 0x02) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, write) // back to 68k? AM_RANGE(0x04, 0x04) AM_WRITE(twinadv_oki_bank_w) // oki bank? AM_RANGE(0x06, 0x06) AM_DEVREADWRITE("oki", okim6295_device, read, write) ADDRESS_MAP_END @@ -407,7 +406,7 @@ static ADDRESS_MAP_START( hyperpac_sound_map, AS_PROGRAM, 8, snowbros_state ) AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_RANGE(0xf000, 0xf001) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write) AM_RANGE(0xf002, 0xf002) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xf008, 0xf008) AM_READ(soundlatch_byte_r) + AM_RANGE(0xf008, 0xf008) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( hyperpac_sound_io_map, AS_IO, 8, snowbros_state ) @@ -1684,6 +1683,8 @@ static MACHINE_CONFIG_START( snowbros, snowbros_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_12MHz/4) /* 3 MHz - confirmed */ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -1774,7 +1775,7 @@ static MACHINE_CONFIG_START( honeydol, snowbros_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - /* sound hardware */ + MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_12MHz/4) /* 3Mhz */ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) @@ -1814,6 +1815,8 @@ static MACHINE_CONFIG_START( twinadv, snowbros_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + /* sound hardware */ MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_HIGH) /* freq? */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/solomon.cpp b/src/mame/drivers/solomon.cpp index 26de2ecfbb8..c4a9345de87 100644 --- a/src/mame/drivers/solomon.cpp +++ b/src/mame/drivers/solomon.cpp @@ -15,7 +15,7 @@ driver by Mirko Buffoni WRITE8_MEMBER(solomon_state::solomon_sh_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -70,7 +70,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, solomon_state ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x4000, 0x47ff) AM_RAM - AM_RANGE(0x8000, 0x8000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x8000, 0x8000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xffff, 0xffff) AM_WRITENOP /* watchdog? */ ADDRESS_MAP_END @@ -231,6 +231,8 @@ static MACHINE_CONFIG_START( solomon, solomon_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 1500000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.12) diff --git a/src/mame/drivers/sothello.cpp b/src/mame/drivers/sothello.cpp index c72767f767b..b83cb10e50b 100644 --- a/src/mame/drivers/sothello.cpp +++ b/src/mame/drivers/sothello.cpp @@ -39,6 +39,7 @@ OSC : 8.0000MHz(X1) 21.477 MHz(X2) 384kHz(X3) #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m6809/m6809.h" +#include "machine/gen_latch.h" #include "sound/2203intf.h" #include "sound/msm5205.h" #include "video/v9938.h" @@ -80,7 +81,6 @@ public: virtual void machine_reset() override; TIMER_CALLBACK_MEMBER(subcpu_suspend); TIMER_CALLBACK_MEMBER(subcpu_resume); - DECLARE_WRITE_LINE_MEMBER(irqhandler); DECLARE_WRITE_LINE_MEMBER(adpcm_int); DECLARE_WRITE_LINE_MEMBER(sothello_vdp_interrupt); void unlock_shared_ram(); @@ -161,7 +161,7 @@ READ8_MEMBER(sothello_state::soundcpu_status_r) static ADDRESS_MAP_START( maincpu_mem_map, AS_PROGRAM, 8, sothello_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") - AM_RANGE(0xc000, 0xdfff) AM_RAM AM_MIRROR(0x1800) AM_SHARE("share1") + AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_MIRROR(0x1800) AM_SHARE("share1") AM_RANGE(0xe000, 0xffff) AM_RAM ADDRESS_MAP_END @@ -174,7 +174,7 @@ static ADDRESS_MAP_START( maincpu_io_map, AS_IO, 8, sothello_state ) AM_RANGE( 0x31, 0x31) AM_READ(subcpu_halt_clear) AM_RANGE( 0x32, 0x32) AM_READ(subcpu_comm_status) AM_RANGE( 0x33, 0x33) AM_READ(soundcpu_status_r) - AM_RANGE( 0x40, 0x4f) AM_WRITE(soundlatch_byte_w) + AM_RANGE( 0x40, 0x4f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE( 0x50, 0x50) AM_WRITE(bank_w) AM_RANGE( 0x60, 0x61) AM_MIRROR(0x02) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) /* not sure, but the A1 line is ignored, code @ $8b8 */ @@ -223,7 +223,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( soundcpu_io_map, AS_IO, 8, sothello_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r) + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x01, 0x01) AM_WRITE(msm_data_w) AM_RANGE(0x02, 0x02) AM_WRITE(msm_cfg_w) AM_RANGE(0x03, 0x03) AM_WRITE(soundcpu_busyflag_set_w) @@ -328,10 +328,6 @@ static INPUT_PORTS_START( sothello ) PORT_BIT( 0x07, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END -WRITE_LINE_MEMBER(sothello_state::irqhandler) -{ - m_subcpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} WRITE_LINE_MEMBER(sothello_state::sothello_vdp_interrupt) { @@ -360,7 +356,7 @@ static MACHINE_CONFIG_START( sothello, sothello_state ) MCFG_CPU_PROGRAM_MAP(soundcpu_mem_map) MCFG_CPU_IO_MAP(soundcpu_io_map) - MCFG_CPU_ADD("sub",M6809, SUBCPU_CLOCK) + MCFG_CPU_ADD("sub", M6809, SUBCPU_CLOCK) MCFG_CPU_PROGRAM_MAP(subcpu_mem_map) MCFG_QUANTUM_TIME(attotime::from_hz(600)) @@ -372,8 +368,11 @@ static MACHINE_CONFIG_START( sothello, sothello_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, YM_CLOCK) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(sothello_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("sub", 0)) MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSWA")) MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSWB")) MCFG_SOUND_ROUTE(0, "mono", 0.25) @@ -383,7 +382,7 @@ static MACHINE_CONFIG_START( sothello, sothello_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) - MCFG_SOUND_ADD("msm",MSM5205, MSM_CLOCK) + MCFG_SOUND_ADD("msm", MSM5205, MSM_CLOCK) MCFG_MSM5205_VCLK_CB(WRITELINE(sothello_state, adpcm_int)) /* interrupt function */ MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* changed on the fly */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/spbactn.cpp b/src/mame/drivers/spbactn.cpp index 80adbabc79b..4ba2a0a2b8b 100644 --- a/src/mame/drivers/spbactn.cpp +++ b/src/mame/drivers/spbactn.cpp @@ -9,8 +9,8 @@ -general info------------------------------------------------------------------- A Pinball Game from Tecmo, the Hardware seems to be somewhere between that used - for Tecmo's classic game Ninja Gaiden (see gaiden.c) and that used in Comad's - Gals Pinball (see galspnbl.c) I imagine Comad took the hardware that this uses + for Tecmo's classic game Ninja Gaiden (see gaiden.cpp) and that used in Comad's + Gals Pinball (see galspnbl.cpp) I imagine Comad took the hardware that this uses as a basis for writing their game on, adding a couple of features such as the pixel layer. @@ -45,7 +45,7 @@ The manual defines the controls as 4 push buttons: a-u19 - Samples (27c1001) - 1 custom chip (u94, surface scrached) + 1 custom chip (u94, surface scratched) ------ 9002-B @@ -61,9 +61,9 @@ The manual defines the controls as 4 push buttons: b-u111 / Custom chips: - U101, U102, U106, U107: surface scrached + U101, U102, U106, U107: surface scratched probably 2 pairs of TECMO-3&4 - U133: surface scrached + U133: surface scratched probably TECMO-6 U112: TECMO-5 @@ -82,11 +82,10 @@ The manual defines the controls as 4 push buttons: lev 6 : 0x78 : 0000 1ab2 - writes to 90031 lev 7 : 0x7c : ffff ffff - invalid -TODO : (also check the notes from the galspnbl.c driver) +TODO : (also check the notes from the galspnbl.cpp driver) - coin insertion is not recognized consistently. - - rewrite video, do single pass sprite render, move sprite code to device, share with gaiden.c etc. - - convert to tilemaps + - convert to tilemaps - all the unknown regs @@ -144,7 +143,7 @@ WRITE16_MEMBER(spbactn_state::soundcommand_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -227,7 +226,7 @@ static ADDRESS_MAP_START( spbactn_sound_map, AS_PROGRAM, 8, spbactn_state ) AM_RANGE(0xf810, 0xf811) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0xfc00, 0xfc00) AM_READNOP AM_WRITENOP /* irq ack ?? */ - AM_RANGE(0xfc20, 0xfc20) AM_READ(soundlatch_byte_r) + AM_RANGE(0xfc20, 0xfc20) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -439,6 +438,8 @@ static MACHINE_CONFIG_START( spbactn, spbactn_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_4MHz) /* Was 3.579545MHz, a common clock, but no way to generate via on PCB OSCs */ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -490,6 +491,8 @@ static MACHINE_CONFIG_START( spbactnp, spbactn_state ) /* sound hardware - different? */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_4MHz) MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/spcforce.cpp b/src/mame/drivers/spcforce.cpp index e6fb1fd93be..9e1d05d49f1 100644 --- a/src/mame/drivers/spcforce.cpp +++ b/src/mame/drivers/spcforce.cpp @@ -38,6 +38,7 @@ TODO: #include "emu.h" #include "cpu/i8085/i8085.h" #include "cpu/mcs48/mcs48.h" +#include "machine/gen_latch.h" #include "includes/spcforce.h" void spcforce_state::machine_start() @@ -108,7 +109,7 @@ WRITE8_MEMBER(spcforce_state::irq_mask_w) static ADDRESS_MAP_START( spcforce_map, AS_PROGRAM, 8, spcforce_state ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x4000, 0x43ff) AM_RAM - AM_RANGE(0x7000, 0x7000) AM_READ_PORT("DSW") AM_WRITE(soundlatch_byte_w) + AM_RANGE(0x7000, 0x7000) AM_READ_PORT("DSW") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x7001, 0x7001) AM_READ_PORT("P1") AM_WRITE(soundtrigger_w) AM_RANGE(0x7002, 0x7002) AM_READ_PORT("P2") AM_RANGE(0x700b, 0x700b) AM_WRITE(flip_screen_w) @@ -131,7 +132,7 @@ static ADDRESS_MAP_START( spcforce_sound_map, AS_PROGRAM, 8, spcforce_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( spcforce_sound_io_map, AS_IO, 8, spcforce_state ) - AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_READ(soundlatch_byte_r) + AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_WRITE(SN76496_latch_w) AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(SN76496_select_r, SN76496_select_w) AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(t0_r) @@ -304,6 +305,8 @@ static MACHINE_CONFIG_START( spcforce, spcforce_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("sn1", SN76496, 2000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_SN76496_READY_HANDLER(WRITELINE(spcforce_state, write_sn1_ready)) diff --git a/src/mame/drivers/spdodgeb.cpp b/src/mame/drivers/spdodgeb.cpp index fea4bbb66ab..66dc17c3f38 100644 --- a/src/mame/drivers/spdodgeb.cpp +++ b/src/mame/drivers/spdodgeb.cpp @@ -32,7 +32,7 @@ Notes: WRITE8_MEMBER(spdodgeb_state::sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); } @@ -259,7 +259,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( spdodgeb_sound_map, AS_PROGRAM, 8, spdodgeb_state ) AM_RANGE(0x0000, 0x0fff) AM_RAM - AM_RANGE(0x1000, 0x1000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x1000, 0x1000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x2800, 0x2801) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0x3800, 0x3807) AM_WRITE(spd_adpcm_w) AM_RANGE(0x8000, 0xffff) AM_ROM @@ -430,6 +430,8 @@ static MACHINE_CONFIG_START( spdodgeb, spdodgeb_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_12MHz/4) MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", M6809_FIRQ_LINE)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) diff --git a/src/mame/drivers/spec128.cpp b/src/mame/drivers/spec128.cpp index 16003d48206..5d86a379929 100644 --- a/src/mame/drivers/spec128.cpp +++ b/src/mame/drivers/spec128.cpp @@ -219,7 +219,7 @@ READ8_MEMBER( spectrum_state::spectrum_128_ula_r ) } static ADDRESS_MAP_START (spectrum_128_io, AS_IO, 8, spectrum_state ) - AM_RANGE(0x0000, 0x0000) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff) + AM_RANGE(0x0000, 0x0000) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_SELECT(0xfffe) AM_RANGE(0x001f, 0x001f) AM_READ(spectrum_port_1f_r) AM_MIRROR(0xff00) AM_RANGE(0x007f, 0x007f) AM_READ(spectrum_port_7f_r) AM_MIRROR(0xff00) AM_RANGE(0x00df, 0x00df) AM_READ(spectrum_port_df_r) AM_MIRROR(0xff00) diff --git a/src/mame/drivers/specpls3.cpp b/src/mame/drivers/specpls3.cpp index fd28574892e..de3d15072ed 100644 --- a/src/mame/drivers/specpls3.cpp +++ b/src/mame/drivers/specpls3.cpp @@ -312,7 +312,7 @@ WRITE8_MEMBER( spectrum_state::spectrum_plus3_port_1ffd_w ) The function decodes the ports appropriately */ static ADDRESS_MAP_START (spectrum_plus3_io, AS_IO, 8, spectrum_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x0000) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff) + AM_RANGE(0x0000, 0x0000) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_SELECT(0xfffe) AM_RANGE(0x001f, 0x001f) AM_READ(spectrum_port_1f_r) AM_MIRROR(0xff00) AM_RANGE(0x4000, 0x4000) AM_WRITE(spectrum_plus3_port_7ffd_w) AM_MIRROR(0x3ffd) AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("ay8912", ay8910_device, data_w) AM_MIRROR(0x3ffd) diff --git a/src/mame/drivers/spectrum.cpp b/src/mame/drivers/spectrum.cpp index e47a9ab6e75..6cbcbe96642 100644 --- a/src/mame/drivers/spectrum.cpp +++ b/src/mame/drivers/spectrum.cpp @@ -430,7 +430,7 @@ ADDRESS_MAP_END /* ports are not decoded full. The function decodes the ports appropriately */ static ADDRESS_MAP_START (spectrum_io, AS_IO, 8, spectrum_state ) - AM_RANGE(0x00, 0x00) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff) + AM_RANGE(0x00, 0x00) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_SELECT(0xfffe) AM_RANGE(0x1f, 0x1f) AM_READ(spectrum_port_1f_r) AM_MIRROR(0xff00) AM_RANGE(0x7f, 0x7f) AM_READ(spectrum_port_7f_r) AM_MIRROR(0xff00) AM_RANGE(0xdf, 0xdf) AM_READ(spectrum_port_df_r) AM_MIRROR(0xff00) diff --git a/src/mame/drivers/speedspn.cpp b/src/mame/drivers/speedspn.cpp index edbe1899df6..7fe4e785821 100644 --- a/src/mame/drivers/speedspn.cpp +++ b/src/mame/drivers/speedspn.cpp @@ -23,7 +23,6 @@ TODO: #include "emu.h" #include "cpu/z80/z80.h" -#include "sound/okim6295.h" #include "includes/speedspn.h" /*** README INFO ************************************************************** @@ -77,7 +76,7 @@ WRITE8_MEMBER(speedspn_state::rombank_w) WRITE8_MEMBER(speedspn_state::sound_w) { - soundlatch_byte_w(space, 1, data); + m_soundlatch->write(space, 1, data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -120,7 +119,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, speedspn_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x9000, 0x9000) AM_WRITE(okibank_w) AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( oki_map, AS_0, 8, speedspn_state ) @@ -301,6 +300,8 @@ static MACHINE_CONFIG_START( speedspn, speedspn_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_OKIM6295_ADD("oki", 1122000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map) diff --git a/src/mame/drivers/sshangha.cpp b/src/mame/drivers/sshangha.cpp index 041b629e7a2..5af87ac15bd 100644 --- a/src/mame/drivers/sshangha.cpp +++ b/src/mame/drivers/sshangha.cpp @@ -369,11 +369,6 @@ GFXDECODE_END /******************************************************************************/ -WRITE_LINE_MEMBER(sshangha_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state); -} - DECO16IC_BANK_CB_MEMBER(sshangha_state::bank_callback) { return (bank >> 4) * 0x1000; @@ -431,7 +426,7 @@ static MACHINE_CONFIG_START( sshangha, sshangha_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") /* sure it's stereo? */ MCFG_SOUND_ADD("ymsnd", YM2203, 16000000/4) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(sshangha_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.33) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.33) diff --git a/src/mame/drivers/ssozumo.cpp b/src/mame/drivers/ssozumo.cpp index 470d92d6cf2..1f13c6b6138 100644 --- a/src/mame/drivers/ssozumo.cpp +++ b/src/mame/drivers/ssozumo.cpp @@ -24,7 +24,7 @@ void ssozumo_state::machine_start() WRITE8_MEMBER(ssozumo_state::sh_command_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); } @@ -60,7 +60,7 @@ static ADDRESS_MAP_START( ssozumo_sound_map, AS_PROGRAM, 8, ssozumo_state ) AM_RANGE(0x2002, 0x2003) AM_DEVWRITE("ay2", ay8910_device, data_address_w) AM_RANGE(0x2004, 0x2004) AM_DEVWRITE("dac", dac_device, write_signed8) AM_RANGE(0x2005, 0x2005) AM_WRITE(sound_nmi_mask_w) - AM_RANGE(0x2007, 0x2007) AM_READ(soundlatch_byte_r) + AM_RANGE(0x2007, 0x2007) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x4000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -220,6 +220,8 @@ static MACHINE_CONFIG_START( ssozumo, ssozumo_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 1500000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) diff --git a/src/mame/drivers/stuntair.cpp b/src/mame/drivers/stuntair.cpp index 749416a13c5..dbe817727f2 100644 --- a/src/mame/drivers/stuntair.cpp +++ b/src/mame/drivers/stuntair.cpp @@ -81,6 +81,7 @@ Bprom dump by f205v #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/ay8910.h" class stuntair_state : public driver_device @@ -95,7 +96,8 @@ public: m_bgattrram(*this, "bgattrram"), m_sprram(*this, "sprram"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } required_device<cpu_device> m_maincpu; @@ -106,6 +108,7 @@ public: required_shared_ptr<UINT8> m_sprram; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; tilemap_t *m_fg_tilemap; tilemap_t *m_bg_tilemap; @@ -303,7 +306,7 @@ WRITE8_MEMBER(stuntair_state::stuntair_coin_w) WRITE8_MEMBER(stuntair_state::stuntair_sound_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -531,8 +534,10 @@ static MACHINE_CONFIG_START( stuntair, stuntair_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") // stereo? + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, XTAL_18_432MHz/12) - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(stuntair_state, ay8910_portb_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) diff --git a/src/mame/drivers/stv.cpp b/src/mame/drivers/stv.cpp index 441307baa94..55aa6b9873b 100644 --- a/src/mame/drivers/stv.cpp +++ b/src/mame/drivers/stv.cpp @@ -2,14 +2,14 @@ // copyright-holders:David Haywood, Angelo Salese, Olivier Galibert, Mariusz Wojcieszek, R. Belmont /************************************************************************************************************************ - stv.c + stv.cpp ST-V hardware This file contains all game specific overrides TODO: - clean this up! - - Properly emulate the protection chips, used by several games (check stvprot.c for more info) + - Properly emulate the protection chips, used by several games (check stvprot.cpp for more info) (per-game issues) - stress: accesses the Sound Memory Expansion Area (0x05a80000-0x05afffff), unknown purpose; @@ -1054,7 +1054,7 @@ MACHINE_CONFIG_END WRITE32_MEMBER( stv_state::batmanfr_sound_comms_w ) { if(ACCESSING_BITS_16_31) - soundlatch_word_w(space, 0, data >> 16, 0x0000ffff); + m_soundlatch->write(space, 0, data >> 16, 0x0000ffff); if(ACCESSING_BITS_0_15) printf("Warning: write %04x & %08x to lo-word sound communication area\n",data,mem_mask); } @@ -1070,7 +1070,7 @@ READ16_MEMBER( stv_state::adsp_control_r ) break; /* TODO: is this location correct? */ case 0x5: - res = soundlatch_word_r(space,0); + res = m_soundlatch->read(space,0); break; default: osd_printf_debug("Unhandled register: %x\n", 0x3fe0 + offset); @@ -1203,6 +1203,8 @@ static MACHINE_CONFIG_DERIVED( batmanfr, stv ) MCFG_MACHINE_RESET_OVERRIDE(stv_state,batmanfr) + MCFG_GENERIC_LATCH_16_ADD("soundlatch") + MCFG_SOUND_ADD("dac1", DMADAC, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) diff --git a/src/mame/drivers/sub.cpp b/src/mame/drivers/sub.cpp index 9b2487ce495..39fe1b8d072 100644 --- a/src/mame/drivers/sub.cpp +++ b/src/mame/drivers/sub.cpp @@ -110,6 +110,7 @@ PCB2 (Top board, CPU board) #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/ay8910.h" #define MASTER_CLOCK XTAL_18_432MHz @@ -123,6 +124,7 @@ public: m_soundcpu(*this, "soundcpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_attr(*this, "attr"), m_vid(*this, "vid"), m_spriteram(*this, "spriteram"), @@ -133,6 +135,7 @@ public: required_device<cpu_device> m_soundcpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_attr; required_shared_ptr<UINT8> m_vid; @@ -263,7 +266,7 @@ ADDRESS_MAP_END WRITE8_MEMBER(sub_state::to_sound_w) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_soundcpu->set_input_line(0, HOLD_LINE); } @@ -274,7 +277,7 @@ WRITE8_MEMBER(sub_state::nmi_mask_w) static ADDRESS_MAP_START( subm_io, AS_IO, 8, sub_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch2_byte_r) AM_WRITE(to_sound_w) // to/from sound CPU + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_WRITE(to_sound_w) // to/from sound CPU ADDRESS_MAP_END static ADDRESS_MAP_START( subm_sound_map, AS_PROGRAM, 8, sub_state ) @@ -285,7 +288,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( subm_sound_io, AS_IO, 8, sub_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READWRITE(soundlatch_byte_r, soundlatch2_byte_w) // to/from main CPU + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // to/from main CPU AM_RANGE(0x40, 0x41) AM_DEVREADWRITE("ay1", ay8910_device, data_r, address_data_w) AM_RANGE(0x80, 0x81) AM_DEVREADWRITE("ay2", ay8910_device, data_r, address_data_w) ADDRESS_MAP_END @@ -468,6 +471,9 @@ static MACHINE_CONFIG_START( sub, sub_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ay1", AY8910, MASTER_CLOCK/6/2) /* ? Mhz */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.23) diff --git a/src/mame/drivers/sun3.cpp b/src/mame/drivers/sun3.cpp index acd477636fa..4d198c29399 100644 --- a/src/mame/drivers/sun3.cpp +++ b/src/mame/drivers/sun3.cpp @@ -159,7 +159,7 @@ framebuffer, and SCSI/ethernet boards available. -3/60 ROM breakpoints for start-of-tests +3/60 ROM breakpoints of interest fefb104 - bus error test fefb18e - interrupt test fefb1da - clock IRQ test @@ -168,9 +168,14 @@ fefb3c4 - MMU read-only permissions test fefb45e - parity test: no spurious NMI generated from normal parity operation fefb50c - parity test: NMI is generated when we write with inverted parity and enable parity NMIs fefb5c8 - size memory by bus error -fef58c0 - EPROM checksum read? +fef581c - EPROM mapping check +fef02b2 - main screen turn on + +3/260 ROM breakpoints of interest +fefcb34 - bpset to stop before each test +fefc0c2 - start of ECC test +fefc34a - start of mem_size, which queries ECC registers for each memory board -fefcb34 - bpset for each test on 3/260 ROM ****************************************************************************/ #include "emu.h" @@ -179,6 +184,7 @@ fefcb34 - bpset for each test on 3/260 ROM #include "machine/ram.h" #include "machine/z80scc.h" #include "machine/bankdev.h" +#include "machine/nvram.h" #include "bus/rs232/rs232.h" #define TIMEKEEPER_TAG "timekpr" @@ -218,6 +224,7 @@ public: m_type2space(*this, "type2"), m_type3space(*this, "type3"), m_rom(*this, "user1"), + m_idprom(*this, "idprom"), m_ram(*this, RAM_TAG) { } @@ -230,7 +237,7 @@ public: optional_shared_ptr<UINT32> m_p_ram; optional_shared_ptr<UINT32> m_bw2_vram; optional_device<address_map_bank_device> m_type0space, m_type1space, m_type2space, m_type3space; - required_memory_region m_rom; + required_memory_region m_rom, m_idprom; required_device<ram_device> m_ram; DECLARE_READ32_MEMBER( tl_mmu_r ); @@ -239,35 +246,67 @@ public: DECLARE_WRITE32_MEMBER( ram_w ); DECLARE_READ32_MEMBER( parity_r ); DECLARE_WRITE32_MEMBER( parity_w ); + DECLARE_READ32_MEMBER( ecc_r ); + DECLARE_WRITE32_MEMBER( ecc_w ); DECLARE_READ32_MEMBER( irqctrl_r ); DECLARE_WRITE32_MEMBER( irqctrl_w ); + DECLARE_READ8_MEMBER( rtc7170_r ); DECLARE_WRITE8_MEMBER( rtc7170_w ); UINT32 bw2_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + UINT32 bw2_16x11_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + UINT32 bw2_350_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + TIMER_DEVICE_CALLBACK_MEMBER(sun3_timer); private: UINT32 *m_rom_ptr, *m_ram_ptr; - UINT32 m_enable, m_buserr, m_diag, m_dvma_enable, m_parregs[8], m_irqctrl; + UINT8 *m_idprom_ptr; + UINT32 m_enable, m_diag, m_dvma_enable, m_parregs[8], m_irqctrl, m_ecc[4]; + UINT8 m_buserr; UINT32 m_context; UINT8 m_segmap[8][2048]; UINT32 m_pagemap[4096]; UINT32 m_ram_size, m_ram_size_words; bool m_bInBusErr; + + UINT32 m_cache_tags[0x4000], m_cache_data[0x4000]; }; READ32_MEMBER( sun3_state::ram_r ) { + if (m_ecc[0] == 0x10c00000) + { + //printf("ECC testing, RAM read ofs %x\n", offset); + m_ecc[1] &= 0x00ffffff; + + if (m_ecc[2] == 0x01000000) // single-bit error test + { + m_ecc[1] |= 0x8f000000; // put in the syndrome code the first ECC test wants + + if (offset == 0) + { + return 0x80000000; + } + } + else if (m_ecc[2] == 0x01000200) // double-bit error test + { + m_ecc[1] |= 0xfc000000; + } + } + if (offset < m_ram_size_words) return m_ram_ptr[offset]; if (!m_bInBusErr) { //printf("ram_r: bus error on timeout, access to invalid addr %08x, PC=%x\n", offset<<2, m_maincpu->pc); + //fflush(stdout); m_buserr = BE_TIMEOUT; m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); } - + return 0xffffffff; } @@ -331,10 +370,11 @@ WRITE32_MEMBER( sun3_state::ram_w ) COMBINE_DATA(&m_ram_ptr[offset]); return; } - + if (!m_bInBusErr) { //printf("ram_w: bus error on timeout, access to invalid addr %08x, PC=%x\n", offset<<2, m_maincpu->pc); + fflush(stdout); m_buserr = BE_TIMEOUT; m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); @@ -352,19 +392,18 @@ READ32_MEMBER( sun3_state::tl_mmu_r ) switch (offset >> 26) { case 0: // IDPROM - printf("sun3: Read IDPROM at %x\n", offset); - return 0xffffffff; + //printf("sun3: Read IDPROM at %x (mask %08x)\n", offset, mem_mask); + return m_idprom_ptr[(offset*4)] << 24 | m_idprom_ptr[(offset*4)+1]<<16 | m_idprom_ptr[(offset*4)+2]<<8 | m_idprom_ptr[(offset*4)+3]; case 1: // page map page = m_segmap[m_context & 7][(offset >> 15) & 0x7ff] << 4; - page += (offset >> 11) & 0xf; - + page += (offset >> 11) & 0xf; //printf("sun3: Read page map at %x (entry %d)\n", offset<<1, page); return m_pagemap[page]; case 2: // segment map //printf("sun3: Read segment map at %x (entry %d, user ctx %d mask %x)\n", offset<<2, (offset & ~0x3c000000) >> 15, m_context & 7, mem_mask); - return m_segmap[m_context & 7][(offset & ~0x3c000000) >> 15]<<24; + return m_segmap[m_context & 7][(offset >> 15) & 0x7ff]<<24; case 3: // context reg //printf("sun3: Read context reg\n"); @@ -378,18 +417,19 @@ READ32_MEMBER( sun3_state::tl_mmu_r ) case 6: // bus error m_bInBusErr = false; + //printf("Reading bus error: %02x\n", m_buserr); return m_buserr<<24; case 7: // diagnostic reg - return m_diag<<24; + return 0; case 8: // cache tags - printf("sun3: read cache tags @ %x, PC = %x\n", offset, m_maincpu->pc); - return 0xffffffff; + //printf("sun3: read cache tags @ %x, PC = %x\n", offset, m_maincpu->pc); + return m_cache_tags[(offset & 0x3fff) >> 2]; case 9: // cache data - printf("sun3: read cache data @ %x, PC = %x\n", offset, m_maincpu->pc); - return 0xffffffff; + //printf("sun3: read cache data @ %x, PC = %x\n", offset, m_maincpu->pc); + return m_cache_data[(offset & 0x3fff)]; case 10: // flush cache return 0xffffffff; @@ -399,7 +439,7 @@ READ32_MEMBER( sun3_state::tl_mmu_r ) return 0xffffffff; case 15: // UART bypass - printf("sun3: read UART bypass @ %x, PC = %x\n", offset, m_maincpu->pc); + //printf("sun3: read UART bypass @ %x, PC = %x, mask = %08x\n", offset, m_maincpu->pc, mem_mask); return 0xffffffff; } } @@ -420,7 +460,7 @@ READ32_MEMBER( sun3_state::tl_mmu_r ) UINT8 pmeg = m_segmap[m_context & 7][(offset >> 15) & 0x7ff]; UINT32 entry = (pmeg << 4) + ((offset >> 11) & 0xf); - // printf("sun3: Context = %d, pmeg = %d, offset >> 14 = %x, entry = %d, page = %d\n", m_context&7, pmeg, offset >> 14, entry, (offset >> 10) & 0xf); + //printf("sun3: Context = %d, pmeg = %d, offset >> 15 = %x, entry = %d, page = %d\n", m_context&7, pmeg, (offset >> 15) & 0x7ff, entry, (offset >> 11) & 0xf); if (m_pagemap[entry] & PM_VALID) { @@ -429,6 +469,7 @@ READ32_MEMBER( sun3_state::tl_mmu_r ) m_buserr = BE_PROTERR; m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + m_bInBusErr = true; return 0xffffffff; } @@ -440,7 +481,7 @@ READ32_MEMBER( sun3_state::tl_mmu_r ) //printf("pmeg %d, entry %d = %08x, virt %08x => tmp %08x\n", pmeg, entry, m_pagemap[entry], offset << 2, tmp); // if (!space.debugger_access()) - // printf("sun2: Translated addr: %08x, type %d (page %d page entry %08x, orig virt %08x, FC %d)\n", tmp << 1, (m_pagemap[entry] >> 22) & 7, entry, m_pagemap[entry], offset<<1, fc); + //printf("sun3: Translated addr: %08x, type %d (page %d page entry %08x, orig virt %08x, FC %d)\n", tmp << 2, (m_pagemap[entry] >> 26) & 3, entry, m_pagemap[entry], offset<<2, fc); switch ((m_pagemap[entry] >> 26) & 3) { @@ -448,7 +489,11 @@ READ32_MEMBER( sun3_state::tl_mmu_r ) return m_type0space->read32(space, tmp, mem_mask); case 1: // type 1 space - //printf("read device space @ %x\n", tmp<<1); + // magic ROM bypass + if ((tmp >= (0x100000>>2)) && (tmp <= (0x10ffff>>2))) + { + return m_rom_ptr[offset & 0x3fff]; + } return m_type1space->read32(space, tmp, mem_mask); case 2: // type 2 space @@ -460,14 +505,15 @@ READ32_MEMBER( sun3_state::tl_mmu_r ) } else { - // uncomment to see real state of driver -/* if (!space.debugger_access()) printf("sun3: pagemap entry not valid! (PC=%x)\n", m_maincpu->pc); +// if (!space.debugger_access()) printf("sun3: pagemap entry not valid! (PC=%x)\n", m_maincpu->pc); m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); - m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE);*/ + m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + m_buserr = BE_INVALID; + m_bInBusErr = true; return 0xffffffff; } - if (!space.debugger_access()) printf("sun3: Unmapped read @ %08x (FC %d, mask %08x, PC=%x, seg %x)\n", offset<<2, fc, mem_mask, m_maincpu->pc, offset>>15); + if (!space.debugger_access()) logerror("sun3: Unmapped read @ %08x (FC %d, mask %08x, PC=%x, seg %x)\n", offset<<2, fc, mem_mask, m_maincpu->pc, offset>>15); return 0xffffffff; } @@ -489,9 +535,8 @@ WRITE32_MEMBER( sun3_state::tl_mmu_w ) case 1: // page map fefaf32 page = m_segmap[m_context & 7][(offset >> 15) & 0x7ff] << 4; - //printf("context = %d, segment = %d, PMEG = %d\n", m_context & 7, (offset >> 15) & 0x7ff, page); + //printf("context = %d, segment = %d, PMEG = %d, add = %d\n", m_context & 7, (offset >> 15) & 0x7ff, page, (offset >> 11) & 0xf); page += (offset >> 11) & 0xf; - //printf("add = %d\n", (offset >> 11) & 0xf); //printf("sun3: Write %04x to page map at %x (entry %d), ", data, offset<<2, page); COMBINE_DATA(&m_pagemap[page]); @@ -501,7 +546,7 @@ WRITE32_MEMBER( sun3_state::tl_mmu_w ) case 2: // segment map //printf("sun3: Write %02x to segment map at %x (entry %d, user ctx %d PC=%x mask %x)\n", (data>>24) & 0xff, offset<<2, (offset & ~0x3c000000)>>15, m_context & 7, m_maincpu->pc, mem_mask); - m_segmap[m_context & 7][(offset & ~0x3c000000) >> 15] = (data>>24) & 0xff; + m_segmap[m_context & 7][(offset >> 15) & 0x7ff] = (data>>24) & 0xff; //printf("segment map[%d][%d] now %x\n", m_context & 7, (offset & ~0x3c000000) >> 15, m_segmap[m_context & 7][(offset & ~0x3c000000) >> 15] = (data>>24) & 0xff); return; @@ -519,12 +564,12 @@ WRITE32_MEMBER( sun3_state::tl_mmu_w ) m_dvma_enable = data>>24; return; - case 6: // bus error - m_buserr = data >> 24; + case 6: // bus error (read-only) return; case 7: // diagnostic reg m_diag = data >> 24; + #if 0 printf("sun3: CPU LEDs to %02x (PC=%x) => ", ((data>>24) & 0xff) ^ 0xff, m_maincpu->pc); for (int i = 0; i < 8; i++) { @@ -538,14 +583,17 @@ WRITE32_MEMBER( sun3_state::tl_mmu_w ) } } printf("\n"); + #endif return; case 8: // cache tags - printf("sun3: %08x to cache tags @ %x, PC = %x\n", data, offset, m_maincpu->pc); + //printf("sun3: %08x to cache tags @ %x, PC = %x, mask = %08x\n", data, offset, m_maincpu->pc, mem_mask); + m_cache_tags[(offset & 0x3fff) >> 2] = data; return; case 9: // cache data - printf("sun3: %08x to cache data @ %x, PC = %x\n", data, offset, m_maincpu->pc); + //printf("sun3: %08x to cache data @ %x, PC = %x, mask = %08x\n", data, offset, m_maincpu->pc, mem_mask); + m_cache_data[(offset & 0x3fff)] = data; return; case 10: // flush cache @@ -556,7 +604,7 @@ WRITE32_MEMBER( sun3_state::tl_mmu_w ) return; case 15: // UART bypass - printf("sun3: %08x to UART bypass @ %x, PC = %x\n", data, offset, m_maincpu->pc); + //printf("sun3: %08x to UART bypass @ %x, PC = %x\n", data, offset, m_maincpu->pc); return; } } @@ -570,9 +618,11 @@ WRITE32_MEMBER( sun3_state::tl_mmu_w ) if ((!(m_pagemap[entry] & PM_WRITEMASK)) || ((m_pagemap[entry] & PM_SYSMASK) && (fc < M68K_FC_SUPERVISOR_DATA))) { + //printf("sun3: write protect MMU error (PC=%x)\n", m_maincpu->pc); m_buserr = BE_PROTERR; m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + m_bInBusErr = true; return; } @@ -581,12 +631,7 @@ WRITE32_MEMBER( sun3_state::tl_mmu_w ) UINT32 tmp = (m_pagemap[entry] & 0x7ffff) << 11; tmp |= (offset & 0x7ff); - //if (!space.debugger_access()) printf("sun2: Translated addr: %08x, type %d (page entry %08x, orig virt %08x)\n", tmp << 1, (m_pagemap[entry] >> 22) & 7, m_pagemap[entry], offset<<1); - - //if (((m_pagemap[entry] >> 26) & 3) == 1) - { - //printf("pmeg %d, entry %d = %08x, virt %08x => tmp %08x\n", pmeg, entry, m_pagemap[entry], offset << 2, tmp); - } + //if (!space.debugger_access()) printf("sun3: Translated addr: %08x, type %d (page entry %08x, orig virt %08x)\n", tmp << 2, (m_pagemap[entry] >> 26) & 3, m_pagemap[entry], offset<<2); switch ((m_pagemap[entry] >> 26) & 3) { @@ -610,13 +655,15 @@ WRITE32_MEMBER( sun3_state::tl_mmu_w ) } else { - if (!space.debugger_access()) printf("sun3: pagemap entry not valid!\n"); + //if (!space.debugger_access()) printf("sun3: pagemap entry not valid!\n"); m_buserr = BE_INVALID; m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + m_bInBusErr = true; + return; } - printf("sun3: Unmapped write %04x (FC %d, mask %04x, PC=%x) to %08x\n", data, fc, mem_mask, m_maincpu->pc, offset<<2); + logerror("sun3: Unmapped write %04x (FC %d, mask %04x, PC=%x) to %08x\n", data, fc, mem_mask, m_maincpu->pc, offset<<2); } READ32_MEMBER(sun3_state::parity_r) @@ -659,16 +706,26 @@ ADDRESS_MAP_END // type 0 device space static ADDRESS_MAP_START(vmetype0space_map, AS_PROGRAM, 32, sun3_state) - AM_RANGE(0x00000000, 0x01ffffff) AM_READWRITE(ram_r, ram_w) + AM_RANGE(0x00000000, 0x08ffffff) AM_READWRITE(ram_r, ram_w) + AM_RANGE(0xfe400000, 0xfe41ffff) AM_RAM // not sure what's going on here (3/110) + AM_RANGE(0xff000000, 0xff03ffff) AM_RAM AM_SHARE("bw2_vram") +ADDRESS_MAP_END + +// type 0 without VRAM (3/50) +static ADDRESS_MAP_START(vmetype0space_novram_map, AS_PROGRAM, 32, sun3_state) + AM_RANGE(0x00000000, 0x08ffffff) AM_READWRITE(ram_r, ram_w) ADDRESS_MAP_END // type 1 device space static ADDRESS_MAP_START(vmetype1space_map, AS_PROGRAM, 32, sun3_state) + AM_RANGE(0x00000000, 0x0000000f) AM_DEVREADWRITE8(SCC1_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00ff00) AM_RANGE(0x00020000, 0x0002000f) AM_DEVREADWRITE8(SCC2_TAG, z80scc_device, ba_cd_inv_r, ba_cd_inv_w, 0xff00ff00) - AM_RANGE(0x00060000, 0x0006ffff) AM_WRITE8(rtc7170_w, 0xffffffff) + AM_RANGE(0x00040000, 0x000407ff) AM_RAM AM_SHARE("nvram") // type 2816 parallel EEPROM + AM_RANGE(0x00060000, 0x0006ffff) AM_READWRITE8(rtc7170_r, rtc7170_w, 0xffffffff) AM_RANGE(0x00080000, 0x0008000f) AM_READWRITE(parity_r, parity_w) AM_RANGE(0x000a0000, 0x000a0003) AM_READWRITE(irqctrl_r, irqctrl_w) AM_RANGE(0x00100000, 0x0010ffff) AM_ROM AM_REGION("user1", 0) + AM_RANGE(0x001e0000, 0x001e00ff) AM_READWRITE(ecc_r, ecc_w) ADDRESS_MAP_END // type 2 device space @@ -716,6 +773,13 @@ WRITE32_MEMBER(sun3_state::irqctrl_w) } } +READ8_MEMBER(sun3_state::rtc7170_r) +{ + //printf("read 7170 @ %x, PC=%x\n", offset, m_maincpu->pc); + + return 0xff; +} + WRITE8_MEMBER(sun3_state::rtc7170_w) { //printf("%02x to 7170 @ %x\n", data, offset); @@ -729,9 +793,49 @@ WRITE8_MEMBER(sun3_state::rtc7170_w) } } +READ32_MEMBER(sun3_state::ecc_r) +{ + //printf("read ECC @ %x, PC=%x\n", offset, m_maincpu->pc); + // fefc34a + int mbram = (m_ram_size / (1024*1024)); + int beoff = (mbram / 32) * 0x10; + + //printf("offset %x MB %d beoff %x\n", offset, mbram, beoff); + + if (offset >= beoff) + { + m_buserr = BE_TIMEOUT; + m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); + m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); + } + + UINT32 rv = m_ecc[offset & 0xf]; + + if ((offset & 0xf) == 0) rv |= 0x06000000; // indicate each ECC board is 32MB, for 128MB total + + return rv; +} + +WRITE32_MEMBER(sun3_state::ecc_w) +{ + //printf("%08x to ecc @ %x, mask %08x\n", data, offset, mem_mask); + + offset &= 0xf; + m_ecc[offset] = data; +} + +TIMER_DEVICE_CALLBACK_MEMBER(sun3_state::sun3_timer) +{ + if ((m_irqctrl & 0x81000000) == 0x81000000) + { + //printf("NMI tick\n"); + m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_7, ASSERT_LINE); + } +} + UINT32 sun3_state::bw2_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { -#if 0 UINT32 *scanline; int x, y; UINT8 pixels; @@ -755,7 +859,62 @@ UINT32 sun3_state::bw2_update(screen_device &screen, bitmap_rgb32 &bitmap, const *scanline++ = palette[(pixels&1)]; } } -#endif + return 0; +} + +UINT32 sun3_state::bw2_16x11_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + UINT32 *scanline; + int x, y; + UINT8 pixels; + static const UINT32 palette[2] = { 0, 0xffffff }; + UINT8 *m_vram = (UINT8 *)m_bw2_vram.target(); + + for (y = 0; y < 1100; y++) + { + scanline = &bitmap.pix32(y); + for (x = 0; x < 1600/8; x++) + { + pixels = m_vram[(y * (1600/8)) + (BYTE4_XOR_BE(x))]; + + *scanline++ = palette[(pixels>>7)&1]; + *scanline++ = palette[(pixels>>6)&1]; + *scanline++ = palette[(pixels>>5)&1]; + *scanline++ = palette[(pixels>>4)&1]; + *scanline++ = palette[(pixels>>3)&1]; + *scanline++ = palette[(pixels>>2)&1]; + *scanline++ = palette[(pixels>>1)&1]; + *scanline++ = palette[(pixels&1)]; + } + } + return 0; +} + +UINT32 sun3_state::bw2_350_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + UINT32 *scanline; + int x, y; + UINT8 pixels; + static const UINT32 palette[2] = { 0, 0xffffff }; + UINT8 *m_vram = (UINT8 *)&m_ram_ptr[(0x100000>>2)]; + + for (y = 0; y < 900; y++) + { + scanline = &bitmap.pix32(y); + for (x = 0; x < 1152/8; x++) + { + pixels = m_vram[(y * (1152/8)) + (BYTE4_XOR_BE(x))]; + + *scanline++ = palette[(pixels>>7)&1]; + *scanline++ = palette[(pixels>>6)&1]; + *scanline++ = palette[(pixels>>5)&1]; + *scanline++ = palette[(pixels>>4)&1]; + *scanline++ = palette[(pixels>>3)&1]; + *scanline++ = palette[(pixels>>2)&1]; + *scanline++ = palette[(pixels>>1)&1]; + *scanline++ = palette[(pixels&1)]; + } + } return 0; } @@ -767,6 +926,7 @@ void sun3_state::machine_start() { m_rom_ptr = (UINT32 *)m_rom->base(); m_ram_ptr = (UINT32 *)m_ram->pointer(); + m_idprom_ptr = (UINT8 *)m_idprom->base(); m_ram_size = m_ram->size(); m_ram_size_words = m_ram_size >> 2; } @@ -776,22 +936,31 @@ void sun3_state::machine_reset() m_maincpu->reset(); m_enable = 0; m_buserr = 0; - m_diag = 0; + m_diag = 1; m_dvma_enable = 0; m_irqctrl = 0; m_bInBusErr = false; } +// The base Sun 3004 CPU board static MACHINE_CONFIG_START( sun3, sun3_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68020, 16670000) MCFG_CPU_PROGRAM_MAP(sun3_mem) + MCFG_SCREEN_ADD("bwtwo", RASTER) + MCFG_SCREEN_UPDATE_DRIVER(sun3_state, bw2_update) + MCFG_SCREEN_SIZE(1600,1100) + MCFG_SCREEN_VISIBLE_AREA(0, 1152-1, 0, 900-1) + MCFG_SCREEN_REFRESH_RATE(72) + MCFG_RAM_ADD(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("2M") - MCFG_RAM_EXTRA_OPTIONS("4M,6M,8M,12M,16M,20M,24M,28M,32M") + MCFG_RAM_DEFAULT_SIZE("4M") + MCFG_RAM_EXTRA_OPTIONS("6M,8M,12M,16M,20M,24M,28M,32M") MCFG_RAM_DEFAULT_VALUE(0x00) + MCFG_NVRAM_ADD_0FILL("nvram") + // MMU Type 0 device space MCFG_DEVICE_ADD("type0", ADDRESS_MAP_BANK, 0) MCFG_DEVICE_PROGRAM_MAP(vmetype0space_map) @@ -820,6 +989,105 @@ static MACHINE_CONFIG_START( sun3, sun3_state ) MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32) MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000) + MCFG_TIMER_DRIVER_ADD_PERIODIC("timer", sun3_state, sun3_timer, attotime::from_hz(100)) + + MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) + MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) + MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd)) + MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd)) + + MCFG_RS232_PORT_ADD(RS232A_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxa_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcda_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsa_w)) + + MCFG_RS232_PORT_ADD(RS232B_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, rxb_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, dcdb_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC2_TAG, z80scc_device, ctsb_w)) +MACHINE_CONFIG_END + +// Sun 3/60 +static MACHINE_CONFIG_DERIVED( sun3_60, sun3 ) + MCFG_CPU_REPLACE("maincpu", M68020, 20000000) + MCFG_CPU_PROGRAM_MAP(sun3_mem) + + MCFG_SCREEN_MODIFY("bwtwo") + MCFG_SCREEN_UPDATE_DRIVER(sun3_state, bw2_16x11_update) + MCFG_SCREEN_SIZE(1600,1100) + MCFG_SCREEN_VISIBLE_AREA(0, 1600-1, 0, 1100-1) + MCFG_SCREEN_REFRESH_RATE(72) +MACHINE_CONFIG_END + +// Sun 3/E +static MACHINE_CONFIG_DERIVED( sun3e, sun3 ) + MCFG_CPU_REPLACE("maincpu", M68020, 20000000) + MCFG_CPU_PROGRAM_MAP(sun3_mem) +MACHINE_CONFIG_END + +// 3/260 and 3/280 (the Sun 3200 board) +static MACHINE_CONFIG_DERIVED( sun3200, sun3 ) + MCFG_CPU_REPLACE("maincpu", M68020, 25000000) + MCFG_CPU_PROGRAM_MAP(sun3_mem) + + MCFG_SCREEN_MODIFY("bwtwo") + MCFG_SCREEN_UPDATE_DRIVER(sun3_state, bw2_16x11_update) + MCFG_SCREEN_SIZE(1600,1100) + MCFG_SCREEN_VISIBLE_AREA(0, 1600-1, 0, 1100-1) + MCFG_SCREEN_REFRESH_RATE(72) + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("32M") + MCFG_RAM_EXTRA_OPTIONS("64M,96M,128M") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_START( sun3_50, sun3_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68020, 15700000) + MCFG_CPU_PROGRAM_MAP(sun3_mem) + + MCFG_SCREEN_ADD("bwtwo", RASTER) + MCFG_SCREEN_UPDATE_DRIVER(sun3_state, bw2_350_update) + MCFG_SCREEN_SIZE(1600,1100) + MCFG_SCREEN_VISIBLE_AREA(0, 1152-1, 0, 900-1) + MCFG_SCREEN_REFRESH_RATE(72) + + MCFG_NVRAM_ADD_0FILL("nvram") + + MCFG_TIMER_DRIVER_ADD_PERIODIC("timer", sun3_state, sun3_timer, attotime::from_hz(100)) + + MCFG_RAM_ADD(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("4M") + MCFG_RAM_DEFAULT_VALUE(0x00) + + // MMU Type 0 device space + MCFG_DEVICE_ADD("type0", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(vmetype0space_novram_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000) + + // MMU Type 1 device space + MCFG_DEVICE_ADD("type1", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(vmetype1space_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000) + + // MMU Type 2 device space + MCFG_DEVICE_ADD("type2", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(vmetype2space_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000) + + // MMU Type 3 device space + MCFG_DEVICE_ADD("type3", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(vmetype3space_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000) + MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0) MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd)) @@ -863,6 +1131,9 @@ Sun 3/50 V2.8 Bootprom ROMX_LOAD( "sun3_50_v2.3", 0x0000, 0x10000, CRC(163500b3) SHA1(437c8d539e12d442ca6877566dbbe165d577fcab), ROM_BIOS(4)) ROM_SYSTEM_BIOS(4, "rev16", "Rev 1.6") ROMX_LOAD( "sun3_50_v1.6", 0x0000, 0x10000, CRC(8be20826) SHA1(2a4d73fcb7fe0f0c83eb0f4c91d957b7bf88b7ed), ROM_BIOS(5)) + + ROM_REGION( 0x20, "idprom", ROMREGION_ERASEFF) + ROM_LOAD( "sun3-50-idprom.bin", 0x000000, 0x000020, CRC(80610dbe) SHA1(0f37e31ed209b8905c5dc7c2663fa01a9b9baaba) ) ROM_END ROM_START( sun3_60 ) @@ -882,6 +1153,9 @@ Sun 3/60 V3.0.1 Bootprom ROMX_LOAD( "sun_3.60v2.8.3", 0x0000, 0x10000, CRC(de4ec54d) SHA1(e621a9c1a2a7df4975b12fa3a0d7f106383736ef), ROM_BIOS(2)) ROM_SYSTEM_BIOS(2, "rev19", "Rev 1.9") ROMX_LOAD( "sun_3.60v1.9", 0x0000, 0x10000, CRC(32b6d3a9) SHA1(307756ba5698611d51059881057f8086956ce895), ROM_BIOS(3)) + + ROM_REGION( 0x20, "idprom", ROMREGION_ERASEFF) + ROM_LOAD( "sun3-60-idprom.bin", 0x000000, 0x000020, CRC(117e766a) SHA1(f01547be0156bd4e06bbdee4c342d1b38c7646ae) ) ROM_END ROM_START( sun3_110 ) @@ -897,6 +1171,9 @@ Sun 3/110 V3.0 Bootprom */ ROM_SYSTEM_BIOS(0, "rev30", "Rev 3.0") ROMX_LOAD( "sun3_110_v3.0", 0x0000, 0x10000, CRC(a193b26b) SHA1(0f54212ee3a5709f70e921069cca1ddb8c143b1b), ROM_BIOS(1)) + + ROM_REGION( 0x20, "idprom", ROMREGION_ERASEFF) + ROM_LOAD( "sun3-110-idprom.bin", 0x000000, 0x000020, CRC(d6cd934a) SHA1(b0913708fe733250ef5c1289c10146dcef6d1a67) ) ROM_END ROM_START( sun3_150 ) @@ -925,6 +1202,10 @@ Sun 3/1[4,5,6,8]0 V3.0 Bootprom ROMX_LOAD( "sun3_160_v2.1_rf", 0x0000, 0x10000, CRC(5c7e9271) SHA1(5e4dbb50859a21f9e1d3e4a06c42494d13a9a8eb), ROM_BIOS(4)) ROM_SYSTEM_BIOS(4, "rev15", "Rev 1.5") ROMX_LOAD( "sun3_160_v1.5", 0x0000, 0x10000, CRC(06daee37) SHA1(b9873cd48d78ad8e0c85d69966fc20c21cfc99aa), ROM_BIOS(5)) + + + ROM_REGION( 0x20, "idprom", ROMREGION_ERASEFF) + ROM_LOAD( "sun3-150-idprom.bin", 0x000000, 0x000020, CRC(58956a93) SHA1(7334936dc945e05d63a94a33340e963a371672c9) ) ROM_END ROM_START( sun3_260 ) @@ -945,20 +1226,24 @@ Sun 3/260/280 V3.0 Bootprom ROMX_LOAD( "sun3_260_v2.7", 0x0000, 0x10000, CRC(099fcaab) SHA1(4a5233c778676f48103bdd8bab03b4264686b4aa), ROM_BIOS(2)) ROM_SYSTEM_BIOS(2, "rev26", "Rev 2.6") ROMX_LOAD( "sun3_260_v2.6", 0x0000, 0x10000, CRC(e8b17951) SHA1(e1fdef42670a349d99b0eca9c50c8566b8bb7c56), ROM_BIOS(3)) + + ROM_REGION( 0x20, "idprom", ROMREGION_ERASEFF) + ROM_LOAD( "sun3-260-idprom.bin", 0x000000, 0x000020, CRC(d51794f3) SHA1(17930c773b6fe9a32819094ffaf69e5453d1ea4d) ) ROM_END ROM_START( sun3_e ) ROM_REGION32_BE( 0x10000, "user1", ROMREGION_ERASEFF ) ROM_SYSTEM_BIOS(0, "rev28", "Rev 3.2") ROMX_LOAD( "sun3_e.32", 0x0000, 0x10000, CRC(acedde7e) SHA1(1ab6ec28f4365a613a5e326c34cb37585c3f0ecc), ROM_BIOS(1)) -ROM_END -/* Driver */ + ROM_REGION( 0x20, "idprom", ROMREGION_ERASEFF) + ROM_LOAD( "sun3-e-idprom.bin", 0x000000, 0x000020, CRC(d1a92116) SHA1(4836f3188f2c3dd5ba49ab66e0b55caa6b1b1791) ) +ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ -COMP( 198?, sun3_50, 0, 0, sun3, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/50", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Model 25 -COMP( 198?, sun3_60, 0, 0, sun3, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/60", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Ferrari +COMP( 198?, sun3_50, 0, 0, sun3_50, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/50", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Model 25 +COMP( 1988, sun3_60, 0, 0, sun3_60, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/60", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Ferrari COMP( 198?, sun3_110, 0, 0, sun3, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/110", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Prism -COMP( 198?, sun3_150, 0, 0, sun3, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/75/140/150/160/180", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // AKA Carrera -COMP( 198?, sun3_260, 0, 0, sun3, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/260/280", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Prism -COMP( 198?, sun3_e, 0, 0, sun3, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/E", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Polaris +COMP( 1985, sun3_150, 0, 0, sun3, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/75/140/150/160/180", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // AKA Carrera +COMP( 198?, sun3_260, 0, 0, sun3200, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/260/280", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Prism +COMP( 198?, sun3_e, 0, 0, sun3e, sun3, driver_device, 0, "Sun Microsystems", "Sun 3/E", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // Polaris diff --git a/src/mame/drivers/suna16.cpp b/src/mame/drivers/suna16.cpp index f33d0142f62..d7555c3118e 100644 --- a/src/mame/drivers/suna16.cpp +++ b/src/mame/drivers/suna16.cpp @@ -44,7 +44,7 @@ WRITE16_MEMBER(suna16_state::soundlatch_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, 0, data & 0xff ); + m_soundlatch->write(space, 0, data & 0xff ); } if (data & ~0xff) logerror("CPU#0 PC %06X - Sound latch unknown bits: %04X\n", space.device().safe_pc(), data); } @@ -240,9 +240,9 @@ static ADDRESS_MAP_START( bssoccer_sound_map, AS_PROGRAM, 8, suna16_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM // ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM // RAM AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) // YM2151 - AM_RANGE(0xfc00, 0xfc00) AM_READ(soundlatch_byte_r) // From Main CPU - AM_RANGE(0xfd00, 0xfd00) AM_WRITE(soundlatch2_byte_w) // To PCM Z80 #1 - AM_RANGE(0xfe00, 0xfe00) AM_WRITE(soundlatch3_byte_w) // To PCM Z80 #2 + AM_RANGE(0xfc00, 0xfc00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU + AM_RANGE(0xfd00, 0xfd00) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // To PCM Z80 #1 + AM_RANGE(0xfe00, 0xfe00) AM_DEVWRITE("soundlatch3", generic_latch_8_device, write) // To PCM Z80 #2 ADDRESS_MAP_END /*************************************************************************** @@ -253,7 +253,7 @@ static ADDRESS_MAP_START( uballoon_sound_map, AS_PROGRAM, 8, suna16_state ) AM_RANGE(0x0000, 0xefff) AM_ROM // ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM // RAM AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) // YM2151 - AM_RANGE(0xfc00, 0xfc00) AM_READWRITE(soundlatch_byte_r, soundlatch2_byte_w) // To PCM Z80 + AM_RANGE(0xfc00, 0xfc00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // To PCM Z80 ADDRESS_MAP_END /*************************************************************************** @@ -264,7 +264,7 @@ static ADDRESS_MAP_START( sunaq_sound_map, AS_PROGRAM, 8, suna16_state ) AM_RANGE(0x0000, 0xe82f) AM_ROM // ROM AM_RANGE(0xe830, 0xf7ff) AM_RAM // RAM (writes to efxx, could be a program bug tho) AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) // YM2151 - AM_RANGE(0xfc00, 0xfc00) AM_READWRITE(soundlatch_byte_r, soundlatch2_byte_w) // To PCM Z80 + AM_RANGE(0xfc00, 0xfc00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // To PCM Z80 ADDRESS_MAP_END /*************************************************************************** @@ -276,8 +276,8 @@ static ADDRESS_MAP_START( bestbest_sound_map, AS_PROGRAM, 8, suna16_state ) AM_RANGE( 0xc000, 0xc001 ) AM_DEVWRITE("ymsnd", ym3526_device, write) AM_RANGE( 0xc002, 0xc003 ) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) // AY8910 AM_RANGE( 0xe000, 0xe7ff ) AM_RAM // RAM - AM_RANGE( 0xf000, 0xf000 ) AM_WRITE(soundlatch2_byte_w ) // To PCM Z80 - AM_RANGE( 0xf800, 0xf800 ) AM_READ ( soundlatch_byte_r ) // From Main CPU + AM_RANGE( 0xf000, 0xf000 ) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // To PCM Z80 + AM_RANGE( 0xf800, 0xf800 ) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU ADDRESS_MAP_END /*************************************************************************** @@ -353,7 +353,7 @@ WRITE8_MEMBER(suna16_state::bssoccer_DAC4_w) static ADDRESS_MAP_START( bssoccer_pcm_1_io_map, AS_IO, 8, suna16_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch2_byte_r) // From The Sound Z80 + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // From The Sound Z80 AM_RANGE(0x00, 0x00) AM_WRITE(DAC1_w) // 2 x DAC AM_RANGE(0x01, 0x01) AM_WRITE(DAC2_w) // 2 x DAC AM_RANGE(0x03, 0x03) AM_WRITE(bssoccer_pcm_1_bankswitch_w) // Rom Bank @@ -361,7 +361,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( bssoccer_pcm_2_io_map, AS_IO, 8, suna16_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch3_byte_r) // From The Sound Z80 + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch3", generic_latch_8_device, read) // From The Sound Z80 AM_RANGE(0x00, 0x00) AM_WRITE(bssoccer_DAC3_w) // 2 x DAC AM_RANGE(0x01, 0x01) AM_WRITE(bssoccer_DAC4_w) // 2 x DAC AM_RANGE(0x03, 0x03) AM_WRITE(bssoccer_pcm_2_bankswitch_w) // Rom Bank @@ -390,7 +390,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( uballoon_pcm_1_io_map, AS_IO, 8, suna16_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch2_byte_r) // From The Sound Z80 + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // From The Sound Z80 AM_RANGE(0x00, 0x00) AM_WRITE(DAC1_w) // 2 x DAC AM_RANGE(0x01, 0x01) AM_WRITE(DAC2_w) // 2 x DAC AM_RANGE(0x03, 0x03) AM_WRITE(uballoon_pcm_1_bankswitch_w) // Rom Bank @@ -420,7 +420,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( bestbest_pcm_1_iomap, AS_IO, 8, suna16_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ (soundlatch2_byte_r ) // From The Sound Z80 + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // From The Sound Z80 AM_RANGE(0x00, 0x00) AM_MIRROR(0x02) AM_WRITE(DAC1_w) // 2 x DAC AM_RANGE(0x01, 0x01) AM_MIRROR(0x02) AM_WRITE(DAC2_w) // 2 x DAC ADDRESS_MAP_END @@ -846,6 +846,10 @@ static MACHINE_CONFIG_START( bssoccer, suna16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_GENERIC_LATCH_8_ADD("soundlatch3") + MCFG_YM2151_ADD("ymsnd", XTAL_14_31818MHz/4) /* 3.579545MHz */ MCFG_SOUND_ROUTE(0, "lspeaker", 0.20) MCFG_SOUND_ROUTE(1, "rspeaker", 0.20) @@ -906,6 +910,9 @@ static MACHINE_CONFIG_START( uballoon, suna16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_YM2151_ADD("ymsnd", XTAL_14_31818MHz/4) /* 3.579545MHz */ MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) MCFG_SOUND_ROUTE(1, "rspeaker", 0.50) @@ -959,6 +966,9 @@ static MACHINE_CONFIG_START( sunaq, suna16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_YM2151_ADD("ymsnd", XTAL_14_31818MHz/4) /* 3.579545MHz */ MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) MCFG_SOUND_ROUTE(1, "rspeaker", 0.50) @@ -1015,6 +1025,9 @@ static MACHINE_CONFIG_START( bestbest, suna16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("aysnd", AY8910, XTAL_24MHz/16) /* 1.5MHz */ MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(suna16_state, bestbest_ay8910_port_a_w)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) diff --git a/src/mame/drivers/suna8.cpp b/src/mame/drivers/suna8.cpp index 02db5b88c25..2537ba034a7 100644 --- a/src/mame/drivers/suna8.cpp +++ b/src/mame/drivers/suna8.cpp @@ -42,7 +42,6 @@ Notes: #include "sound/2203intf.h" #include "sound/3812intf.h" #include "sound/dac.h" -#include "sound/samples.h" #include "includes/suna8.h" #define SUNA8_MASTER_CLOCK XTAL_24MHz @@ -561,8 +560,8 @@ static ADDRESS_MAP_START( hardhead_map, AS_PROGRAM, 8, suna8_state ) AM_RANGE(0xc000, 0xd7ff) AM_RAM // RAM AM_RANGE(0xd800, 0xd9ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette AM_RANGE(0xda00, 0xda00) AM_RAM_READ(hardhead_ip_r) AM_SHARE("hardhead_ip") // Input Port Select - AM_RANGE(0xda80, 0xda80) AM_READ(soundlatch2_byte_r) AM_WRITE(hardhead_bankswitch_w ) // ROM Banking - AM_RANGE(0xdb00, 0xdb00) AM_WRITE(soundlatch_byte_w ) // To Sound CPU + AM_RANGE(0xda80, 0xda80) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_WRITE(hardhead_bankswitch_w ) // ROM Banking + AM_RANGE(0xdb00, 0xdb00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) // To Sound CPU AM_RANGE(0xdb80, 0xdb80) AM_WRITE(hardhead_flipscreen_w ) // Flip Screen + Coin Lockout AM_RANGE(0xdc00, 0xdc00) AM_NOP // <- R (after bank select) AM_RANGE(0xdc80, 0xdc80) AM_NOP // <- R (after bank select) @@ -611,7 +610,7 @@ WRITE8_MEMBER(suna8_state::rranger_bankswitch_w) */ READ8_MEMBER(suna8_state::rranger_soundstatus_r) { - soundlatch2_byte_r(space, offset); + m_soundlatch2->read(space, offset); return 0x02; } @@ -625,7 +624,7 @@ WRITE8_MEMBER(suna8_state::sranger_prot_w) static ADDRESS_MAP_START( rranger_map, AS_PROGRAM, 8, suna8_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM // ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") // Banked ROM - AM_RANGE(0xc000, 0xc000) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_WRITE(soundlatch_byte_w) // To Sound CPU + AM_RANGE(0xc000, 0xc000) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) // To Sound CPU AM_RANGE(0xc002, 0xc002) AM_WRITE(rranger_bankswitch_w ) // ROM Banking AM_RANGE(0xc002, 0xc002) AM_READ_PORT("P1") // P1 (Inputs) AM_RANGE(0xc003, 0xc003) AM_READ_PORT("P2") // P2 @@ -733,7 +732,7 @@ static ADDRESS_MAP_START( brickzn11_map, AS_PROGRAM, 8, suna8_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM // ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") // Banked ROM - AM_RANGE(0xc000, 0xc000) AM_WRITE(soundlatch_byte_w ) // To Sound CPU + AM_RANGE(0xc000, 0xc000) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) // To Sound CPU AM_RANGE(0xc040, 0xc040) AM_WRITE(brickzn_sprbank_w ) // Sprite RAM Bank + Flip Screen + Protection AM_RANGE(0xc060, 0xc060) AM_WRITE(brickzn_rombank_w ) // ROM Bank AM_RANGE(0xc080, 0xc080) AM_WRITE(brickzn_leds_w ) // Leds @@ -784,7 +783,7 @@ WRITE8_MEMBER(suna8_state::brickzn_multi_w) */ UINT8 remap = (m_remap_sound ? BITSWAP8(data, 7,6,3,4,5,2,1,0) : data); - soundlatch_byte_w(space, 0, remap); + m_soundlatch->write(space, 0, remap); logerror("CPU #0 - PC %04X: soundlatch = %02X (->%02X)\n",space.device().safe_pc(),data,remap); } @@ -990,7 +989,7 @@ static ADDRESS_MAP_START( hardhea2_map, AS_PROGRAM, 8, suna8_state ) AM_RANGE(0xc380, 0xc380) AM_WRITE(hardhea2_nmi_w ) // ? NMI related ? AM_RANGE(0xc400, 0xc400) AM_WRITE(hardhea2_leds_w ) // Leds + Coin Counter AM_RANGE(0xc480, 0xc480) AM_WRITENOP // ~ROM Bank - AM_RANGE(0xc500, 0xc500) AM_WRITE(soundlatch_byte_w ) // To Sound CPU + AM_RANGE(0xc500, 0xc500) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) // To Sound CPU // *** Protection AM_RANGE(0xc50f, 0xc50f) AM_WRITE(hardhea2_spritebank_1_w ) @@ -1034,7 +1033,7 @@ WRITE8_MEMBER(suna8_state::starfigh_rombank_latch_w) WRITE8_MEMBER(suna8_state::starfigh_sound_latch_w) { if ( !(m_rombank_latch & 0x20) ) - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); } /* @@ -1262,8 +1261,8 @@ static ADDRESS_MAP_START( hardhead_sound_map, AS_PROGRAM, 8, suna8_state ) AM_RANGE(0xa002, 0xa003) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) AM_RANGE(0xc000, 0xc7ff) AM_RAM // RAM AM_RANGE(0xc800, 0xc800) AM_DEVREAD("ymsnd", ym3812_device, status_port_r) // ? unsure - AM_RANGE(0xd000, 0xd000) AM_WRITE(soundlatch2_byte_w ) // - AM_RANGE(0xd800, 0xd800) AM_READ(soundlatch_byte_r ) // From Main CPU + AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // + AM_RANGE(0xd800, 0xd800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU ADDRESS_MAP_END @@ -1282,8 +1281,8 @@ static ADDRESS_MAP_START( rranger_sound_map, AS_PROGRAM, 8, suna8_state ) AM_RANGE(0xa000, 0xa001) AM_DEVWRITE("ym1", ym2203_device, write) // Samples + Music AM_RANGE(0xa002, 0xa003) AM_DEVWRITE("ym2", ym2203_device, write) // Music + FX AM_RANGE(0xc000, 0xc7ff) AM_RAM // RAM - AM_RANGE(0xd000, 0xd000) AM_WRITE(soundlatch2_byte_w ) // To Sound CPU - AM_RANGE(0xd800, 0xd800) AM_READ(soundlatch_byte_r ) // From Main CPU + AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // To Sound CPU + AM_RANGE(0xd800, 0xd800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU ADDRESS_MAP_END @@ -1296,8 +1295,8 @@ static ADDRESS_MAP_START( brickzn_sound_map, AS_PROGRAM, 8, suna8_state ) AM_RANGE(0xc000, 0xc001) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0xc002, 0xc003) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) AM_RANGE(0xe000, 0xe7ff) AM_RAM // RAM - AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch2_byte_w ) // To PCM CPU - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r ) // From Main CPU + AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // To PCM CPU + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU ADDRESS_MAP_END @@ -1317,7 +1316,7 @@ WRITE8_MEMBER(suna8_state::brickzn_pcm_w) static ADDRESS_MAP_START( brickzn_pcm_io_map, AS_IO, 8, suna8_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch2_byte_r ) // From Sound CPU + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // From Sound CPU AM_RANGE(0x00, 0x03) AM_WRITE(brickzn_pcm_w ) // 4 x DAC ADDRESS_MAP_END @@ -1901,6 +1900,9 @@ static MACHINE_CONFIG_START( hardhead, suna8_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM3812, SUNA8_MASTER_CLOCK / 8) /* verified on pcb */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -1957,6 +1959,9 @@ static MACHINE_CONFIG_START( rranger, suna8_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ym1", YM2203, SUNA8_MASTER_CLOCK / 16) /* verified on pcb */ MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(suna8_state, rranger_play_samples_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(suna8_state, suna8_samples_number_w)) @@ -2023,6 +2028,9 @@ static MACHINE_CONFIG_START( brickzn11, suna8_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM3812, SUNA8_MASTER_CLOCK / 8) // 3MHz (measured) MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -2133,6 +2141,9 @@ static MACHINE_CONFIG_START( starfigh, suna8_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM3812, SUNA8_MASTER_CLOCK / 8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -2184,6 +2195,9 @@ static MACHINE_CONFIG_START( sparkman, suna8_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymsnd", YM3812, SUNA8_MASTER_CLOCK / 8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/super6.cpp b/src/mame/drivers/super6.cpp index 34958f31edb..0fd20f534ad 100644 --- a/src/mame/drivers/super6.cpp +++ b/src/mame/drivers/super6.cpp @@ -29,7 +29,7 @@ void super6_state::bankswitch() UINT8 *ram = m_ram->pointer(); // power on jump - if (!BIT(m_bank0, 6)) { program.install_rom(0x0000, 0x07ff, 0, 0xf800, m_rom); return; } + if (!BIT(m_bank0, 6)) { program.install_rom(0x0000, 0x07ff, 0xf800, m_rom); return; } // first 64KB of memory program.install_ram(0x0000, 0xffff, ram); @@ -82,7 +82,7 @@ void super6_state::bankswitch() if (BIT(m_bank0, 3)) program.install_ram(0xc000, 0xffff, ram + 0xc000); // PROM enabled - if (!BIT(m_bank0, 5)) program.install_rom(0xf000, 0xf7ff, 0, 0x800, m_rom); + if (!BIT(m_bank0, 5)) program.install_rom(0xf000, 0xf7ff, 0x800, m_rom); } diff --git a/src/mame/drivers/supracan.cpp b/src/mame/drivers/supracan.cpp index b342c846295..db4b07c5a1c 100644 --- a/src/mame/drivers/supracan.cpp +++ b/src/mame/drivers/supracan.cpp @@ -1128,7 +1128,7 @@ static ADDRESS_MAP_START( supracan_mem, AS_PROGRAM, 16, supracan_state ) AM_RANGE( 0xf00000, 0xf001ff ) AM_READWRITE(video_r, video_w) AM_RANGE( 0xf00200, 0xf003ff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") AM_RANGE( 0xf40000, 0xf5ffff ) AM_RAM_WRITE(vram_w) AM_SHARE("vram") - AM_RANGE( 0xfc0000, 0xfdffff ) AM_MIRROR(0x30000) AM_RAM /* System work ram */ + AM_RANGE( 0xfc0000, 0xfcffff ) AM_MIRROR(0x30000) AM_RAM /* System work ram */ ADDRESS_MAP_END READ8_MEMBER( supracan_state::_6502_soundmem_r ) diff --git a/src/mame/drivers/suprloco.cpp b/src/mame/drivers/suprloco.cpp index 5144ebc1da2..a6c4b414340 100644 --- a/src/mame/drivers/suprloco.cpp +++ b/src/mame/drivers/suprloco.cpp @@ -29,7 +29,7 @@ Sega PCB 834-5137 WRITE8_MEMBER(suprloco_state::soundport_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); /* spin for a while to let the Z80 read the command (fixes hanging sound in Regulus) */ space.device().execute().spin_until_time(attotime::from_usec(50)); @@ -61,7 +61,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, suprloco_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0xa000, 0xa003) AM_DEVWRITE("sn1", sn76496_device, write) AM_RANGE(0xc000, 0xc003) AM_DEVWRITE("sn2", sn76496_device, write) - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -193,6 +193,8 @@ static MACHINE_CONFIG_START( suprloco, suprloco_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("sn1", SN76496, 4000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/suprslam.cpp b/src/mame/drivers/suprslam.cpp index 20fd606a1f9..b6e2a0e700a 100644 --- a/src/mame/drivers/suprslam.cpp +++ b/src/mame/drivers/suprslam.cpp @@ -98,7 +98,7 @@ WRITE16_MEMBER(suprslam_state::sound_command_w) if (ACCESSING_BITS_0_7) { m_pending_command = 1; - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -153,7 +153,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, suprslam_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_WRITE(suprslam_sh_bankswitch_w) - AM_RANGE(0x04, 0x04) AM_READ(soundlatch_byte_r) AM_WRITE(pending_command_clear_w) + AM_RANGE(0x04, 0x04) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(pending_command_clear_w) AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) ADDRESS_MAP_END @@ -272,12 +272,6 @@ static GFXDECODE_START( suprslam ) GFXDECODE_ENTRY( "gfx3", 0, suprslam_16x16x4_layout, 0x100, 16 ) GFXDECODE_END -/*** MORE SOUND **************************************************************/ - -WRITE_LINE_MEMBER(suprslam_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} /*** MACHINE DRIVER **********************************************************/ @@ -333,8 +327,10 @@ static MACHINE_CONFIG_START( suprslam, suprslam_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(suprslam_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) diff --git a/src/mame/drivers/svmu.cpp b/src/mame/drivers/svmu.cpp index da2ff7e3765..47775fcdd8b 100644 --- a/src/mame/drivers/svmu.cpp +++ b/src/mame/drivers/svmu.cpp @@ -198,7 +198,7 @@ inline void vmufat_write_word(UINT8* flash, UINT8 block, offs_t offset, UINT16 d QUICKLOAD_LOAD_MEMBER( svmu_state, svmu ) { UINT32 size = image.length(); - UINT8 *flash = (UINT8*)m_flash->space().get_read_ptr(0); + UINT8 *flash = m_flash->base(); image.fread(flash, size); diff --git a/src/mame/drivers/swyft.cpp b/src/mame/drivers/swyft.cpp index 644f41aa640..4def11ebd27 100644 --- a/src/mame/drivers/swyft.cpp +++ b/src/mame/drivers/swyft.cpp @@ -568,12 +568,13 @@ x x x x 1 1 ?1? ?0? ? 1 0 0 x x * * * * x x static ADDRESS_MAP_START(swyft_mem, AS_PROGRAM, 8, swyft_state) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x000000, 0x00ffff) AM_ROM AM_MIRROR(0xF00000) // 64 KB ROM - AM_RANGE(0x040000, 0x07ffff) AM_RAM AM_MIRROR(0xF00000) AM_SHARE("p_swyft_vram") // 256 KB RAM - AM_RANGE(0x0d0000, 0x0d000f) AM_READ(swyft_d0000) AM_MIRROR(0xF00000) // status of something? reads from d0000, d0004, d0008, d000a, d000e - AM_RANGE(0x0e1000, 0x0e1000) AM_DEVWRITE("acia6850", acia6850_device, control_w) AM_MIRROR(0xF00000) // 6850 ACIA lives here - AM_RANGE(0x0e2000, 0x0e2fff) AM_READWRITE(swyft_via0_r, swyft_via0_w) AM_MIRROR(0xF00000)// io area with selector on a9 a8 a7 a6? - AM_RANGE(0x0e4000, 0x0e4fff) AM_READWRITE(swyft_via1_r, swyft_via1_w) AM_MIRROR(0xF00000) + ADDRESS_MAP_GLOBAL_MASK(0xfffff) + AM_RANGE(0x000000, 0x00ffff) AM_ROM // 64 KB ROM + AM_RANGE(0x040000, 0x07ffff) AM_RAM AM_SHARE("p_swyft_vram") // 256 KB RAM + AM_RANGE(0x0d0000, 0x0d000f) AM_READ(swyft_d0000) // status of something? reads from d0000, d0004, d0008, d000a, d000e + AM_RANGE(0x0e1000, 0x0e1000) AM_DEVWRITE("acia6850", acia6850_device, control_w) // 6850 ACIA lives here + AM_RANGE(0x0e2000, 0x0e2fff) AM_READWRITE(swyft_via0_r, swyft_via0_w) // io area with selector on a9 a8 a7 a6? + AM_RANGE(0x0e4000, 0x0e4fff) AM_READWRITE(swyft_via1_r, swyft_via1_w) ADDRESS_MAP_END MACHINE_START_MEMBER(swyft_state,swyft) diff --git a/src/mame/drivers/system1.cpp b/src/mame/drivers/system1.cpp index 2243b0f1e66..a3697e9df01 100644 --- a/src/mame/drivers/system1.cpp +++ b/src/mame/drivers/system1.cpp @@ -210,7 +210,7 @@ DIPs are also shared 100% with each other. flickys1, flickys2 ------------------ -Very noticibly more difficult than the other two sets. DIPs have changes (less lives +Very noticeably more difficult than the other two sets. DIPs have changes (less lives and bonus options). There is no screen which shows the bonus lives values like the other two sets, either. flickys1 allows for DEMO SOUND which none of the others sets seem to have access to. @@ -218,10 +218,8 @@ seem to have access to. ******************************************************************************/ #include "emu.h" -#include "cpu/z80/z80.h" #include "cpu/mcs51/mcs51.h" #include "machine/z80pio.h" -#include "machine/i8255.h" #include "machine/segacrpt_device.h" #include "machine/mc8123.h" #include "sound/sn76496.h" @@ -529,7 +527,7 @@ READ8_MEMBER(system1_state::sound_data_r) { m_ppi8255->pc6_w(0); m_ppi8255->pc6_w(1); - return soundlatch_byte_r(space, offset); + return m_soundlatch->read(space, offset); } /* if we have a Z80 PIO, get the data from the port and toggle the strobe */ @@ -548,7 +546,7 @@ READ8_MEMBER(system1_state::sound_data_r) WRITE8_MEMBER(system1_state::soundport_w) { /* boost interleave when communicating with the sound CPU */ - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); } @@ -819,8 +817,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, system1_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x1800) AM_RAM - AM_RANGE(0xa000, 0xa003) AM_MIRROR(0x1fff) AM_DEVWRITE("sn1", sn76489a_device, write) - AM_RANGE(0xc000, 0xc003) AM_MIRROR(0x1fff) AM_DEVWRITE("sn2", sn76489a_device, write) + AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x1fff) AM_DEVWRITE("sn1", sn76489a_device, write) + AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x1fff) AM_DEVWRITE("sn2", sn76489a_device, write) AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x1fff) AM_READ(sound_data_r) ADDRESS_MAP_END @@ -2177,6 +2175,8 @@ static MACHINE_CONFIG_START( sys1ppi, system1_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("sn1", SN76489A, SOUND_CLOCK/4) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -5261,7 +5261,7 @@ DRIVER_INIT_MEMBER(system1_state,nob) space.install_read_handler(0x0001, 0x0001, read8_delegate(FUNC(system1_state::nob_start_r),this)); /* install MCU communications */ - iospace.install_readwrite_handler(0x18, 0x18, 0x00, 0x00, read8_delegate(FUNC(system1_state::nob_maincpu_latch_r),this), write8_delegate(FUNC(system1_state::nob_maincpu_latch_w),this)); + iospace.install_readwrite_handler(0x18, 0x18, read8_delegate(FUNC(system1_state::nob_maincpu_latch_r),this), write8_delegate(FUNC(system1_state::nob_maincpu_latch_w),this)); iospace.install_read_handler(0x1c, 0x1c, read8_delegate(FUNC(system1_state::nob_mcu_status_r),this)); } @@ -5333,10 +5333,10 @@ DRIVER_INIT_MEMBER(system1_state,choplift) DRIVER_INIT_MEMBER(system1_state,shtngmst) { address_space &iospace = m_maincpu->space(AS_IO); - iospace.install_read_port(0x12, 0x12, 0x00, 0x00, "TRIGGER"); - iospace.install_read_port(0x18, 0x18, 0x00, 0x03, "18"); - iospace.install_read_handler(0x1c, 0x1c, 0x00, 0x02, read8_delegate(FUNC(system1_state::shtngmst_gunx_r),this)); - iospace.install_read_port(0x1d, 0x1d, 0x00, 0x02, "GUNY"); + iospace.install_read_port(0x12, 0x12, "TRIGGER"); + iospace.install_read_port(0x18, 0x18, 0x03, "18"); + iospace.install_read_handler(0x1c, 0x1c, 0, 0x02, 0, read8_delegate(FUNC(system1_state::shtngmst_gunx_r),this)); + iospace.install_read_port(0x1d, 0x1d, 0x02, "GUNY"); DRIVER_INIT_CALL(bank0c); } diff --git a/src/mame/drivers/system16.cpp b/src/mame/drivers/system16.cpp index c7c9bf7015e..3291f592b37 100644 --- a/src/mame/drivers/system16.cpp +++ b/src/mame/drivers/system16.cpp @@ -18,7 +18,7 @@ - Bay Route (set 1) - Golden Axe (set 1) - These share a common encryption, Bay Route is also proteceted, the Golden Axe set has a strange + These share a common encryption, Bay Route is also protected, the Golden Axe set has a strange unknown rom, maybe it's related to an MCU that isn't present on the GA board? --- @@ -53,7 +53,7 @@ Passing Shot (2 sets) Wonderboy 3 - System 18 (more commplex tilemaps) + System 18 (more complex tilemaps) ---------------------------------- Alien Storm @@ -92,29 +92,21 @@ #include "cpu/z80/z80.h" #include "includes/system16.h" #include "cpu/m68000/m68000.h" -#include "sound/msm5205.h" #include "sound/2151intf.h" #include "sound/2612intf.h" #include "sound/rf5c68.h" -#include "video/segaic16.h" #include "sound/2203intf.h" #define SHADOW_COLORS_MULTIPLIER 3 -INTERRUPT_GEN_MEMBER(segas1x_bootleg_state::sys16_interrupt) -{ - device.execute().set_input_line(4, HOLD_LINE); /* Interrupt vector 4, used by VBlank */ -} - - /***************************************************************************/ WRITE16_MEMBER(segas1x_bootleg_state::sound_command_nmi_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -123,7 +115,7 @@ WRITE16_MEMBER(segas1x_bootleg_state::sound_command_irq_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_soundcpu->set_input_line(0, HOLD_LINE); } } @@ -414,7 +406,7 @@ static ADDRESS_MAP_START(tturfbl_sound_map, AS_PROGRAM, 8, segas1x_bootleg_state AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_READ(tturfbl_soundbank_r) AM_RANGE(0xe000, 0xe000) AM_WRITE(tturfbl_soundbank_w) - AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe800, 0xe800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf000, 0xf000) AM_WRITE(tturfbl_msm5205_data_w) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END @@ -433,7 +425,7 @@ static ADDRESS_MAP_START(shinobi_datsu_sound_map, AS_PROGRAM, 8, segas1x_bootleg AM_RANGE(0xe000, 0xe001) AM_DEVREADWRITE("ym1", ym2203_device, read, write) AM_RANGE(0xe400, 0xe401) AM_DEVREADWRITE("ym2", ym2203_device, read, write) - AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe800, 0xe800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END @@ -448,14 +440,14 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas1x_bootleg_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe800, 0xe800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, segas1x_bootleg_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) - AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc0, 0xc0) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -463,7 +455,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_7759_map, AS_PROGRAM, 8, segas1x_bootleg_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xdfff) AM_ROMBANK("bank1") - AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe800, 0xe800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END @@ -483,7 +475,7 @@ static ADDRESS_MAP_START( sound_7759_io_map, AS_IO, 8, segas1x_bootleg_state ) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x40, 0x40) AM_WRITE(upd7759_bank_w) AM_RANGE(0x80, 0x80) AM_DEVWRITE("7759", upd7759_device, port_w) - AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc0, 0xc0) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -553,7 +545,7 @@ WRITE16_MEMBER(segas1x_bootleg_state::s16bl_fgscrollx_bank_w) scroll += 0x200; set_tile_bank(bank); - scroll += 3; // so that the character portraits in attract mode are properly aligned (alighnment on character select no longer matches original tho?) + scroll += 3; // so that the character portraits in attract mode are properly aligned (alignment on character select no longer matches original tho?) m_fg_scrollx = -scroll; } @@ -1018,7 +1010,7 @@ static ADDRESS_MAP_START( sound_18_io_map, AS_IO, 8, segas1x_bootleg_state ) AM_RANGE(0x80, 0x83) AM_DEVREADWRITE("3438.0", ym3438_device, read, write) AM_RANGE(0x90, 0x93) AM_DEVREADWRITE("3438.1", ym3438_device, read, write) AM_RANGE(0xa0, 0xa0) AM_WRITE(sys18_soundbank_w) - AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc0, 0xc0) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -1123,7 +1115,7 @@ ADDRESS_MAP_END The unused memory locations and I/O port access seem to be remnants of the original code that were not patched out: - - Program accesses RF5C68A channel registes at $C000-$C007 + - Program accesses RF5C68A channel registers at $C000-$C007 - Program clears RF5C68A wave memory at $DF00-$DFFF - Program writes to port $A0 to access sound ROM banking control latch - Program reads port $C0 to access sound command @@ -1192,7 +1184,7 @@ static ADDRESS_MAP_START(shdancbl_sound_map, AS_PROGRAM, 8, segas1x_bootleg_stat AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_READ(shdancbl_soundbank_r) AM_RANGE(0xc000, 0xc00f) AM_WRITENOP - AM_RANGE(0xc400, 0xc400) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc400, 0xc400) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xc800, 0xc800) AM_WRITE(shdancbl_msm5205_data_w) AM_RANGE(0xcc00, 0xcc03) AM_DEVREADWRITE("3438.0", ym3438_device, read, write) AM_RANGE(0xd000, 0xd003) AM_DEVREADWRITE("3438.1", ym3438_device, read, write) @@ -1212,7 +1204,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(shdancbla_sound_map, AS_PROGRAM, 8, segas1x_bootleg_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_READ(shdancbl_soundbank_r) - AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xc000, 0xc000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xc000, 0xc003) AM_DEVREADWRITE("3438.0", ym3438_device, read, write) AM_RANGE(0xc400, 0xc403) AM_DEVREADWRITE("3438.1", ym3438_device, read, write) @@ -1965,33 +1957,11 @@ GFXDECODE_END /************************************* * - * Machine driver + * Sound fragments * *************************************/ -/* System 16A/B Bootlegs */ -static MACHINE_CONFIG_START( system16_base, segas1x_bootleg_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M68000, 10000000) - MCFG_CPU_VBLANK_INT_DRIVER("screen", segas1x_bootleg_state, sys16_interrupt) - - /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(40*8, 36*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(segas1x_bootleg_state, screen_update_system16) - MCFG_SCREEN_PALETTE("palette") - - MCFG_GFXDECODE_ADD("gfxdecode", "palette", sys16) - MCFG_PALETTE_ADD("palette", 2048*SHADOW_COLORS_MULTIPLIER) - - MCFG_VIDEO_START_OVERRIDE(segas1x_bootleg_state,system16) -MACHINE_CONFIG_END - -static MACHINE_CONFIG_DERIVED( system16, system16_base ) +static MACHINE_CONFIG_FRAGMENT( z80_ym2151 ) MCFG_CPU_ADD("soundcpu", Z80, 4000000) MCFG_CPU_PROGRAM_MAP(sound_map) @@ -2011,23 +1981,26 @@ WRITE_LINE_MEMBER(segas1x_bootleg_state::sound_cause_nmi) m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } -static MACHINE_CONFIG_DERIVED( system16_7759, system16 ) - - /* basic machine hardware */ +static MACHINE_CONFIG_FRAGMENT( z80_ym2151_upd7759 ) - MCFG_CPU_MODIFY("soundcpu") + MCFG_CPU_ADD("soundcpu", Z80, 4000000) MCFG_CPU_PROGRAM_MAP(sound_7759_map) MCFG_CPU_IO_MAP(sound_7759_io_map) /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + + MCFG_YM2151_ADD("ymsnd", 4000000) + MCFG_SOUND_ROUTE(0, "lspeaker", 0.32) + MCFG_SOUND_ROUTE(1, "rspeaker", 0.32) + MCFG_SOUND_ADD("7759", UPD7759, UPD7759_STANDARD_CLOCK) MCFG_UPD7759_DRQ_CALLBACK(WRITELINE(segas1x_bootleg_state,sound_cause_nmi)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.48) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.48) MACHINE_CONFIG_END - -static MACHINE_CONFIG_FRAGMENT( system16_datsu_sound ) +static MACHINE_CONFIG_FRAGMENT( datsu_ym2151_msm5205 ) /* TODO: - other games might use this sound configuration - speaker is likely to be mono for the bootlegs, not stereo. @@ -2050,19 +2023,7 @@ static MACHINE_CONFIG_FRAGMENT( system16_datsu_sound ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( shinobi_datsu, system16_base ) - - /* basic machine hardware */ - MCFG_CPU_MODIFY("maincpu") - MCFG_CPU_PROGRAM_MAP(shinobib_map) - - MCFG_BOOTLEG_SYS16A_SPRITES_ADD("sprites") - MCFG_BOOTLEG_SYS16A_SPRITES_XORIGIN(189-117) - - MCFG_VIDEO_START_OVERRIDE(segas1x_bootleg_state, s16a_bootleg_shinobi ) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(segas1x_bootleg_state, screen_update_s16a_bootleg) - +static MACHINE_CONFIG_FRAGMENT( datsu_2x_ym2203 ) MCFG_CPU_ADD("soundcpu", Z80, 4000000) MCFG_CPU_PERIODIC_INT_DRIVER(segas1x_bootleg_state, nmi_line_pulse, 3000) // or from the YM2203? MCFG_CPU_PROGRAM_MAP(shinobi_datsu_sound_map) @@ -2085,11 +2046,56 @@ static MACHINE_CONFIG_DERIVED( shinobi_datsu, system16_base ) MCFG_SOUND_ROUTE(1, "mono", 0.50) MCFG_SOUND_ROUTE(2, "mono", 0.50) MCFG_SOUND_ROUTE(3, "mono", 0.80) +MACHINE_CONFIG_END + +/************************************* + * + * Machine driver + * + *************************************/ + +/* System 16A/B Bootlegs */ +static MACHINE_CONFIG_START( system16_base, segas1x_bootleg_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68000, 10000000) + MCFG_CPU_VBLANK_INT_DRIVER("screen", segas1x_bootleg_state, irq4_line_hold) + + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_SIZE(40*8, 36*8) + MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1) + MCFG_SCREEN_UPDATE_DRIVER(segas1x_bootleg_state, screen_update_system16) + MCFG_SCREEN_PALETTE("palette") + + MCFG_GFXDECODE_ADD("gfxdecode", "palette", sys16) + MCFG_PALETTE_ADD("palette", 2048*SHADOW_COLORS_MULTIPLIER) + + MCFG_VIDEO_START_OVERRIDE(segas1x_bootleg_state,system16) + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( shinobi_datsu, system16_base ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(shinobib_map) + MCFG_BOOTLEG_SYS16A_SPRITES_ADD("sprites") + MCFG_BOOTLEG_SYS16A_SPRITES_XORIGIN(189-117) + + MCFG_VIDEO_START_OVERRIDE(segas1x_bootleg_state, s16a_bootleg_shinobi ) + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_UPDATE_DRIVER(segas1x_bootleg_state, screen_update_s16a_bootleg) + + MCFG_FRAGMENT_ADD(datsu_2x_ym2203) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( passshtb, system16_7759 ) +static MACHINE_CONFIG_DERIVED( passshtb, system16_base ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") @@ -2102,10 +2108,12 @@ static MACHINE_CONFIG_DERIVED( passshtb, system16_7759 ) MCFG_VIDEO_START_OVERRIDE(segas1x_bootleg_state, s16a_bootleg_passsht ) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE_DRIVER(segas1x_bootleg_state, screen_update_s16a_bootleg) + + MCFG_FRAGMENT_ADD(z80_ym2151_upd7759) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( passsht4b, system16_7759 ) +static MACHINE_CONFIG_DERIVED( passsht4b, system16_base ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") @@ -2119,9 +2127,11 @@ static MACHINE_CONFIG_DERIVED( passsht4b, system16_7759 ) MCFG_VIDEO_START_OVERRIDE(segas1x_bootleg_state, s16a_bootleg_passsht ) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE_DRIVER(segas1x_bootleg_state, screen_update_s16a_bootleg_passht4b) + + MCFG_FRAGMENT_ADD(datsu_2x_ym2203) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( wb3bb, system16 ) +static MACHINE_CONFIG_DERIVED( wb3bb, system16_base ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") @@ -2135,6 +2145,8 @@ static MACHINE_CONFIG_DERIVED( wb3bb, system16 ) MCFG_VIDEO_START_OVERRIDE(segas1x_bootleg_state, s16a_bootleg_wb3bl ) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE_DRIVER(segas1x_bootleg_state, screen_update_s16a_bootleg) + + MCFG_FRAGMENT_ADD(z80_ym2151) MACHINE_CONFIG_END @@ -2144,7 +2156,7 @@ static MACHINE_CONFIG_START( goldnaxeb1, segas1x_bootleg_state ) MCFG_CPU_ADD("maincpu", M68000, 10000000) MCFG_CPU_PROGRAM_MAP(goldnaxeb1_map) MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", segas1x_bootleg_state, sys16_interrupt) + MCFG_CPU_VBLANK_INT_DRIVER("screen", segas1x_bootleg_state, irq4_line_hold) /* video hardware */ @@ -2190,35 +2202,28 @@ static MACHINE_CONFIG_DERIVED( bayrouteb2, goldnaxeb1 ) MCFG_CPU_PROGRAM_MAP(bayrouteb2_map) MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_DECRYPTED_OPCODES) - MCFG_FRAGMENT_ADD(system16_datsu_sound) + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + + MCFG_FRAGMENT_ADD(datsu_ym2151_msm5205) MCFG_DEVICE_MODIFY("sprites") MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-107) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( tturfbl, system16_7759 ) +static MACHINE_CONFIG_DERIVED( tturfbl, system16_base ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(tturfbl_map) - MCFG_CPU_MODIFY("soundcpu") - MCFG_CPU_PROGRAM_MAP(tturfbl_sound_map) - MCFG_CPU_IO_MAP(tturfbl_sound_io_map) - - MCFG_DEVICE_REMOVE("7759") - MCFG_SOUND_ADD("5205", MSM5205, 220000) - MCFG_MSM5205_VCLK_CB(WRITELINE(segas1x_bootleg_state, tturfbl_msm5205_callback)) - MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80) + MCFG_FRAGMENT_ADD(datsu_ym2151_msm5205) MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites") MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-107) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( dduxbl, system16 ) +static MACHINE_CONFIG_DERIVED( dduxbl, system16_base ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") @@ -2226,9 +2231,11 @@ static MACHINE_CONFIG_DERIVED( dduxbl, system16 ) MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites") MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-112) + + MCFG_FRAGMENT_ADD(z80_ym2151) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( eswatbl, system16_7759 ) +static MACHINE_CONFIG_DERIVED( eswatbl, system16_base ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") @@ -2236,11 +2243,13 @@ static MACHINE_CONFIG_DERIVED( eswatbl, system16_7759 ) MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites") MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-124) + + MCFG_FRAGMENT_ADD(z80_ym2151_upd7759) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( tetrisbl, system16 ) +static MACHINE_CONFIG_DERIVED( tetrisbl, system16_base ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") @@ -2248,10 +2257,22 @@ static MACHINE_CONFIG_DERIVED( tetrisbl, system16 ) MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites") MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-112) + + MCFG_FRAGMENT_ADD(z80_ym2151) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( altbeastbl, system16_base ) + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(tetrisbl_map) + + MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites") + MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-112) + + MCFG_FRAGMENT_ADD(datsu_2x_ym2203) +MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( beautyb, system16 ) +static MACHINE_CONFIG_DERIVED( beautyb, system16_base ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") @@ -2259,6 +2280,8 @@ static MACHINE_CONFIG_DERIVED( beautyb, system16 ) MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites") MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-112) + + MCFG_FRAGMENT_ADD(z80_ym2151) MACHINE_CONFIG_END @@ -2293,6 +2316,8 @@ static MACHINE_CONFIG_START( system18, segas1x_bootleg_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("3438.0", YM3438, 8000000) MCFG_SOUND_ROUTE(0, "lspeaker", 0.40) MCFG_SOUND_ROUTE(1, "rspeaker", 0.40) @@ -3250,7 +3275,7 @@ ROM_END Michael Jackson's Mooonwalker bootleg - Complete Dump -This romset comes from a bootleg pcb.This is the complement of which lacks in the existing set (mwalkbl) +This romset comes from a bootleg pcb. This is the complement of which lacks in the existing set (mwalkbl) Hardware info: Main cpu 68000P10 Sound cpu Z80A @@ -3261,7 +3286,7 @@ mwb5snd - sound program mwb10snd to mwb15snd - adpcm samples mwb16obj to mwb31obj - sprites/objects Rest of eproms (main program and tiles/bg) are identical of existing set and original set respectively. -Note - sound section was been heavily modified: sound program to use only samples and some musics are cut (not present).Sprite eproms are splitted from original set. +Note - sound section was been heavily modified: sound program to use only samples and some musics are cut (not present). Sprite eproms are split from original set. Eproms are 27512, 27010 */ @@ -3775,7 +3800,7 @@ DRIVER_INIT_MEMBER(segas1x_bootleg_state,astormbl) GAME( 1987, shinobld, shinobi, shinobi_datsu, shinobi, segas1x_bootleg_state, shinobl, ROT0, "bootleg (Datsu)", "Shinobi (Datsu bootleg, set 1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1987, shinoblda, shinobi, shinobi_datsu, shinobi, segas1x_bootleg_state, shinobl, ROT0, "bootleg (Datsu)", "Shinobi (Datsu bootleg, set 2)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1988, passshtb, passsht, passshtb, passsht, segas1x_bootleg_state, passsht, ROT270, "bootleg", "Passing Shot (2 Players) (bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1988, passht4b, passsht, passsht4b, passht4b, segas1x_bootleg_state, shinobl, ROT270, "bootleg", "Passing Shot (4 Players) (bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND ) +GAME( 1988, passht4b, passsht, passsht4b, passht4b, segas1x_bootleg_state, shinobl, ROT270, "bootleg", "Passing Shot (4 Players) (bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1988, wb3bbl, wb3, wb3bb, wb3b, segas1x_bootleg_state, wb3bbl, ROT0, "bootleg", "Wonder Boy III - Monster Lair (bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS) GAME( 1988, wb3bble, wb3, wb3bb, wb3b, segas1x_bootleg_state, wb3bbl, ROT0, "bootleg", "Wonder Boy III - Monster Lair (encrypted bootleg)", MACHINE_NOT_WORKING ) @@ -3786,8 +3811,8 @@ GAME( 1989, goldnaxeb1, goldnaxe, goldnaxeb1, goldnaxe, segas1x_bootleg_state GAME( 1989, goldnaxeb2, goldnaxe, goldnaxeb2, goldnaxe, segas1x_bootleg_state, goldnaxeb2, ROT0, "bootleg", "Golden Axe (bootleg)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) GAME( 1989, tturfbl, tturf, tturfbl, tturf, segas1x_bootleg_state, tturfbl, ROT0, "bootleg (Datsu)", "Tough Turf (Datsu bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1989, dduxbl, ddux, dduxbl, ddux, segas1x_bootleg_state, dduxbl, ROT0, "bootleg (Datsu)", "Dynamite Dux (Datsu bootleg)", MACHINE_NOT_WORKING ) -GAME( 1988, altbeastbl, altbeast, tetrisbl, tetris, segas1x_bootleg_state, altbeastbl, ROT0, "bootleg (Datsu)", "Altered Beast (Datsu bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND ) -GAME( 1988, mutantwarr, altbeast, tetrisbl, tetris, segas1x_bootleg_state, altbeastbl, ROT0, "bootleg (Datsu)", "Mutant Warrior (Altered Beast - Datsu bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND ) +GAME( 1988, altbeastbl, altbeast, altbeastbl, tetris, segas1x_bootleg_state, altbeastbl, ROT0, "bootleg (Datsu)", "Altered Beast (Datsu bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1988, mutantwarr, altbeast, altbeastbl, tetris, segas1x_bootleg_state, altbeastbl, ROT0, "bootleg (Datsu)", "Mutant Warrior (Altered Beast - Datsu bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1989, eswatbl, eswat, eswatbl, eswat, segas1x_bootleg_state, eswatbl, ROT0, "bootleg", "E-Swat - Cyber Police (bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1988, tetrisbl, tetris, tetrisbl, tetris, segas1x_bootleg_state, dduxbl, ROT0, "bootleg", "Tetris (bootleg)", 0 ) diff --git a/src/mame/drivers/tagteam.cpp b/src/mame/drivers/tagteam.cpp index 520aaf9c623..dab1d7a459c 100644 --- a/src/mame/drivers/tagteam.cpp +++ b/src/mame/drivers/tagteam.cpp @@ -40,7 +40,7 @@ void tagteam_state::machine_start() WRITE8_MEMBER(tagteam_state::sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); } @@ -75,7 +75,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, tagteam_state ) AM_RANGE(0x2002, 0x2003) AM_DEVWRITE("ay2", ay8910_device, data_address_w) AM_RANGE(0x2004, 0x2004) AM_DEVWRITE("dac", dac_device, write_unsigned8) AM_RANGE(0x2005, 0x2005) AM_WRITE(sound_nmi_mask_w) - AM_RANGE(0x2007, 0x2007) AM_READ(soundlatch_byte_r) + AM_RANGE(0x2007, 0x2007) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x4000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -236,6 +236,8 @@ static MACHINE_CONFIG_START( tagteam, tagteam_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, XTAL_12MHz/8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) diff --git a/src/mame/drivers/tail2nos.cpp b/src/mame/drivers/tail2nos.cpp index 7a327e589a8..8d90d04974e 100644 --- a/src/mame/drivers/tail2nos.cpp +++ b/src/mame/drivers/tail2nos.cpp @@ -22,7 +22,7 @@ WRITE16_MEMBER(tail2nos_state::sound_command_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -57,7 +57,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_port_map, AS_IO, 8, tail2nos_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x07, 0x07) AM_READ(soundlatch_byte_r) AM_WRITENOP /* the write is a clear pending command */ + AM_RANGE(0x07, 0x07) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITENOP /* the write is a clear pending command */ AM_RANGE(0x08, 0x0b) AM_DEVWRITE("ymsnd", ym2608_device, write) #if 0 AM_RANGE(0x18, 0x1b) AM_DEVREAD("ymsnd", ym2608_device, read) @@ -176,12 +176,6 @@ static GFXDECODE_START( tail2nos ) GFXDECODE_END - -WRITE_LINE_MEMBER(tail2nos_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - void tail2nos_state::machine_start() { UINT8 *ROM = memregion("audiocpu")->base(); @@ -236,8 +230,10 @@ static MACHINE_CONFIG_START( tail2nos, tail2nos_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2608, XTAL_8MHz) /* verified on pcb */ - MCFG_YM2608_IRQ_HANDLER(WRITELINE(tail2nos_state, irqhandler)) + MCFG_YM2608_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(tail2nos_state, sound_bankswitch_w)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) diff --git a/src/mame/drivers/taito.cpp b/src/mame/drivers/taito.cpp index 74ed96d8703..580921c4a4e 100644 --- a/src/mame/drivers/taito.cpp +++ b/src/mame/drivers/taito.cpp @@ -95,14 +95,14 @@ static ADDRESS_MAP_START( taito_map, AS_PROGRAM, 8, taito_state ) AM_RANGE(0x2806, 0x2806) AM_MIRROR(0x0080) AM_READ_PORT("X6") AM_RANGE(0x2807, 0x2807) AM_MIRROR(0x0080) AM_READ_PORT("X7") AM_RANGE(0x2808, 0x2808) AM_MIRROR(0x0080) AM_READ_PORT("X8") - AM_RANGE(0x28d8, 0x28d8) AM_MIRROR(0x0080) AM_READ_PORT("X0") - AM_RANGE(0x28d9, 0x28d9) AM_MIRROR(0x0080) AM_READ_PORT("X1") - AM_RANGE(0x28da, 0x28da) AM_MIRROR(0x0080) AM_READ_PORT("X2") - AM_RANGE(0x28db, 0x28db) AM_MIRROR(0x0080) AM_READ_PORT("X3") - AM_RANGE(0x28dc, 0x28dc) AM_MIRROR(0x0080) AM_READ_PORT("X4") - AM_RANGE(0x28db, 0x28dd) AM_MIRROR(0x0080) AM_READ_PORT("X5") - AM_RANGE(0x28de, 0x28de) AM_MIRROR(0x0080) AM_READ_PORT("X6") - AM_RANGE(0x28df, 0x28df) AM_MIRROR(0x0080) AM_READ_PORT("X7") + AM_RANGE(0x2838, 0x2838) AM_MIRROR(0x0080) AM_READ_PORT("X0") + AM_RANGE(0x2839, 0x2839) AM_MIRROR(0x0080) AM_READ_PORT("X1") + AM_RANGE(0x283a, 0x283a) AM_MIRROR(0x0080) AM_READ_PORT("X2") + AM_RANGE(0x283b, 0x283b) AM_MIRROR(0x0080) AM_READ_PORT("X3") + AM_RANGE(0x283c, 0x283c) AM_MIRROR(0x0080) AM_READ_PORT("X4") + AM_RANGE(0x283b, 0x283d) AM_MIRROR(0x0080) AM_READ_PORT("X5") + AM_RANGE(0x283e, 0x283e) AM_MIRROR(0x0080) AM_READ_PORT("X6") + AM_RANGE(0x283f, 0x283f) AM_MIRROR(0x0080) AM_READ_PORT("X7") AM_RANGE(0x4000, 0x407f) AM_RAM AM_RANGE(0x4080, 0x408f) AM_RAM AM_SHARE("ram") AM_RANGE(0x4090, 0x409f) AM_READWRITE(io_r,io_w) diff --git a/src/mame/drivers/taito_b.cpp b/src/mame/drivers/taito_b.cpp index 57662c991f0..748c513f502 100644 --- a/src/mame/drivers/taito_b.cpp +++ b/src/mame/drivers/taito_b.cpp @@ -1871,12 +1871,6 @@ static GFXDECODE_START( rambo3 ) GFXDECODE_END -/* handler called by the YM2610 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(taitob_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - /* Games that use the mb87078 are: pbobble, spacedx and qzshowby schems are not available, but from the writes I guess that @@ -1962,7 +1956,7 @@ static MACHINE_CONFIG_START( rastsag2, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* 8 MHz */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -2018,7 +2012,7 @@ static MACHINE_CONFIG_START( masterw, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_24MHz/8) /* 3 MHz */ - MCFG_YM2203_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitob_state, bankswitch_w)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 0.25) @@ -2093,7 +2087,7 @@ static MACHINE_CONFIG_START( ashura, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* 8 MHz */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -2149,7 +2143,7 @@ static MACHINE_CONFIG_START( crimec, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* 8 MHz */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) @@ -2207,7 +2201,7 @@ static MACHINE_CONFIG_START( hitice, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_24MHz/8) /* 3 MHz */ - MCFG_YM2203_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitob_state, bankswitch_w)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 0.25) @@ -2268,7 +2262,7 @@ static MACHINE_CONFIG_START( rambo3p, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* verified on pcb */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) @@ -2325,7 +2319,7 @@ static MACHINE_CONFIG_START( rambo3, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* 8 MHz verified on pcb */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -2387,7 +2381,7 @@ static MACHINE_CONFIG_START( pbobble, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610B, XTAL_16MHz/2) /* 8 MHz */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -2449,7 +2443,7 @@ static MACHINE_CONFIG_START( spacedx, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* 8 MHz */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -2505,7 +2499,7 @@ static MACHINE_CONFIG_START( spacedxo, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* 8 MHz */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -2567,7 +2561,7 @@ static MACHINE_CONFIG_START( qzshowby, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610B, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -2623,7 +2617,7 @@ static MACHINE_CONFIG_START( viofight, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_24MHz/8) /* 3 MHz */ - MCFG_YM2203_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitob_state, bankswitch_w)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 0.25) @@ -2684,7 +2678,7 @@ static MACHINE_CONFIG_START( silentd, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* 8 MHz */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -2740,7 +2734,7 @@ static MACHINE_CONFIG_START( selfeena, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* 8 MHz */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -2805,7 +2799,7 @@ static MACHINE_CONFIG_START( ryujin, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* 8 MHz */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -2868,7 +2862,7 @@ static MACHINE_CONFIG_START( sbm, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610B, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -2925,7 +2919,7 @@ static MACHINE_CONFIG_START( realpunc, taitob_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610B, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitob_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) diff --git a/src/mame/drivers/taito_f2.cpp b/src/mame/drivers/taito_f2.cpp index 4a5104d364f..773dcec1449 100644 --- a/src/mame/drivers/taito_f2.cpp +++ b/src/mame/drivers/taito_f2.cpp @@ -1183,7 +1183,7 @@ static ADDRESS_MAP_START( cameltrya_sound_map, AS_PROGRAM, 8, taitof2_state ) AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("tc0140syt", tc0140syt_device, slave_port_w) AM_RANGE(0xa001, 0xa001) AM_DEVREADWRITE("tc0140syt", tc0140syt_device, slave_comm_r, slave_comm_w) // AM_RANGE(0xb000, 0xb000) AM_WRITE(unknown_w) // probably controlling sample player? - AM_RANGE(0xb000, 0xb001) AM_MIRROR(0x0001) AM_DEVREADWRITE("oki", okim6295_device, read, write) + AM_RANGE(0xb000, 0xb001) AM_DEVREADWRITE("oki", okim6295_device, read, write) ADDRESS_MAP_END @@ -2827,13 +2827,6 @@ static GFXDECODE_START( footchmpbl ) GFXDECODE_END -/* handler called by the YM2610 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(taitof2_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - - WRITE8_MEMBER(taitof2_state::cameltrya_porta_w) { // Implement // @@ -2887,7 +2880,7 @@ static MACHINE_CONFIG_START( taito_f2, taitof2_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, 24000000/3) /* Was 16000000/2, but only a 24Mhz OSC */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitof2_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) @@ -3716,7 +3709,7 @@ static MACHINE_CONFIG_START( cameltrya, taitof2_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2203, 24000000/8) /* verified on pcb */ - MCFG_YM2203_IRQ_HANDLER(WRITELINE(taitof2_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitof2_state, cameltrya_porta_w)) /* portA write - not implemented */ MCFG_SOUND_ROUTE(0, "mono", 0.20) MCFG_SOUND_ROUTE(1, "mono", 0.20) diff --git a/src/mame/drivers/taito_h.cpp b/src/mame/drivers/taito_h.cpp index 900940597a2..90d59515896 100644 --- a/src/mame/drivers/taito_h.cpp +++ b/src/mame/drivers/taito_h.cpp @@ -150,18 +150,6 @@ some kind of zoom table? #include "sound/2610intf.h" #include "includes/taito_h.h" -/*************************************************************************** - - Interrupt(s) - -***************************************************************************/ - -/* Handler called by the YM2610 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(taitoh_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - /*************************************************************************** @@ -681,7 +669,7 @@ static MACHINE_CONFIG_START( syvalion, taitoh_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_8MHz) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoh_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -736,7 +724,7 @@ static MACHINE_CONFIG_START( recordbr, taitoh_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_8MHz) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoh_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) @@ -799,7 +787,7 @@ static MACHINE_CONFIG_START( dleague, taitoh_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_8MHz) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoh_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) diff --git a/src/mame/drivers/taito_l.cpp b/src/mame/drivers/taito_l.cpp index 78e5f4ec1a3..c033a47b026 100644 --- a/src/mame/drivers/taito_l.cpp +++ b/src/mame/drivers/taito_l.cpp @@ -1704,12 +1704,6 @@ static GFXDECODE_START( taito_l ) GFXDECODE_END - -WRITE_LINE_MEMBER(taitol_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - WRITE8_MEMBER(taitol_state::portA_w) { if (m_cur_bank != (data & 0x03)) @@ -1765,7 +1759,7 @@ static MACHINE_CONFIG_START( fhawk, taitol_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_12MHz/4) /* verified on pcb */ - MCFG_YM2203_IRQ_HANDLER(WRITELINE(taitol_state,irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitol_state, portA_w)) MCFG_SOUND_ROUTE(0, "mono", 0.20) MCFG_SOUND_ROUTE(1, "mono", 0.20) @@ -1794,7 +1788,7 @@ static MACHINE_CONFIG_DERIVED( champwr, fhawk ) /* sound hardware */ MCFG_SOUND_MODIFY("ymsnd") - MCFG_YM2203_IRQ_HANDLER(WRITELINE(taitol_state,irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(taitol_state, portA_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(taitol_state, champwr_msm5205_volume_w)) @@ -1822,7 +1816,7 @@ static MACHINE_CONFIG_DERIVED( raimais, fhawk ) /* sound hardware */ MCFG_SOUND_REPLACE("ymsnd", YM2610, XTAL_8MHz) /* verified on pcb (8Mhz OSC is also for the 2nd z80) */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitol_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 1.0) MCFG_SOUND_ROUTE(2, "mono", 1.0) diff --git a/src/mame/drivers/taito_x.cpp b/src/mame/drivers/taito_x.cpp index f85315c0535..4d1a8f88731 100644 --- a/src/mame/drivers/taito_x.cpp +++ b/src/mame/drivers/taito_x.cpp @@ -769,11 +769,6 @@ GFXDECODE_END /**************************************************************************/ -/* handler called by the YM2610 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(taitox_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} MACHINE_START_MEMBER(taitox_state,taitox) { @@ -830,7 +825,7 @@ static MACHINE_CONFIG_START( superman, taitox_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz/2) /* verified on pcb */ - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitox_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) @@ -922,7 +917,7 @@ static MACHINE_CONFIG_START( gigandes, taitox_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitox_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) @@ -969,7 +964,7 @@ static MACHINE_CONFIG_START( ballbros, taitox_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitox_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) diff --git a/src/mame/drivers/taito_z.cpp b/src/mame/drivers/taito_z.cpp index 45d69582597..4c9c985a2af 100644 --- a/src/mame/drivers/taito_z.cpp +++ b/src/mame/drivers/taito_z.cpp @@ -2892,28 +2892,6 @@ static GFXDECODE_START( dblaxle ) GFXDECODE_END - -/************************************************************** - YM2610 (SOUND) - -The first interface is for game boards with twin 68000 and Z80. -Interface B is for games which lack a Z80 (Spacegun, Bshark). -**************************************************************/ - -/* handler called by the YM2610 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(taitoz_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - -/* handler called by the YM2610 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(taitoz_state::irqhandlerb) -{ - // DG: this is probably specific to Z80 and wrong? -// m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - - /*********************************************************** MACHINE DRIVERS @@ -3033,7 +3011,7 @@ static MACHINE_CONFIG_START( contcirc, taitoz_state ) MCFG_SPEAKER_ADD("subwoofer", 0.0, 0.0, 1.0) MCFG_SOUND_ADD("ymsnd", YM2610, 16000000/2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoz_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "subwoofer", 0.20) MCFG_SOUND_ROUTE(1, "2610.1.l", 2.0) MCFG_SOUND_ROUTE(1, "2610.1.r", 2.0) @@ -3111,7 +3089,7 @@ static MACHINE_CONFIG_START( chasehq, taitoz_state ) MCFG_SPEAKER_ADD("subwoofer", 0.0, 0.0, 1.0) MCFG_SOUND_ADD("ymsnd", YM2610, 16000000/2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoz_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "subwoofer", 0.20) MCFG_SOUND_ROUTE(1, "2610.1.l", 1.0) MCFG_SOUND_ROUTE(1, "2610.1.r", 1.0) @@ -3189,7 +3167,7 @@ static MACHINE_CONFIG_START( enforce, taitoz_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, 16000000/2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoz_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "2610.1.l", 20.0) @@ -3262,7 +3240,7 @@ static MACHINE_CONFIG_START( bshark, taitoz_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, 16000000/2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoz_state, irqhandlerb)) + //MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) // DG: this is probably specific to Z80 and wrong? MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "2610.1.l", 28.0) @@ -3343,7 +3321,7 @@ static MACHINE_CONFIG_START( sci, taitoz_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, 16000000/2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoz_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "2610.1.l", 2.0) @@ -3424,7 +3402,7 @@ static MACHINE_CONFIG_START( nightstr, taitoz_state ) MCFG_SPEAKER_ADD("subwoofer", 0.0, 0.0, 1.0) MCFG_SOUND_ADD("ymsnd", YM2610, 16000000/2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoz_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "subwoofer", 0.20) MCFG_SOUND_ROUTE(1, "2610.1.l", 2.0) MCFG_SOUND_ROUTE(1, "2610.1.r", 2.0) @@ -3502,7 +3480,7 @@ static MACHINE_CONFIG_START( aquajack, taitoz_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, 16000000/2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoz_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "2610.1.l", 2.0) @@ -3576,7 +3554,7 @@ static MACHINE_CONFIG_START( spacegun, taitoz_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, 16000000/2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoz_state, irqhandlerb)) + //MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) // DG: this is probably specific to Z80 and wrong? MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "2610.1.l", 8.0) @@ -3648,7 +3626,7 @@ static MACHINE_CONFIG_START( dblaxle, taitoz_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_32MHz/4) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoz_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "2610.1.l", 8.0) @@ -3723,7 +3701,7 @@ static MACHINE_CONFIG_START( racingb, taitoz_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_32MHz/4) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoz_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "2610.1.l", 8.0) diff --git a/src/mame/drivers/taitoair.cpp b/src/mame/drivers/taitoair.cpp index 3315310901b..b81368cadf8 100644 --- a/src/mame/drivers/taitoair.cpp +++ b/src/mame/drivers/taitoair.cpp @@ -683,17 +683,6 @@ GFXDECODE_END /************************************************************ - YM2610 (SOUND) -************************************************************/ - -/* Handler called by the YM2610 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(taitoair_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - - -/************************************************************ MACHINE DRIVERS ************************************************************/ @@ -772,7 +761,7 @@ static MACHINE_CONFIG_START( airsys, taitoair_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL_16MHz / 2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(taitoair_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.30) MCFG_SOUND_ROUTE(1, "mono", 0.60) MCFG_SOUND_ROUTE(2, "mono", 0.60) diff --git a/src/mame/drivers/taitosj.cpp b/src/mame/drivers/taitosj.cpp index 409722d8c45..6cab7901b66 100644 --- a/src/mame/drivers/taitosj.cpp +++ b/src/mame/drivers/taitosj.cpp @@ -92,7 +92,7 @@ Address Dir Data Name Description although bioatack and spaceskr do initialise the second bank. [2] Priority is controlled by a 256x4 PROM. - Bits 0-3 of PRY go to A4-A7 of the PROM, bit 4 selectes D0-D1 or D2-D3. + Bits 0-3 of PRY go to A4-A7 of the PROM, bit 4 selects D0-D1 or D2-D3. A0-A3 of the PROM is fed with a mask of the inactive planes in the order OBJ-SCN1-SCN2-SCN3. The 2-bit code which comes out from the PROM selects the plane to display. @@ -170,7 +170,6 @@ TODO: #include "cpu/m6805/m6805.h" #include "machine/watchdog.h" #include "sound/ay8910.h" -#include "sound/dac.h" #include "includes/taitosj.h" @@ -181,7 +180,7 @@ WRITE8_MEMBER(taitosj_state::taitosj_sndnmi_msk_w) WRITE8_MEMBER(taitosj_state::taitosj_soundcommand_w) { - soundlatch_byte_w(space,offset,data); + m_soundlatch->write(space,offset,data); if (!m_sndnmi_disable) m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -347,7 +346,7 @@ static ADDRESS_MAP_START( taitosj_audio_map, AS_PROGRAM, 8, taitosj_state ) AM_RANGE(0x4803, 0x4803) AM_DEVREAD("ay3", ay8910_device, data_r) AM_RANGE(0x4804, 0x4805) AM_DEVWRITE("ay4", ay8910_device, address_data_w) AM_RANGE(0x4805, 0x4805) AM_DEVREAD("ay4", ay8910_device, data_r) - AM_RANGE(0x5000, 0x5000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x5000, 0x5000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xe000, 0xefff) AM_ROM /* space for diagnostic ROM */ ADDRESS_MAP_END @@ -1776,6 +1775,8 @@ static MACHINE_CONFIG_START( nomcu, taitosj_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 6000000/4) MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW2")) MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW3")) diff --git a/src/mame/drivers/taotaido.cpp b/src/mame/drivers/taotaido.cpp index f977e8beb69..a0b9c4c572f 100644 --- a/src/mame/drivers/taotaido.cpp +++ b/src/mame/drivers/taotaido.cpp @@ -94,7 +94,7 @@ WRITE16_MEMBER(taotaido_state::sound_command_w) if (ACCESSING_BITS_0_7) { m_pending_command = 1; - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -148,7 +148,7 @@ static ADDRESS_MAP_START( sound_port_map, AS_IO, 8, taotaido_state ) AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) AM_RANGE(0x04, 0x04) AM_WRITE(sh_bankswitch_w) AM_RANGE(0x08, 0x08) AM_WRITE(pending_command_clear_w) - AM_RANGE(0x0c, 0x0c) AM_READ(soundlatch_byte_r) + AM_RANGE(0x0c, 0x0c) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -391,6 +391,8 @@ static MACHINE_CONFIG_START( taotaido, taotaido_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) diff --git a/src/mame/drivers/tatsumi.cpp b/src/mame/drivers/tatsumi.cpp index 6d3056d6e77..163a8987db3 100644 --- a/src/mame/drivers/tatsumi.cpp +++ b/src/mame/drivers/tatsumi.cpp @@ -142,10 +142,8 @@ #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/nec/nec.h" -#include "cpu/m68000/m68000.h" #include "includes/tatsumi.h" #include "sound/2151intf.h" -#include "sound/okim6295.h" #include "machine/nvram.h" #include "roundup5.lh" @@ -184,7 +182,7 @@ WRITE16_MEMBER(tatsumi_state::bigfight_a60000_w) WRITE16_MEMBER(tatsumi_state::cyclwarr_sound_w) { - soundlatch_byte_w(space, 0, data >> 8); + m_soundlatch->write(space, 0, data >> 8); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -334,7 +332,7 @@ static ADDRESS_MAP_START( cyclwarr_z80_map, AS_PROGRAM, 8, tatsumi_state ) AM_RANGE(0xe000, 0xffef) AM_RAM AM_RANGE(0xfff0, 0xfff1) AM_READ(tatsumi_hack_ym2151_r) AM_DEVWRITE("ymsnd", ym2151_device, write) AM_RANGE(0xfff4, 0xfff4) AM_READ(tatsumi_hack_oki_r) AM_DEVWRITE("oki", okim6295_device, write) - AM_RANGE(0xfffc, 0xfffc) AM_READ(soundlatch_byte_r) + AM_RANGE(0xfffc, 0xfffc) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xfffe, 0xfffe) AM_WRITENOP ADDRESS_MAP_END @@ -992,6 +990,8 @@ static MACHINE_CONFIG_START( cyclwarr, tatsumi_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", CLOCK_1 / 4) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.45) @@ -1035,6 +1035,8 @@ static MACHINE_CONFIG_START( bigfight, tatsumi_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", CLOCK_1 / 4) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.45) diff --git a/src/mame/drivers/tbowl.cpp b/src/mame/drivers/tbowl.cpp index 4f6a062eb3a..badd259b005 100644 --- a/src/mame/drivers/tbowl.cpp +++ b/src/mame/drivers/tbowl.cpp @@ -17,7 +17,6 @@ Might be some priority glitches #include "emu.h" #include "cpu/z80/z80.h" #include "sound/3812intf.h" -#include "sound/msm5205.h" #include "rendlay.h" #include "includes/tbowl.h" @@ -29,7 +28,7 @@ WRITE8_MEMBER(tbowl_state::coincounter_w) /*** Banking -note: check this, its borrowed from tecmo.c / wc90.c at the moment and could well be wrong +note: check this, its borrowed from tecmo.cpp / wc90.cpp at the moment and could well be wrong ***/ @@ -49,7 +48,7 @@ WRITE8_MEMBER(tbowl_state::boardc_bankswitch_w) WRITE8_MEMBER(tbowl_state::sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -180,7 +179,7 @@ static ADDRESS_MAP_START( 6206A_map, AS_PROGRAM, 8, tbowl_state ) AM_RANGE(0xe004, 0xe005) AM_WRITE(adpcm_vol_w) AM_RANGE(0xe006, 0xe006) AM_WRITENOP AM_RANGE(0xe007, 0xe007) AM_WRITENOP /* NMI acknowledge */ - AM_RANGE(0xe010, 0xe010) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe010, 0xe010) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END /*** Input Ports @@ -481,6 +480,8 @@ static MACHINE_CONFIG_START( tbowl, tbowl_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM3812, 4000000) MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) diff --git a/src/mame/drivers/tecmo.cpp b/src/mame/drivers/tecmo.cpp index 199423116b5..44bdc809e11 100644 --- a/src/mame/drivers/tecmo.cpp +++ b/src/mame/drivers/tecmo.cpp @@ -2,7 +2,7 @@ // copyright-holders:Nicola Salmoria /*************************************************************************** -tecmo.c +tecmo.cpp driver by Nicola Salmoria @@ -64,7 +64,7 @@ WRITE8_MEMBER(tecmo_state::bankswitch_w) WRITE8_MEMBER(tecmo_state::sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_soundcpu->set_input_line(INPUT_LINE_NMI,ASSERT_LINE); } @@ -227,7 +227,7 @@ static ADDRESS_MAP_START( rygar_sound_map, AS_PROGRAM, 8, tecmo_state ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x4000, 0x47ff) AM_RAM AM_RANGE(0x8000, 0x8001) AM_DEVWRITE("ymsnd", ym3812_device, write) - AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) AM_WRITE(adpcm_start_w) + AM_RANGE(0xc000, 0xc000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(adpcm_start_w) AM_RANGE(0xd000, 0xd000) AM_WRITE(adpcm_end_w) AM_RANGE(0xe000, 0xe000) AM_WRITE(adpcm_vol_w) AM_RANGE(0xf000, 0xf000) AM_WRITE(nmi_ack_w) @@ -239,7 +239,7 @@ static ADDRESS_MAP_START( tecmo_sound_map, AS_PROGRAM, 8, tecmo_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0xa000, 0xa001) AM_DEVWRITE("ymsnd", ym3812_device, write) - AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) AM_WRITE(adpcm_start_w) + AM_RANGE(0xc000, 0xc000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(adpcm_start_w) AM_RANGE(0xc400, 0xc400) AM_WRITE(adpcm_end_w) AM_RANGE(0xc800, 0xc800) AM_WRITE(adpcm_vol_w) AM_RANGE(0xcc00, 0xcc00) AM_WRITE(nmi_ack_w) @@ -644,6 +644,8 @@ static MACHINE_CONFIG_START( rygar, tecmo_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_4MHz) /* verified on pcb */ MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/tecmo16.cpp b/src/mame/drivers/tecmo16.cpp index 820de48507a..dd1c30d5f70 100644 --- a/src/mame/drivers/tecmo16.cpp +++ b/src/mame/drivers/tecmo16.cpp @@ -38,7 +38,7 @@ WRITE16_MEMBER(tecmo16_state::sound_command_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, 0x00, data & 0xff); + m_soundlatch->write(space, 0x00, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -98,7 +98,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, tecmo16_state ) AM_RANGE(0xf000, 0xfbff) AM_RAM /* Sound RAM */ AM_RANGE(0xfc00, 0xfc00) AM_DEVREADWRITE("oki", okim6295_device, read, write) AM_RANGE(0xfc04, 0xfc05) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) - AM_RANGE(0xfc08, 0xfc08) AM_READ(soundlatch_byte_r) + AM_RANGE(0xfc08, 0xfc08) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xfc0c, 0xfc0c) AM_NOP AM_RANGE(0xfffe, 0xffff) AM_RAM ADDRESS_MAP_END @@ -404,6 +404,8 @@ static MACHINE_CONFIG_START( fstarfrc, tecmo16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", MASTER_CLOCK/6) // 4 MHz MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.60) diff --git a/src/mame/drivers/tecmosys.cpp b/src/mame/drivers/tecmosys.cpp index c6d687469a2..8b5a86de0a4 100644 --- a/src/mame/drivers/tecmosys.cpp +++ b/src/mame/drivers/tecmosys.cpp @@ -20,7 +20,7 @@ T.Slanina 20040530 : 20080528 - Removed ROM patches and debug keypresses - - Added protection simulation in machine/tecmosys.c + - Added protection simulation in machine/tecmosys.cpp - Fixed inputs - Added watchdog @@ -184,7 +184,6 @@ ae500w07.ad1 - M6295 Samples (23c4001) #include "emu.h" #include "cpu/z80/z80.h" -#include "machine/eepromser.h" #include "includes/tecmosys.h" #include "cpu/m68000/m68000.h" #include "sound/okim6295.h" @@ -198,7 +197,7 @@ READ16_MEMBER(tecmosys_state::sound_r) if (ACCESSING_BITS_0_7) { machine().scheduler().synchronize(); - return soundlatch2_byte_r(space, 0 ); + return m_soundlatch2->read(space, 0); } return 0; @@ -209,7 +208,7 @@ WRITE16_MEMBER(tecmosys_state::sound_w) if (ACCESSING_BITS_0_7) { machine().scheduler().synchronize(); - soundlatch_byte_w(space, 0x00, data & 0xff); + m_soundlatch->write(space, 0x00, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -351,8 +350,8 @@ static ADDRESS_MAP_START( io_map, AS_IO, 8, tecmosys_state ) AM_RANGE(0x10, 0x10) AM_DEVREADWRITE("oki", okim6295_device, read, write) AM_RANGE(0x20, 0x20) AM_WRITE(oki_bank_w) AM_RANGE(0x30, 0x30) AM_WRITE(z80_bank_w) - AM_RANGE(0x40, 0x40) AM_READ(soundlatch_byte_r) - AM_RANGE(0x50, 0x50) AM_WRITE(soundlatch2_byte_w) + AM_RANGE(0x40, 0x40) AM_DEVREAD("soundlatch", generic_latch_8_device, read) + AM_RANGE(0x50, 0x50) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("ymz", ymz280b_device, read, write) ADDRESS_MAP_END @@ -433,13 +432,6 @@ static GFXDECODE_START( tecmosys ) GFXDECODE_END - -WRITE_LINE_MEMBER(tecmosys_state::sound_irq) -{ - /* IRQ */ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - void tecmosys_state::machine_start() { membank("bank1")->configure_entries(0, 16, memregion("audiocpu")->base(), 0x4000); @@ -482,8 +474,11 @@ static MACHINE_CONFIG_START( deroon, tecmosys_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ymf", YMF262, XTAL_14_31818MHz) - MCFG_YMF262_IRQ_HANDLER(WRITELINE(tecmosys_state, sound_irq)) + MCFG_YMF262_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.00) MCFG_SOUND_ROUTE(1, "rspeaker", 1.00) MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) diff --git a/src/mame/drivers/tehkanwc.cpp b/src/mame/drivers/tehkanwc.cpp index 9bf4a47e329..0d934c8215e 100644 --- a/src/mame/drivers/tehkanwc.cpp +++ b/src/mame/drivers/tehkanwc.cpp @@ -151,7 +151,7 @@ WRITE8_MEMBER(tehkanwc_state::track_1_reset_w) WRITE8_MEMBER(tehkanwc_state::sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -169,7 +169,7 @@ void tehkanwc_state::device_timer(emu_timer &timer, device_timer_id id, int para WRITE8_MEMBER(tehkanwc_state::sound_answer_w) { - soundlatch2_byte_w(space, 0, data); + m_soundlatch2->write(space, 0, data); /* in Gridiron, the sound CPU goes in a tight loop after the self test, */ /* probably waiting to be reset by a watchdog */ @@ -244,7 +244,7 @@ static ADDRESS_MAP_START( main_mem, AS_PROGRAM, 8, tehkanwc_state ) AM_RANGE(0xf810, 0xf811) AM_READWRITE(track_1_r, track_1_reset_w) /* track 1 x/y */ AM_RANGE(0xf812, 0xf812) AM_WRITE(gridiron_led1_w) AM_RANGE(0xf813, 0xf813) AM_READ_PORT("P2BUT") - AM_RANGE(0xf820, 0xf820) AM_READ(soundlatch2_byte_r) AM_WRITE(sound_command_w) /* answer from the sound CPU */ + AM_RANGE(0xf820, 0xf820) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_WRITE(sound_command_w) /* answer from the sound CPU */ AM_RANGE(0xf840, 0xf840) AM_READ_PORT("DSW1") AM_WRITE(sub_cpu_halt_w) AM_RANGE(0xf850, 0xf850) AM_READ_PORT("DSW2") AM_WRITENOP /* ?? writes 0x00 or 0xff */ AM_RANGE(0xf860, 0xf860) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_WRITE(flipscreen_x_w) @@ -272,7 +272,7 @@ static ADDRESS_MAP_START( sound_mem, AS_PROGRAM, 8, tehkanwc_state ) AM_RANGE(0x8001, 0x8001) AM_WRITE(msm_reset_w)/* MSM51xx reset */ AM_RANGE(0x8002, 0x8002) AM_WRITENOP /* ?? written in the IRQ handler */ AM_RANGE(0x8003, 0x8003) AM_WRITENOP /* ?? written in the NMI handler */ - AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_byte_r) AM_WRITE(sound_answer_w) + AM_RANGE(0xc000, 0xc000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(sound_answer_w) ADDRESS_MAP_END static ADDRESS_MAP_START( sound_port, AS_IO, 8, tehkanwc_state ) @@ -662,6 +662,9 @@ static MACHINE_CONFIG_START( tehkanwc, tehkanwc_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_SOUND_ADD("ay1", AY8910, 1536000) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(tehkanwc_state, portA_w)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(tehkanwc_state, portB_w)) diff --git a/src/mame/drivers/thedeep.cpp b/src/mame/drivers/thedeep.cpp index 12e4926c632..127898f370d 100644 --- a/src/mame/drivers/thedeep.cpp +++ b/src/mame/drivers/thedeep.cpp @@ -47,7 +47,7 @@ WRITE8_MEMBER(thedeep_state::nmi_w) WRITE8_MEMBER(thedeep_state::sound_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -177,7 +177,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, thedeep_state ) AM_RANGE(0x0000, 0x07ff) AM_RAM AM_RANGE(0x0800, 0x0801) AM_DEVWRITE("ymsnd", ym2203_device, write) // - AM_RANGE(0x3000, 0x3000) AM_READ(soundlatch_byte_r) // From Main CPU + AM_RANGE(0x3000, 0x3000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -446,6 +446,8 @@ static MACHINE_CONFIG_START( thedeep, thedeep_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_12MHz/4) /* verified on pcb */ MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/ti89.cpp b/src/mame/drivers/ti89.cpp index 16fe0503e6b..5638d5f3c4c 100644 --- a/src/mame/drivers/ti89.cpp +++ b/src/mame/drivers/ti89.cpp @@ -455,11 +455,11 @@ void ti68k_state::machine_start() if (m_initial_pc > 0x400000) { - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x400000, 0x5fffff, 0, 0, read16_delegate(FUNC(ti68k_state::flash_r), this),write16_delegate(FUNC(ti68k_state::flash_w), this)); + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x400000, 0x5fffff, read16_delegate(FUNC(ti68k_state::flash_r), this),write16_delegate(FUNC(ti68k_state::flash_w), this)); } else { - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x200000, 0x3fffff, 0, 0, read16_delegate(FUNC(ti68k_state::flash_r), this), write16_delegate(FUNC(ti68k_state::flash_w), this)); + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x200000, 0x3fffff, read16_delegate(FUNC(ti68k_state::flash_r), this), write16_delegate(FUNC(ti68k_state::flash_w), this)); } } diff --git a/src/mame/drivers/tigeroad.cpp b/src/mame/drivers/tigeroad.cpp index e5ea04dd1c4..ae4d234dfac 100644 --- a/src/mame/drivers/tigeroad.cpp +++ b/src/mame/drivers/tigeroad.cpp @@ -589,12 +589,6 @@ MACHINE_RESET_MEMBER(tigeroad_state,pushman) memset(m_shared_ram, 0, ARRAY_LENGTH(m_shared_ram)); } -/* handler called by the 2203 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(tigeroad_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - static MACHINE_CONFIG_START( tigeroad, tigeroad_state ) /* basic machine hardware */ @@ -634,7 +628,7 @@ static MACHINE_CONFIG_START( tigeroad, tigeroad_state ) MCFG_GENERIC_LATCH_8_ADD("soundlatch2") MCFG_SOUND_ADD("ym1", YM2203, XTAL_3_579545MHz) /* verified on pcb */ - MCFG_YM2203_IRQ_HANDLER(WRITELINE(tigeroad_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ADD("ym2", YM2203, XTAL_3_579545MHz) /* verified on pcb */ @@ -698,7 +692,7 @@ static MACHINE_CONFIG_START( f1dream_comad, tigeroad_state ) MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_SOUND_ADD("ym1", YM2203, 2000000) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(tigeroad_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MCFG_SOUND_ADD("ym2", YM2203, 2000000) diff --git a/src/mame/drivers/timelimt.cpp b/src/mame/drivers/timelimt.cpp index 41c8b140247..0f130df9535 100644 --- a/src/mame/drivers/timelimt.cpp +++ b/src/mame/drivers/timelimt.cpp @@ -9,12 +9,13 @@ driver by Ernesto Corvi Notes: - Sprite colors are wrong (missing colortable?) -- driver should probably be merged with suprridr.c and thepit.c +- driver should probably be merged with suprridr.cpp and thepit.cpp ***************************************************************************/ #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" #include "includes/timelimt.h" @@ -56,7 +57,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, timelimt_state ) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_RANGE(0xb000, 0xb000) AM_WRITE(nmi_enable_w) /* nmi enable */ AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_reset_w)/* sound reset ? */ - AM_RANGE(0xb800, 0xb800) AM_WRITE(soundlatch_byte_w) /* sound write */ + AM_RANGE(0xb800, 0xb800) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* sound write */ AM_RANGE(0xb800, 0xb800) AM_READNOP /* NMI ack? */ AM_RANGE(0xc800, 0xc800) AM_WRITE(scroll_x_lsb_w) AM_RANGE(0xc801, 0xc801) AM_WRITE(scroll_x_msb_w) @@ -77,7 +78,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, timelimt_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_WRITE(soundlatch_clear_byte_w) + AM_RANGE(0x00, 0x00) AM_DEVWRITE("soundlatch", generic_latch_8_device, clear_w) AM_RANGE(0x8c, 0x8d) AM_DEVREADWRITE("ay1", ay8910_device, data_r, address_data_w) AM_RANGE(0x8e, 0x8f) AM_DEVREADWRITE("ay2", ay8910_device, data_r, address_data_w) ADDRESS_MAP_END @@ -249,11 +250,13 @@ static MACHINE_CONFIG_START( timelimt, timelimt_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ay1", AY8910, 18432000/12) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ADD("ay2", AY8910, 18432000/12) - MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END diff --git a/src/mame/drivers/timeplt.cpp b/src/mame/drivers/timeplt.cpp index 1d95775f1d2..c1f189bde95 100644 --- a/src/mame/drivers/timeplt.cpp +++ b/src/mame/drivers/timeplt.cpp @@ -137,7 +137,7 @@ static ADDRESS_MAP_START( common_main_map, AS_PROGRAM, 8, timeplt_state ) AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0c9f) AM_READ_PORT("IN0") AM_RANGE(0xc302, 0xc302) AM_MIRROR(0x0cf1) AM_WRITE(flipscreen_w) AM_RANGE(0xc304, 0xc304) AM_MIRROR(0x0cf1) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w) - AM_RANGE(0xc30a, 0xc30c) AM_MIRROR(0x0cf1) AM_WRITE(coincounter_w) + AM_RANGE(0xc30a, 0xc30d) AM_MIRROR(0x0cf0) AM_WRITE(coincounter_w) // handler ignores low bit of offset AM_RANGE(0xc320, 0xc320) AM_MIRROR(0x0c9f) AM_READ_PORT("IN1") AM_RANGE(0xc340, 0xc340) AM_MIRROR(0x0c9f) AM_READ_PORT("IN2") AM_RANGE(0xc360, 0xc360) AM_MIRROR(0x0c9f) AM_READ_PORT("DSW0") diff --git a/src/mame/drivers/timex.cpp b/src/mame/drivers/timex.cpp index 97f0eba89e9..e90e38a008e 100644 --- a/src/mame/drivers/timex.cpp +++ b/src/mame/drivers/timex.cpp @@ -533,7 +533,7 @@ static ADDRESS_MAP_START(ts2068_io, AS_IO, 8, spectrum_state ) AM_RANGE(0xf4, 0xf4) AM_READWRITE(ts2068_port_f4_r,ts2068_port_f4_w ) AM_MIRROR(0xff00) AM_RANGE(0xf5, 0xf5) AM_DEVWRITE("ay8912", ay8910_device, address_w ) AM_MIRROR(0xff00) AM_RANGE(0xf6, 0xf6) AM_DEVREADWRITE("ay8912", ay8910_device, data_r, data_w ) AM_MIRROR(0xff00) - AM_RANGE(0xfe, 0xfe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w ) AM_MIRROR(0xff00) AM_MASK(0xffff) + AM_RANGE(0xfe, 0xfe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w ) AM_SELECT(0xff00) AM_RANGE(0xff, 0xff) AM_READWRITE(ts2068_port_ff_r,ts2068_port_ff_w ) AM_MIRROR(0xff00) ADDRESS_MAP_END @@ -574,7 +574,7 @@ WRITE8_MEMBER( spectrum_state::tc2048_port_ff_w ) } static ADDRESS_MAP_START(tc2048_io, AS_IO, 8, spectrum_state ) - AM_RANGE(0x00, 0x00) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff) + AM_RANGE(0x00, 0x00) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_SELECT(0xfffe) AM_RANGE(0x1f, 0x1f) AM_READ(spectrum_port_1f_r) AM_MIRROR(0xff00) AM_RANGE(0x7f, 0x7f) AM_READ(spectrum_port_7f_r) AM_MIRROR(0xff00) AM_RANGE(0xdf, 0xdf) AM_READ(spectrum_port_df_r) AM_MIRROR(0xff00) diff --git a/src/mame/drivers/tmc1800.cpp b/src/mame/drivers/tmc1800.cpp index 8cf47eed402..3b3133f090f 100644 --- a/src/mame/drivers/tmc1800.cpp +++ b/src/mame/drivers/tmc1800.cpp @@ -177,7 +177,7 @@ void tmc2000_state::bankswitch() if (m_roc) { // monitor ROM - program.install_rom(0x0000, 0x01ff, 0, 0x7e00, rom); + program.install_rom(0x0000, 0x01ff, 0x7e00, rom); } else { @@ -185,11 +185,11 @@ void tmc2000_state::bankswitch() switch (m_ram->size()) { case 4 * 1024: - program.install_ram(0x0000, 0x0fff, 0, 0x7000, ram); + program.install_ram(0x0000, 0x0fff, 0x7000, ram); break; case 16 * 1024: - program.install_ram(0x0000, 0x3fff, 0, 0x4000, ram); + program.install_ram(0x0000, 0x3fff, 0x4000, ram); break; case 32 * 1024: @@ -201,13 +201,13 @@ void tmc2000_state::bankswitch() if (m_rac) { // color RAM - program.install_ram(0x8000, 0x81ff, 0, 0x7e00, m_colorram); - program.unmap_read(0x8000, 0x81ff, 0, 0x7e00); + program.install_ram(0x8000, 0x81ff, 0x7e00, m_colorram); + program.unmap_read(0x8000, 0xffff); } else { // monitor ROM - program.install_rom(0x8000, 0x81ff, 0, 0x7e00, rom); + program.install_rom(0x8000, 0x81ff, 0x7e00, rom); } } @@ -225,7 +225,7 @@ WRITE8_MEMBER( nano_state::bankswitch_w ) /* enable RAM */ address_space &program = m_maincpu->space(AS_PROGRAM); UINT8 *ram = m_ram->pointer(); - program.install_ram(0x0000, 0x0fff, 0, 0x7000, ram); + program.install_ram(0x0000, 0x0fff, 0x7000, ram); /* write to CDP1864 tone latch */ m_cti->tone_latch_w(space, 0, data); @@ -690,7 +690,7 @@ void nano_state::machine_reset() /* enable ROM */ address_space &program = m_maincpu->space(AS_PROGRAM); UINT8 *rom = m_rom->base(); - program.install_rom(0x0000, 0x01ff, 0, 0x7e00, rom); + program.install_rom(0x0000, 0x01ff, 0x7e00, rom); } /* Machine Drivers */ diff --git a/src/mame/drivers/tmnt.cpp b/src/mame/drivers/tmnt.cpp index 6fa6ad463e3..5bce4eeaf2e 100644 --- a/src/mame/drivers/tmnt.cpp +++ b/src/mame/drivers/tmnt.cpp @@ -2095,11 +2095,10 @@ static MACHINE_CONFIG_START( tmnt, tmnt_state ) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MCFG_SCREEN_SIZE(64*8, 32*8) - //MCFG_SCREEN_VISIBLE_AREA(13*8, (64-13)*8-1, 2*8, 30*8-1 ) - MCFG_SCREEN_VISIBLE_AREA(12*8, (64-12)*8-1, 2*8, 30*8-1 ) + MCFG_SCREEN_VISIBLE_AREA(12*8+8, (64-12)*8-1, 2*8, 30*8-1 ) + // verified against real hardware MCFG_SCREEN_UPDATE_DRIVER(tmnt_state, screen_update_tmnt) MCFG_SCREEN_PALETTE("palette") - // We see something strange in the left 8 pixels and the right 8 pixels, but it is same as real PCB. MCFG_PALETTE_ADD("palette", 1024) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) diff --git a/src/mame/drivers/tmspoker.cpp b/src/mame/drivers/tmspoker.cpp index 70351f63c69..a6afa03c5d8 100644 --- a/src/mame/drivers/tmspoker.cpp +++ b/src/mame/drivers/tmspoker.cpp @@ -342,7 +342,7 @@ READ8_MEMBER(tmspoker_state::unk_r) } static ADDRESS_MAP_START( tmspoker_cru_map, AS_IO, 8, tmspoker_state ) - AM_RANGE(0x0000, 0xffff) AM_READ(unk_r) + AM_RANGE(0x0000, 0x07ff) AM_READ(unk_r) ADDRESS_MAP_END /* I/O byte R/W diff --git a/src/mame/drivers/tnzs.cpp b/src/mame/drivers/tnzs.cpp index 3dd335855ad..bbb15359f14 100644 --- a/src/mame/drivers/tnzs.cpp +++ b/src/mame/drivers/tnzs.cpp @@ -801,7 +801,7 @@ ADDRESS_MAP_END WRITE8_MEMBER(tnzs_state::tnzsb_sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } @@ -850,7 +850,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( tnzsb_io_map, AS_IO, 8, tnzs_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) - AM_RANGE(0x02, 0x02) AM_READ(soundlatch_byte_r) + AM_RANGE(0x02, 0x02) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static ADDRESS_MAP_START( i8742_io_map, AS_IO, 8, tnzs_state ) @@ -1826,6 +1826,8 @@ static MACHINE_CONFIG_START( tnzsb, tnzs_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, XTAL_12MHz/4) /* verified on pcb */ MCFG_YM2203_IRQ_HANDLER(WRITELINE(tnzs_state, irqhandler)) MCFG_SOUND_ROUTE(0, "mono", 1.0) diff --git a/src/mame/drivers/toaplan2.cpp b/src/mame/drivers/toaplan2.cpp index 11a6c1dc7d0..ccdd556a167 100644 --- a/src/mame/drivers/toaplan2.cpp +++ b/src/mame/drivers/toaplan2.cpp @@ -850,7 +850,7 @@ WRITE16_MEMBER(toaplan2_state::bgaregga_soundlatch_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } } @@ -906,7 +906,7 @@ WRITE16_MEMBER(toaplan2_state::batrider_soundlatch_w) { if (ACCESSING_BITS_0_7) { - soundlatch_byte_w(space, offset, data & 0xff); + m_soundlatch->write(space, offset, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } } @@ -916,7 +916,7 @@ WRITE16_MEMBER(toaplan2_state::batrider_soundlatch2_w) { if (ACCESSING_BITS_0_7) { - soundlatch2_byte_w(space, offset, data & 0xff); + m_soundlatch2->write(space, offset, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } } @@ -1343,8 +1343,8 @@ static ADDRESS_MAP_START( batrider_68k_mem, AS_PROGRAM, 16, toaplan2_state ) AM_RANGE(0x500002, 0x500003) AM_READ_PORT("SYS-DSW") AM_RANGE(0x500004, 0x500005) AM_READ_PORT("DSW") AM_RANGE(0x500006, 0x500007) AM_READ(video_count_r) - AM_RANGE(0x500008, 0x500009) AM_READ(soundlatch3_word_r) - AM_RANGE(0x50000a, 0x50000b) AM_READ(soundlatch4_word_r) + AM_RANGE(0x500008, 0x500009) AM_DEVREAD8("soundlatch3", generic_latch_8_device, read, 0x00ff) + AM_RANGE(0x50000a, 0x50000b) AM_DEVREAD8("soundlatch4", generic_latch_8_device, read, 0x00ff) AM_RANGE(0x50000c, 0x50000d) AM_READ(batrider_z80_busack_r) AM_RANGE(0x500010, 0x500011) AM_WRITE(toaplan2_coin_word_w) AM_RANGE(0x500020, 0x500021) AM_WRITE(batrider_soundlatch_w) @@ -1374,8 +1374,8 @@ static ADDRESS_MAP_START( bbakraid_68k_mem, AS_PROGRAM, 16, toaplan2_state ) AM_RANGE(0x500004, 0x500005) AM_READ_PORT("DSW") AM_RANGE(0x500006, 0x500007) AM_READ(video_count_r) AM_RANGE(0x500008, 0x500009) AM_WRITE(toaplan2_coin_word_w) - AM_RANGE(0x500010, 0x500011) AM_READ(soundlatch3_word_r) - AM_RANGE(0x500012, 0x500013) AM_READ(soundlatch4_word_r) + AM_RANGE(0x500010, 0x500011) AM_DEVREAD8("soundlatch3", generic_latch_8_device, read, 0x00ff) + AM_RANGE(0x500012, 0x500013) AM_DEVREAD8("soundlatch4", generic_latch_8_device, read, 0x00ff) AM_RANGE(0x500014, 0x500015) AM_WRITE(batrider_soundlatch_w) AM_RANGE(0x500016, 0x500017) AM_WRITE(batrider_soundlatch2_w) AM_RANGE(0x500018, 0x500019) AM_READ(bbakraid_eeprom_r) @@ -1414,7 +1414,7 @@ static ADDRESS_MAP_START( bgaregga_sound_z80_mem, AS_PROGRAM, 8, toaplan2_state AM_RANGE(0xe006, 0xe008) AM_WRITE(raizing_oki_bankswitch_w) AM_RANGE(0xe00a, 0xe00a) AM_WRITE(raizing_z80_bankswitch_w) AM_RANGE(0xe00c, 0xe00c) AM_WRITE(bgaregga_E00C_w) - AM_RANGE(0xe01c, 0xe01c) AM_READ(soundlatch_byte_r) + AM_RANGE(0xe01c, 0xe01c) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0xe01d, 0xe01d) AM_READ(bgaregga_E01D_r) ADDRESS_MAP_END @@ -1428,12 +1428,12 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( batrider_sound_z80_port, AS_IO, 8, toaplan2_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x40, 0x40) AM_WRITE(soundlatch3_byte_w) - AM_RANGE(0x42, 0x42) AM_WRITE(soundlatch4_byte_w) + AM_RANGE(0x40, 0x40) AM_DEVWRITE("soundlatch3", generic_latch_8_device, write) + AM_RANGE(0x42, 0x42) AM_DEVWRITE("soundlatch4", generic_latch_8_device, write) AM_RANGE(0x44, 0x44) AM_WRITE(batrider_sndirq_w) AM_RANGE(0x46, 0x46) AM_WRITE(batrider_clear_nmi_w) - AM_RANGE(0x48, 0x48) AM_READ(soundlatch_byte_r) - AM_RANGE(0x4a, 0x4a) AM_READ(soundlatch2_byte_r) + AM_RANGE(0x48, 0x48) AM_DEVREAD("soundlatch", generic_latch_8_device, read) + AM_RANGE(0x4a, 0x4a) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_RANGE(0x80, 0x81) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x82, 0x82) AM_DEVREADWRITE("oki1", okim6295_device, read, write) AM_RANGE(0x84, 0x84) AM_DEVREADWRITE("oki2", okim6295_device, read, write) @@ -1450,12 +1450,12 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( bbakraid_sound_z80_port, AS_IO, 8, toaplan2_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x40, 0x40) AM_WRITE(soundlatch3_byte_w) - AM_RANGE(0x42, 0x42) AM_WRITE(soundlatch4_byte_w) + AM_RANGE(0x40, 0x40) AM_DEVWRITE("soundlatch3", generic_latch_8_device, write) + AM_RANGE(0x42, 0x42) AM_DEVWRITE("soundlatch4", generic_latch_8_device, write) AM_RANGE(0x44, 0x44) AM_WRITE(batrider_sndirq_w) AM_RANGE(0x46, 0x46) AM_WRITE(batrider_clear_nmi_w) - AM_RANGE(0x48, 0x48) AM_READ(soundlatch_byte_r) - AM_RANGE(0x4a, 0x4a) AM_READ(soundlatch2_byte_r) + AM_RANGE(0x48, 0x48) AM_DEVREAD("soundlatch", generic_latch_8_device, read) + AM_RANGE(0x4a, 0x4a) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_RANGE(0x80, 0x81) AM_DEVREADWRITE("ymz", ymz280b_device, read, write) ADDRESS_MAP_END @@ -3908,6 +3908,8 @@ static MACHINE_CONFIG_START( bgaregga, toaplan2_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", XTAL_32MHz/8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -3964,6 +3966,11 @@ static MACHINE_CONFIG_START( batrider, toaplan2_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_GENERIC_LATCH_8_ADD("soundlatch3") + MCFG_GENERIC_LATCH_8_ADD("soundlatch4") + MCFG_YM2151_ADD("ymsnd", XTAL_32MHz/8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -4020,6 +4027,11 @@ static MACHINE_CONFIG_START( bbakraid, toaplan2_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") + MCFG_GENERIC_LATCH_8_ADD("soundlatch3") + MCFG_GENERIC_LATCH_8_ADD("soundlatch4") + MCFG_SOUND_ADD("ymz", YMZ280B, XTAL_16_9344MHz) // IRQ not used ??? Connected to a test pin (TP082) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/toki.cpp b/src/mame/drivers/toki.cpp index 0feb9b2a13e..f3616913453 100644 --- a/src/mame/drivers/toki.cpp +++ b/src/mame/drivers/toki.cpp @@ -97,13 +97,12 @@ Notes: #include "cpu/z80/z80.h" #include "machine/watchdog.h" #include "sound/3812intf.h" -#include "sound/msm5205.h" #include "sound/3812intf.h" #include "includes/toki.h" WRITE16_MEMBER(toki_state::tokib_soundcommand_w) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -187,7 +186,7 @@ static ADDRESS_MAP_START( tokib_audio_map, AS_PROGRAM, 8, toki_state ) AM_RANGE(0xe400, 0xe400) AM_WRITE(tokib_adpcm_data_w) AM_RANGE(0xec00, 0xec01) AM_MIRROR(0x0008) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write) AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END /*****************************************************************************/ @@ -498,6 +497,8 @@ static MACHINE_CONFIG_START( tokib, toki_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, 3579545) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) diff --git a/src/mame/drivers/toobin.cpp b/src/mame/drivers/toobin.cpp index 23e884287e5..f07cf0c4110 100644 --- a/src/mame/drivers/toobin.cpp +++ b/src/mame/drivers/toobin.cpp @@ -86,22 +86,22 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, toobin_state ) AM_RANGE(0xc08000, 0xc097ff) AM_MIRROR(0x046000) AM_RAM_DEVWRITE("alpha", tilemap_device, write) AM_SHARE("alpha") AM_RANGE(0xc09800, 0xc09fff) AM_MIRROR(0x046000) AM_RAM AM_SHARE("mob") AM_RANGE(0xc10000, 0xc107ff) AM_MIRROR(0x047800) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0xff6000, 0xff6001) AM_READNOP /* who knows? read at controls time */ - AM_RANGE(0xff8000, 0xff8001) AM_MIRROR(0x4500fe) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) - AM_RANGE(0xff8100, 0xff8101) AM_MIRROR(0x4500fe) AM_DEVWRITE8("jsa", atari_jsa_i_device, main_command_w, 0x00ff) - AM_RANGE(0xff8300, 0xff8301) AM_MIRROR(0x45003e) AM_WRITE(intensity_w) - AM_RANGE(0xff8340, 0xff8341) AM_MIRROR(0x45003e) AM_WRITE(interrupt_scan_w) AM_SHARE("interrupt_scan") - AM_RANGE(0xff8380, 0xff8381) AM_MIRROR(0x45003e) AM_RAM_WRITE(slip_w) AM_SHARE("mob:slip") - AM_RANGE(0xff83c0, 0xff83c1) AM_MIRROR(0x45003e) AM_WRITE(scanline_int_ack_w) - AM_RANGE(0xff8400, 0xff8401) AM_MIRROR(0x4500fe) AM_DEVWRITE("jsa", atari_jsa_i_device, sound_reset_w) - AM_RANGE(0xff8500, 0xff8501) AM_MIRROR(0x4500fe) AM_DEVWRITE("eeprom", atari_eeprom_device, unlock_write) - AM_RANGE(0xff8600, 0xff8601) AM_MIRROR(0x4500fe) AM_WRITE(xscroll_w) AM_SHARE("xscroll") - AM_RANGE(0xff8700, 0xff8701) AM_MIRROR(0x4500fe) AM_WRITE(yscroll_w) AM_SHARE("yscroll") - AM_RANGE(0xff8800, 0xff8801) AM_MIRROR(0x4507fe) AM_READ_PORT("FF8800") - AM_RANGE(0xff9000, 0xff9001) AM_MIRROR(0x4507fe) AM_READ_PORT("FF9000") - AM_RANGE(0xff9800, 0xff9801) AM_MIRROR(0x4507fe) AM_DEVREAD8("jsa", atari_jsa_i_device, main_response_r, 0x00ff) - AM_RANGE(0xffa000, 0xffafff) AM_MIRROR(0x451000) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff) - AM_RANGE(0xffc000, 0xffffff) AM_MIRROR(0x450000) AM_RAM + AM_RANGE(0xba6000, 0xba6001) AM_MIRROR(0x4500fe) AM_READNOP /* who knows? read at controls time */ + AM_RANGE(0xba8000, 0xba8001) AM_MIRROR(0x4500fe) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) + AM_RANGE(0xba8100, 0xba8101) AM_MIRROR(0x4500fe) AM_DEVWRITE8("jsa", atari_jsa_i_device, main_command_w, 0x00ff) + AM_RANGE(0xba8300, 0xba8301) AM_MIRROR(0x45003e) AM_WRITE(intensity_w) + AM_RANGE(0xba8340, 0xba8341) AM_MIRROR(0x45003e) AM_WRITE(interrupt_scan_w) AM_SHARE("interrupt_scan") + AM_RANGE(0xba8380, 0xba8381) AM_MIRROR(0x45003e) AM_RAM_WRITE(slip_w) AM_SHARE("mob:slip") + AM_RANGE(0xba83c0, 0xba83c1) AM_MIRROR(0x45003e) AM_WRITE(scanline_int_ack_w) + AM_RANGE(0xba8400, 0xba8401) AM_MIRROR(0x4500fe) AM_DEVWRITE("jsa", atari_jsa_i_device, sound_reset_w) + AM_RANGE(0xba8500, 0xba8501) AM_MIRROR(0x4500fe) AM_DEVWRITE("eeprom", atari_eeprom_device, unlock_write) + AM_RANGE(0xba8600, 0xba8601) AM_MIRROR(0x4500fe) AM_WRITE(xscroll_w) AM_SHARE("xscroll") + AM_RANGE(0xba8700, 0xba8701) AM_MIRROR(0x4500fe) AM_WRITE(yscroll_w) AM_SHARE("yscroll") + AM_RANGE(0xba8800, 0xba8801) AM_MIRROR(0x4507fe) AM_READ_PORT("FF8800") + AM_RANGE(0xba9000, 0xba9001) AM_MIRROR(0x4507fe) AM_READ_PORT("FF9000") + AM_RANGE(0xba9800, 0xba9801) AM_MIRROR(0x4507fe) AM_DEVREAD8("jsa", atari_jsa_i_device, main_response_r, 0x00ff) + AM_RANGE(0xbaa000, 0xbaafff) AM_MIRROR(0x451000) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff) + AM_RANGE(0xbac000, 0xbaffff) AM_MIRROR(0x450000) AM_RAM ADDRESS_MAP_END diff --git a/src/mame/drivers/tourvis.cpp b/src/mame/drivers/tourvis.cpp index 54491aa8747..797497e578a 100644 --- a/src/mame/drivers/tourvis.cpp +++ b/src/mame/drivers/tourvis.cpp @@ -295,7 +295,6 @@ public: DECLARE_WRITE8_MEMBER(tourvision_i8155_b_w); DECLARE_WRITE8_MEMBER(tourvision_i8155_c_w); DECLARE_WRITE_LINE_MEMBER(tourvision_timer_out); - DECLARE_WRITE_LINE_MEMBER(pce_irq_changed); required_device<cpu_device> m_subcpu; required_device<generic_slot_device> m_cart; UINT32 m_rom_size; @@ -479,10 +478,6 @@ WRITE_LINE_MEMBER(tourvision_state::tourvision_timer_out) //logerror("Timer out %d\n", state); } -WRITE_LINE_MEMBER(tourvision_state::pce_irq_changed) -{ - m_maincpu->set_input_line(0, state); -} static MACHINE_CONFIG_START( tourvision, tourvision_state ) /* basic machine hardware */ @@ -507,7 +502,7 @@ static MACHINE_CONFIG_START( tourvision, tourvision_state ) MCFG_HUC6260_HSYNC_CHANGED_CB(DEVWRITELINE("huc6270", huc6270_device, hsync_changed)) MCFG_DEVICE_ADD( "huc6270", HUC6270, 0 ) MCFG_HUC6270_VRAM_SIZE(0x10000) - MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(tourvision_state, pce_irq_changed)) + MCFG_HUC6270_IRQ_CHANGED_CB(INPUTLINE("maincpu", 0)) MCFG_DEVICE_ADD("i8155", I8155, 1000000 /*?*/) MCFG_I8155_OUT_PORTA_CB(WRITE8(tourvision_state, tourvision_i8155_a_w)) diff --git a/src/mame/drivers/trackfld.cpp b/src/mame/drivers/trackfld.cpp index 2767f24530e..b3175552f4d 100644 --- a/src/mame/drivers/trackfld.cpp +++ b/src/mame/drivers/trackfld.cpp @@ -409,7 +409,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, trackfld_state ) AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x1ff8) AM_DEVWRITE("dac", dac_device, write_unsigned8) AM_RANGE(0xe001, 0xe001) AM_MIRROR(0x1ff8) AM_NOP /* watch dog ?; reaktor reads here */ AM_RANGE(0xe002, 0xe002) AM_MIRROR(0x1ff8) AM_DEVREAD("trackfld_audio", trackfld_audio_device, trackfld_speech_r) - AM_RANGE(0xe003, 0xe003) AM_MIRROR(0x1ff8) AM_MASK(0x0380) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, trackfld_sound_w) + AM_RANGE(0xe003, 0xe003) AM_MIRROR(0x1c78) AM_SELECT(0x0380) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, trackfld_sound_w) AM_RANGE(0xe004, 0xe004) AM_MIRROR(0x1ff8) AM_DEVWRITE("vlm", vlm5030_device, data_w) ADDRESS_MAP_END diff --git a/src/mame/drivers/travrusa.cpp b/src/mame/drivers/travrusa.cpp index dbecd5d3a59..53d32598de5 100644 --- a/src/mame/drivers/travrusa.cpp +++ b/src/mame/drivers/travrusa.cpp @@ -610,7 +610,7 @@ READ8_MEMBER(travrusa_state::shtridrb_port11_r) DRIVER_INIT_MEMBER(travrusa_state, shtridrb) { - m_maincpu->space(AS_IO).install_read_handler(0x11, 0x11, 0x0000, 0xff00, read8_delegate(FUNC(travrusa_state::shtridrb_port11_r),this)); + m_maincpu->space(AS_IO).install_read_handler(0x11, 0x11, 0, 0xff00, 0, read8_delegate(FUNC(travrusa_state::shtridrb_port11_r),this)); } diff --git a/src/mame/drivers/trs80.cpp b/src/mame/drivers/trs80.cpp index a57fcf472a2..46bf876a5d9 100644 --- a/src/mame/drivers/trs80.cpp +++ b/src/mame/drivers/trs80.cpp @@ -149,6 +149,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( trs80_io, AS_IO, 8, trs80_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0xff, 0xff) AM_READWRITE(trs80_ff_r, trs80_ff_w) ADDRESS_MAP_END @@ -171,11 +172,13 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( model1_io, AS_IO, 8, trs80_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0xff, 0xff) AM_READWRITE(trs80_ff_r, trs80_ff_w) ADDRESS_MAP_END static ADDRESS_MAP_START( sys80_io, AS_IO, 8, trs80_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0xf8, 0xf8) AM_READWRITE(trs80m4_eb_r, sys80_f8_w) AM_RANGE(0xf9, 0xf9) AM_READWRITE(sys80_f9_r, trs80m4_eb_w) AM_RANGE(0xfd, 0xfd) AM_READWRITE(trs80_printer_r, trs80_printer_w) @@ -189,6 +192,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( lnw80_io, AS_IO, 8, trs80_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0xe8, 0xe8) AM_READWRITE(trs80m4_e8_r, trs80m4_e8_w) AM_RANGE(0xe9, 0xe9) AM_READ_PORT("E9") AM_RANGE(0xea, 0xea) AM_READWRITE(trs80m4_ea_r, trs80m4_ea_w) @@ -202,6 +206,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( model3_io, AS_IO, 8, trs80_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0xe0, 0xe3) AM_READWRITE(trs80m4_e0_r, trs80m4_e0_w) AM_RANGE(0xe4, 0xe4) AM_READWRITE(trs80m4_e4_r, trs80m4_e4_w) AM_RANGE(0xe8, 0xe8) AM_READWRITE(trs80m4_e8_r, trs80m4_e8_w) @@ -221,6 +226,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( model4_io, AS_IO, 8, trs80_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x84, 0x87) AM_WRITE(trs80m4_84_w) AM_RANGE(0x88, 0x89) AM_WRITE(trs80m4_88_w) AM_RANGE(0x90, 0x93) AM_WRITE(trs80m4_90_w) @@ -243,6 +249,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( model4p_io, AS_IO, 8, trs80_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x84, 0x87) AM_WRITE(trs80m4_84_w) AM_RANGE(0x88, 0x89) AM_WRITE(trs80m4_88_w) AM_RANGE(0x90, 0x93) AM_WRITE(trs80m4_90_w) @@ -273,6 +280,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( meritum_io, AS_IO, 8, trs80_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) + ADDRESS_MAP_UNMAP_HIGH // There are specific writes to ports 03, F3, F7, F8, FA, FB, FD // so perhaps this system uses devices at these locations. // The disk input expects values that are different to the usual, diff --git a/src/mame/drivers/tsamurai.cpp b/src/mame/drivers/tsamurai.cpp index 003326865d8..ffdfa325c3e 100644 --- a/src/mame/drivers/tsamurai.cpp +++ b/src/mame/drivers/tsamurai.cpp @@ -325,7 +325,7 @@ READ8_MEMBER(tsamurai_state::vsgongf_a100_r) WRITE8_MEMBER(tsamurai_state::vsgongf_sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -359,7 +359,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_vsgongf_map, AS_PROGRAM, 8, tsamurai_state ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x6000, 0x63ff) AM_RAM /* work RAM */ - AM_RANGE(0x8000, 0x8000) AM_READ(soundlatch_byte_r) AM_WRITE(vsgongf_sound_nmi_enable_w) /* NMI enable */ + AM_RANGE(0x8000, 0x8000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(vsgongf_sound_nmi_enable_w) /* NMI enable */ AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("dac", dac_device, write_unsigned8) ADDRESS_MAP_END @@ -775,6 +775,8 @@ static MACHINE_CONFIG_START( vsgongf, tsamurai_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("aysnd", AY8910, XTAL_24MHz/8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10) diff --git a/src/mame/drivers/tvc.cpp b/src/mame/drivers/tvc.cpp index 123cb402371..6550c4b3866 100644 --- a/src/mame/drivers/tvc.cpp +++ b/src/mame/drivers/tvc.cpp @@ -204,7 +204,7 @@ void tvc_state::set_mem_page(UINT8 data) case 0xc0 : // External ROM selected TVC_INSTALL_ROM_BANK(3, "bank4", 0xc000, 0xffff); membank("bank4")->set_base(m_ext->base()); - space.install_readwrite_handler (0xc000, 0xdfff, 0, 0, read8_delegate(FUNC(tvc_state::expansion_r), this), write8_delegate(FUNC(tvc_state::expansion_w), this), 0); + space.install_readwrite_handler (0xc000, 0xdfff, read8_delegate(FUNC(tvc_state::expansion_r), this), write8_delegate(FUNC(tvc_state::expansion_w), this), 0); m_bank_type[3] = -1; break; } diff --git a/src/mame/drivers/uapce.cpp b/src/mame/drivers/uapce.cpp index 8d95ceb1eb5..1868e615c02 100644 --- a/src/mame/drivers/uapce.cpp +++ b/src/mame/drivers/uapce.cpp @@ -116,7 +116,6 @@ public: virtual UINT8 joy_read() override; virtual void machine_reset() override; required_device<discrete_device> m_discrete; - DECLARE_WRITE_LINE_MEMBER(pce_irq_changed); }; #define UAPCE_SOUND_EN NODE_10 @@ -302,11 +301,6 @@ static ADDRESS_MAP_START( pce_io , AS_IO, 8, uapce_state ) AM_RANGE( 0x00, 0x03) AM_DEVREADWRITE( "huc6270", huc6270_device, read, write ) ADDRESS_MAP_END -WRITE_LINE_MEMBER(uapce_state::pce_irq_changed) -{ - m_maincpu->set_input_line(0, state); -} - static MACHINE_CONFIG_START( uapce, uapce_state ) /* basic machine hardware */ @@ -332,7 +326,7 @@ static MACHINE_CONFIG_START( uapce, uapce_state ) MCFG_HUC6260_HSYNC_CHANGED_CB(DEVWRITELINE("huc6270", huc6270_device, hsync_changed)) MCFG_DEVICE_ADD( "huc6270", HUC6270, 0 ) MCFG_HUC6270_VRAM_SIZE(0x10000) - MCFG_HUC6270_IRQ_CHANGED_CB(WRITELINE(uapce_state, pce_irq_changed)) + MCFG_HUC6270_IRQ_CHANGED_CB(INPUTLINE("maincpu", 0)) MCFG_SPEAKER_STANDARD_STEREO("lspeaker","rspeaker") MCFG_SOUND_ADD("c6280", C6280, PCE_MAIN_CLOCK/6) diff --git a/src/mame/drivers/unixpc.cpp b/src/mame/drivers/unixpc.cpp index d579128dfc8..d4a69cf23e4 100644 --- a/src/mame/drivers/unixpc.cpp +++ b/src/mame/drivers/unixpc.cpp @@ -280,7 +280,7 @@ static ADDRESS_MAP_START( unixpc_mem, AS_PROGRAM, 16, unixpc_state ) AM_RANGE(0x4a0000, 0x4a0001) AM_WRITE(misc_control_w) AM_RANGE(0x4d0000, 0x4d7fff) AM_WRITE(diskdma_ptr_w) AM_RANGE(0x4e0000, 0x4e0001) AM_WRITE(disk_control_w) - AM_RANGE(0x800000, 0xbfffff) AM_MIRROR(0x7fc000) AM_ROM AM_REGION("bootrom", 0) + AM_RANGE(0x800000, 0x803fff) AM_MIRROR(0x7fc000) AM_ROM AM_REGION("bootrom", 0) AM_RANGE(0xe10000, 0xe10007) AM_DEVREADWRITE8("wd2797", wd_fdc_t, read, write, 0x00ff) AM_RANGE(0xe30000, 0xe30001) AM_READ(rtc_r) AM_RANGE(0xe40000, 0xe40001) AM_WRITE(error_enable_w) diff --git a/src/mame/drivers/unkhorse.cpp b/src/mame/drivers/unkhorse.cpp index 5ac829908cc..b702af0fd8f 100644 --- a/src/mame/drivers/unkhorse.cpp +++ b/src/mame/drivers/unkhorse.cpp @@ -22,8 +22,7 @@ TODO: #include "emu.h" #include "cpu/i8085/i8085.h" #include "machine/i8155.h" -#include "sound/dac.h" - +#include "sound/speaker.h" class horse_state : public driver_device { @@ -31,35 +30,38 @@ public: horse_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_dac(*this, "dac"), - m_video_ram(*this, "video_ram"), - m_color_ram(*this, "color_ram") { } + m_speaker(*this, "speaker"), + m_inp_matrix(*this, "IN"), + m_vram(*this, "vram") + { } required_device<cpu_device> m_maincpu; - required_device<dac_device> m_dac; - - required_shared_ptr<UINT8> m_video_ram; - required_shared_ptr<UINT8> m_color_ram; + required_device<speaker_sound_device> m_speaker; + required_ioport_array<4> m_inp_matrix; + required_shared_ptr<UINT8> m_vram; + std::unique_ptr<UINT8[]> m_colorram; UINT8 m_output; + DECLARE_READ8_MEMBER(colorram_r) { return m_colorram[(offset >> 2 & 0x1e0) | (offset & 0x1f)] | 0x0f; } + DECLARE_WRITE8_MEMBER(colorram_w) { m_colorram[(offset >> 2 & 0x1e0) | (offset & 0x1f)] = data & 0xf0; } DECLARE_READ8_MEMBER(input_r); DECLARE_WRITE8_MEMBER(output_w); - DECLARE_WRITE_LINE_MEMBER(timer_out); virtual void machine_start() override; - UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(interrupt); }; - void horse_state::machine_start() { + m_colorram = std::make_unique<UINT8 []>(0x200); + save_pointer(NAME(m_colorram.get()), 0x200); save_item(NAME(m_output)); } + + /*************************************************************************** Video @@ -72,8 +74,8 @@ UINT32 horse_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c { for (int x = 0; x < 32; x++) { - UINT8 data = m_video_ram[y << 5 | x]; - UINT8 color = m_color_ram[(y << 3 & 0x780) | x] >> 4; + UINT8 data = m_vram[y << 5 | x]; + UINT8 color = m_colorram[(y << 1 & 0x1e0) | x] >> 4; for (int i = 0; i < 8; i++) bitmap.pix16(y, x << 3 | i) = (data >> i & 1) ? color : 0; @@ -84,6 +86,7 @@ UINT32 horse_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c } + /*************************************************************************** I/O @@ -93,8 +96,8 @@ UINT32 horse_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c static ADDRESS_MAP_START( horse_map, AS_PROGRAM, 8, horse_state ) AM_RANGE(0x0000, 0x37ff) AM_ROM AM_RANGE(0x4000, 0x40ff) AM_DEVREADWRITE("i8155", i8155_device, memory_r, memory_w) - AM_RANGE(0x6000, 0x7fff) AM_RAM AM_SHARE("video_ram") - AM_RANGE(0x8000, 0x879f) AM_RAM AM_SHARE("color_ram") AM_MIRROR(0x0860) + AM_RANGE(0x6000, 0x7fff) AM_RAM AM_SHARE("vram") + AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_READWRITE(colorram_r, colorram_w) ADDRESS_MAP_END static ADDRESS_MAP_START( horse_io_map, AS_IO, 8, horse_state ) @@ -104,15 +107,7 @@ ADDRESS_MAP_END READ8_MEMBER(horse_state::input_r) { - switch (m_output >> 6 & 3) - { - case 0: return ioport("IN0")->read(); - case 1: return ioport("IN1")->read(); - case 2: return ioport("IN2")->read(); - default: break; - } - - return 0xff; + return m_inp_matrix[m_output >> 6 & 3]->read(); } WRITE8_MEMBER(horse_state::output_w) @@ -124,10 +119,7 @@ WRITE8_MEMBER(horse_state::output_w) // other bits: ? } -WRITE_LINE_MEMBER(horse_state::timer_out) -{ - m_dac->write_signed8(state ? 0x7f : 0); -} + /*************************************************************************** @@ -136,7 +128,7 @@ WRITE_LINE_MEMBER(horse_state::timer_out) ***************************************************************************/ static INPUT_PORTS_START( horse ) - PORT_START("IN0") + PORT_START("IN.0") PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:1,2,3") PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) @@ -158,7 +150,7 @@ static INPUT_PORTS_START( horse ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN1") + PORT_START("IN.1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -168,7 +160,7 @@ static INPUT_PORTS_START( horse ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN2") + PORT_START("IN.2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -177,9 +169,13 @@ static INPUT_PORTS_START( horse ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) + + PORT_START("IN.3") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END + /*************************************************************************** Machine Config @@ -200,11 +196,10 @@ static MACHINE_CONFIG_START( horse, horse_state ) MCFG_CPU_IO_MAP(horse_io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", horse_state, interrupt) - MCFG_DEVICE_ADD("i8155", I8155, XTAL_12MHz / 2) + MCFG_DEVICE_ADD("i8155", I8155, XTAL_12MHz / 2) // port A input, B output, C output but unused MCFG_I8155_IN_PORTA_CB(READ8(horse_state, input_r)) MCFG_I8155_OUT_PORTB_CB(WRITE8(horse_state, output_w)) - //port C output (but unused) - MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(horse_state, timer_out)) + MCFG_I8155_OUT_TIMEROUT_CB(DEVWRITELINE("speaker", speaker_sound_device, level_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -214,17 +209,16 @@ static MACHINE_CONFIG_START( horse, horse_state ) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1) MCFG_SCREEN_UPDATE_DRIVER(horse_state, screen_update) MCFG_SCREEN_PALETTE("palette") - MCFG_PALETTE_ADD_3BIT_BGR("palette") /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - - MCFG_DAC_ADD("dac") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END + /*************************************************************************** Game drivers diff --git a/src/mame/drivers/v6809.cpp b/src/mame/drivers/v6809.cpp index df1ef0cb255..81dde70447b 100644 --- a/src/mame/drivers/v6809.cpp +++ b/src/mame/drivers/v6809.cpp @@ -121,14 +121,14 @@ static ADDRESS_MAP_START(v6809_mem, AS_PROGRAM, 8, v6809_state) AM_RANGE(0xf000, 0xf000) AM_MIRROR(0xfe) AM_DEVREAD("crtc", mc6845_device, status_r) AM_WRITE(v6809_address_w) AM_RANGE(0xf001, 0xf001) AM_MIRROR(0xfe) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(v6809_register_w) AM_RANGE(0xf200, 0xf200) AM_MIRROR(0xff) AM_WRITE(videoram_w) - AM_RANGE(0xf504, 0xf504) AM_MIRROR(0x36) AM_DEVREADWRITE("acia0", acia6850_device, status_r, control_w) // modem - AM_RANGE(0xf505, 0xf505) AM_MIRROR(0x36) AM_DEVREADWRITE("acia0", acia6850_device, data_r, data_w) - AM_RANGE(0xf50c, 0xf50c) AM_MIRROR(0x36) AM_DEVREADWRITE("acia1", acia6850_device, status_r, control_w) // printer - AM_RANGE(0xf50d, 0xf50d) AM_MIRROR(0x36) AM_DEVREADWRITE("acia1", acia6850_device, data_r, data_w) + AM_RANGE(0xf500, 0xf500) AM_MIRROR(0x36) AM_DEVREADWRITE("acia0", acia6850_device, status_r, control_w) // modem + AM_RANGE(0xf501, 0xf501) AM_MIRROR(0x36) AM_DEVREADWRITE("acia0", acia6850_device, data_r, data_w) + AM_RANGE(0xf508, 0xf508) AM_MIRROR(0x36) AM_DEVREADWRITE("acia1", acia6850_device, status_r, control_w) // printer + AM_RANGE(0xf509, 0xf509) AM_MIRROR(0x36) AM_DEVREADWRITE("acia1", acia6850_device, data_r, data_w) AM_RANGE(0xf600, 0xf603) AM_MIRROR(0x3c) AM_DEVREADWRITE("fdc", mb8876_t, read, write) AM_RANGE(0xf640, 0xf64f) AM_MIRROR(0x30) AM_DEVREADWRITE("rtc", mm58274c_device, read, write) AM_RANGE(0xf680, 0xf683) AM_MIRROR(0x3c) AM_DEVREADWRITE("pia0", pia6821_device, read, write) - AM_RANGE(0xf6c8, 0xf6cf) AM_MIRROR(0x08) AM_DEVREADWRITE("ptm", ptm6840_device, read, write) + AM_RANGE(0xf6c0, 0xf6c7) AM_MIRROR(0x08) AM_DEVREADWRITE("ptm", ptm6840_device, read, write) AM_RANGE(0xf6d0, 0xf6d3) AM_MIRROR(0x0c) AM_DEVREADWRITE("pia1", pia6821_device, read, write) AM_RANGE(0xf800, 0xffff) AM_ROM ADDRESS_MAP_END diff --git a/src/mame/drivers/vball.cpp b/src/mame/drivers/vball.cpp index 2522ed99919..a4e70ebff79 100644 --- a/src/mame/drivers/vball.cpp +++ b/src/mame/drivers/vball.cpp @@ -24,7 +24,7 @@ Remaining Issues: -1) IRQ & NMI code is totally guessed, and needs to be solved properly -Measurements from Guru (someone needs to rewrite INTERRUPT_GEN() in video/vball.c): +Measurements from Guru (someone needs to rewrite INTERRUPT_GEN() in video/vball.cpp): 6502 /IRQ = 1.720kHz 6202 /NMI = 58 Hz VBlank = 58Hz @@ -171,7 +171,7 @@ WRITE8_MEMBER(vball_state::bankswitch_w) /* The sound system comes all but verbatim from Double Dragon */ WRITE8_MEMBER(vball_state::cpu_sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -229,7 +229,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, vball_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x9800, 0x9803) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xA000, 0xA000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xA000, 0xA000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -423,6 +423,8 @@ static MACHINE_CONFIG_START( vball, vball_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", 3579545) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.60) diff --git a/src/mame/drivers/vboy.cpp b/src/mame/drivers/vboy.cpp index 1524849c555..da565f1de60 100644 --- a/src/mame/drivers/vboy.cpp +++ b/src/mame/drivers/vboy.cpp @@ -1175,8 +1175,8 @@ void vboy_state::machine_start() std::string region_tag; m_cart_rom = memregion(region_tag.assign(m_cart->tag()).append(VBOYSLOT_ROM_REGION_TAG).c_str()); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x07000000, 0x071fffff, 0, 0x0e00000, "prog_cart_bank"); - m_maincpu->space(AS_IO).install_read_bank(0x07000000, 0x071fffff, 0, 0x0e00000, "io_cart_bank"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x07000000, 0x071fffff, 0x0e00000, "prog_cart_bank"); + m_maincpu->space(AS_IO).install_read_bank(0x07000000, 0x071fffff, 0x0e00000, "io_cart_bank"); membank("prog_cart_bank")->set_base(m_cart_rom->base()); membank("io_cart_bank")->set_base(m_cart_rom->base()); diff --git a/src/mame/drivers/vc4000.cpp b/src/mame/drivers/vc4000.cpp index 11362de1e92..0d99a69747d 100644 --- a/src/mame/drivers/vc4000.cpp +++ b/src/mame/drivers/vc4000.cpp @@ -198,9 +198,9 @@ static ADDRESS_MAP_START(elektor_mem, AS_PROGRAM, 8, vc4000_state) ADDRESS_MAP_GLOBAL_MASK(0x1fff) AM_RANGE(0x0000, 0x07ff) AM_ROM AM_RANGE(0x0800, 0x15ff) AM_RAM - AM_RANGE(0x1d80, 0x1dff) AM_MIRROR(0x400) AM_READWRITE(elektor_cass_r,elektor_cass_w) - AM_RANGE(0x1e80, 0x1e8f) AM_MIRROR(0x800) AM_READWRITE(vc4000_key_r,vc4000_sound_ctl) - AM_RANGE(0x1f00, 0x1fff) AM_MIRROR(0x800) AM_READWRITE(vc4000_video_r, vc4000_video_w) + AM_RANGE(0x1980, 0x19ff) AM_MIRROR(0x400) AM_READWRITE(elektor_cass_r,elektor_cass_w) + AM_RANGE(0x1680, 0x168f) AM_MIRROR(0x800) AM_READWRITE(vc4000_key_r,vc4000_sound_ctl) + AM_RANGE(0x1700, 0x17ff) AM_MIRROR(0x800) AM_READWRITE(vc4000_video_r, vc4000_video_w) ADDRESS_MAP_END static INPUT_PORTS_START( vc4000 ) diff --git a/src/mame/drivers/vegas.cpp b/src/mame/drivers/vegas.cpp index 661a16bd799..aa3b43d4d25 100644 --- a/src/mame/drivers/vegas.cpp +++ b/src/mame/drivers/vegas.cpp @@ -1184,7 +1184,7 @@ WRITE32_MEMBER( vegas_state::nile_w ) case NREG_T2CTRL+1: /* general purpose timer control (control bits) */ case NREG_T3CTRL+1: /* watchdog timer control (control bits) */ which = (offset - NREG_T0CTRL) / 4; - if (1 || LOG_NILE) logerror("%08X:NILE WRITE: timer %d control(%03X) = %08X & %08X\n", safe_pc(), which, offset*4, data, mem_mask); + if (LOG_NILE) logerror("%08X:NILE WRITE: timer %d control(%03X) = %08X & %08X\n", safe_pc(), which, offset*4, data, mem_mask); logit = 0; /* timer just enabled? */ @@ -1195,7 +1195,7 @@ WRITE32_MEMBER( vegas_state::nile_w ) // logerror("Unexpected value: timer %d is prescaled\n", which); if (m_nile_regs[offset] & 2) { UINT32 scaleSrc = (m_nile_regs[offset] >> 2) & 0x3; - scale *= m_nile_regs[NREG_T0CTRL + which * 4]; + scale *= m_nile_regs[NREG_T0CTRL + scaleSrc * 4]; logerror("Timer scale: timer %d is scaled by %08X\n", which, m_nile_regs[NREG_T0CTRL + which * 4]); } if (scale != 0) @@ -1211,7 +1211,7 @@ WRITE32_MEMBER( vegas_state::nile_w ) UINT32 scale = 1; if (m_nile_regs[offset] & 2) { UINT32 scaleSrc = (m_nile_regs[offset] >> 2) & 0x3; - scale = m_nile_regs[NREG_T0CTRL + which * 4]; + scale = m_nile_regs[NREG_T0CTRL + scaleSrc * 4]; logerror("Timer scale: timer %d is scaled by %08X\n", which, scale); } m_nile_regs[offset + 1] = m_timer[which]->remaining().as_double() * SYSTEM_CLOCK / scale; @@ -1234,7 +1234,7 @@ WRITE32_MEMBER( vegas_state::nile_w ) UINT32 scale = 1; if (m_nile_regs[offset - 1] & 2) { UINT32 scaleSrc = (m_nile_regs[offset - 1] >> 2) & 0x3; - scale = m_nile_regs[NREG_T0CTRL + which * 4]; + scale = m_nile_regs[NREG_T0CTRL + scaleSrc * 4]; logerror("Timer scale: timer %d is scaled by %08X\n", which, scale); } m_timer[which]->adjust(TIMER_PERIOD * m_nile_regs[offset] * scale, which); @@ -1722,9 +1722,9 @@ void vegas_state::remap_dynamic_addresses() if (dynamic[addr].read == NOP_HANDLER) space.nop_read(dynamic[addr].start, dynamic[addr].end); else if (!dynamic[addr].read.isnull()) - space.install_read_handler(dynamic[addr].start, dynamic[addr].end, 0, 0, dynamic[addr].read); + space.install_read_handler(dynamic[addr].start, dynamic[addr].end, dynamic[addr].read); if (!dynamic[addr].write.isnull()) - space.install_write_handler(dynamic[addr].start, dynamic[addr].end, 0, 0, dynamic[addr].write); + space.install_write_handler(dynamic[addr].start, dynamic[addr].end, dynamic[addr].write); } if (LOG_DYNAMIC) diff --git a/src/mame/drivers/volfied.cpp b/src/mame/drivers/volfied.cpp index fa5e6c2a55c..7e59452db78 100644 --- a/src/mame/drivers/volfied.cpp +++ b/src/mame/drivers/volfied.cpp @@ -201,17 +201,6 @@ static GFXDECODE_START( volfied ) GFXDECODE_END -/************************************************************** - YM2203 (SOUND) -**************************************************************/ - -/* handler called by the YM2203 emulator when the internal timers cause an IRQ */ - -WRITE_LINE_MEMBER(volfied_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - /*********************************************************** MACHINE DRIVERS ***********************************************************/ @@ -260,7 +249,7 @@ static MACHINE_CONFIG_START( volfied, volfied_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymsnd", YM2203, 4000000) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(volfied_state, irqhandler)) + MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSWA")) MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSWB")) MCFG_SOUND_ROUTE(0, "mono", 0.15) diff --git a/src/mame/drivers/vt240.cpp b/src/mame/drivers/vt240.cpp index 51a8e280393..2aab791f0d7 100644 --- a/src/mame/drivers/vt240.cpp +++ b/src/mame/drivers/vt240.cpp @@ -30,7 +30,8 @@ #include "machine/i8251.h" #include "machine/mc68681.h" #include "machine/ms7004.h" -#include "machine/ram.h" +#include "machine/bankdev.h" +#include "machine/x2212.h" #include "video/upd7220.h" #define VERBOSE_DBG 1 /* general debug messages */ @@ -50,31 +51,66 @@ public: vt240_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), + m_i8085(*this, "charcpu"), m_i8251(*this, "i8251"), m_duart(*this, "duart"), m_hgdc(*this, "upd7220"), - m_video_ram(*this, "video_ram"){ } + m_bank(*this, "bank"), + m_nvram(*this, "x2212"), + m_palette(*this, "palette"), + m_rom(*this, "maincpu"){ } required_device<cpu_device> m_maincpu; - + required_device<cpu_device> m_i8085; required_device<i8251_device> m_i8251; - DECLARE_WRITE_LINE_MEMBER(write_keyboard_clock); - required_device<mc68681_device> m_duart; - required_device<upd7220_device> m_hgdc; + required_device<address_map_bank_device> m_bank; + required_device<x2212_device> m_nvram; + required_device<palette_device> m_palette; + required_region_ptr<UINT16> m_rom; + + UINT8 m_video_ram[65536]; + + DECLARE_WRITE_LINE_MEMBER(write_keyboard_clock); + DECLARE_WRITE_LINE_MEMBER(i8085_rdy_w); + DECLARE_READ_LINE_MEMBER(i8085_sid_r); DECLARE_READ8_MEMBER( test_r ); + DECLARE_READ8_MEMBER(i8085_comm_r); + DECLARE_WRITE8_MEMBER(i8085_comm_w); + DECLARE_READ8_MEMBER(t11_comm_r); + DECLARE_WRITE8_MEMBER(t11_comm_w); + DECLARE_READ8_MEMBER(mem_map_cs_r); + DECLARE_WRITE8_MEMBER(mem_map_cs_w); + DECLARE_READ8_MEMBER(ctrl_r); + DECLARE_WRITE8_MEMBER(mem_map_sel_w); + DECLARE_READ8_MEMBER(char_buf_r); + DECLARE_WRITE8_MEMBER(char_buf_w); + DECLARE_READ8_MEMBER(vram_r); + DECLARE_WRITE8_MEMBER(vram_w); + DECLARE_READ8_MEMBER(vom_r); + DECLARE_WRITE8_MEMBER(vom_w); + DECLARE_WRITE8_MEMBER(nvr_store_w); + DECLARE_WRITE8_MEMBER(mask_w); + DECLARE_WRITE8_MEMBER(reg0_w); + DECLARE_WRITE8_MEMBER(reg1_w); + DECLARE_READ16_MEMBER(mem_r); + DECLARE_WRITE16_MEMBER(mem_w); //UINT16 m_pcg_addr; //UINT8 m_pcg_internal_addr; //UINT8 *m_char_rom; - required_shared_ptr<UINT16> m_video_ram; - DECLARE_DRIVER_INIT(vt240); virtual void machine_reset() override; - INTERRUPT_GEN_MEMBER(vt240_irq); - UPD7220_DRAW_TEXT_LINE_MEMBER( hgdc_draw_text ); + UPD7220_DISPLAY_PIXELS_MEMBER(hgdc_draw); + + UINT8 m_i8085_out, m_t11_out, m_i8085_rdy, m_t11; + UINT8 m_mem_map[16]; + UINT8 m_mem_map_sel; + UINT8 m_char_buf[16]; + UINT8 m_char_idx, m_mask, m_reg0, m_reg1; + UINT8 m_vom[16]; }; WRITE_LINE_MEMBER(vt240_state::write_keyboard_clock) @@ -83,74 +119,208 @@ WRITE_LINE_MEMBER(vt240_state::write_keyboard_clock) m_i8251->write_rxc(state); } -/* TODO */ -UPD7220_DRAW_TEXT_LINE_MEMBER( vt240_state::hgdc_draw_text ) +WRITE_LINE_MEMBER(vt240_state::i8085_rdy_w) +{ + //m_maincpu->set_input_line(T11_IRQ1, state ? ASSERT_LINE : CLEAR_LINE); + m_i8085_rdy = !state; +} + +READ_LINE_MEMBER(vt240_state::i8085_sid_r) { - //int x; - //int xi,yi; - //int tile,color; - //UINT8 tile_data; + return !m_t11; +} - #if 0 - for( x = 0; x < pitch; x++ ) +UPD7220_DISPLAY_PIXELS_MEMBER( vt240_state::hgdc_draw ) +{ + const rgb_t *palette = m_palette->palette()->entry_list_raw(); + + int xi,gfx; + UINT8 pen; + + gfx = ((UINT16 *)m_video_ram)[(address & 0xffff) >> 1]; + + for(xi=0;xi<16;xi++) { - tile = (vram[(addr+x)*2] & 0xff); - color = (vram[(addr+x)*2+1] & 0x0f); + pen = ((gfx >> xi) & 1) ? 1 : 0; + bitmap.pix32(y, x + xi) = palette[pen]; + } +} - for( yi = 0; yi < lr; yi++) - { - tile_data = m_char_rom[(tile*8+yi) & 0x7ff]; +READ8_MEMBER(vt240_state::t11_comm_r) +{ + m_t11 = 1; + m_i8085->set_input_line(I8085_RST65_LINE, CLEAR_LINE); + return m_t11_out; +} - if(cursor_on && cursor_addr == addr+x) //TODO - tile_data^=0xff; +WRITE8_MEMBER(vt240_state::t11_comm_w) +{ + m_i8085_out = data; +} - for( xi = 0; xi < 8; xi++) - { - int res_x,res_y; - int pen = (tile_data >> xi) & 1 ? color : 0; +READ8_MEMBER(vt240_state::i8085_comm_r) +{ + switch(offset) + { + case 0: + return m_i8085_out; + } + return 0xff; +} - if(yi >= 8) { pen = 0; } +WRITE8_MEMBER(vt240_state::i8085_comm_w) +{ + switch(offset) + { + case 1: + m_t11_out = data; + m_t11 = 0; + m_i8085->set_input_line(I8085_RST65_LINE, ASSERT_LINE); + break; + case 2: + m_i8085->set_input_line(INPUT_LINE_RESET, PULSE_LINE); + m_t11 = 0; + m_i8085->set_input_line(I8085_RST65_LINE, CLEAR_LINE); + break; + } +} +READ8_MEMBER(vt240_state::mem_map_cs_r) +{ + return ~m_mem_map[offset]; +} + +WRITE8_MEMBER(vt240_state::mem_map_cs_w) +{ + m_mem_map[offset] = ~data; +} - res_x = x * 8 + xi; - res_y = y + yi; +READ8_MEMBER(vt240_state::ctrl_r) +{ + return m_mem_map_sel | (m_i8085_rdy << 6) | (m_t11 << 7); +} - if(res_x > screen_max_x || res_y > screen_max_y) - continue; +WRITE8_MEMBER(vt240_state::mem_map_sel_w) +{ + m_mem_map_sel = data & 1; +} - bitmap.pix16(res_y, res_x) = pen; - } - } +READ16_MEMBER(vt240_state::mem_r) +{ + if(m_mem_map_sel) + { + m_bank->set_bank(m_mem_map[(offset >> 11) & 0xf]); + return m_bank->read16(space, offset & 0x7ff, mem_mask); } - #endif + else + return m_rom[offset]; } +WRITE16_MEMBER(vt240_state::mem_w) +{ + if(m_mem_map_sel) + { + m_bank->set_bank(m_mem_map[(offset >> 11) & 0xf]); + m_bank->write16(space, offset & 0x7ff, data, mem_mask); + } +} -/* presumably communication with T11 */ -READ8_MEMBER( vt240_state::test_r ) +READ8_MEMBER(vt240_state::char_buf_r) { - //m_maincpu->set_input_line(I8085_RST65_LINE, CLEAR_LINE); + m_char_idx = 0; + return 0xff; +} + +WRITE8_MEMBER(vt240_state::char_buf_w) +{ + m_char_buf[m_char_idx++] = ~data; + m_char_idx &= 0xf; +} + +READ8_MEMBER(vt240_state::vom_r) +{ + return m_vom[offset]; +} + +WRITE8_MEMBER(vt240_state::vom_w) +{ + m_vom[offset] = data; +} + +READ8_MEMBER(vt240_state::vram_r) +{ + offset = ((offset & 0x30000) >> 1) | (offset & 0x7fff); + return m_video_ram[offset & 0xffff]; +} + +WRITE8_MEMBER(vt240_state::vram_w) +{ + offset = ((offset & 0x30000) >> 1) | (offset & 0x7fff); + if(BIT(m_reg1, 2)) + data = m_video_ram[offset]; + else if(BIT(m_reg0, 4)) + { + data = m_char_buf[m_char_idx++]; + m_char_idx &= 0xf; + offset = BIT(offset, 16) | (offset & 0xfffe); + } + if(!BIT(m_reg0, 3)) + data = (data & ~m_mask) | (m_video_ram[offset] & m_mask); + m_video_ram[offset & 0xffff] = data; +} + +WRITE8_MEMBER(vt240_state::mask_w) +{ + m_mask = data; +} + +WRITE8_MEMBER(vt240_state::nvr_store_w) +{ + m_nvram->store(ASSERT_LINE); + m_nvram->store(CLEAR_LINE); +} - return rand(); +WRITE8_MEMBER(vt240_state::reg0_w) +{ + m_reg0 = data; } +WRITE8_MEMBER(vt240_state::reg1_w) +{ + m_reg1 = data; +} + +static ADDRESS_MAP_START(bank_map, AS_PROGRAM, 16, vt240_state) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x00000, 0x1ffff) AM_ROM AM_REGION("maincpu", 0) + AM_RANGE(0x80000, 0x87fff) AM_RAM +ADDRESS_MAP_END // PDF page 78 (4-25) static ADDRESS_MAP_START( vt240_mem, AS_PROGRAM, 16, vt240_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE (0000000, 0077777) AM_ROM - // 0170xxx MEM MAP/8085 decoder + AM_RANGE (0000000, 0167777) AM_READWRITE(mem_r, mem_w) + AM_RANGE (0170000, 0170037) AM_READWRITE8(mem_map_cs_r, mem_map_cs_w, 0x00ff) + AM_RANGE (0170040, 0170041) AM_WRITE8(mem_map_sel_w, 0x00ff) + AM_RANGE (0170100, 0170101) AM_READ8(ctrl_r, 0x00ff) + AM_RANGE (0170140, 0170141) AM_WRITE8(nvr_store_w, 0x00ff) AM_RANGE (0171000, 0171003) AM_DEVREADWRITE8("i8251", i8251_device, data_r, data_w, 0x00ff) AM_RANGE (0171004, 0171007) AM_DEVREADWRITE8("i8251", i8251_device, status_r, control_w, 0x00ff) - AM_RANGE (0172000, 0172077) AM_DEVREADWRITE8("duart", mc68681_device, read, write, 0xff) - // 0173000 Video logic - // 0174000 Video logic - // 017500x Video logic - // 0176xxx NVR + AM_RANGE (0172000, 0172077) AM_DEVREADWRITE8("duart", mc68681_device, read, write, 0x00ff) + AM_RANGE (0173000, 0173003) AM_DEVREAD8("upd7220", upd7220_device, read, 0x00ff) + AM_RANGE (0173040, 0173077) AM_READ8(vom_r, 0x00ff) + AM_RANGE (0173140, 0173141) AM_READ8(char_buf_r, 0x00ff) + AM_RANGE (0174000, 0174003) AM_DEVWRITE8("upd7220", upd7220_device, write, 0x00ff) + AM_RANGE (0174040, 0174077) AM_WRITE8(vom_w, 0x00ff) + AM_RANGE (0174140, 0174141) AM_WRITE8(char_buf_w, 0x00ff) + AM_RANGE (0174440, 0174441) AM_WRITE8(mask_w, 0x00ff) + AM_RANGE (0174600, 0174601) AM_WRITE8(reg0_w, 0x00ff) + AM_RANGE (0174640, 0174641) AM_WRITE8(reg1_w, 0x00ff) + AM_RANGE (0175000, 0175005) AM_READWRITE8(i8085_comm_r, i8085_comm_w, 0x00ff) + AM_RANGE (0176000, 0176777) AM_DEVREADWRITE8("x2212", x2212_device, read, write, 0x00ff) // 017700x System comm logic ADDRESS_MAP_END // PDF page 134 (6-9) -#if 0 static ADDRESS_MAP_START(vt240_char_mem, AS_PROGRAM, 8, vt240_state) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x3fff) AM_ROM AM_REGION("charcpu", 0) @@ -162,27 +332,25 @@ static ADDRESS_MAP_START(vt240_char_io, AS_IO, 8, vt240_state) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("upd7220", upd7220_device, read, write) - AM_RANGE(0x20, 0x20) AM_READ(test_r) - //AM_RANGE(0x30, 0x30) AM_READWRITE(pcg_r,pcg_w) // 0x30 PCG + AM_RANGE(0x10, 0x1f) AM_READWRITE(vom_r, vom_w) + AM_RANGE(0x20, 0x20) AM_READWRITE(t11_comm_r, t11_comm_w) + AM_RANGE(0x30, 0x30) AM_READWRITE(char_buf_r, char_buf_w) + AM_RANGE(0x90, 0x90) AM_WRITE(mask_w) + AM_RANGE(0xc0, 0xc0) AM_WRITE(reg0_w) + AM_RANGE(0xd0, 0xd0) AM_WRITE(reg1_w) ADDRESS_MAP_END -#endif static ADDRESS_MAP_START( upd7220_map, AS_0, 16, vt240_state) - AM_RANGE(0x00000, 0x3ffff) AM_RAM AM_SHARE("video_ram") + AM_RANGE(0x00000, 0x3ffff) AM_READWRITE8(vram_r, vram_w, 0xffff) ADDRESS_MAP_END -/* Input ports */ -static INPUT_PORTS_START( vt240 ) -INPUT_PORTS_END - void vt240_state::machine_reset() { -} - -INTERRUPT_GEN_MEMBER(vt240_state::vt240_irq) -{ - //device.execute().set_input_line(I8085_RST65_LINE, ASSERT_LINE); + m_i8251->write_cts(0); + m_nvram->recall(ASSERT_LINE); + m_nvram->recall(CLEAR_LINE); + m_mem_map_sel = 0; } static const gfx_layout vt240_chars_8x10 = @@ -200,31 +368,37 @@ static GFXDECODE_START( vt240 ) GFXDECODE_ENTRY( "charcpu", 0x338*10-2, vt240_chars_8x10, 0, 8 ) GFXDECODE_END -static MACHINE_CONFIG_FRAGMENT( vt240_motherboard ) +static MACHINE_CONFIG_START( vt240, vt240_state ) MCFG_CPU_ADD("maincpu", T11, XTAL_7_3728MHz) // confirm MCFG_CPU_PROGRAM_MAP(vt240_mem) MCFG_T11_INITIAL_MODE(5 << 13) -/* - MCFG_CPU_ADD("charcpu", I8085A, XTAL_16MHz / 4) - MCFG_CPU_PROGRAM_MAP(vt240_char_mem) - MCFG_CPU_IO_MAP(vt240_char_io) - MCFG_CPU_VBLANK_INT_DRIVER("screen", vt240_state, vt240_irq) -*/ + MCFG_CPU_ADD("charcpu", I8085A, XTAL_16MHz / 4) + MCFG_CPU_PROGRAM_MAP(vt240_char_mem) + MCFG_CPU_IO_MAP(vt240_char_io) + MCFG_I8085A_SOD(WRITELINE(vt240_state, i8085_rdy_w)) + MCFG_I8085A_SID(READLINE(vt240_state, i8085_sid_r)) + + MCFG_DEVICE_ADD("bank", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(bank_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) + MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(20) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(16) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ MCFG_SCREEN_SIZE(640, 480) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) -// MCFG_VIDEO_START_OVERRIDE(vt240_state,vt240) MCFG_SCREEN_UPDATE_DEVICE("upd7220", upd7220_device, screen_update) MCFG_PALETTE_ADD_MONOCHROME("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", vt240) MCFG_DEVICE_ADD("upd7220", UPD7220, XTAL_4MHz / 4) MCFG_DEVICE_ADDRESS_MAP(AS_0, upd7220_map) - MCFG_UPD7220_DRAW_TEXT_CALLBACK_OWNER(vt240_state, hgdc_draw_text) + MCFG_UPD7220_DISPLAY_PIXELS_CALLBACK_OWNER(vt240_state, hgdc_draw) + MCFG_UPD7220_VSYNC_CALLBACK(INPUTLINE("charcpu", I8085_RST75_LINE)) + MCFG_UPD7220_BLANK_CALLBACK(INPUTLINE("charcpu", I8085_RST55_LINE)) MCFG_MC68681_ADD("duart", XTAL_3_6864MHz) /* 2681 duart (not 68681!) */ // MCFG_MC68681_IRQ_CALLBACK(WRITELINE(dectalk_state, dectalk_duart_irq_handler)) @@ -235,22 +409,37 @@ static MACHINE_CONFIG_FRAGMENT( vt240_motherboard ) // MCFG_I8251_DTR_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_dtr)) // MCFG_I8251_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts)) + MCFG_DEVICE_ADD("i8251", I8251, 0) + MCFG_I8251_TXD_HANDLER(DEVWRITELINE("lk201", lk201_device, rx_w)) + //MCFG_I8251_DTR_HANDLER(WRITELINE(rainbow_state, irq_hi_w)) + //MCFG_I8251_RXRDY_HANDLER(INPUTLINE("maincpu", )) + //MCFG_I8251_TXRDY_HANDLER(WRITELINE(rainbow_state, kbd_txready_w)) + + MCFG_DEVICE_ADD("lk201", LK201, 0) + MCFG_LK201_TX_HANDLER(DEVWRITELINE("i8251", i8251_device, write_rxd)) + + MCFG_DEVICE_ADD("keyboard_clock", CLOCK, 4800 * 64) // 8251 is set to /64 on the clock input + MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(vt240_state, write_keyboard_clock)) + MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "null_modem") MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", mc68681_device, rx_a_w)) // MCFG_RS232_DSR_HANDLER(DEVWRITELINE("duart", mc68681_device, ipX_w)) + + MCFG_X2212_ADD("x2212") MACHINE_CONFIG_END -static MACHINE_CONFIG_START( mc7105, vt240_state ) - MCFG_FRAGMENT_ADD(vt240_motherboard) - - // serial connection to MS7004 keyboard - MCFG_DEVICE_ADD("i8251", I8251, 0) -// MCFG_I8251_RXRDY_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir1_w)) +static MACHINE_CONFIG_DERIVED( mc7105, vt240 ) + MCFG_DEVICE_REMOVE("lk201") MCFG_DEVICE_ADD("ms7004", MS7004, 0) MCFG_MS7004_TX_HANDLER(DEVWRITELINE("i8251", i8251_device, write_rxd)) + MCFG_DEVICE_MODIFY("i8251") + MCFG_I8251_TXD_HANDLER(NOOP) + //MCFG_I8251_TXD_HANDLER(DEVWRITELINE("ms7004", ms7004_device, rx_w)) + // baud rate is supposed to be 4800 but keyboard is slightly faster + MCFG_DEVICE_REMOVE("keyboard_clock") MCFG_DEVICE_ADD("keyboard_clock", CLOCK, 4960*16) MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(vt240_state, write_keyboard_clock)) MACHINE_CONFIG_END @@ -271,7 +460,8 @@ ROM_END /* ROM definition */ ROM_START( vt240 ) ROM_REGION( 0x10000, "charcpu", ROMREGION_ERASEFF ) - ROM_LOAD( "23-008e6-00.e100", 0x0000, 0x8000, CRC(ebc8a2fe) SHA1(70838175f8302fdc0dee79b2403fa95e6d989206)) + ROM_LOAD( "23-008e6-00.e100", 0x0000, 0x4000, CRC(ebc8a2fe) SHA1(70838175f8302fdc0dee79b2403fa95e6d989206)) + ROM_CONTINUE(0x8000, 0x4000) ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF ) ROM_DEFAULT_BIOS( "vt240" ) @@ -323,7 +513,7 @@ DRIVER_INIT_MEMBER(vt240_state,vt240) } /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1983, vt240, 0, 0, mc7105, vt240, vt240_state, vt240, "Digital Equipment Corporation", "VT240", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +COMP( 1983, vt240, 0, 0, vt240, 0, vt240_state, vt240, "Digital Equipment Corporation", "VT240", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) //COMP( 1983, vt241, 0, 0, vt220, vt220, driver_device, 0, "Digital Equipment Corporation", "VT241", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // NOTE: the only difference between VT240 and VT241 is the latter comes with a VR241 Color monitor, while the former comes with a mono display; the ROMs and operation are identical. -COMP( 1983, mc7105, 0, 0, mc7105, vt240, vt240_state, vt240, "Elektronika", "MC7105", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +COMP( 1983, mc7105, 0, 0, mc7105, 0, vt240_state, vt240, "Elektronika", "MC7105", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) diff --git a/src/mame/drivers/wc90.cpp b/src/mame/drivers/wc90.cpp index 3459467fd8e..c0aa05e5971 100644 --- a/src/mame/drivers/wc90.cpp +++ b/src/mame/drivers/wc90.cpp @@ -72,7 +72,7 @@ WRITE8_MEMBER(wc90_state::bankswitch1_w) WRITE8_MEMBER(wc90_state::sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -127,7 +127,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, wc90_state ) AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf800, 0xf803) AM_DEVREADWRITE("ymsnd", ym2608_device, read, write) AM_RANGE(0xfc00, 0xfc00) AM_READNOP /* ??? adpcm ??? */ - AM_RANGE(0xfc10, 0xfc10) AM_READ(soundlatch_byte_r) + AM_RANGE(0xfc10, 0xfc10) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -382,6 +382,8 @@ static MACHINE_CONFIG_START( wc90, wc90_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2608, XTAL_8MHz) /* verified on pcb */ MCFG_YM2608_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.50) diff --git a/src/mame/drivers/wc90b.cpp b/src/mame/drivers/wc90b.cpp index fa192ba4db7..7d849d44429 100644 --- a/src/mame/drivers/wc90b.cpp +++ b/src/mame/drivers/wc90b.cpp @@ -51,11 +51,11 @@ fd08: scroll bg #2 X coordinate fd0a: scroll bg #2 Y coordinate fd0e: ???? -What i used instead, was the local copy kept in RAM. These values +What I used instead, was the local copy kept in RAM. These values are the ones the original machine uses. This will differ when trying -to use some of this code to write a driver for a similar tecmo bootleg. +to use some of this code to write a driver for a similar Tecmo bootleg. -Sprites are also very different. Theres a code snippet in the ROM +Sprites are also very different. There's a code snippet in the ROM that converts the original sprites to the new format, which only allows 16x16 sprites. That snippet also does some ( nasty ) clipping. @@ -87,7 +87,6 @@ Noted added by ClawGrip 28-Mar-2008: #include "emu.h" #include "cpu/z80/z80.h" #include "sound/2203intf.h" -#include "sound/msm5205.h" #include "includes/wc90b.h" #define TEST_DIPS false /* enable to test unmapped dip switches */ @@ -110,7 +109,7 @@ WRITE8_MEMBER(wc90b_state::bankswitch1_w) WRITE8_MEMBER(wc90b_state::sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); m_audiocpu->set_input_line(0, HOLD_LINE); } @@ -166,7 +165,7 @@ static ADDRESS_MAP_START( sound_cpu, AS_PROGRAM, 8, wc90b_state ) AM_RANGE(0xe400, 0xe400) AM_WRITE(adpcm_data_w) AM_RANGE(0xe800, 0xe801) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r) + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -365,6 +364,8 @@ static MACHINE_CONFIG_START( wc90b, wc90b_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2203, YM2203_CLOCK) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) diff --git a/src/mame/drivers/welltris.cpp b/src/mame/drivers/welltris.cpp index 780e3036660..15fa2cf250a 100644 --- a/src/mame/drivers/welltris.cpp +++ b/src/mame/drivers/welltris.cpp @@ -4,11 +4,11 @@ Welltris (c)1991 Video System ******************************************************************************** - hardware is similar to aerofgt.c but with slightly different sprites, sound, + hardware is similar to aerofgt.cpp but with slightly different sprites, sound, and an additional 'pixel' layer used for the backdrops Driver by David Haywood, with help from Steph from The Ultimate Patchers - Thanks to the authors of aerofgt.c and fromance.c on which most of this is + Thanks to the authors of aerofgt.cpp and fromance.cpp on which most of this is based ******************************************************************************** OW-13 CPU @@ -51,7 +51,7 @@ V-SYSTEM VS8803 6082 9040 EBBB ******************************************************************************** its impossible to know what some of the video registers do due to lack of - evidence (bg palette has a selector, but i'm not sure which ... test mode + evidence (bg palette has a selector, but I'm not sure which ... test mode colours use different palette on rgb test ******************************************************************************** @@ -167,8 +167,8 @@ To select a player, press one of his 2 buttons ... - When it's OFF, only player 1 can play, the number of credits is decremented when you press the player buttons ... If you wait until timer reaches 0 without selecting - a player, 1 credit will be substracted, and you'll start a game with player 1 ... - - When it's ON, 1 credit will be automatically substracted, then the 4 players can + a player, 1 credit will be subtracted, and you'll start a game with player 1 ... + - When it's ON, 1 credit will be automatically subtracted, then the 4 players can play by pressing one of their buttons ... If you wait until timer reaches 0 without selecting a player, you'll start a game with player 1 ... @@ -333,7 +333,7 @@ WRITE16_MEMBER(welltris_state::sound_command_w) if (ACCESSING_BITS_0_7) { m_pending_command = 1; - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -383,7 +383,7 @@ static ADDRESS_MAP_START( sound_port_map, AS_IO, 8, welltris_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_WRITE(sound_bankswitch_w) AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) - AM_RANGE(0x10, 0x10) AM_READ(soundlatch_byte_r) + AM_RANGE(0x10, 0x10) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x18, 0x18) AM_WRITE(pending_command_clear_w) ADDRESS_MAP_END @@ -670,14 +670,6 @@ static GFXDECODE_START( welltris ) GFXDECODE_END - -WRITE_LINE_MEMBER(welltris_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - - - DRIVER_INIT_MEMBER(welltris_state,welltris) { #if WELLTRIS_4P_HACK @@ -727,8 +719,10 @@ static MACHINE_CONFIG_START( welltris, welltris_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(welltris_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "mono", 0.25) MCFG_SOUND_ROUTE(1, "mono", 0.75) MCFG_SOUND_ROUTE(2, "mono", 0.75) diff --git a/src/mame/drivers/wgp.cpp b/src/mame/drivers/wgp.cpp index 13f6de42582..c3bd4a55069 100644 --- a/src/mame/drivers/wgp.cpp +++ b/src/mame/drivers/wgp.cpp @@ -866,17 +866,6 @@ static GFXDECODE_START( wgp ) GFXDECODE_END -/************************************************************** - YM2610 (SOUND) -**************************************************************/ - -/* handler called by the YM2610 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(wgp_state::irqhandler) // assumes Z80 sandwiched between 68Ks -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} - - /*********************************************************** MACHINE DRIVERS @@ -964,7 +953,7 @@ static MACHINE_CONFIG_START( wgp, wgp_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ymsnd", YM2610, 16000000/2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(wgp_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) // assumes Z80 sandwiched between 68Ks MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) diff --git a/src/mame/drivers/wiz.cpp b/src/mame/drivers/wiz.cpp index 82909dfc4c2..bef40970050 100644 --- a/src/mame/drivers/wiz.cpp +++ b/src/mame/drivers/wiz.cpp @@ -178,6 +178,7 @@ Stephh's notes (based on the games Z80 code and some tests) : #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" #include "includes/wiz.h" @@ -325,7 +326,7 @@ static ADDRESS_MAP_START( kungfut_main_map, AS_PROGRAM, 8, wiz_state ) AM_RANGE(0xf008, 0xf008) AM_READ_PORT("DSW1") AM_RANGE(0xf010, 0xf010) AM_READ_PORT("IN0") AM_RANGE(0xf018, 0xf018) AM_READ_PORT("IN1") - AM_RANGE(0xf800, 0xf800) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xf800, 0xf800) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xf818, 0xf818) AM_WRITE(wiz_bgcolor_w) ADDRESS_MAP_END @@ -364,14 +365,14 @@ static ADDRESS_MAP_START( kungfut_sound_map, AS_PROGRAM, 8, wiz_state ) AM_RANGE(0x4000, 0x4001) AM_DEVWRITE("8910.3", ay8910_device, address_data_w) AM_RANGE(0x5000, 0x5001) AM_DEVWRITE("8910.1", ay8910_device, address_data_w) AM_RANGE(0x6000, 0x6001) AM_DEVWRITE("8910.2", ay8910_device, address_data_w) - AM_RANGE(0x7000, 0x7000) AM_READWRITE(soundlatch_byte_r, wiz_sound_nmi_mask_w) + AM_RANGE(0x7000, 0x7000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(wiz_sound_nmi_mask_w) ADDRESS_MAP_END static ADDRESS_MAP_START( stinger_sound_map, AS_PROGRAM, 8, wiz_state ) ADDRESS_MAP_GLOBAL_MASK(0x7fff) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x2000, 0x23ff) AM_RAM - AM_RANGE(0x3000, 0x3000) AM_READWRITE(soundlatch_byte_r, wiz_sound_nmi_mask_w) + AM_RANGE(0x3000, 0x3000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(wiz_sound_nmi_mask_w) AM_RANGE(0x4000, 0x4000) AM_WRITENOP // ? AM_RANGE(0x5000, 0x5001) AM_DEVWRITE("8910.1", ay8910_device, address_data_w) AM_RANGE(0x6000, 0x6001) AM_DEVWRITE("8910.2", ay8910_device, address_data_w) @@ -807,6 +808,8 @@ static MACHINE_CONFIG_START( kungfut, wiz_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("8910.1", AY8910, 18432000/12) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10) diff --git a/src/mame/drivers/wmg.cpp b/src/mame/drivers/wmg.cpp index ebaf3905833..ecdf27c241e 100644 --- a/src/mame/drivers/wmg.cpp +++ b/src/mame/drivers/wmg.cpp @@ -167,7 +167,7 @@ void wmg_state::wmg_def_install_io_space(address_space &space) pia6821_device *pia_1 = space.machine().device<pia6821_device>("pia_1"); /* this routine dynamically installs the memory mapped above from c000-cfff */ - space.install_write_bank (0xc000, 0xc00f, 0, 0, "bank4"); + space.install_write_bank (0xc000, 0xc00f, "bank4"); space.install_write_handler (0xc010, 0xc01f, write8_delegate(FUNC(williams_state::defender_video_control_w),this)); space.install_write_handler (0xc400, 0xc400, write8_delegate(FUNC(wmg_state::wmg_rombank_w),this)); space.install_write_handler (0xc401, 0xc401, write8_delegate(FUNC(wmg_state::wmg_sound_reset_w),this)); @@ -197,13 +197,13 @@ WRITE8_MEMBER( wmg_state::wmg_def_rombank_w ) case 1: case 2: case 3: - space1.install_read_bank(0xc000, 0xcfff, 0, 0, "bank7"); + space1.install_read_bank(0xc000, 0xcfff, "bank7"); space1.unmap_write(0xc000, 0xcfff); membank("bank7")->set_entry(data); break; case 7: - space1.install_read_bank(0xc000, 0xcfff, 0, 0, "bank7"); + space1.install_read_bank(0xc000, 0xcfff, "bank7"); space1.unmap_write(0xc000, 0xcfff); membank("bank7")->set_entry(4); break; diff --git a/src/mame/drivers/wwfsstar.cpp b/src/mame/drivers/wwfsstar.cpp index 623e7d6dd1d..1607b3fade3 100644 --- a/src/mame/drivers/wwfsstar.cpp +++ b/src/mame/drivers/wwfsstar.cpp @@ -140,7 +140,7 @@ Notes: - About the bootleg set: - It matches the US (ealier) set 99.99% just in 64K chunks. The ONLY difference + It matches the US (earlier) set 99.99% just in 64K chunks. The ONLY difference in the data is WWFS47.BIN has 5 bytes with a single bit stuck (0x00001000): Offset WWFS47.BIN 24j6-0.112 (first 0x10000 bytes) @@ -194,7 +194,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, wwfsstar_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x9800, 0x9800) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r) + AM_RANGE(0xa000, 0xa000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END @@ -219,7 +219,7 @@ WRITE16_MEMBER(wwfsstar_state::scroll_w) WRITE16_MEMBER(wwfsstar_state::sound_w) { - soundlatch_byte_w(space, 1, data & 0xff); + m_soundlatch->write(space, 1, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE ); } @@ -437,6 +437,8 @@ static MACHINE_CONFIG_START( wwfsstar, wwfsstar_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.45) diff --git a/src/mame/drivers/wyvernf0.cpp b/src/mame/drivers/wyvernf0.cpp index 01c7bbd83ae..275538a4860 100644 --- a/src/mame/drivers/wyvernf0.cpp +++ b/src/mame/drivers/wyvernf0.cpp @@ -31,6 +31,7 @@ Actual game video: http://www.nicozon.net/watch/sm10823430 #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m6805/m6805.h" +#include "machine/gen_latch.h" #include "sound/ay8910.h" #include "sound/msm5232.h" @@ -47,7 +48,8 @@ public: m_audiocpu(*this, "audiocpu"), m_mcu(*this, "mcu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } // memory pointers required_shared_ptr<UINT8> m_bgram; @@ -96,6 +98,7 @@ public: optional_device<cpu_device> m_mcu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; }; @@ -352,7 +355,7 @@ TIMER_CALLBACK_MEMBER(wyvernf0_state::nmi_callback) WRITE8_MEMBER(wyvernf0_state::sound_command_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(wyvernf0_state::nmi_callback),this), data); } @@ -402,7 +405,7 @@ static ADDRESS_MAP_START( wyvernf0_map, AS_PROGRAM, 8, wyvernf0_state ) AM_RANGE(0xd606, 0xd606) AM_READ_PORT("JOY2") AM_RANGE(0xd607, 0xd607) AM_READ_PORT("FIRE2") - AM_RANGE(0xd610, 0xd610) AM_READWRITE(soundlatch_byte_r, sound_command_w) + AM_RANGE(0xd610, 0xd610) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(sound_command_w) // d613 write (FF -> 00 at boot) AM_RANGE(0xd800, 0xdbff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") @@ -419,7 +422,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, wyvernf0_state ) // ca00 write // cb00 write // cc00 write - AM_RANGE(0xd000, 0xd000) AM_READWRITE(soundlatch_byte_r, soundlatch_byte_w) + AM_RANGE(0xd000, 0xd000) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, write) AM_RANGE(0xd200, 0xd200) AM_WRITE(nmi_enable_w) AM_RANGE(0xd400, 0xd400) AM_WRITE(nmi_disable_w) AM_RANGE(0xd600, 0xd600) AM_RAM // VOL/BAL? @@ -663,6 +666,8 @@ static MACHINE_CONFIG_START( wyvernf0, wyvernf0_state ) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + // coin, fire, lift-off MCFG_SOUND_ADD("ay1", YM2149, 3000000) // YM2149 clock ??, pin 26 ?? MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) diff --git a/src/mame/drivers/x68k.cpp b/src/mame/drivers/x68k.cpp index 0ddfc818afe..9b2703c0863 100644 --- a/src/mame/drivers/x68k.cpp +++ b/src/mame/drivers/x68k.cpp @@ -1546,7 +1546,7 @@ MACHINE_START_MEMBER(x68k_state,x68000) address_space &space = m_maincpu->space(AS_PROGRAM); /* Install RAM handlers */ m_spriteram = (UINT16*)(memregion("user1")->base()); - space.install_readwrite_bank(0x000000,m_ram->size()-1,0xffffffff,0,"bank1"); + space.install_readwrite_bank(0x000000,m_ram->size()-1,"bank1"); membank("bank1")->set_base(m_ram->pointer()); // start mouse timer diff --git a/src/mame/drivers/xain.cpp b/src/mame/drivers/xain.cpp index 7566770d773..7f6bb5b2072 100644 --- a/src/mame/drivers/xain.cpp +++ b/src/mame/drivers/xain.cpp @@ -224,7 +224,7 @@ WRITE8_MEMBER(xain_state::cpuB_bankswitch_w) WRITE8_MEMBER(xain_state::sound_command_w) { - soundlatch_byte_w(space,offset,data); + m_soundlatch->write(space,offset,data); m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE); } @@ -438,7 +438,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, xain_state ) AM_RANGE(0x0000, 0x07ff) AM_RAM - AM_RANGE(0x1000, 0x1000) AM_READ(soundlatch_byte_r) + AM_RANGE(0x1000, 0x1000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x2800, 0x2801) AM_DEVWRITE("ym1", ym2203_device, write) AM_RANGE(0x3000, 0x3001) AM_DEVWRITE("ym2", ym2203_device, write) AM_RANGE(0x4000, 0xffff) AM_ROM @@ -610,6 +610,8 @@ static MACHINE_CONFIG_START( xsleena, xain_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ym1", YM2203, MCU_CLOCK) MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", M6809_FIRQ_LINE)) MCFG_SOUND_ROUTE(0, "mono", 0.50) diff --git a/src/mame/drivers/xbox.cpp b/src/mame/drivers/xbox.cpp index eda30d3003c..c49dde71548 100644 --- a/src/mame/drivers/xbox.cpp +++ b/src/mame/drivers/xbox.cpp @@ -59,6 +59,7 @@ void xbox_state::video_start() static ADDRESS_MAP_START(xbox_map, AS_PROGRAM, 32, xbox_state) AM_IMPORT_FROM(xbox_base_map) + AM_RANGE(0xff000000, 0xff0fffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x00f00000) ADDRESS_MAP_END static ADDRESS_MAP_START(xbox_map_io, AS_IO, 32, xbox_state) diff --git a/src/mame/drivers/xerox820.cpp b/src/mame/drivers/xerox820.cpp index 744d57a57b4..855b7b4f034 100644 --- a/src/mame/drivers/xerox820.cpp +++ b/src/mame/drivers/xerox820.cpp @@ -171,7 +171,7 @@ static ADDRESS_MAP_START( xerox820_io, AS_IO, 8, xerox820_state ) AM_RANGE(0x08, 0x0b) AM_MIRROR(0xff00) AM_DEVREADWRITE(Z80PIO_GP_TAG, z80pio_device, read_alt, write_alt) AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff03) AM_DEVWRITE(COM8116_TAG, com8116_device, stt_w) AM_RANGE(0x10, 0x13) AM_MIRROR(0xff00) AM_READWRITE(fdc_r, fdc_w) - AM_RANGE(0x14, 0x14) AM_MIRROR(0xff03) AM_MASK(0xff00) AM_WRITE(scroll_w) + AM_RANGE(0x14, 0x14) AM_MIRROR(0x0003) AM_SELECT(0xff00) AM_WRITE(scroll_w) AM_RANGE(0x18, 0x1b) AM_MIRROR(0xff00) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write) AM_RANGE(0x1c, 0x1f) AM_MIRROR(0xff00) AM_DEVREADWRITE(Z80PIO_KB_TAG, z80pio_device, read_alt, write_alt) ADDRESS_MAP_END diff --git a/src/mame/drivers/xor100.cpp b/src/mame/drivers/xor100.cpp index 05b81f316ac..71e0a9d1407 100644 --- a/src/mame/drivers/xor100.cpp +++ b/src/mame/drivers/xor100.cpp @@ -65,7 +65,7 @@ void xor100_state::bankswitch() program.unmap_write(0x0000, 0xffff); } - program.install_read_bank(0x0000, 0xf7ff, 0x07ff, 0, "bank2"); + program.install_read_bank(0x0000, 0x07ff, 0xf000, "bank2"); program.install_read_bank(0xf800, 0xffff, "bank3"); membank("bank2")->set_entry(0); membank("bank3")->set_entry(0); diff --git a/src/mame/drivers/xybots.cpp b/src/mame/drivers/xybots.cpp index 7f7114075de..eb46b3d5015 100644 --- a/src/mame/drivers/xybots.cpp +++ b/src/mame/drivers/xybots.cpp @@ -74,20 +74,20 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, xybots_state ) AM_RANGE(0x000000, 0x007fff) AM_MIRROR(0x7c0000) AM_ROM AM_RANGE(0x008000, 0x00ffff) AM_MIRROR(0x7c0000) AM_ROM /* slapstic maps here */ AM_RANGE(0x010000, 0x03ffff) AM_MIRROR(0x7c0000) AM_ROM - AM_RANGE(0xff8000, 0xff8fff) AM_MIRROR(0x7f8000) AM_RAM_DEVWRITE("alpha", tilemap_device, write) AM_SHARE("alpha") - AM_RANGE(0xff9000, 0xffadff) AM_MIRROR(0x7f8000) AM_RAM - AM_RANGE(0xffae00, 0xffafff) AM_MIRROR(0x7f8000) AM_RAM AM_SHARE("mob") - AM_RANGE(0xffb000, 0xffbfff) AM_MIRROR(0x7f8000) AM_RAM_DEVWRITE("playfield", tilemap_device, write) AM_SHARE("playfield") - AM_RANGE(0xffc000, 0xffc7ff) AM_MIRROR(0x7f8800) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - AM_RANGE(0xffd000, 0xffdfff) AM_MIRROR(0x7f8000) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff) - AM_RANGE(0xffe000, 0xffe0ff) AM_MIRROR(0x7f8000) AM_DEVREAD8("jsa", atari_jsa_i_device, main_response_r, 0x00ff) - AM_RANGE(0xffe100, 0xffe1ff) AM_MIRROR(0x7f8000) AM_READ_PORT("FFE100") - AM_RANGE(0xffe200, 0xffe2ff) AM_MIRROR(0x7f8000) AM_READ(special_port1_r) - AM_RANGE(0xffe800, 0xffe8ff) AM_MIRROR(0x7f8000) AM_DEVWRITE("eeprom", atari_eeprom_device, unlock_write) - AM_RANGE(0xffe900, 0xffe9ff) AM_MIRROR(0x7f8000) AM_DEVWRITE8("jsa", atari_jsa_i_device, main_command_w, 0x00ff) - AM_RANGE(0xffea00, 0xffeaff) AM_MIRROR(0x7f8000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) - AM_RANGE(0xffeb00, 0xffebff) AM_MIRROR(0x7f8000) AM_WRITE(video_int_ack_w) - AM_RANGE(0xffee00, 0xffeeff) AM_MIRROR(0x7f8000) AM_DEVWRITE("jsa", atari_jsa_i_device, sound_reset_w) + AM_RANGE(0x800000, 0x800fff) AM_MIRROR(0x7f8000) AM_RAM_DEVWRITE("alpha", tilemap_device, write) AM_SHARE("alpha") + AM_RANGE(0x801000, 0x802dff) AM_MIRROR(0x7f8000) AM_RAM + AM_RANGE(0x802e00, 0x802fff) AM_MIRROR(0x7f8000) AM_RAM AM_SHARE("mob") + AM_RANGE(0x803000, 0x803fff) AM_MIRROR(0x7f8000) AM_RAM_DEVWRITE("playfield", tilemap_device, write) AM_SHARE("playfield") + AM_RANGE(0x804000, 0x8047ff) AM_MIRROR(0x7f8800) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") + AM_RANGE(0x805000, 0x805fff) AM_MIRROR(0x7f8000) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff) + AM_RANGE(0x806000, 0x8060ff) AM_MIRROR(0x7f8000) AM_DEVREAD8("jsa", atari_jsa_i_device, main_response_r, 0x00ff) + AM_RANGE(0x806100, 0x8061ff) AM_MIRROR(0x7f8000) AM_READ_PORT("FFE100") + AM_RANGE(0x806200, 0x8062ff) AM_MIRROR(0x7f8000) AM_READ(special_port1_r) + AM_RANGE(0x806800, 0x8068ff) AM_MIRROR(0x7f8000) AM_DEVWRITE("eeprom", atari_eeprom_device, unlock_write) + AM_RANGE(0x806900, 0x8069ff) AM_MIRROR(0x7f8000) AM_DEVWRITE8("jsa", atari_jsa_i_device, main_command_w, 0x00ff) + AM_RANGE(0x806a00, 0x806aff) AM_MIRROR(0x7f8000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) + AM_RANGE(0x806b00, 0x806bff) AM_MIRROR(0x7f8000) AM_WRITE(video_int_ack_w) + AM_RANGE(0x806e00, 0x806eff) AM_MIRROR(0x7f8000) AM_DEVWRITE("jsa", atari_jsa_i_device, sound_reset_w) ADDRESS_MAP_END diff --git a/src/mame/drivers/yunsun16.cpp b/src/mame/drivers/yunsun16.cpp index e84541e2a90..198edee2ab4 100644 --- a/src/mame/drivers/yunsun16.cpp +++ b/src/mame/drivers/yunsun16.cpp @@ -71,7 +71,7 @@ Stephh's notes (based on the games M68000 code and some tests) : 4) 'bombkick' - DSW1 bits 3 and 4 determine difficulty (code at 0x0003a4). But DSW1 bit 4 is also used - in combinaison with DSW1 bit 5 to determine the number of special powers (code at 0x0003c2) ! + in combination with DSW1 bit 5 to determine the number of special powers (code at 0x0003c2) ! This means that you can have 2 or 3 special powers when you set difficulty to "Easy" or "Normal", but you'll ALWAYS have 3 special powers when you set difficulty to "Hard" or "Very Hard". - DSW2 bits 2 to 7 are checked when you select a level : @@ -143,7 +143,7 @@ number 0 on each voice. That sample is 00000-00000. */ if ((data & 0xff) != 0x3a) { - soundlatch_byte_w(space, 0, data & 0xff); + m_soundlatch->write(space, 0, data & 0xff); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -171,7 +171,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_port_map, AS_IO, 8, yunsun16_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x10, 0x11) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write) - AM_RANGE(0x18, 0x18) AM_READ(soundlatch_byte_r ) // From Main CPU + AM_RANGE(0x18, 0x18) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU AM_RANGE(0x1c, 0x1c) AM_DEVREADWRITE("oki", okim6295_device, read, write) // M6295 ADDRESS_MAP_END @@ -610,6 +610,8 @@ static MACHINE_CONFIG_START( magicbub, yunsun16_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_16MHz/4) MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80) diff --git a/src/mame/drivers/yunsung8.cpp b/src/mame/drivers/yunsung8.cpp index 282815bd235..8c1ef5f83ec 100644 --- a/src/mame/drivers/yunsung8.cpp +++ b/src/mame/drivers/yunsung8.cpp @@ -33,8 +33,8 @@ To Do: #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/3812intf.h" -#include "sound/msm5205.h" #include "includes/yunsung8.h" /*************************************************************************** @@ -78,7 +78,7 @@ static ADDRESS_MAP_START( port_map, AS_IO, 8, yunsung8_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_READ_PORT("SYSTEM") AM_WRITE(yunsung8_videobank_w) // video RAM bank AM_RANGE(0x01, 0x01) AM_READ_PORT("P1") AM_WRITE(yunsung8_bankswitch_w) // ROM Bank + Layers Enable - AM_RANGE(0x02, 0x02) AM_READ_PORT("P2") AM_WRITE(soundlatch_byte_w) // To Sound CPU + AM_RANGE(0x02, 0x02) AM_READ_PORT("P2") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) // To Sound CPU AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW1") AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW2") AM_RANGE(0x06, 0x06) AM_WRITE(yunsung8_flipscreen_w) // Flip Screen @@ -120,7 +120,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, yunsung8_state ) AM_RANGE(0xe400, 0xe400) AM_WRITE(yunsung8_adpcm_w) AM_RANGE(0xec00, 0xec01) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_byte_r) // From Main CPU + AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU ADDRESS_MAP_END @@ -510,6 +510,8 @@ static MACHINE_CONFIG_START( yunsung8, yunsung8_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_16MHz/4) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) @@ -558,7 +560,7 @@ Yun Sung, 1995 Sound CPU: Z80A Sound: Yamaha YM3812 + Oki M5205 + YM3014 DAC Video: QuickLogic FPGA - unknown type / model - OSC: 16MHz + 400Khz resontator + OSC: 16MHz + 400Khz resonator Memory: 2 x MCM2018AN45, 2 x HM6264, CXK5118PN-15L, GM76C28-10 & 6116 Misc: DSW1 is a 8 position dipswitch DSW2 is not populated @@ -645,7 +647,7 @@ Cannon Ball (vertical) Sound CPU: Z80A Sound: Yamaha YM3812 + Oki M5205 + YM3014 DAC Video: Cypress CY7C384A - Very high speed 6K gate CMOS FPGA - OSC: 16MHz + 400Khz resontator + OSC: 16MHz + 400Khz resonator Memory: 2 x MCM2018AN45, 2 x HM6264, CXK5118PN-15L, GM76C28-10 & 6116 Misc: DSW1 is a 8 position dipswitch DSW2 is not populated diff --git a/src/mame/drivers/z88.cpp b/src/mame/drivers/z88.cpp index a5ac22c648d..7abcc157620 100644 --- a/src/mame/drivers/z88.cpp +++ b/src/mame/drivers/z88.cpp @@ -109,16 +109,16 @@ UPD65031_MEMORY_UPDATE(z88_state::bankswitch_update) switch (bank) { case 0: - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0000, 0x3fff, 0, 0, read8_delegate(FUNC(z88_state::bank0_cart_r), this), write8_delegate(FUNC(z88_state::bank0_cart_w), this)); + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0000, 0x3fff, read8_delegate(FUNC(z88_state::bank0_cart_r), this), write8_delegate(FUNC(z88_state::bank0_cart_w), this)); break; case 1: - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x4000, 0x7fff, 0, 0, read8_delegate(FUNC(z88_state::bank1_cart_r), this), write8_delegate(FUNC(z88_state::bank1_cart_w), this)); + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x4000, 0x7fff, read8_delegate(FUNC(z88_state::bank1_cart_r), this), write8_delegate(FUNC(z88_state::bank1_cart_w), this)); break; case 2: - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x8000, 0xbfff, 0, 0, read8_delegate(FUNC(z88_state::bank2_cart_r), this), write8_delegate(FUNC(z88_state::bank2_cart_w), this)); + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x8000, 0xbfff, read8_delegate(FUNC(z88_state::bank2_cart_r), this), write8_delegate(FUNC(z88_state::bank2_cart_w), this)); break; case 3: - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc000, 0xffff, 0, 0, read8_delegate(FUNC(z88_state::bank3_cart_r), this), write8_delegate(FUNC(z88_state::bank3_cart_w), this)); + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc000, 0xffff, read8_delegate(FUNC(z88_state::bank3_cart_r), this), write8_delegate(FUNC(z88_state::bank3_cart_w), this)); break; } diff --git a/src/mame/drivers/zaxxon.cpp b/src/mame/drivers/zaxxon.cpp index ace1f3e2fbd..3da5c7365af 100644 --- a/src/mame/drivers/zaxxon.cpp +++ b/src/mame/drivers/zaxxon.cpp @@ -257,6 +257,7 @@ #include "cpu/z80/z80.h" #include "sound/sn76496.h" #include "sound/samples.h" +#include "machine/gen_latch.h" #include "machine/segacrpt_device.h" #include "machine/i8255.h" #include "audio/segasnd.h" @@ -487,7 +488,7 @@ static ADDRESS_MAP_START( congo_map, AS_PROGRAM, 8, zaxxon_state ) AM_RANGE(0xc027, 0xc027) AM_MIRROR(0x1fc0) AM_WRITE(congo_color_bank_w) AM_RANGE(0xc028, 0xc029) AM_MIRROR(0x1fc4) AM_WRITE(zaxxon_bg_position_w) AM_RANGE(0xc030, 0xc033) AM_MIRROR(0x1fc4) AM_WRITE(congo_sprite_custom_w) - AM_RANGE(0xc038, 0xc03f) AM_MIRROR(0x1fc0) AM_WRITE(soundlatch_byte_w) + AM_RANGE(0xc038, 0xc03f) AM_MIRROR(0x1fc0) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) ADDRESS_MAP_END @@ -1019,7 +1020,7 @@ static MACHINE_CONFIG_DERIVED( congo, root ) MCFG_DEVICE_REMOVE("ppi8255") MCFG_DEVICE_ADD("ppi8255", I8255A, 0) - MCFG_I8255_IN_PORTA_CB(READ8(driver_device, soundlatch_byte_r)) + MCFG_I8255_IN_PORTA_CB(DEVREAD8("soundlatch", generic_latch_8_device, read)) MCFG_I8255_OUT_PORTB_CB(WRITE8(zaxxon_state, congo_sound_b_w)) MCFG_I8255_OUT_PORTC_CB(WRITE8(zaxxon_state, congo_sound_c_w)) @@ -1039,6 +1040,8 @@ static MACHINE_CONFIG_DERIVED( congo, root ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SOUND_ADD("sn1", SN76489A, SOUND_CLOCK) // schematic shows sn76489A MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) @@ -1555,9 +1558,9 @@ DRIVER_INIT_MEMBER(zaxxon_state,razmataz) address_space &pgmspace = m_maincpu->space(AS_PROGRAM); /* additional input ports are wired */ - pgmspace.install_read_port(0xc004, 0xc004, 0, 0x18f3, "SW04"); - pgmspace.install_read_port(0xc008, 0xc008, 0, 0x18f3, "SW08"); - pgmspace.install_read_port(0xc00c, 0xc00c, 0, 0x18f3, "SW0C"); + pgmspace.install_read_port(0xc004, 0xc004, 0x18f3, "SW04"); + pgmspace.install_read_port(0xc008, 0xc008, 0x18f3, "SW08"); + pgmspace.install_read_port(0xc00c, 0xc00c, 0x18f3, "SW0C"); /* unknown behavior expected here */ pgmspace.install_read_handler(0xc80a, 0xc80a, read8_delegate(FUNC(zaxxon_state::razmataz_counter_r),this)); diff --git a/src/mame/drivers/zn.cpp b/src/mame/drivers/zn.cpp index caf7941fd06..af028f14eae 100644 --- a/src/mame/drivers/zn.cpp +++ b/src/mame/drivers/zn.cpp @@ -23,6 +23,7 @@ #include "machine/zndip.h" #include "machine/ataintf.h" #include "machine/vt83c461.h" +#include "machine/gen_latch.h" #include "audio/taitosnd.h" #include "sound/2610intf.h" #include "sound/ymz280b.h" @@ -52,6 +53,8 @@ public: m_mb3773(*this, "mb3773"), m_zoom(*this, "taito_zoom"), m_vt83c461(*this, "ide"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch16(*this, "soundlatch16"), m_cat702_1_dataout(1), m_cat702_2_dataout(1), m_zndip_dataout(1) @@ -112,7 +115,6 @@ public: DECLARE_MACHINE_RESET(coh1001l); DECLARE_MACHINE_RESET(coh1002v); DECLARE_MACHINE_RESET(coh1002m); - DECLARE_WRITE_LINE_MEMBER(irqhandler); INTERRUPT_GEN_MEMBER(qsound_interrupt); void atpsx_dma_read(UINT32 *p_n_psxram, UINT32 n_address, INT32 n_size ); void atpsx_dma_write(UINT32 *p_n_psxram, UINT32 n_address, INT32 n_size ); @@ -145,6 +147,8 @@ private: optional_device<mb3773_device> m_mb3773; optional_device<taito_zoom_device> m_zoom; optional_device<vt83c461_device> m_vt83c461; + optional_device<generic_latch_8_device> m_soundlatch; + optional_device<generic_latch_16_device> m_soundlatch16; int m_cat702_1_dataout; int m_cat702_2_dataout; @@ -358,6 +362,8 @@ static MACHINE_CONFIG_START( zn1_1mb_vram, zn_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SPU_ADD( "spu", XTAL_67_7376MHz/2 ) MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) MCFG_SOUND_ROUTE(1, "rspeaker", 0.35) @@ -402,6 +408,8 @@ static MACHINE_CONFIG_START( zn2, zn_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_SPU_ADD( "spu", XTAL_67_7376MHz/2 ) MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) MCFG_SOUND_ROUTE(1, "rspeaker", 0.35) @@ -547,7 +555,7 @@ INTERRUPT_GEN_MEMBER(zn_state::qsound_interrupt) WRITE8_MEMBER(zn_state::zn_qsound_w) { - soundlatch_byte_w(space, 0, data); + m_soundlatch->write(space, 0, data); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } @@ -585,7 +593,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( qsound_portmap, AS_IO, 8, zn_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r) + AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) ADDRESS_MAP_END static MACHINE_CONFIG_DERIVED( coh1000c, zn1_1mb_vram ) @@ -1095,11 +1103,6 @@ static ADDRESS_MAP_START( fx1a_sound_map, AS_PROGRAM, 8, zn_state ) AM_RANGE(0xf200, 0xf200) AM_WRITE(fx1a_sound_bankswitch_w) ADDRESS_MAP_END -/* handler called by the YM2610 emulator when the internal timers cause an IRQ */ -WRITE_LINE_MEMBER(zn_state::irqhandler) -{ - m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); -} static MACHINE_CONFIG_DERIVED( coh1000ta, zn1_1mb_vram ) MCFG_CPU_MODIFY("maincpu") @@ -1110,7 +1113,7 @@ static MACHINE_CONFIG_DERIVED( coh1000ta, zn1_1mb_vram ) MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000ta) MCFG_SOUND_ADD("ymsnd", YM2610B, XTAL_16MHz/2) - MCFG_YM2610_IRQ_HANDLER(WRITELINE(zn_state, irqhandler)) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) @@ -1629,7 +1632,7 @@ WRITE8_MEMBER(zn_state::coh1002e_sound_irq_w) static ADDRESS_MAP_START(coh1002e_map, AS_PROGRAM, 32, zn_state) AM_RANGE(0x1f000000, 0x1f7fffff) AM_ROMBANK("bankedroms") AM_RANGE(0x1fa10300, 0x1fa10303) AM_WRITE8(coh1002e_bank_w, 0x000000ff) - AM_RANGE(0x1fb00000, 0x1fb00003) AM_WRITE8(soundlatch_byte_w, 0x000000ff) + AM_RANGE(0x1fb00000, 0x1fb00003) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x000000ff) AM_RANGE(0x1fb00004, 0x1fb00007) AM_WRITE8(coh1002e_sound_irq_w, 0x000000ff) AM_IMPORT_FROM(zn_map) @@ -1644,7 +1647,7 @@ static ADDRESS_MAP_START( psarc_snd_map, AS_PROGRAM, 16, zn_state ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x080000, 0x0fffff) AM_RAM AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE8("ymf", ymf271_device, read, write, 0x00ff ) - AM_RANGE(0x180008, 0x180009) AM_READ8(soundlatch_byte_r, 0x00ff ) + AM_RANGE(0x180008, 0x180009) AM_DEVREAD8("soundlatch", generic_latch_8_device, read, 0x00ff ) AM_RANGE(0x000000, 0x07ffff) AM_WRITENOP AM_RANGE(0x100020, 0xffffff) AM_WRITENOP ADDRESS_MAP_END @@ -2263,7 +2266,7 @@ WRITE16_MEMBER(zn_state::coh1001l_sound_unk_w) WRITE16_MEMBER(zn_state::coh1001l_latch_w) { - soundlatch_word_w(space, 0, data); + m_soundlatch16->write(space, 0, data); m_audiocpu->set_input_line(3, HOLD_LINE); } @@ -2287,7 +2290,7 @@ MACHINE_RESET_MEMBER(zn_state,coh1001l) static ADDRESS_MAP_START( atlus_snd_map, AS_PROGRAM, 16, zn_state ) AM_RANGE(0x000000, 0x03ffff) AM_ROM - AM_RANGE(0x100000, 0x100001) AM_READWRITE(soundlatch_word_r, coh1001l_sound_unk_w) + AM_RANGE(0x100000, 0x100001) AM_DEVREAD("soundlatch16", generic_latch_16_device, read) AM_WRITE(coh1001l_sound_unk_w) AM_RANGE(0x200000, 0x200003) AM_DEVREADWRITE8("ymz", ymz280b_device, read, write, 0x00ff) AM_RANGE(0x700000, 0x70ffff) AM_RAM ADDRESS_MAP_END @@ -2302,6 +2305,8 @@ static MACHINE_CONFIG_DERIVED(coh1001l, zn1_2mb_vram) MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1001l) + MCFG_GENERIC_LATCH_16_ADD("soundlatch16") + MCFG_SOUND_ADD("ymz", YMZ280B, XTAL_16_9344MHz) MCFG_YMZ280B_IRQ_HANDLER(INPUTLINE("audiocpu", 2)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) diff --git a/src/mame/drivers/zr107.cpp b/src/mame/drivers/zr107.cpp index 2b07dbee0d1..9396d1c0b70 100644 --- a/src/mame/drivers/zr107.cpp +++ b/src/mame/drivers/zr107.cpp @@ -496,23 +496,23 @@ WRITE32_MEMBER(zr107_state::jetwave_palette_w) } static ADDRESS_MAP_START( jetwave_map, AS_PROGRAM, 32, zr107_state ) - AM_RANGE(0x00000000, 0x000fffff) AM_MIRROR(0x80000000) AM_RAM /* Work RAM */ - AM_RANGE(0x74000000, 0x740000ff) AM_MIRROR(0x80000000) AM_DEVREADWRITE("k001604", k001604_device, reg_r, reg_w) - AM_RANGE(0x74010000, 0x7401ffff) AM_MIRROR(0x80000000) AM_RAM_WRITE(jetwave_palette_w) AM_SHARE("paletteram") - AM_RANGE(0x74020000, 0x7403ffff) AM_MIRROR(0x80000000) AM_DEVREADWRITE("k001604", k001604_device, tile_r, tile_w) - AM_RANGE(0x74040000, 0x7407ffff) AM_MIRROR(0x80000000) AM_DEVREADWRITE("k001604", k001604_device, char_r, char_w) - AM_RANGE(0x78000000, 0x7800ffff) AM_MIRROR(0x80000000) AM_DEVREADWRITE("konppc", konppc_device, cgboard_dsp_shared_r_ppc, cgboard_dsp_shared_w_ppc) /* 21N 21K 23N 23K */ - AM_RANGE(0x78010000, 0x7801ffff) AM_MIRROR(0x80000000) AM_DEVWRITE("konppc", konppc_device, cgboard_dsp_shared_w_ppc) - AM_RANGE(0x78040000, 0x7804000f) AM_MIRROR(0x80000000) AM_DEVREADWRITE("k001006_1", k001006_device, read, write) - AM_RANGE(0x78080000, 0x7808000f) AM_MIRROR(0x80000000) AM_DEVREADWRITE("k001006_2", k001006_device, read, write) - AM_RANGE(0x780c0000, 0x780c0007) AM_MIRROR(0x80000000) AM_DEVREADWRITE("konppc", konppc_device, cgboard_dsp_comm_r_ppc, cgboard_dsp_comm_w_ppc) - AM_RANGE(0x7e000000, 0x7e003fff) AM_MIRROR(0x80000000) AM_READWRITE8(sysreg_r, sysreg_w, 0xffffffff) - AM_RANGE(0x7e008000, 0x7e009fff) AM_MIRROR(0x80000000) AM_DEVREADWRITE8("k056230", k056230_device, read, write, 0xffffffff) /* LANC registers */ - AM_RANGE(0x7e00a000, 0x7e00bfff) AM_MIRROR(0x80000000) AM_DEVREADWRITE("k056230", k056230_device, lanc_ram_r, lanc_ram_w) /* LANC Buffer RAM (27E) */ - AM_RANGE(0x7e00c000, 0x7e00c00f) AM_MIRROR(0x80000000) AM_DEVREADWRITE8("k056800", k056800_device, host_r, host_w, 0xffffffff) - AM_RANGE(0x7f000000, 0x7f3fffff) AM_MIRROR(0x80000000) AM_ROM AM_REGION("user2", 0) - AM_RANGE(0x7f800000, 0x7f9fffff) AM_MIRROR(0x80000000) AM_ROM AM_SHARE("share2") - AM_RANGE(0x7fe00000, 0x7fffffff) AM_MIRROR(0x80000000) AM_ROM AM_REGION("user1", 0) AM_SHARE("share2") /* Program ROM */ + AM_RANGE(0x00000000, 0x000fffff) AM_RAM /* Work RAM */ + AM_RANGE(0x74000000, 0x740000ff) AM_DEVREADWRITE("k001604", k001604_device, reg_r, reg_w) + AM_RANGE(0x74010000, 0x7401ffff) AM_RAM_WRITE(jetwave_palette_w) AM_SHARE("paletteram") + AM_RANGE(0x74020000, 0x7403ffff) AM_DEVREADWRITE("k001604", k001604_device, tile_r, tile_w) + AM_RANGE(0x74040000, 0x7407ffff) AM_DEVREADWRITE("k001604", k001604_device, char_r, char_w) + AM_RANGE(0x78000000, 0x7800ffff) AM_DEVREADWRITE("konppc", konppc_device, cgboard_dsp_shared_r_ppc, cgboard_dsp_shared_w_ppc) /* 21N 21K 23N 23K */ + AM_RANGE(0x78010000, 0x7801ffff) AM_DEVWRITE("konppc", konppc_device, cgboard_dsp_shared_w_ppc) + AM_RANGE(0x78040000, 0x7804000f) AM_DEVREADWRITE("k001006_1", k001006_device, read, write) + AM_RANGE(0x78080000, 0x7808000f) AM_DEVREADWRITE("k001006_2", k001006_device, read, write) + AM_RANGE(0x780c0000, 0x780c0007) AM_DEVREADWRITE("konppc", konppc_device, cgboard_dsp_comm_r_ppc, cgboard_dsp_comm_w_ppc) + AM_RANGE(0x7e000000, 0x7e003fff) AM_READWRITE8(sysreg_r, sysreg_w, 0xffffffff) + AM_RANGE(0x7e008000, 0x7e009fff) AM_DEVREADWRITE8("k056230", k056230_device, read, write, 0xffffffff) /* LANC registers */ + AM_RANGE(0x7e00a000, 0x7e00bfff) AM_DEVREADWRITE("k056230", k056230_device, lanc_ram_r, lanc_ram_w) /* LANC Buffer RAM (27E) */ + AM_RANGE(0x7e00c000, 0x7e00c00f) AM_DEVREADWRITE8("k056800", k056800_device, host_r, host_w, 0xffffffff) + AM_RANGE(0x7f000000, 0x7f3fffff) AM_ROM AM_REGION("user2", 0) + AM_RANGE(0x7f800000, 0x7f9fffff) AM_ROM AM_SHARE("share2") + AM_RANGE(0x7fe00000, 0x7fffffff) AM_ROM AM_REGION("user1", 0) AM_SHARE("share2") /* Program ROM */ ADDRESS_MAP_END diff --git a/src/mame/includes/40love.h b/src/mame/includes/40love.h index 4cccbd9a040..48da17e5960 100644 --- a/src/mame/includes/40love.h +++ b/src/mame/includes/40love.h @@ -1,6 +1,8 @@ // license:GPL-2.0+ // copyright-holders:Jarek Burczynski + #include "machine/buggychl.h" +#include "machine/gen_latch.h" #include "sound/msm5232.h" class fortyl_state : public driver_device @@ -20,7 +22,8 @@ public: m_bmcu(*this, "bmcu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_videoram; @@ -77,6 +80,7 @@ public: required_device<msm5232_device> m_msm; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE8_MEMBER(sound_command_w); DECLARE_WRITE8_MEMBER(nmi_disable_w); diff --git a/src/mame/includes/8080bw.h b/src/mame/includes/8080bw.h index cf8dde7cb7a..25bffc62151 100644 --- a/src/mame/includes/8080bw.h +++ b/src/mame/includes/8080bw.h @@ -106,12 +106,21 @@ public: DECLARE_WRITE8_MEMBER(invmulti_eeprom_w); DECLARE_WRITE8_MEMBER(invmulti_bank_w); + DECLARE_READ8_MEMBER(rollingc_scattered_colorram_r); + DECLARE_WRITE8_MEMBER(rollingc_scattered_colorram_w); + DECLARE_READ8_MEMBER(rollingc_scattered_colorram2_r); + DECLARE_WRITE8_MEMBER(rollingc_scattered_colorram2_w); + DECLARE_READ8_MEMBER(schaser_scattered_colorram_r); + DECLARE_WRITE8_MEMBER(schaser_scattered_colorram_w); + DECLARE_DRIVER_INIT(invmulti); DECLARE_DRIVER_INIT(spacecom); DECLARE_DRIVER_INIT(vortex); DECLARE_DRIVER_INIT(attackfc); DECLARE_MACHINE_START(extra_8080bw); + DECLARE_MACHINE_START(rollingc); + DECLARE_MACHINE_START(sflush); DECLARE_MACHINE_START(schaser); DECLARE_MACHINE_RESET(schaser); DECLARE_MACHINE_START(polaris); diff --git a/src/mame/includes/abc80x.h b/src/mame/includes/abc80x.h index da86422f50d..f4235dd7864 100644 --- a/src/mame/includes/abc80x.h +++ b/src/mame/includes/abc80x.h @@ -42,7 +42,7 @@ #define ABC806_ATTR_RAM_SIZE 0x800 #define ABC806_VIDEO_RAM_SIZE 0x20000 -#define ABC800_CHAR_WIDTH 12 +#define ABC800_CHAR_WIDTH 6 #define ABC800_CCLK ABC800_X01/ABC800_CHAR_WIDTH #define SCREEN_TAG "screen" diff --git a/src/mame/includes/aerofgt.h b/src/mame/includes/aerofgt.h index a5b8583791e..75e9d14053e 100644 --- a/src/mame/includes/aerofgt.h +++ b/src/mame/includes/aerofgt.h @@ -1,8 +1,11 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria + +#include "machine/gen_latch.h" #include "video/vsystem_spr.h" #include "video/vsystem_spr2.h" #include "sound/okim6295.h" +#include "sound/upd7759.h" class aerofgt_state : public driver_device { @@ -17,14 +20,16 @@ public: m_spriteram2(*this, "spriteram2"), m_spriteram3(*this, "spriteram3"), m_tx_tilemap_ram(*this, "tx_tilemap_ram"), - m_spr(*this, "vsystem_spr"), - m_spr_old(*this, "vsystem_spr_old"), - m_spr_old2(*this, "vsystem_spr_ol2"), - m_audiocpu(*this, "audiocpu"), m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), m_oki(*this, "oki"), + m_upd7759(*this, "upd"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_spr(*this, "vsystem_spr"), + m_spr_old(*this, "vsystem_spr_old"), + m_spr_old2(*this, "vsystem_spr_ol2"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT16> m_bg1videoram; @@ -37,9 +42,17 @@ public: optional_shared_ptr<UINT16> m_tx_tilemap_ram; /* devices referenced above */ + required_device<cpu_device> m_maincpu; + optional_device<cpu_device> m_audiocpu; + optional_device<okim6295_device> m_oki; + optional_device<upd7759_device> m_upd7759; // karatblzbl + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; optional_device<vsystem_spr_device> m_spr; // only the aerofgt parent uses this chip optional_device<vsystem_spr2_device> m_spr_old; // every other (non-bootleg) uses this optional_device<vsystem_spr2_device> m_spr_old2; // or a pair of them.. + optional_device<generic_latch_8_device> m_soundlatch; + /* video-related */ @@ -64,9 +77,6 @@ public: /* misc */ int m_pending_command; - /* other devices */ - optional_device<cpu_device> m_audiocpu; - /* handlers */ DECLARE_WRITE16_MEMBER(sound_command_w); DECLARE_WRITE16_MEMBER(turbofrc_sound_command_w); @@ -92,6 +102,8 @@ public: DECLARE_WRITE16_MEMBER(wbbc97_bitmap_enable_w); DECLARE_WRITE16_MEMBER(pspikesb_oki_banking_w); DECLARE_WRITE16_MEMBER(aerfboo2_okim6295_banking_w); + DECLARE_WRITE8_MEMBER(karatblzbl_d7759_write_port_0_w); + DECLARE_WRITE8_MEMBER(karatblzbl_d7759_reset_w); TILE_GET_INFO_MEMBER(get_pspikes_tile_info); TILE_GET_INFO_MEMBER(karatblz_bg1_tile_info); TILE_GET_INFO_MEMBER(karatblz_bg2_tile_info); @@ -125,8 +137,4 @@ public: void spikes91_draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); void aerfboot_draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); void wbbc97_draw_bitmap( bitmap_rgb32 &bitmap ); - required_device<cpu_device> m_maincpu; - optional_device<okim6295_device> m_oki; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; }; diff --git a/src/mame/includes/amspdwy.h b/src/mame/includes/amspdwy.h index 079b811b7f6..a969761c664 100644 --- a/src/mame/includes/amspdwy.h +++ b/src/mame/includes/amspdwy.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/gen_latch.h" #include "sound/2151intf.h" class amspdwy_state : public driver_device @@ -21,7 +22,8 @@ public: m_ym2151(*this, "ymsnd"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ @@ -36,6 +38,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; /* video-related */ tilemap_t *m_bg_tilemap; diff --git a/src/mame/includes/angelkds.h b/src/mame/includes/angelkds.h index 22ebca1505e..0865c845c70 100644 --- a/src/mame/includes/angelkds.h +++ b/src/mame/includes/angelkds.h @@ -63,7 +63,6 @@ public: virtual void video_start() override; UINT32 screen_update_angelkds(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int enable_n); - DECLARE_WRITE_LINE_MEMBER(irqhandler); required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; optional_shared_ptr<UINT8> m_decrypted_opcodes; diff --git a/src/mame/includes/ashnojoe.h b/src/mame/includes/ashnojoe.h index 028ccdd650a..76470f3e568 100644 --- a/src/mame/includes/ashnojoe.h +++ b/src/mame/includes/ashnojoe.h @@ -1,10 +1,13 @@ // license:BSD-3-Clause // copyright-holders:David Haywood + /************************************************************************* Success Joe / Ashita no Joe *************************************************************************/ + +#include "machine/gen_latch.h" #include "sound/msm5205.h" class ashnojoe_state : public driver_device @@ -20,10 +23,11 @@ public: m_tileram_7(*this, "tileram_7"), m_tileram(*this, "tileram"), m_tilemap_reg(*this, "tilemap_reg"), - m_audiocpu(*this, "audiocpu"), m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), m_msm(*this, "msm"), - m_gfxdecode(*this, "gfxdecode") { } + m_gfxdecode(*this, "gfxdecode"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ UINT16 * m_tileram_1; @@ -51,7 +55,12 @@ public: int m_msm5205_vclk_toggle; /* devices */ + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; + required_device<msm5205_device> m_msm; + required_device<gfxdecode_device> m_gfxdecode; + required_device<generic_latch_8_device> m_soundlatch; + DECLARE_READ16_MEMBER(fake_4a00a_r); DECLARE_WRITE16_MEMBER(ashnojoe_soundlatch_w); DECLARE_WRITE8_MEMBER(adpcm_w); @@ -80,9 +89,5 @@ public: virtual void machine_reset() override; virtual void video_start() override; UINT32 screen_update_ashnojoe(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(ym2203_irq_handler); DECLARE_WRITE_LINE_MEMBER(ashnojoe_vclk_cb); - required_device<cpu_device> m_maincpu; - required_device<msm5205_device> m_msm; - required_device<gfxdecode_device> m_gfxdecode; }; diff --git a/src/mame/includes/asuka.h b/src/mame/includes/asuka.h index 5e824c3da78..35d2a21d1c2 100644 --- a/src/mame/includes/asuka.h +++ b/src/mame/includes/asuka.h @@ -81,7 +81,6 @@ public: DECLARE_WRITE16_MEMBER( bonzeadv_cchip_ctrl_w ); DECLARE_WRITE16_MEMBER( bonzeadv_cchip_bank_w ); DECLARE_WRITE16_MEMBER( bonzeadv_cchip_ram_w ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); DECLARE_WRITE_LINE_MEMBER(asuka_msm5205_vck); protected: diff --git a/src/mame/includes/atarigx2.h b/src/mame/includes/atarigx2.h index e0393e3b22e..1cf61d8ecac 100644 --- a/src/mame/includes/atarigx2.h +++ b/src/mame/includes/atarigx2.h @@ -7,8 +7,8 @@ *************************************************************************/ #include "machine/atarigen.h" +#include "machine/atarixga.h" #include "audio/atarijsa.h" -#include "includes/slapstic.h" class atarigx2_state : public atarigen_state @@ -17,8 +17,8 @@ public: atarigx2_state(const machine_config &mconfig, device_type type, const char *tag) : atarigen_state(mconfig, type, tag), m_jsa(*this, "jsa"), + m_xga(*this, "xga"), m_mo_command(*this, "mo_command"), - m_protection_base(*this, "protection_base"), m_playfield_tilemap(*this, "playfield"), m_alpha_tilemap(*this, "alpha"), m_rle(*this, "rle") @@ -27,9 +27,9 @@ public: UINT16 m_playfield_base; required_device<atari_jsa_iiis_device> m_jsa; + required_device<atari_xga_device> m_xga; required_shared_ptr<UINT32> m_mo_command; - required_shared_ptr<UINT32> m_protection_base; required_device<tilemap_device> m_playfield_tilemap; required_device<tilemap_device> m_alpha_tilemap; @@ -41,8 +41,10 @@ public: UINT16 m_playfield_xscroll; UINT16 m_playfield_yscroll; + // LEGACY PROTECTION UINT16 m_last_write; UINT16 m_last_write_offset; + UINT32 m_protection_ram[0x1000]; virtual void update_interrupts() override; virtual void scanline_update(screen_device &screen, int scanline) override; diff --git a/src/mame/includes/aztarac.h b/src/mame/includes/aztarac.h index 45cb076ec3c..2525c707f24 100644 --- a/src/mame/includes/aztarac.h +++ b/src/mame/includes/aztarac.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/gen_latch.h" #include "video/vector.h" class aztarac_state : public driver_device @@ -17,6 +18,7 @@ public: m_audiocpu(*this, "audiocpu"), m_vector(*this, "vector"), m_screen(*this, "screen"), + m_soundlatch(*this, "soundlatch"), m_nvram(*this, "nvram") , m_vectorram(*this, "vectorram") { } @@ -24,6 +26,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<vector_device> m_vector; required_device<screen_device> m_screen; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_nvram; required_shared_ptr<UINT16> m_vectorram; diff --git a/src/mame/includes/bbusters.h b/src/mame/includes/bbusters.h index c2c4526502f..ed50f90ff56 100644 --- a/src/mame/includes/bbusters.h +++ b/src/mame/includes/bbusters.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Bryan McPhail + +#include "machine/gen_latch.h" #include "video/bufsprite.h" class bbusters_state : public driver_device @@ -12,6 +14,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_spriteram(*this, "spriteram"), m_spriteram2(*this, "spriteram2"), + m_soundlatch(*this, "soundlatch"), m_eprom_data(*this, "eeprom"), m_ram(*this, "ram"), m_videoram(*this, "videoram"), @@ -25,6 +28,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<buffered_spriteram16_device> m_spriteram; optional_device<buffered_spriteram16_device> m_spriteram2; + required_device<generic_latch_8_device> m_soundlatch; optional_shared_ptr<UINT16> m_eprom_data; required_shared_ptr<UINT16> m_ram; diff --git a/src/mame/includes/bking.h b/src/mame/includes/bking.h index c6776381cb0..84303d17071 100644 --- a/src/mame/includes/bking.h +++ b/src/mame/includes/bking.h @@ -1,6 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Mike Balfour, Zsolt Vasvari + #include "machine/buggychl.h" +#include "machine/gen_latch.h" class bking_state : public driver_device { @@ -13,7 +15,8 @@ public: m_bmcu(*this, "bmcu"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_playfield_ram; @@ -53,6 +56,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; #if 0 /* 68705 */ diff --git a/src/mame/includes/blktiger.h b/src/mame/includes/blktiger.h index c464103385e..8bec4aec309 100644 --- a/src/mame/includes/blktiger.h +++ b/src/mame/includes/blktiger.h @@ -69,7 +69,6 @@ public: virtual void video_start() override; UINT32 screen_update_blktiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; diff --git a/src/mame/includes/blockout.h b/src/mame/includes/blockout.h index 81758b92397..740c0f39a4f 100644 --- a/src/mame/includes/blockout.h +++ b/src/mame/includes/blockout.h @@ -1,11 +1,14 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria + /*************************************************************************** Blockout ***************************************************************************/ +#include "machine/gen_latch.h" + class blockout_state : public driver_device { public: @@ -17,7 +20,8 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT16> m_videoram; @@ -33,6 +37,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE_LINE_MEMBER(irq_handler); DECLARE_WRITE16_MEMBER(blockout_sound_command_w); diff --git a/src/mame/includes/bublbobl.h b/src/mame/includes/bublbobl.h index c308ac921b5..a638ce54b35 100644 --- a/src/mame/includes/bublbobl.h +++ b/src/mame/includes/bublbobl.h @@ -1,6 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Chris Moore, Nicola Salmoria +#include "machine/gen_latch.h" + class bublbobl_state : public driver_device { public: @@ -20,7 +22,8 @@ public: m_audiocpu(*this, "audiocpu"), m_slave(*this, "slave"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"){ } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_videoram; @@ -71,6 +74,7 @@ public: required_device<cpu_device> m_slave; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE8_MEMBER(bublbobl_bankswitch_w); DECLARE_WRITE8_MEMBER(tokio_bankswitch_w); @@ -127,7 +131,6 @@ public: UINT32 screen_update_bublbobl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(bublbobl_m68705_interrupt); void configure_banks( ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; diff --git a/src/mame/includes/buggychl.h b/src/mame/includes/buggychl.h index f55343b1122..0e9fbc09b01 100644 --- a/src/mame/includes/buggychl.h +++ b/src/mame/includes/buggychl.h @@ -5,6 +5,7 @@ */ #include "machine/buggychl.h" +#include "machine/gen_latch.h" #include "sound/msm5232.h" class buggychl_state : public driver_device @@ -24,7 +25,8 @@ public: m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette") , + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_charram; @@ -57,7 +59,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; - + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE8_MEMBER(bankswitch_w); DECLARE_WRITE8_MEMBER(sound_command_w); diff --git a/src/mame/includes/cave.h b/src/mame/includes/cave.h index 938a4757559..187444027fa 100644 --- a/src/mame/includes/cave.h +++ b/src/mame/includes/cave.h @@ -1,11 +1,14 @@ // license:BSD-3-Clause // copyright-holders:Luca Elia + /*************************************************************************** Cave hardware ***************************************************************************/ + #include "machine/eepromser.h" +#include "machine/gen_latch.h" #include "machine/nmk112.h" #include "sound/okim6295.h" @@ -46,7 +49,8 @@ public: m_eeprom(*this, "eeprom"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ optional_shared_ptr_array<UINT16, 4> m_videoregs; @@ -131,6 +135,8 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + optional_device<generic_latch_16_device> m_soundlatch; + int m_rasflag; int m_old_rasflag; DECLARE_READ16_MEMBER(cave_irq_cause_r); @@ -238,7 +244,6 @@ public: void cave_get_sprite_info(int chip); void cave_get_sprite_info_all(); void sailormn_tilebank_w(int bank); - DECLARE_WRITE_LINE_MEMBER(irqhandler); DECLARE_WRITE_LINE_MEMBER(sound_irq_gen); void update_irq_state(); void unpack_sprites(const char *region); diff --git a/src/mame/includes/compgolf.h b/src/mame/includes/compgolf.h index d2d8c2e5816..bf7870e434f 100644 --- a/src/mame/includes/compgolf.h +++ b/src/mame/includes/compgolf.h @@ -49,7 +49,6 @@ public: UINT32 screen_update_compgolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); void compgolf_expand_bg(); - DECLARE_WRITE_LINE_MEMBER(sound_irq); required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; diff --git a/src/mame/includes/cps1.h b/src/mame/includes/cps1.h index 67ecdfee2b9..b0196409ed1 100644 --- a/src/mame/includes/cps1.h +++ b/src/mame/includes/cps1.h @@ -370,6 +370,7 @@ public: DECLARE_WRITE8_MEMBER(knightsb_snd_bankswitch_w); DECLARE_WRITE8_MEMBER(fcrash_msm5205_0_data_w); DECLARE_WRITE8_MEMBER(fcrash_msm5205_1_data_w); + DECLARE_WRITE16_MEMBER(varthb_layer_w); UINT32 screen_update_fcrash(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void fcrash_update_transmasks(); void fcrash_render_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -425,6 +426,7 @@ INPUT_PORTS_EXTERN( knights ); INPUT_PORTS_EXTERN( punisher ); INPUT_PORTS_EXTERN( sf2 ); INPUT_PORTS_EXTERN( slammast ); +INPUT_PORTS_EXTERN( varth ); #endif diff --git a/src/mame/includes/crshrace.h b/src/mame/includes/crshrace.h index eb809fbceba..f8a2a58e0f6 100644 --- a/src/mame/includes/crshrace.h +++ b/src/mame/includes/crshrace.h @@ -1,6 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria + #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "video/bufsprite.h" #include "video/vsystem_spr.h" #include "video/k053936.h" @@ -13,14 +15,15 @@ public: m_videoram1(*this, "videoram1"), m_videoram2(*this, "videoram2"), m_z80bank(*this, "bank1"), + m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), + m_spr(*this, "vsystem_spr"), m_k053936(*this, "k053936"), m_spriteram(*this, "spriteram"), m_spriteram2(*this, "spriteram2"), - m_spr(*this, "vsystem_spr"), - m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT16> m_videoram1; @@ -28,11 +31,15 @@ public: required_memory_bank m_z80bank; + required_device<cpu_device> m_maincpu; required_device<z80_device> m_audiocpu; + required_device<vsystem_spr_device> m_spr; required_device<k053936_device> m_k053936; required_device<buffered_spriteram16_device> m_spriteram; required_device<buffered_spriteram16_device> m_spriteram2; - required_device<vsystem_spr_device> m_spr; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; /* video-related */ tilemap_t *m_tilemap1; @@ -65,8 +72,4 @@ public: void screen_eof_crshrace(screen_device &screen, bool state); void draw_bg( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); void draw_fg(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(irqhandler); - required_device<cpu_device> m_maincpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; }; diff --git a/src/mame/includes/darius.h b/src/mame/includes/darius.h index 526ab5899e9..9283d55ca5f 100644 --- a/src/mame/includes/darius.h +++ b/src/mame/includes/darius.h @@ -132,6 +132,5 @@ public: void update_psg0( int port ); void update_psg1( int port ); void update_da( ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); DECLARE_WRITE_LINE_MEMBER(darius_adpcm_int); }; diff --git a/src/mame/includes/dcheese.h b/src/mame/includes/dcheese.h index d8c9455f899..981adefe6d6 100644 --- a/src/mame/includes/dcheese.h +++ b/src/mame/includes/dcheese.h @@ -1,11 +1,14 @@ // license:BSD-3-Clause // copyright-holders:Aaron Giles + /*************************************************************************** HAR MadMax hardware **************************************************************************/ +#include "machine/gen_latch.h" +#include "sound/bsmt2000.h" class dcheese_state : public driver_device { @@ -20,7 +23,9 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), - m_screen(*this, "screen") { } + m_screen(*this, "screen"), + m_bsmt(*this, "bsmt"), + m_soundlatch(*this, "soundlatch") { } /* video-related */ UINT16 m_blitter_color[2]; @@ -41,7 +46,9 @@ public: required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; required_device<screen_device> m_screen; - device_t *m_bsmt; + required_device<bsmt2000_device> m_bsmt; + required_device<generic_latch_8_device> m_soundlatch; + DECLARE_WRITE16_MEMBER(eeprom_control_w); DECLARE_WRITE16_MEMBER(sound_command_w); DECLARE_READ8_MEMBER(sound_command_r); diff --git a/src/mame/includes/ddragon.h b/src/mame/includes/ddragon.h index 1c5d203856d..ca4547434a1 100644 --- a/src/mame/includes/ddragon.h +++ b/src/mame/includes/ddragon.h @@ -5,6 +5,8 @@ Double Dragon & Double Dragon II (but also China Gate) *************************************************************************/ + +#include "machine/gen_latch.h" #include "sound/msm5205.h" class ddragon_state : public driver_device @@ -27,7 +29,8 @@ public: m_adpcm2(*this, "adpcm2"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ optional_shared_ptr<UINT8> m_rambase; @@ -77,6 +80,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; int scanline_to_vcount(int scanline); diff --git a/src/mame/includes/ddragon3.h b/src/mame/includes/ddragon3.h index 5513ca9076f..dc7079000bf 100644 --- a/src/mame/includes/ddragon3.h +++ b/src/mame/includes/ddragon3.h @@ -1,10 +1,13 @@ // license:BSD-3-Clause // copyright-holders:Bryan McPhail, David Haywood + /************************************************************************* Double Dragon 3 & The Combatribes *************************************************************************/ + +#include "machine/gen_latch.h" #include "sound/okim6295.h" #include "video/bufsprite.h" @@ -22,8 +25,8 @@ public: m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") - + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { vblank_level = 6; raster_level = 5; @@ -60,6 +63,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE16_MEMBER(ddragon3_io_w); DECLARE_WRITE16_MEMBER(ddragon3_scroll_w); diff --git a/src/mame/includes/dec0.h b/src/mame/includes/dec0.h index 523310a82b8..b7884b4a540 100644 --- a/src/mame/includes/dec0.h +++ b/src/mame/includes/dec0.h @@ -80,8 +80,6 @@ public: DECLARE_WRITE16_MEMBER(dec0_update_sprites_w); DECLARE_WRITE16_MEMBER(dec0_priority_w); DECLARE_READ16_MEMBER(ffantasybl_242024_r); - DECLARE_WRITE_LINE_MEMBER(sound_irq); - DECLARE_WRITE_LINE_MEMBER(sound_irq2); DECLARE_DRIVER_INIT(robocop); DECLARE_DRIVER_INIT(hippodrm); diff --git a/src/mame/includes/divebomb.h b/src/mame/includes/divebomb.h new file mode 100644 index 00000000000..b254be2b5d0 --- /dev/null +++ b/src/mame/includes/divebomb.h @@ -0,0 +1,91 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood, Phil Bennett +/************************************************************************* + + Kyuukoukabakugekitai - Dive Bomber Squad + +*************************************************************************/ + +#include "cpu/z80/z80.h" +#include "sound/sn76496.h" +#include "video/k051316.h" + +#define XTAL1 XTAL_24MHz + +class divebomb_state : public driver_device +{ +public: + divebomb_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_spritecpu(*this, "spritecpu"), + m_fgcpu(*this, "fgcpu"), + m_rozcpucpu(*this, "rozcpu"), + m_bank1(*this, "bank1"), + m_fgram(*this, "fgram"), + m_spriteram(*this, "spriteram"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_k051316_1(*this, "k051316_1"), + m_k051316_2(*this, "k051316_2") + { } + + required_device<cpu_device> m_spritecpu; + required_device<cpu_device> m_fgcpu; + required_device<cpu_device> m_rozcpucpu; + required_memory_bank m_bank1; + required_shared_ptr<UINT8> m_fgram; + required_shared_ptr<UINT8> m_spriteram; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; + required_device<k051316_device> m_k051316_1; + required_device<k051316_device> m_k051316_2; + + tilemap_t *m_fg_tilemap; + UINT8 to_spritecpu; + UINT8 to_rozcpu; + UINT8 from_sprite; + UINT8 from_roz; + bool has_fromsprite; + bool has_fromroz; + + UINT8 roz_pal; + bool roz1_enable; + bool roz2_enable; + bool roz1_wrap; + bool roz2_wrap; + + DECLARE_MACHINE_RESET(divebomb); + DECLARE_MACHINE_START(divebomb); + DECLARE_VIDEO_START(divebomb); + DECLARE_PALETTE_INIT(divebomb); + + void update_irqs(); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); + void decode_proms(const UINT8* rgn, int size, int index, bool inv); + UINT32 screen_update_divebomb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + K051316_CB_MEMBER(zoom_callback_1); + K051316_CB_MEMBER(zoom_callback_2); + + TILE_GET_INFO_MEMBER(get_fg_tile_info); + + DECLARE_READ8_MEMBER(fgcpu_roz_comm_r); + DECLARE_WRITE8_MEMBER(fgcpu_roz_comm_w); + DECLARE_READ8_MEMBER(fgcpu_spr_comm_r); + DECLARE_WRITE8_MEMBER(fgcpu_spr_comm_w); + DECLARE_READ8_MEMBER(fgcpu_comm_flags_r); + DECLARE_WRITE8_MEMBER(fgram_w); + + DECLARE_WRITE8_MEMBER(spritecpu_port00_w); + DECLARE_READ8_MEMBER(spritecpu_comm_r); + DECLARE_WRITE8_MEMBER(spritecpu_comm_w); + + DECLARE_WRITE8_MEMBER(rozcpu_bank_w); + DECLARE_WRITE8_MEMBER(rozcpu_wrap1_enable_w); + DECLARE_WRITE8_MEMBER(rozcpu_enable1_w); + DECLARE_WRITE8_MEMBER(rozcpu_enable2_w); + DECLARE_WRITE8_MEMBER(rozcpu_wrap2_enable_w); + DECLARE_READ8_MEMBER(rozcpu_comm_r); + DECLARE_WRITE8_MEMBER(rozcpu_comm_w); + DECLARE_WRITE8_MEMBER(rozcpu_pal_w); +}; diff --git a/src/mame/includes/esd16.h b/src/mame/includes/esd16.h index 7a683d5d39b..5b381152e61 100644 --- a/src/mame/includes/esd16.h +++ b/src/mame/includes/esd16.h @@ -7,6 +7,7 @@ ***************************************************************************/ #include "machine/eepromser.h" +#include "machine/gen_latch.h" #include "video/decospr.h" class esd16_state : public driver_device @@ -26,7 +27,8 @@ public: m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_sprgen(*this, "spritegen"), - m_eeprom(*this, "eeprom") + m_eeprom(*this, "eeprom"), + m_soundlatch(*this, "soundlatch") {} /* memory pointers */ @@ -53,6 +55,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; optional_device<decospr_device> m_sprgen; optional_device<eeprom_serial_93cxx_device> m_eeprom; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE16_MEMBER(esd16_sound_command_w); DECLARE_WRITE16_MEMBER(hedpanic_platform_w); diff --git a/src/mame/includes/f1gp.h b/src/mame/includes/f1gp.h index ac790335d6f..0158b778e7b 100644 --- a/src/mame/includes/f1gp.h +++ b/src/mame/includes/f1gp.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria + +#include "machine/gen_latch.h" #include "video/vsystem_spr.h" #include "video/vsystem_spr2.h" #include "video/k053936.h" @@ -22,14 +24,15 @@ public: m_fgregs(*this, "fgregs"), m_rozregs(*this, "rozregs"), m_z80bank(*this, "bank1"), + m_maincpu(*this, "maincpu"), m_spr_old(*this, "vsystem_spr_old"), m_spr_old2(*this, "vsystem_spr_ol2"), m_spr(*this, "vsystem_spr"), - m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_audiocpu(*this, "audiocpu"), m_k053936(*this, "k053936"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT16> m_sharedram; @@ -47,12 +50,6 @@ public: optional_memory_bank m_z80bank; - /* devices referenced above */ - optional_device<vsystem_spr2_device> m_spr_old; // f1gp - optional_device<vsystem_spr2_device> m_spr_old2; // f1gp - optional_device<vsystem_spr_device> m_spr; // f1gp2 - - UINT16 * m_zoomdata; /* video-related */ @@ -71,10 +68,14 @@ public: /* devices */ required_device<cpu_device> m_maincpu; + optional_device<vsystem_spr2_device> m_spr_old; // f1gp + optional_device<vsystem_spr2_device> m_spr_old2; // f1gp + optional_device<vsystem_spr_device> m_spr; // f1gp2 required_device<gfxdecode_device> m_gfxdecode; optional_device<cpu_device> m_audiocpu; optional_device<k053936_device> m_k053936; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; // not f1gpb DECLARE_WRITE8_MEMBER(f1gp_sh_bankswitch_w); DECLARE_WRITE16_MEMBER(sound_command_w); @@ -102,5 +103,4 @@ public: UINT32 screen_update_f1gpb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_f1gp2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void f1gpb_draw_sprites( screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); }; diff --git a/src/mame/includes/flstory.h b/src/mame/includes/flstory.h index f8ec570fa43..7637e018390 100644 --- a/src/mame/includes/flstory.h +++ b/src/mame/includes/flstory.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria + +#include "machine/gen_latch.h" #include "sound/msm5232.h" class flstory_state : public driver_device @@ -16,7 +18,8 @@ public: m_mcu(*this, "mcu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_videoram; @@ -66,6 +69,7 @@ public: required_device<msm5232_device> m_msm; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; /* mcu */ UINT8 m_mcu_cmd; diff --git a/src/mame/includes/fromanc2.h b/src/mame/includes/fromanc2.h index 8041c7974f3..870a2404a2f 100644 --- a/src/mame/includes/fromanc2.h +++ b/src/mame/includes/fromanc2.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Takahiro Nogi, Uki + +#include "machine/gen_latch.h" #include "machine/eepromser.h" class fromanc2_state : public driver_device @@ -13,7 +15,9 @@ public: m_eeprom(*this, "eeprom"), m_gfxdecode(*this, "gfxdecode"), m_lpalette(*this, "lpalette"), - m_rpalette(*this, "rpalette") { } + m_rpalette(*this, "rpalette"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2") { } /* memory pointers */ std::unique_ptr<UINT16[]> m_videoram[2][4]; @@ -42,6 +46,9 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_lpalette; required_device<palette_device> m_rpalette; + required_device<generic_latch_8_device> m_soundlatch; + required_device<generic_latch_8_device> m_soundlatch2; + DECLARE_WRITE16_MEMBER(fromanc2_sndcmd_w); DECLARE_WRITE16_MEMBER(fromanc2_portselect_w); DECLARE_READ16_MEMBER(fromanc2_keymatrix_r); @@ -110,5 +117,4 @@ public: inline void fromancr_vram_w(offs_t offset, UINT16 data, UINT16 mem_mask, int layer ); void fromancr_gfxbank_w( int data ); inline void fromanc4_vram_w( offs_t offset, UINT16 data, UINT16 mem_mask, int layer ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); }; diff --git a/src/mame/includes/gaiden.h b/src/mame/includes/gaiden.h index d96d1e27826..b9dffc53e7d 100644 --- a/src/mame/includes/gaiden.h +++ b/src/mame/includes/gaiden.h @@ -1,11 +1,13 @@ // license:BSD-3-Clause // copyright-holders:Phil Stroffolino + /*************************************************************************** Ninja Gaiden ***************************************************************************/ +#include "machine/gen_latch.h" #include "video/tecmo_spr.h" #include "video/tecmo_mix.h" @@ -18,13 +20,14 @@ public: m_videoram2(*this, "videoram2"), m_videoram3(*this, "videoram3"), m_spriteram(*this, "spriteram"), - m_audiocpu(*this, "audiocpu"), m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), m_sprgen(*this, "spritegen"), - m_mixer(*this, "mixer") + m_mixer(*this, "mixer"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ @@ -58,7 +61,15 @@ public: const int *m_raiga_jumppoints; /* devices */ + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; + required_device<gfxdecode_device> m_gfxdecode; + required_device<screen_device> m_screen; + required_device<palette_device> m_palette; + optional_device<tecmo_spr_device> m_sprgen; + optional_device<tecmo_mix_device> m_mixer; + required_device<generic_latch_8_device> m_soundlatch; + DECLARE_WRITE16_MEMBER(gaiden_sound_command_w); DECLARE_WRITE16_MEMBER(drgnbowl_sound_command_w); DECLARE_WRITE16_MEMBER(wildfang_protection_w); @@ -100,11 +111,4 @@ public: void drgnbowl_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void descramble_drgnbowl(int descramble_cpu); void descramble_mastninj_gfx(UINT8* src); - DECLARE_WRITE_LINE_MEMBER(irqhandler); - required_device<cpu_device> m_maincpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<screen_device> m_screen; - required_device<palette_device> m_palette; - optional_device<tecmo_spr_device> m_sprgen; - optional_device<tecmo_mix_device> m_mixer; }; diff --git a/src/mame/includes/gladiatr.h b/src/mame/includes/gladiatr.h index 06813718742..07097be9b01 100644 --- a/src/mame/includes/gladiatr.h +++ b/src/mame/includes/gladiatr.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Victor Trucco,Steve Ellenoff,Phil Stroffolino,Tatsuyuki Satoh,Tomasz Slanina,Nicola Salmoria + +#include "machine/gen_latch.h" #include "sound/msm5205.h" class gladiatr_state : public driver_device @@ -13,6 +15,7 @@ public: m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_nvram(*this, "nvram") , m_spriteram(*this, "spriteram"), m_videoram(*this, "videoram"), @@ -26,6 +29,7 @@ public: required_device<msm5205_device> m_msm; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_nvram; required_shared_ptr<UINT8> m_spriteram; diff --git a/src/mame/includes/goal92.h b/src/mame/includes/goal92.h index a1b6a996e0f..1df735acf23 100644 --- a/src/mame/includes/goal92.h +++ b/src/mame/includes/goal92.h @@ -5,7 +5,10 @@ Goal! '92 *************************************************************************/ + +#include "machine/gen_latch.h" #include "sound/msm5205.h" + class goal92_state : public driver_device { public: @@ -16,11 +19,12 @@ public: m_tx_data(*this, "tx_data"), m_spriteram(*this, "spriteram"), m_scrollram(*this, "scrollram"), - m_audiocpu(*this, "audiocpu"), m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT16> m_bg_data; @@ -41,7 +45,13 @@ public: int m_adpcm_toggle; /* devices */ + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; + required_device<msm5205_device> m_msm; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; + DECLARE_WRITE16_MEMBER(goal92_sound_command_w); DECLARE_READ16_MEMBER(goal92_inputs_r); DECLARE_WRITE8_MEMBER(adpcm_data_w); @@ -62,8 +72,4 @@ public: void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int pri ); DECLARE_WRITE_LINE_MEMBER(irqhandler); DECLARE_WRITE_LINE_MEMBER(goal92_adpcm_int); - required_device<cpu_device> m_maincpu; - required_device<msm5205_device> m_msm; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; }; diff --git a/src/mame/includes/grchamp.h b/src/mame/includes/grchamp.h index 04d70341b0a..af20e887316 100644 --- a/src/mame/includes/grchamp.h +++ b/src/mame/includes/grchamp.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/discrete.h" @@ -22,6 +23,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_screen(*this, "screen"), + m_soundlatch(*this, "soundlatch"), m_radarram(*this, "radarram"), m_videoram(*this, "videoram"), m_spriteram(*this, "spriteram"), @@ -37,6 +39,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; required_device<screen_device> m_screen; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_radarram; required_shared_ptr<UINT8> m_videoram; diff --git a/src/mame/includes/gstriker.h b/src/mame/includes/gstriker.h index 7491fe1aa40..68e9bbdbc66 100644 --- a/src/mame/includes/gstriker.h +++ b/src/mame/includes/gstriker.h @@ -1,8 +1,10 @@ // license:BSD-3-Clause // copyright-holders:Farfetch'd, David Haywood + #ifndef __GSTRIKER_H #define __GSTRIKER_H +#include "machine/gen_latch.h" #include "video/vsystem_spr.h" #include "video/mb60553.h" #include "video/vs920a.h" @@ -22,6 +24,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_CG10103_m_vram(*this, "cg10103_m_vram"), m_work_ram(*this, "work_ram"), m_mixerregs1(*this, "mixerregs1"), @@ -36,6 +39,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_CG10103_m_vram; required_shared_ptr<UINT16> m_work_ram; diff --git a/src/mame/includes/gsword.h b/src/mame/includes/gsword.h index 014cc175082..c8caa962bfb 100644 --- a/src/mame/includes/gsword.h +++ b/src/mame/includes/gsword.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Steve Ellenoff,Jarek Parchanski + +#include "machine/gen_latch.h" #include "sound/ay8910.h" #include "sound/msm5205.h" @@ -16,6 +18,7 @@ public: m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_spritetile_ram(*this, "spritetile_ram"), m_spritexy_ram(*this, "spritexy_ram"), m_spriteattrib_ram(*this, "spriteattram"), @@ -30,6 +33,7 @@ public: optional_device<msm5205_device> m_msm; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; // not josvolly required_shared_ptr<UINT8> m_spritetile_ram; required_shared_ptr<UINT8> m_spritexy_ram; diff --git a/src/mame/includes/himesiki.h b/src/mame/includes/himesiki.h index 5412e564b2a..4a5338cf56d 100644 --- a/src/mame/includes/himesiki.h +++ b/src/mame/includes/himesiki.h @@ -1,11 +1,14 @@ // license:BSD-3-Clause // copyright-holders:Uki + /************************************************************************* Himeshikibu *************************************************************************/ +#include "machine/gen_latch.h" + class himesiki_state : public driver_device { public: @@ -14,10 +17,11 @@ public: m_bg_ram(*this, "bg_ram"), m_spriteram_p103a(*this, "sprram_p103a"), m_spriteram(*this, "spriteram"), - m_subcpu(*this, "sub"), m_maincpu(*this, "maincpu"), + m_subcpu(*this, "sub"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_bg_ram; @@ -32,7 +36,12 @@ public: int m_flipscreen; /* devices */ + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_subcpu; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; + DECLARE_WRITE8_MEMBER(himesiki_rombank_w); DECLARE_WRITE8_MEMBER(himesiki_sound_w); DECLARE_WRITE8_MEMBER(himesiki_bg_ram_w); @@ -44,7 +53,4 @@ public: virtual void video_start() override; UINT32 screen_update_himesiki(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void himesiki_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - required_device<cpu_device> m_maincpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; }; diff --git a/src/mame/includes/homedata.h b/src/mame/includes/homedata.h index 084bdecb8cb..94b55813073 100644 --- a/src/mame/includes/homedata.h +++ b/src/mame/includes/homedata.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Phil Stroffolino, Nicola Salmoria + +#include "machine/gen_latch.h" #include "sound/dac.h" #include "sound/sn76496.h" #include "sound/2203intf.h" @@ -16,7 +18,9 @@ public: m_dac(*this, "dac"), m_ymsnd(*this, "ymsnd"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), + m_sn(*this, "snsnd") { } @@ -53,7 +57,9 @@ public: optional_device<ym2203_device> m_ymsnd; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; - sn76489a_device *m_sn; + optional_device<generic_latch_8_device> m_soundlatch; // mrokumei + optional_device<sn76489a_device> m_sn; // mrokumei and pteacher + UINT8 m_prot_data; DECLARE_READ8_MEMBER(mrokumei_keyboard_r); DECLARE_WRITE8_MEMBER(mrokumei_keyboard_select_w); diff --git a/src/mame/includes/inufuku.h b/src/mame/includes/inufuku.h index 24ed3325158..772d4a6754d 100644 --- a/src/mame/includes/inufuku.h +++ b/src/mame/includes/inufuku.h @@ -1,6 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Takahiro Nogi +#include "machine/gen_latch.h" + class inufuku_state : public driver_device { public: @@ -11,11 +13,12 @@ public: m_tx_videoram(*this, "tx_videoram"), m_spriteram1(*this, "spriteram1"), m_spriteram2(*this, "spriteram2"), - m_spr(*this, "vsystem_spr"), - m_audiocpu(*this, "audiocpu"), m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_spr(*this, "vsystem_spr"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT16> m_bg_videoram; @@ -23,7 +26,6 @@ public: required_shared_ptr<UINT16> m_tx_videoram; required_shared_ptr<UINT16> m_spriteram1; required_shared_ptr<UINT16> m_spriteram2; - required_device<vsystem_spr_device> m_spr; /* video-related */ tilemap_t *m_bg_tilemap; @@ -42,7 +44,13 @@ public: UINT16 m_pending_command; /* devices */ + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; + required_device<vsystem_spr_device> m_spr; + required_device<generic_latch_8_device> m_soundlatch; + DECLARE_WRITE16_MEMBER(inufuku_soundcommand_w); DECLARE_WRITE8_MEMBER(pending_command_clear_w); DECLARE_WRITE8_MEMBER(inufuku_soundrombank_w); @@ -60,8 +68,4 @@ public: virtual void video_start() override; UINT32 screen_update_inufuku(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void screen_eof_inufuku(screen_device &screen, bool state); - DECLARE_WRITE_LINE_MEMBER(irqhandler); - required_device<cpu_device> m_maincpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; }; diff --git a/src/mame/includes/kncljoe.h b/src/mame/includes/kncljoe.h index cafa96ed3da..2bcf5405658 100644 --- a/src/mame/includes/kncljoe.h +++ b/src/mame/includes/kncljoe.h @@ -6,6 +6,9 @@ *************************************************************************/ +#include "machine/gen_latch.h" +#include "sound/ay8910.h" + class kncljoe_state : public driver_device { public: @@ -14,11 +17,13 @@ public: m_videoram(*this, "videoram"), m_scrollregs(*this, "scrollregs"), m_spriteram(*this, "spriteram"), - m_soundcpu(*this, "soundcpu"), m_maincpu(*this, "maincpu"), + m_soundcpu(*this, "soundcpu"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_ay8910(*this, "aysnd"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_videoram; @@ -36,7 +41,14 @@ public: UINT8 m_port2; /* devices */ + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_soundcpu; + required_device<gfxdecode_device> m_gfxdecode; + required_device<screen_device> m_screen; + required_device<palette_device> m_palette; + required_device<ay8910_device> m_ay8910; + required_device<generic_latch_8_device> m_soundlatch; + DECLARE_WRITE8_MEMBER(sound_cmd_w); DECLARE_WRITE8_MEMBER(sound_irq_ack_w); DECLARE_WRITE8_MEMBER(kncljoe_videoram_w); @@ -55,8 +67,4 @@ public: UINT32 screen_update_kncljoe(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(sound_nmi); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - required_device<cpu_device> m_maincpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<screen_device> m_screen; - required_device<palette_device> m_palette; }; diff --git a/src/mame/includes/ksayakyu.h b/src/mame/includes/ksayakyu.h index 0f6873d8e7a..1000b18628a 100644 --- a/src/mame/includes/ksayakyu.h +++ b/src/mame/includes/ksayakyu.h @@ -1,11 +1,14 @@ // license:LGPL-2.1+ // copyright-holders:Tomasz Slanina + /************************************************************************* Kusayakyuu *************************************************************************/ +#include "machine/gen_latch.h" + class ksayakyu_state : public driver_device { public: @@ -15,7 +18,8 @@ public: m_spriteram(*this, "spriteram"), m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_videoram; @@ -49,4 +53,5 @@ public: required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; }; diff --git a/src/mame/includes/ladyfrog.h b/src/mame/includes/ladyfrog.h index 39114c577dd..e35efa73b13 100644 --- a/src/mame/includes/ladyfrog.h +++ b/src/mame/includes/ladyfrog.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/gen_latch.h" #include "sound/msm5232.h" class ladyfrog_state : public driver_device @@ -15,11 +16,12 @@ public: : driver_device(mconfig, type, tag), m_videoram(*this, "videoram"), m_scrlram(*this, "scrlram"), - m_audiocpu(*this, "audiocpu"), m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_videoram; @@ -41,7 +43,13 @@ public: UINT8 m_snd_data; /* devices */ + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; + required_device<msm5232_device> m_msm; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; + DECLARE_READ8_MEMBER(from_snd_r); DECLARE_WRITE8_MEMBER(to_main_w); DECLARE_WRITE8_MEMBER(sound_cpu_reset_w); @@ -69,8 +77,4 @@ public: UINT32 screen_update_ladyfrog(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(nmi_callback); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - required_device<cpu_device> m_maincpu; - required_device<msm5232_device> m_msm; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; }; diff --git a/src/mame/includes/lasso.h b/src/mame/includes/lasso.h index 617f03aeba9..fd241605c37 100644 --- a/src/mame/includes/lasso.h +++ b/src/mame/includes/lasso.h @@ -6,6 +6,7 @@ ***************************************************************************/ +#include "machine/gen_latch.h" #include "sound/sn76496.h" class lasso_state : public driver_device @@ -26,7 +27,8 @@ public: m_sn_1(*this, "sn76489.1"), m_sn_2(*this, "sn76489.2"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_videoram; @@ -51,6 +53,7 @@ public: optional_device<sn76489_device> m_sn_2; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE8_MEMBER(sound_command_w); DECLARE_READ8_MEMBER(sound_status_r); diff --git a/src/mame/includes/lastduel.h b/src/mame/includes/lastduel.h index aea3a4785b7..8d28eaf8762 100644 --- a/src/mame/includes/lastduel.h +++ b/src/mame/includes/lastduel.h @@ -73,5 +73,4 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(lastduel_timer_cb); TIMER_DEVICE_CALLBACK_MEMBER(madgear_timer_cb); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int pri ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); }; diff --git a/src/mame/includes/legionna.h b/src/mame/includes/legionna.h index 9ed3a94ada2..5305b00cd82 100644 --- a/src/mame/includes/legionna.h +++ b/src/mame/includes/legionna.h @@ -1,7 +1,9 @@ // license:BSD-3-Clause // copyright-holders:David Graves, Angelo Salese, David Haywood, Tomasz Slanina + #include "sound/okim6295.h" #include "audio/seibu.h" +#include "machine/gen_latch.h" #include "machine/raiden2cop.h" #include "video/seibu_crtc.h" @@ -21,6 +23,7 @@ public: m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_wordswapram(*this, "wordswapram"), m_raiden2cop(*this, "raiden2cop") { @@ -93,6 +96,7 @@ public: required_device<okim6295_device> m_oki; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; optional_shared_ptr<UINT16> m_wordswapram; optional_device<raiden2cop_device> m_raiden2cop; diff --git a/src/mame/includes/lkage.h b/src/mame/includes/lkage.h index 863e84b1f5e..b6d8fb3e84e 100644 --- a/src/mame/includes/lkage.h +++ b/src/mame/includes/lkage.h @@ -1,6 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Phil Stroffolino +#include "machine/gen_latch.h" + class lkage_state : public driver_device { public: @@ -14,7 +16,8 @@ public: m_audiocpu(*this, "audiocpu"), m_mcu(*this, "mcu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } required_shared_ptr<UINT8> m_vreg; required_shared_ptr<UINT8> m_scroll; @@ -60,6 +63,7 @@ public: optional_device<cpu_device> m_mcu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE8_MEMBER(lkage_sound_command_w); DECLARE_WRITE8_MEMBER(lkage_sh_nmi_disable_w); @@ -94,5 +98,4 @@ public: UINT32 screen_update_lkage(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(nmi_callback); void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); }; diff --git a/src/mame/includes/lsasquad.h b/src/mame/includes/lsasquad.h index 17f4c2faf16..6b18f73bcf4 100644 --- a/src/mame/includes/lsasquad.h +++ b/src/mame/includes/lsasquad.h @@ -76,5 +76,4 @@ public: int draw_layer_daikaiju( bitmap_ind16 &bitmap, const rectangle &cliprect, int offs, int * previd, int type ); void drawbg( bitmap_ind16 &bitmap, const rectangle &cliprect, int type ); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); }; diff --git a/src/mame/includes/mainsnk.h b/src/mame/includes/mainsnk.h index e1240a8d8c2..e6f183aef31 100644 --- a/src/mame/includes/mainsnk.h +++ b/src/mame/includes/mainsnk.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:David Haywood, Tomasz Slanina + +#include "machine/gen_latch.h" + class mainsnk_state : public driver_device { public: @@ -9,6 +12,7 @@ public: m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_bgram(*this, "bgram"), m_spriteram(*this, "spriteram"), m_fgram(*this, "fgram") { } @@ -17,6 +21,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_bgram; required_shared_ptr<UINT8> m_spriteram; diff --git a/src/mame/includes/matmania.h b/src/mame/includes/matmania.h index af41168bed5..f5d8c419b36 100644 --- a/src/mame/includes/matmania.h +++ b/src/mame/includes/matmania.h @@ -1,6 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Brad Oliver +#include "machine/gen_latch.h" + class matmania_state : public driver_device { public: @@ -21,7 +23,8 @@ public: m_mcu(*this, "mcu"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ @@ -43,6 +46,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; /* video-related */ std::unique_ptr<bitmap_ind16> m_tmpbitmap; diff --git a/src/mame/includes/mcatadv.h b/src/mame/includes/mcatadv.h index bcb990b392c..cda3058f832 100644 --- a/src/mame/includes/mcatadv.h +++ b/src/mame/includes/mcatadv.h @@ -1,6 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Paul Priest, David Haywood +#include "machine/gen_latch.h" #include "machine/watchdog.h" class mcatadv_state : public driver_device @@ -18,7 +19,8 @@ public: m_soundcpu(*this, "soundcpu"), m_watchdog(*this, "watchdog"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT16> m_videoram1; @@ -42,6 +44,7 @@ public: required_device<watchdog_timer_device> m_watchdog; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE16_MEMBER(mcat_soundlatch_w); DECLARE_READ16_MEMBER(mcat_wd_r); @@ -56,5 +59,4 @@ public: void screen_eof_mcatadv(screen_device &screen, bool state); void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); void mcatadv_draw_tilemap_part( screen_device &screen, UINT16* current_scroll, UINT16* current_videoram1, int i, tilemap_t* current_tilemap, bitmap_ind16 &bitmap, const rectangle &cliprect ); - DECLARE_WRITE_LINE_MEMBER(sound_irq); }; diff --git a/src/mame/includes/model2.h b/src/mame/includes/model2.h index 1330c1245e2..eee82ff360a 100644 --- a/src/mame/includes/model2.h +++ b/src/mame/includes/model2.h @@ -53,7 +53,7 @@ public: required_shared_ptr<UINT32> m_lumaram; optional_shared_ptr<UINT16> m_soundram; optional_shared_ptr<UINT32> m_tgp_program; - optional_shared_ptr<UINT32> m_tgpx4_program; + optional_shared_ptr<UINT64> m_tgpx4_program; required_device<i960_cpu_device> m_maincpu; optional_device<dsbz80_device> m_dsbz80; // Z80-based MPEG Digital Sound Board diff --git a/src/mame/includes/msisaac.h b/src/mame/includes/msisaac.h index 23453743854..513948fa1df 100644 --- a/src/mame/includes/msisaac.h +++ b/src/mame/includes/msisaac.h @@ -1,7 +1,10 @@ // license:GPL-2.0+ // copyright-holders:Jarek Burczynski + #include "machine/buggychl.h" +#include "machine/gen_latch.h" #include "sound/msm5232.h" + /* Disabled because the mcu dump is currently unavailable. -AS */ //#define USE_MCU @@ -19,7 +22,8 @@ public: m_bmcu(*this, "bmcu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_spriteram; @@ -58,6 +62,7 @@ public: required_device<msm5232_device> m_msm; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE8_MEMBER(sound_command_w); DECLARE_WRITE8_MEMBER(nmi_disable_w); diff --git a/src/mame/includes/munchmo.h b/src/mame/includes/munchmo.h index 6606f5591ab..a0ae8bb3b18 100644 --- a/src/mame/includes/munchmo.h +++ b/src/mame/includes/munchmo.h @@ -6,6 +6,8 @@ *************************************************************************/ +#include "machine/gen_latch.h" + class munchmo_state : public driver_device { public: @@ -20,7 +22,8 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"){ } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_sprite_xpos; @@ -43,6 +46,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE8_MEMBER(mnchmobl_nmi_enable_w); DECLARE_WRITE8_MEMBER(mnchmobl_soundlatch_w); diff --git a/src/mame/includes/mw8080bw.h b/src/mame/includes/mw8080bw.h index 833b5bf1d32..cba4f5307d8 100644 --- a/src/mame/includes/mw8080bw.h +++ b/src/mame/includes/mw8080bw.h @@ -88,6 +88,9 @@ public: UINT8 m_spcenctr_bright_control; UINT8 m_spcenctr_brightness; + std::unique_ptr<UINT8[]> m_scattered_colorram; + std::unique_ptr<UINT8[]> m_scattered_colorram2; + /* timer */ emu_timer *m_interrupt_timer; diff --git a/src/mame/includes/ninjakd2.h b/src/mame/includes/ninjakd2.h index 39a95953216..a4317a54e26 100644 --- a/src/mame/includes/ninjakd2.h +++ b/src/mame/includes/ninjakd2.h @@ -123,5 +123,4 @@ public: void update_sprites(); void lineswap_gfx_roms(const char *region, const int bit); void gfx_unscramble(); - DECLARE_WRITE_LINE_MEMBER(irqhandler); }; diff --git a/src/mame/includes/nycaptor.h b/src/mame/includes/nycaptor.h index 893014050cd..cd6e03f18b3 100644 --- a/src/mame/includes/nycaptor.h +++ b/src/mame/includes/nycaptor.h @@ -1,5 +1,7 @@ // license:LGPL-2.1+ // copyright-holders:Tomasz Slanina + +#include "machine/gen_latch.h" #include "sound/msm5232.h" class nycaptor_state : public driver_device @@ -17,7 +19,8 @@ public: m_mcu(*this, "mcu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT8> m_videoram; @@ -65,6 +68,7 @@ public: required_device<msm5232_device> m_msm; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE8_MEMBER(sub_cpu_halt_w); DECLARE_READ8_MEMBER(from_snd_r); diff --git a/src/mame/includes/othunder.h b/src/mame/includes/othunder.h index d730f4fbc7b..85bd575a0de 100644 --- a/src/mame/includes/othunder.h +++ b/src/mame/includes/othunder.h @@ -95,8 +95,7 @@ public: UINT32 screen_update_othunder(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(vblank_interrupt); void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, const int *primasks, int y_offs ); - void update_irq( ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); + void update_irq(); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; diff --git a/src/mame/includes/pbaction.h b/src/mame/includes/pbaction.h index aa7fa2ddd35..26887d301ee 100644 --- a/src/mame/includes/pbaction.h +++ b/src/mame/includes/pbaction.h @@ -6,6 +6,8 @@ *************************************************************************/ +#include "machine/gen_latch.h" + class pbaction_state : public driver_device { public: @@ -21,6 +23,7 @@ public: m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_decrypted_opcodes(*this, "decrypted_opcodes") { } /* memory pointers */ @@ -41,6 +44,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; optional_shared_ptr<UINT8> m_decrypted_opcodes; UINT8 m_nmi_mask; diff --git a/src/mame/includes/pce.h b/src/mame/includes/pce.h index 9d9a7d34b56..4eb38e8e4ac 100644 --- a/src/mame/includes/pce.h +++ b/src/mame/includes/pce.h @@ -76,7 +76,6 @@ public: UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_MACHINE_START(pce); DECLARE_MACHINE_RESET(mess_pce); - DECLARE_WRITE_LINE_MEMBER(pce_irq_changed); }; #endif /* PCE_H_ */ diff --git a/src/mame/includes/pgm.h b/src/mame/includes/pgm.h index 039e7a4c904..dd0660aa8c3 100644 --- a/src/mame/includes/pgm.h +++ b/src/mame/includes/pgm.h @@ -89,7 +89,6 @@ public: DECLARE_WRITE8_MEMBER(z80_l3_w); DECLARE_WRITE16_MEMBER(pgm_tx_videoram_w); DECLARE_WRITE16_MEMBER(pgm_bg_videoram_w); - DECLARE_WRITE_LINE_MEMBER(pgm_sound_irq); DECLARE_DRIVER_INIT(pgm); @@ -127,7 +126,6 @@ MACHINE_CONFIG_EXTERN( pgmbase ); ADDRESS_MAP_EXTERN( pgm_z80_mem, 8 ); ADDRESS_MAP_EXTERN( pgm_z80_io, 8 ); -void pgm_sound_irq( device_t *device, int level ); ADDRESS_MAP_EXTERN( pgm_mem, 16 ); ADDRESS_MAP_EXTERN( pgm_basic_mem, 16 ); diff --git a/src/mame/includes/portfoli.h b/src/mame/includes/portfoli.h deleted file mode 100644 index 7070f734e42..00000000000 --- a/src/mame/includes/portfoli.h +++ /dev/null @@ -1,123 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -#pragma once - -#ifndef __PORTFOLIO__ -#define __PORTFOLIO__ - -#include "emu.h" -#include "cpu/i86/i86.h" -#include "bus/centronics/ctronics.h" -#include "machine/i8255.h" -#include "machine/ins8250.h" -#include "machine/nvram.h" -#include "machine/ram.h" -#include "sound/speaker.h" -#include "video/hd61830.h" - -#include "bus/generic/slot.h" -#include "bus/generic/carts.h" - -#define M80C88A_TAG "u1" -#define M82C55A_TAG "hpc101_u1" -#define M82C50A_TAG "hpc102_u1" -#define HD61830_TAG "hd61830" -#define CENTRONICS_TAG "centronics" -#define TIMER_TICK_TAG "tick" -#define SCREEN_TAG "screen" -#define RS232_TAG "rs232" - -class portfolio_state : public driver_device -{ -public: - portfolio_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, M80C88A_TAG), - m_lcdc(*this, HD61830_TAG), - m_ppi(*this, M82C55A_TAG), - m_uart(*this, M82C50A_TAG), - m_speaker(*this, "speaker"), - m_timer_tick(*this, TIMER_TICK_TAG), - m_rom(*this, M80C88A_TAG), - m_char_rom(*this, HD61830_TAG), - m_y0(*this, "Y0"), - m_y1(*this, "Y1"), - m_y2(*this, "Y2"), - m_y3(*this, "Y3"), - m_y4(*this, "Y4"), - m_y5(*this, "Y5"), - m_y6(*this, "Y6"), - m_y7(*this, "Y7"), - m_battery(*this, "BATTERY"), - m_contrast(*this, "contrast"), - m_ram(*this, RAM_TAG) - { } - - required_device<cpu_device> m_maincpu; - required_device<hd61830_device> m_lcdc; - required_device<i8255_device> m_ppi; - required_device<ins8250_device> m_uart; - required_device<speaker_sound_device> m_speaker; - required_device<timer_device> m_timer_tick; - required_region_ptr<UINT8> m_rom; - required_region_ptr<UINT8> m_char_rom; - required_ioport m_y0; - required_ioport m_y1; - required_ioport m_y2; - required_ioport m_y3; - required_ioport m_y4; - required_ioport m_y5; - required_ioport m_y6; - required_ioport m_y7; - required_ioport m_battery; - - virtual void machine_start() override; - virtual void machine_reset() override; - - void check_interrupt(); - void trigger_interrupt(int level); - void scan_keyboard(); - - DECLARE_READ8_MEMBER( irq_status_r ); - DECLARE_READ8_MEMBER( keyboard_r ); - DECLARE_READ8_MEMBER( battery_r ); - DECLARE_READ8_MEMBER( counter_r ); - DECLARE_READ8_MEMBER( pid_r ); - - DECLARE_WRITE8_MEMBER( irq_mask_w ); - DECLARE_WRITE8_MEMBER( sivr_w ); - DECLARE_WRITE8_MEMBER( speaker_w ); - DECLARE_WRITE8_MEMBER( power_w ); - DECLARE_WRITE8_MEMBER( unknown_w ); - DECLARE_WRITE8_MEMBER( counter_w ); - DECLARE_WRITE8_MEMBER( ncc1_w ); - - DECLARE_WRITE_LINE_MEMBER( i8250_intrpt_w ); - - /* interrupt state */ - UINT8 m_ip; /* interrupt pending */ - UINT8 m_ie; /* interrupt enable */ - UINT8 m_sivr; /* serial interrupt vector register */ - - /* counter state */ - UINT16 m_counter; - - /* keyboard state */ - UINT8 m_keylatch; - - /* video state */ - required_shared_ptr<UINT8> m_contrast; - - /* peripheral state */ - UINT8 m_pid; /* peripheral identification */ - DECLARE_PALETTE_INIT(portfolio); - TIMER_DEVICE_CALLBACK_MEMBER(keyboard_tick); - TIMER_DEVICE_CALLBACK_MEMBER(system_tick); - TIMER_DEVICE_CALLBACK_MEMBER(counter_tick); - DECLARE_READ8_MEMBER(hd61830_rd_r); - IRQ_CALLBACK_MEMBER(portfolio_int_ack); - DECLARE_DEVICE_IMAGE_LOAD_MEMBER( portfolio_cart ); - required_device<ram_device> m_ram; -}; - -#endif diff --git a/src/mame/includes/prehisle.h b/src/mame/includes/prehisle.h index 1b3d1c0a35d..b8d3eb22e64 100644 --- a/src/mame/includes/prehisle.h +++ b/src/mame/includes/prehisle.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Bryan McPhail + +#include "machine/gen_latch.h" #include "sound/upd7759.h" class prehisle_state : public driver_device @@ -15,7 +17,8 @@ public: m_audiocpu(*this, "audiocpu"), m_upd7759(*this, "upd"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } required_shared_ptr<UINT16> m_tx_vram; @@ -47,4 +50,5 @@ public: required_device<upd7759_device> m_upd7759; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; }; diff --git a/src/mame/includes/renegade.h b/src/mame/includes/renegade.h index fc619d2c8be..c3c109e0103 100644 --- a/src/mame/includes/renegade.h +++ b/src/mame/includes/renegade.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Phil Stroffolino, Carlos A. Lozano, Rob Rosenbrock + +#include "machine/gen_latch.h" #include "sound/msm5205.h" #define MCU_BUFFER_MAX 6 @@ -14,6 +16,7 @@ public: m_mcu(*this, "mcu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), + m_soundlatch(*this, "soundlatch"), m_fg_videoram(*this, "fg_videoram"), m_bg_videoram(*this, "bg_videoram"), m_spriteram(*this, "spriteram"), @@ -25,6 +28,7 @@ public: optional_device<cpu_device> m_mcu; required_device<msm5205_device> m_msm; required_device<gfxdecode_device> m_gfxdecode; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_fg_videoram; required_shared_ptr<UINT8> m_bg_videoram; diff --git a/src/mame/includes/retofinv.h b/src/mame/includes/retofinv.h index 9e35b0455b0..bc7e91c825f 100644 --- a/src/mame/includes/retofinv.h +++ b/src/mame/includes/retofinv.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Jarek Parchanski, Andrea Mazzoleni + +#include "machine/gen_latch.h" + class retofinv_state : public driver_device { public: @@ -11,6 +14,7 @@ public: m_68705(*this, "68705"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_fg_videoram(*this, "fg_videoram"), m_sharedram(*this, "sharedram"), m_bg_videoram(*this, "bg_videoram") { } @@ -21,6 +25,7 @@ public: optional_device<cpu_device> m_68705; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_fg_videoram; required_shared_ptr<UINT8> m_sharedram; diff --git a/src/mame/includes/sauro.h b/src/mame/includes/sauro.h index dfa69ed44f2..ab0a7e79e42 100644 --- a/src/mame/includes/sauro.h +++ b/src/mame/includes/sauro.h @@ -1,6 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Zsolt Vasvari +#include "machine/gen_latch.h" #include "sound/sp0256.h" @@ -13,6 +14,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_sp0256(*this, "speech"), + m_soundlatch(*this, "soundlatch"), m_spriteram(*this, "spriteram"), m_videoram(*this, "videoram"), m_colorram(*this, "colorram"), @@ -23,6 +25,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; optional_device<sp0256_device> m_sp0256; + optional_device<generic_latch_8_device> m_soundlatch; // sauro only required_shared_ptr<UINT8> m_spriteram; required_shared_ptr<UINT8> m_videoram; diff --git a/src/mame/includes/segag80r.h b/src/mame/includes/segag80r.h index 77e690fc86e..687a34d649c 100644 --- a/src/mame/includes/segag80r.h +++ b/src/mame/includes/segag80r.h @@ -9,6 +9,7 @@ #include "machine/segag80.h" #include "sound/sn76496.h" #include "audio/segasnd.h" +#include "machine/gen_latch.h" class sega005_sound_device; @@ -36,6 +37,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_decrypted_opcodes(*this, "decrypted_opcodes") { } required_shared_ptr<UINT8> m_mainram; @@ -52,6 +54,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; optional_shared_ptr<UINT8> m_decrypted_opcodes; std::vector<UINT8> m_paletteram; diff --git a/src/mame/includes/segahang.h b/src/mame/includes/segahang.h index 6de20b3b774..c0813a111fe 100644 --- a/src/mame/includes/segahang.h +++ b/src/mame/includes/segahang.h @@ -10,6 +10,7 @@ #include "cpu/mcs51/mcs51.h" #include "cpu/z80/z80.h" #include "machine/i8255.h" +#include "machine/gen_latch.h" #include "machine/segaic16.h" #include "video/segaic16.h" #include "video/segaic16_road.h" @@ -33,6 +34,7 @@ public: m_sprites(*this, "sprites"), m_segaic16vid(*this, "segaic16vid"), m_segaic16road(*this, "segaic16road"), + m_soundlatch(*this, "soundlatch"), m_workram(*this, "workram"), m_sharrier_video(false), m_adc_select(0), @@ -53,7 +55,6 @@ public: // Z80 sound CPU read/write handlers DECLARE_READ8_MEMBER( sound_data_r ); - DECLARE_WRITE_LINE_MEMBER( sound_irq ); // I8751-related VBLANK interrupt hanlders INTERRUPT_GEN_MEMBER( i8751_main_cpu_vblank ); @@ -97,6 +98,7 @@ protected: required_device<sega_16bit_sprite_device> m_sprites; required_device<segaic16_video_device> m_segaic16vid; required_device<segaic16_road_device> m_segaic16road; + required_device<generic_latch_8_device> m_soundlatch; // memory pointers required_shared_ptr<UINT16> m_workram; diff --git a/src/mame/includes/segaorun.h b/src/mame/includes/segaorun.h index 09c5f254b2d..5e7ff05144b 100644 --- a/src/mame/includes/segaorun.h +++ b/src/mame/includes/segaorun.h @@ -9,6 +9,7 @@ #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" #include "machine/i8255.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "machine/segaic16.h" #include "machine/watchdog.h" @@ -35,6 +36,7 @@ public: m_sprites(*this, "sprites"), m_segaic16vid(*this, "segaic16vid"), m_segaic16road(*this, "segaic16road"), + m_soundlatch(*this, "soundlatch"), m_bankmotor_timer(*this, "bankmotor"), m_digital_ports(*this, digital_ports), m_adc_ports(*this, "ADC"), @@ -125,6 +127,7 @@ protected: required_device<sega_16bit_sprite_device> m_sprites; required_device<segaic16_video_device> m_segaic16vid; required_device<segaic16_road_device> m_segaic16road; + required_device<generic_latch_8_device> m_soundlatch; optional_device<timer_device> m_bankmotor_timer; // input ports diff --git a/src/mame/includes/segas16a.h b/src/mame/includes/segas16a.h index cdf7d34ceab..d29c18ef35f 100644 --- a/src/mame/includes/segas16a.h +++ b/src/mame/includes/segas16a.h @@ -10,6 +10,7 @@ #include "cpu/mcs48/mcs48.h" #include "cpu/mcs51/mcs51.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/i8255.h" #include "machine/i8243.h" #include "machine/nvram.h" @@ -38,6 +39,7 @@ public: m_nvram(*this, "nvram"), m_watchdog(*this, "watchdog"), m_segaic16vid(*this, "segaic16vid"), + m_soundlatch(*this, "soundlatch"), m_sprites(*this, "sprites"), m_workram(*this, "nvram"), m_sound_decrypted_opcodes(*this, "sound_decrypted_opcodes"), @@ -136,6 +138,7 @@ protected: required_device<nvram_device> m_nvram; required_device<watchdog_timer_device> m_watchdog; required_device<segaic16_video_device> m_segaic16vid; + required_device<generic_latch_8_device> m_soundlatch; required_device<sega_sys16a_sprite_device> m_sprites; // memory pointers diff --git a/src/mame/includes/segas16b.h b/src/mame/includes/segas16b.h index 1615d5a6da7..e03fead08b6 100644 --- a/src/mame/includes/segas16b.h +++ b/src/mame/includes/segas16b.h @@ -9,6 +9,7 @@ #include "cpu/m68000/m68000.h" #include "cpu/mcs51/mcs51.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "machine/segaic16.h" #include "sound/2151intf.h" @@ -39,6 +40,7 @@ public: m_nvram(*this, "nvram"), m_sprites(*this, "sprites"), m_segaic16vid(*this, "segaic16vid"), + m_soundlatch(*this, "soundlatch"), m_workram(*this, "workram"), m_romboard(ROM_BOARD_INVALID), m_tilemap_type(SEGAIC16_TILEMAP_16B), @@ -196,6 +198,7 @@ protected: required_device<nvram_device> m_nvram; optional_device<sega_sys16b_sprite_device> m_sprites; required_device<segaic16_video_device> m_segaic16vid; + optional_device<generic_latch_8_device> m_soundlatch; // not for atomicp // memory pointers required_shared_ptr<UINT16> m_workram; diff --git a/src/mame/includes/segas18.h b/src/mame/includes/segas18.h index 79726c3c253..c8b9ad67268 100644 --- a/src/mame/includes/segas18.h +++ b/src/mame/includes/segas18.h @@ -9,6 +9,7 @@ #include "cpu/m68000/m68000.h" #include "cpu/mcs51/mcs51.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/nvram.h" #include "machine/segaic16.h" #include "machine/315_5296.h" @@ -36,6 +37,7 @@ public: m_sprites(*this, "sprites"), m_segaic16vid(*this, "segaic16vid"), m_gfxdecode(*this, "gfxdecode"), + m_soundlatch(*this, "soundlatch"), m_workram(*this, "workram"), m_romboard(ROM_BOARD_INVALID), m_grayscale_enable(false), @@ -138,6 +140,7 @@ protected: required_device<sega_sys16b_sprite_device> m_sprites; required_device<segaic16_video_device> m_segaic16vid; required_device<gfxdecode_device> m_gfxdecode; + required_device<generic_latch_8_device> m_soundlatch; // memory pointers required_shared_ptr<UINT16> m_workram; diff --git a/src/mame/includes/segaxbd.h b/src/mame/includes/segaxbd.h index 8fe15bdc04a..768d86595fc 100644 --- a/src/mame/includes/segaxbd.h +++ b/src/mame/includes/segaxbd.h @@ -9,6 +9,7 @@ #include "cpu/m68000/m68000.h" #include "cpu/mcs51/mcs51.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/watchdog.h" #include "machine/segaic16.h" #include "video/segaic16.h" @@ -106,6 +107,7 @@ protected: required_device<sega_xboard_sprite_device> m_sprites; required_device<segaic16_video_device> m_segaic16vid; required_device<segaic16_road_device> m_segaic16road; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_subram0; // configuration @@ -137,21 +139,6 @@ protected: required_device<screen_device> m_screen; required_device<palette_device> m_palette; - UINT16 m_latched_value[4]; - UINT8 m_latch_read[4]; - - UINT32 soundlatch_read(UINT8 index = 0) { m_latch_read[index] = 1; return m_latched_value[index]; }; - void soundlatch_write(UINT8 index, UINT32 data) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(segaxbd_state::soundlatch_sync_callback), this), index | (data << 8)); }; - void soundlatch_write(UINT32 data) { soundlatch_write(0, data); } - - void soundlatch_sync_callback(void *ptr, INT32 param) - { - UINT16 value = param >> 8; - int which = param & 0xff; - m_latched_value[which] = value; - m_latch_read[which] = 0; - }; - protected: virtual void device_start() override; virtual void device_reset() override; diff --git a/src/mame/includes/segaybd.h b/src/mame/includes/segaybd.h index 2de9cf50fad..9666c1fce23 100644 --- a/src/mame/includes/segaybd.h +++ b/src/mame/includes/segaybd.h @@ -8,6 +8,7 @@ #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/watchdog.h" #include "machine/segaic16.h" #include "video/segaic16.h" @@ -31,6 +32,7 @@ public: m_bsprites(*this, "bsprites"), m_ysprites(*this, "ysprites"), m_segaic16vid(*this, "segaic16vid"), + m_soundlatch(*this, "soundlatch"), m_digital_ports(*this, digital_ports), m_adc_ports(*this, "ADC"), m_pdrift_bank(0), @@ -112,6 +114,7 @@ protected: required_device<sega_sys16b_sprite_device> m_bsprites; required_device<sega_yboard_sprite_device> m_ysprites; required_device<segaic16_video_device> m_segaic16vid; + required_device<generic_latch_8_device> m_soundlatch; // input ports DECLARE_IOPORT_ARRAY(digital_ports); diff --git a/src/mame/includes/seta.h b/src/mame/includes/seta.h index 1f1c5d0a920..b9a347e51d8 100644 --- a/src/mame/includes/seta.h +++ b/src/mame/includes/seta.h @@ -1,11 +1,13 @@ // license:BSD-3-Clause // copyright-holders:Luca Elia + /*************************************************************************** -= Seta Hardware =- ***************************************************************************/ +#include "machine/gen_latch.h" #include "sound/x1_010.h" #include "video/seta001.h" @@ -37,6 +39,8 @@ public: m_subcpu(*this,"sub"), m_seta001(*this, "spritegen"), m_x1(*this, "x1snd"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2"), m_sharedram(*this,"sharedram"), m_workram(*this,"workram"), m_vregs(*this,"vregs"), @@ -57,6 +61,8 @@ public: optional_device<cpu_device> m_subcpu; required_device<seta001_device> m_seta001; optional_device<x1_010_device> m_x1; + optional_device<generic_latch_8_device> m_soundlatch; + optional_device<generic_latch_8_device> m_soundlatch2; optional_shared_ptr<UINT8> m_sharedram; optional_shared_ptr<UINT16> m_workram; diff --git a/src/mame/includes/shadfrce.h b/src/mame/includes/shadfrce.h index 82ce0cba31b..05aeb736d67 100644 --- a/src/mame/includes/shadfrce.h +++ b/src/mame/includes/shadfrce.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:David Haywood + +#include "machine/gen_latch.h" #include "sound/okim6295.h" class shadfrce_state : public driver_device @@ -13,6 +15,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_io_p1(*this, "P1"), m_io_p2(*this, "P2"), m_io_dsw1(*this, "DSW1"), @@ -32,6 +35,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_ioport m_io_p1; required_ioport m_io_p2; diff --git a/src/mame/includes/shangha3.h b/src/mame/includes/shangha3.h index 1a75aaa8cfb..deaf039aa8e 100644 --- a/src/mame/includes/shangha3.h +++ b/src/mame/includes/shangha3.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria + +#include "machine/gen_latch.h" #include "sound/okim6295.h" class shangha3_state : public driver_device @@ -13,6 +15,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_ram(*this, "ram") { } required_device<cpu_device> m_maincpu; @@ -21,6 +24,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_ram; diff --git a/src/mame/includes/sms.h b/src/mame/includes/sms.h index ec9ae688698..259a3f6fd65 100644 --- a/src/mame/includes/sms.h +++ b/src/mame/includes/sms.h @@ -180,7 +180,6 @@ public: DECLARE_READ8_MEMBER(sms_sscope_r); DECLARE_WRITE8_MEMBER(sms_sscope_w); - DECLARE_WRITE_LINE_MEMBER(sms_int_callback); DECLARE_WRITE_LINE_MEMBER(sms_pause_callback); DECLARE_WRITE_LINE_MEMBER(sms_ctrl1_th_input); DECLARE_WRITE_LINE_MEMBER(sms_ctrl2_th_input); diff --git a/src/mame/includes/snk.h b/src/mame/includes/snk.h index 81744602a36..1810707bf33 100644 --- a/src/mame/includes/snk.h +++ b/src/mame/includes/snk.h @@ -1,12 +1,15 @@ // license:BSD-3-Clause // copyright-holders:Ernesto Corvi,Tim Lindquist,Carlos A. Lozano,Bryan McPhail,Jarek Parchanski,Nicola Salmoria,Tomasz Slanina,Phil Stroffolino,Acho A. Tang,Victor Trucco // thanks-to:Marco Cassili + /************************************************************************* various SNK triple Z80 games *************************************************************************/ +#include "machine/gen_latch.h" + class snk_state : public driver_device { public: @@ -18,6 +21,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_spriteram(*this, "spriteram"), m_fg_videoram(*this, "fg_videoram"), m_bg_videoram(*this, "bg_videoram"), @@ -29,6 +33,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_spriteram; optional_shared_ptr<UINT8> m_fg_videoram; diff --git a/src/mame/includes/snk68.h b/src/mame/includes/snk68.h index d2743e85683..e79febfe760 100644 --- a/src/mame/includes/snk68.h +++ b/src/mame/includes/snk68.h @@ -1,7 +1,10 @@ // license:BSD-3-Clause // copyright-holders:Bryan McPhail, Acho A. Tang, Nicola Salmoria + +#include "machine/gen_latch.h" #include "sound/upd7759.h" #include "video/snk68_spr.h" + class snk68_state : public driver_device { public: @@ -12,9 +15,10 @@ public: m_upd7759(*this, "upd"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), + m_sprites(*this, "sprites"), + m_soundlatch(*this, "soundlatch"), m_pow_fg_videoram(*this, "pow_fg_videoram"), - m_spriteram(*this, "spriteram"), - m_sprites(*this, "sprites") + m_spriteram(*this, "spriteram") { } required_device<cpu_device> m_maincpu; @@ -22,12 +26,12 @@ public: required_device<upd7759_device> m_upd7759; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; + required_device<snk68_spr_device> m_sprites; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_pow_fg_videoram; required_shared_ptr<UINT16> m_spriteram; - required_device<snk68_spr_device> m_sprites; - UINT8 m_invert_controls; bool m_sprite_flip_axis; tilemap_t *m_fg_tilemap; diff --git a/src/mame/includes/snowbros.h b/src/mame/includes/snowbros.h index a1102dbd7a8..8eda9c9b896 100644 --- a/src/mame/includes/snowbros.h +++ b/src/mame/includes/snowbros.h @@ -1,6 +1,7 @@ // license:BSD-3-Clause // copyright-holders:David Haywood, Mike Coates -#include "emu.h" + +#include "machine/gen_latch.h" #include "sound/okim6295.h" #include "video/kan_pand.h" // for the original pandora @@ -14,6 +15,7 @@ public: m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_pandora(*this, "pandora"), m_hyperpac_ram(*this, "hyperpac_ram"), m_bootleg_spriteram16(*this, "spriteram16b") @@ -24,6 +26,7 @@ public: optional_device<okim6295_device> m_oki; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; // not snowbro3 optional_device<kaneko_pandora_device> m_pandora; optional_shared_ptr<UINT16> m_hyperpac_ram; diff --git a/src/mame/includes/solomon.h b/src/mame/includes/solomon.h index 0d8ab74ce02..0e2edd9983b 100644 --- a/src/mame/includes/solomon.h +++ b/src/mame/includes/solomon.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Mirko Buffoni + +#include "machine/gen_latch.h" + class solomon_state : public driver_device { public: @@ -13,7 +16,8 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } required_shared_ptr<UINT8> m_spriteram; required_shared_ptr<UINT8> m_videoram; @@ -43,4 +47,5 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; }; diff --git a/src/mame/includes/spbactn.h b/src/mame/includes/spbactn.h index 2868c951dd6..ded656e40b9 100644 --- a/src/mame/includes/spbactn.h +++ b/src/mame/includes/spbactn.h @@ -1,6 +1,7 @@ // license:BSD-3-Clause // copyright-holders:David Haywood +#include "machine/gen_latch.h" #include "video/tecmo_spr.h" #include "video/tecmo_mix.h" @@ -16,6 +17,7 @@ public: m_palette(*this, "palette"), m_sprgen(*this, "spritegen"), m_mixer(*this, "mixer"), + m_soundlatch(*this, "soundlatch"), m_bgvideoram(*this, "bgvideoram"), m_fgvideoram(*this, "fgvideoram"), m_spvideoram(*this, "spvideoram"), @@ -30,6 +32,7 @@ public: required_device<palette_device> m_palette; required_device<tecmo_spr_device> m_sprgen; required_device<tecmo_mix_device> m_mixer; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_bgvideoram; required_shared_ptr<UINT16> m_fgvideoram; diff --git a/src/mame/includes/spdodgeb.h b/src/mame/includes/spdodgeb.h index 04b6362c12a..5fd53a68353 100644 --- a/src/mame/includes/spdodgeb.h +++ b/src/mame/includes/spdodgeb.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/gen_latch.h" #include "sound/msm5205.h" class spdodgeb_state : public driver_device @@ -20,6 +21,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_videoram(*this, "videoram"), m_spriteram(*this, "spriteram") { } @@ -30,6 +32,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_videoram; required_shared_ptr<UINT8> m_spriteram; diff --git a/src/mame/includes/speedspn.h b/src/mame/includes/speedspn.h index 9167d0192d4..19f3f8bd1ae 100644 --- a/src/mame/includes/speedspn.h +++ b/src/mame/includes/speedspn.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:David Haywood, Farfetch'd + +#include "machine/gen_latch.h" #include "sound/okim6295.h" class speedspn_state : public driver_device @@ -12,6 +14,7 @@ public: m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_prgbank(*this, "prgbank"), m_okibank(*this, "okibank"), m_attram(*this, "attram") { } @@ -21,6 +24,7 @@ public: required_device<okim6295_device> m_oki; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_memory_bank m_prgbank; required_memory_bank m_okibank; diff --git a/src/mame/includes/sshangha.h b/src/mame/includes/sshangha.h index 056dd91bf3a..768f5c0fd5f 100644 --- a/src/mame/includes/sshangha.h +++ b/src/mame/includes/sshangha.h @@ -69,7 +69,6 @@ public: virtual void video_start() override; UINT32 screen_update_sshangha(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); inline void sshangha_set_color_888(pen_t color, int rshift, int gshift, int bshift, UINT32 data); - DECLARE_WRITE_LINE_MEMBER(irqhandler); required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; required_device<palette_device> m_palette; diff --git a/src/mame/includes/ssozumo.h b/src/mame/includes/ssozumo.h index eee0334c406..86b61f8f2df 100644 --- a/src/mame/includes/ssozumo.h +++ b/src/mame/includes/ssozumo.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Takahiro Nogi + +#include "machine/gen_latch.h" + class ssozumo_state : public driver_device { public: @@ -9,6 +12,7 @@ public: m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_spriteram(*this, "spriteram"), m_paletteram(*this, "paletteram"), m_videoram(*this, "videoram"), @@ -20,6 +24,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_spriteram; required_shared_ptr<UINT8> m_paletteram; diff --git a/src/mame/includes/stv.h b/src/mame/includes/stv.h index 8a18c08957a..284d722b3f0 100644 --- a/src/mame/includes/stv.h +++ b/src/mame/includes/stv.h @@ -2,6 +2,7 @@ // copyright-holders:David Haywood, Angelo Salese, Olivier Galibert, Mariusz Wojcieszek, R. Belmont #include "includes/saturn.h" +#include "machine/gen_latch.h" class stv_state : public saturn_state { @@ -11,7 +12,8 @@ public: m_adsp(*this, "adsp"), m_adsp_pram(*this, "adsp_pram"), m_cryptdevice(*this, "315_5881"), - m_5838crypt(*this, "315_5838") + m_5838crypt(*this, "315_5838"), + m_soundlatch(*this, "soundlatch") { } @@ -122,6 +124,7 @@ public: optional_device<sega_315_5881_crypt_device> m_cryptdevice; optional_device<sega_315_5838_comp_device> m_5838crypt; + optional_device<generic_latch_16_device> m_soundlatch; // batmanfr UINT16 crypt_read_callback(UINT32 addr); UINT16 crypt_read_callback_ch1(UINT32 addr); UINT16 crypt_read_callback_ch2(UINT32 addr); diff --git a/src/mame/includes/suna16.h b/src/mame/includes/suna16.h index d7f7ed7d029..094c95647af 100644 --- a/src/mame/includes/suna16.h +++ b/src/mame/includes/suna16.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Luca Elia + +#include "machine/gen_latch.h" #include "sound/dac.h" class suna16_state : public driver_device @@ -15,6 +17,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_spriteram(*this, "spriteram"), m_spriteram2(*this, "spriteram2"), m_bank1(*this, "bank1"), @@ -31,6 +34,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_spriteram; optional_shared_ptr<UINT16> m_spriteram2; diff --git a/src/mame/includes/suna8.h b/src/mame/includes/suna8.h index 1ee773edb15..f15725507f6 100644 --- a/src/mame/includes/suna8.h +++ b/src/mame/includes/suna8.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Luca Elia + +#include "machine/gen_latch.h" #include "sound/samples.h" #define TILEMAPS 0 @@ -19,6 +21,8 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2"), m_bank0d(*this, "bank0d"), m_bank1(*this, "bank1"), m_bank1d(*this, "bank1d"), @@ -36,6 +40,8 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; + required_device<generic_latch_8_device> m_soundlatch2; optional_memory_bank m_bank0d; required_memory_bank m_bank1; optional_memory_bank m_bank1d; diff --git a/src/mame/includes/suprloco.h b/src/mame/includes/suprloco.h index 4db13e5ea33..9aa77824569 100644 --- a/src/mame/includes/suprloco.h +++ b/src/mame/includes/suprloco.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Zsolt Vasvari + +#include "machine/gen_latch.h" + class suprloco_state : public driver_device { public: @@ -8,6 +11,7 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), + m_soundlatch(*this, "soundlatch"), m_spriteram(*this, "spriteram"), m_videoram(*this, "videoram"), m_scrollram(*this, "scrollram"), @@ -16,6 +20,7 @@ public: required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_spriteram; required_shared_ptr<UINT8> m_videoram; diff --git a/src/mame/includes/suprslam.h b/src/mame/includes/suprslam.h index ffe87dd36bf..54bfb91c663 100644 --- a/src/mame/includes/suprslam.h +++ b/src/mame/includes/suprslam.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/gen_latch.h" #include "video/k053936.h" class suprslam_state : public driver_device @@ -19,12 +20,13 @@ public: m_spriteram(*this, "spriteram"), m_spr_ctrl(*this, "spr_ctrl"), m_screen_vregs(*this, "screen_vregs"), - m_spr(*this, "vsystem_spr"), + m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_k053936(*this, "k053936"), - m_maincpu(*this, "maincpu"), + m_spr(*this, "vsystem_spr"), + m_palette(*this, "palette"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT16> m_screen_videoram; @@ -33,7 +35,6 @@ public: required_shared_ptr<UINT16> m_spriteram; required_shared_ptr<UINT16> m_spr_ctrl; required_shared_ptr<UINT16> m_screen_vregs; - required_device<vsystem_spr_device> m_spr; /* video-related */ tilemap_t *m_screen_tilemap; @@ -46,8 +47,14 @@ public: int m_pending_command; /* devices */ + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; required_device<k053936_device> m_k053936; + required_device<vsystem_spr_device> m_spr; + required_device<palette_device> m_palette; + required_device<gfxdecode_device> m_gfxdecode; + required_device<generic_latch_8_device> m_soundlatch; + DECLARE_WRITE16_MEMBER(sound_command_w); DECLARE_WRITE8_MEMBER(pending_command_clear_w); DECLARE_WRITE8_MEMBER(suprslam_sh_bankswitch_w); @@ -60,8 +67,4 @@ public: virtual void machine_reset() override; virtual void video_start() override; UINT32 screen_update_suprslam(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(irqhandler); - required_device<cpu_device> m_maincpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; }; diff --git a/src/mame/includes/system1.h b/src/mame/includes/system1.h index 86f437f732e..5449cdfbaad 100644 --- a/src/mame/includes/system1.h +++ b/src/mame/includes/system1.h @@ -1,6 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Jarek Parchanski, Nicola Salmoria, Mirko Buffoni + #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/i8255.h" #include "machine/segacrp2_device.h" @@ -22,6 +24,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_decrypted_opcodes(*this, "decrypted_opcodes"), m_maincpu_region(*this, "maincpu"), m_color_prom(*this, "palette"), @@ -130,6 +133,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; optional_shared_ptr<UINT8> m_decrypted_opcodes; required_memory_region m_maincpu_region; optional_region_ptr<UINT8> m_color_prom; diff --git a/src/mame/includes/system16.h b/src/mame/includes/system16.h index 65b28f457b1..db4ccb86b57 100644 --- a/src/mame/includes/system16.h +++ b/src/mame/includes/system16.h @@ -2,6 +2,7 @@ // copyright-holders:Nicola Salmoria, Phil Stroffolino, Mirko Buffoni #include "video/sega16sp.h" +#include "machine/gen_latch.h" #include "machine/segaic16.h" #include "sound/msm5205.h" #include "sound/upd7759.h" @@ -23,6 +24,7 @@ public: m_msm(*this, "5205"), m_upd7759(*this, "7759"), m_gfxdecode(*this, "gfxdecode"), + m_soundlatch(*this, "soundlatch"), m_decrypted_opcodes(*this, "decrypted_opcodes") { } required_shared_ptr<UINT16> m_textram; @@ -120,6 +122,7 @@ public: optional_device<msm5205_device> m_msm; optional_device<upd7759_device> m_upd7759; required_device<gfxdecode_device> m_gfxdecode; + optional_device<generic_latch_8_device> m_soundlatch; optional_shared_ptr<UINT16> m_decrypted_opcodes; DECLARE_WRITE16_MEMBER(sound_command_nmi_w); @@ -209,7 +212,6 @@ public: UINT32 screen_update_system18old(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_s16a_bootleg(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_s16a_bootleg_passht4b(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(sys16_interrupt); void setup_system16_bootleg_spritebanking( ); void update_page( ); void set_tile_bank( int data ); diff --git a/src/mame/includes/tagteam.h b/src/mame/includes/tagteam.h index a39e95dcc4f..b74f9cc2179 100644 --- a/src/mame/includes/tagteam.h +++ b/src/mame/includes/tagteam.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Steve Ellenoff, Brad Oliver + +#include "machine/gen_latch.h" + class tagteam_state : public driver_device { public: @@ -9,6 +12,7 @@ public: m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_videoram(*this, "videoram"), m_colorram(*this, "colorram") { } @@ -16,6 +20,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_videoram; required_shared_ptr<UINT8> m_colorram; diff --git a/src/mame/includes/tail2nos.h b/src/mame/includes/tail2nos.h index f4eb8bb919f..048ec3f2eb4 100644 --- a/src/mame/includes/tail2nos.h +++ b/src/mame/includes/tail2nos.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/gen_latch.h" #include "video/k051316.h" class tail2nos_state : public driver_device @@ -20,7 +21,8 @@ public: m_audiocpu(*this, "audiocpu"), m_k051316(*this, "k051316"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } /* memory pointers */ required_shared_ptr<UINT16> m_txvideoram; @@ -39,6 +41,7 @@ public: required_device<k051316_device> m_k051316; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; DECLARE_WRITE16_MEMBER(sound_command_w); DECLARE_WRITE16_MEMBER(tail2nos_txvideoram_w); @@ -52,6 +55,5 @@ public: UINT32 screen_update_tail2nos(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void tail2nos_postload(); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); K051316_CB_MEMBER(zoom_callback); }; diff --git a/src/mame/includes/taito_b.h b/src/mame/includes/taito_b.h index b8a4a3aa4e8..569f797c8bc 100644 --- a/src/mame/includes/taito_b.h +++ b/src/mame/includes/taito_b.h @@ -125,7 +125,6 @@ public: void hitice_clear_pixel_bitmap( ); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); void draw_framebuffer( bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; diff --git a/src/mame/includes/taito_f2.h b/src/mame/includes/taito_f2.h index 1d75ce57e28..d417a7655e2 100644 --- a/src/mame/includes/taito_f2.h +++ b/src/mame/includes/taito_f2.h @@ -184,7 +184,6 @@ public: void draw_roz_layer( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32 priority); void taito_f2_tc360_spritemixdraw(screen_device &screen, bitmap_ind16 &dest_bmp, const rectangle &clip, gfx_element *gfx, UINT32 code, UINT32 color, int flipx, int flipy, int sx, int sy, int scalex, int scaley ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; diff --git a/src/mame/includes/taito_h.h b/src/mame/includes/taito_h.h index d90434f5d24..48eccf26833 100644 --- a/src/mame/includes/taito_h.h +++ b/src/mame/includes/taito_h.h @@ -44,5 +44,4 @@ public: void recordbr_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ); void dleague_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ); void taitoh_log_vram(); - DECLARE_WRITE_LINE_MEMBER(irqhandler); }; diff --git a/src/mame/includes/taito_l.h b/src/mame/includes/taito_l.h index 9ddecdb0c03..34e43bbeaf5 100644 --- a/src/mame/includes/taito_l.h +++ b/src/mame/includes/taito_l.h @@ -153,6 +153,5 @@ public: void state_register( ); void taito_machine_reset(); void bank_w(address_space &space, offs_t offset, UINT8 data, int banknum ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); DECLARE_WRITE_LINE_MEMBER(champwr_msm5205_vck); }; diff --git a/src/mame/includes/taito_x.h b/src/mame/includes/taito_x.h index 110777c878e..700eb457b30 100644 --- a/src/mame/includes/taito_x.h +++ b/src/mame/includes/taito_x.h @@ -17,7 +17,6 @@ public: DECLARE_DRIVER_INIT(kyustrkr); DECLARE_MACHINE_START(taitox); DECLARE_MACHINE_START(superman); - DECLARE_WRITE_LINE_MEMBER(irqhandler); // superman c-chip UINT16 m_current_bank; diff --git a/src/mame/includes/taito_z.h b/src/mame/includes/taito_z.h index f14335f4b7b..bfe949dd209 100644 --- a/src/mame/includes/taito_z.h +++ b/src/mame/includes/taito_z.h @@ -71,6 +71,7 @@ public: required_device<palette_device> m_palette; DECLARE_WRITE16_MEMBER(cpua_ctrl_w); + DECLARE_WRITE16_MEMBER(bshark_cpua_ctrl_w); DECLARE_WRITE16_MEMBER(chasehq_cpua_ctrl_w); DECLARE_WRITE16_MEMBER(dblaxle_cpua_ctrl_w); DECLARE_WRITE16_MEMBER(spacegun_output_bypass_w); @@ -118,9 +119,7 @@ public: void sci_draw_sprites_16x8( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs ); void aquajack_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int y_offs); void spacegun_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int y_offs); - void parse_cpu_control( ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); - DECLARE_WRITE_LINE_MEMBER(irqhandlerb); + void parse_cpu_control(); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; diff --git a/src/mame/includes/taitoair.h b/src/mame/includes/taitoair.h index 2a0bc94cd12..f244d4dd4a2 100644 --- a/src/mame/includes/taitoair.h +++ b/src/mame/includes/taitoair.h @@ -130,5 +130,4 @@ public: void fill_slope( bitmap_ind16 &bitmap, const rectangle &cliprect, UINT16 header, INT32 x1, INT32 x2, INT32 sl1, INT32 sl2, INT32 y1, INT32 y2, INT32 *nx1, INT32 *nx2 ); void fill_poly( bitmap_ind16 &bitmap, const rectangle &cliprect, const struct taitoair_poly *q ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); }; diff --git a/src/mame/includes/taitosj.h b/src/mame/includes/taitosj.h index b99a071d025..439cf153aa3 100644 --- a/src/mame/includes/taitosj.h +++ b/src/mame/includes/taitosj.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria + +#include "machine/gen_latch.h" #include "sound/dac.h" class taitosj_state : public driver_device @@ -27,7 +29,8 @@ public: m_dac(*this, "dac"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch") { } typedef void (taitosj_state::*copy_layer_func_t)(bitmap_ind16 &, const rectangle &, int, int *, rectangle *); @@ -132,4 +135,5 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; }; diff --git a/src/mame/includes/taotaido.h b/src/mame/includes/taotaido.h index 3c7e566469c..1fdb80c3103 100644 --- a/src/mame/includes/taotaido.h +++ b/src/mame/includes/taotaido.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:David Haywood + +#include "machine/gen_latch.h" + class taotaido_state : public driver_device { public: @@ -9,6 +12,7 @@ public: m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_spr(*this, "vsystem_spr"), + m_soundlatch(*this, "soundlatch"), m_spriteram(*this, "spriteram"), m_spriteram2(*this, "spriteram2"), m_scrollram(*this, "scrollram"), @@ -18,6 +22,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<vsystem_spr_device> m_spr; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_spriteram; required_shared_ptr<UINT16> m_spriteram2; diff --git a/src/mame/includes/tatsumi.h b/src/mame/includes/tatsumi.h index 0b1aac7f23f..14475645a44 100644 --- a/src/mame/includes/tatsumi.h +++ b/src/mame/includes/tatsumi.h @@ -1,7 +1,9 @@ // license:BSD-3-Clause // copyright-holders:Bryan McPhail + #include "sound/okim6295.h" #include "cpu/m68000/m68000.h" +#include "machine/gen_latch.h" class tatsumi_state : public driver_device { @@ -15,6 +17,7 @@ public: m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_videoram(*this, "videoram"), m_cyclwarr_cpua_ram(*this, "cw_cpua_ram"), m_cyclwarr_cpub_ram(*this, "cw_cpub_ram"), @@ -41,6 +44,7 @@ public: required_device<okim6295_device> m_oki; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; optional_shared_ptr<UINT16> m_videoram; optional_shared_ptr<UINT16> m_cyclwarr_cpua_ram; diff --git a/src/mame/includes/tbowl.h b/src/mame/includes/tbowl.h index 523cf8c0595..087bc5130a7 100644 --- a/src/mame/includes/tbowl.h +++ b/src/mame/includes/tbowl.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:David Haywood + +#include "machine/gen_latch.h" #include "sound/msm5205.h" #include "video/tecmo_spr.h" @@ -15,6 +17,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_sprgen(*this, "spritegen"), + m_soundlatch(*this, "soundlatch"), m_txvideoram(*this, "txvideoram"), m_bgvideoram(*this, "bgvideoram"), m_bg2videoram(*this, "bg2videoram"), @@ -28,6 +31,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; required_device<tecmo_spr_device> m_sprgen; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_txvideoram; required_shared_ptr<UINT8> m_bgvideoram; diff --git a/src/mame/includes/tecmo.h b/src/mame/includes/tecmo.h index aed50ccd174..c342e21eae6 100644 --- a/src/mame/includes/tecmo.h +++ b/src/mame/includes/tecmo.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria + +#include "machine/gen_latch.h" #include "sound/msm5205.h" #include "video/tecmo_spr.h" @@ -14,6 +16,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_sprgen(*this, "spritegen"), + m_soundlatch(*this, "soundlatch"), m_txvideoram(*this, "txvideoram"), m_fgvideoram(*this, "fgvideoram"), m_bgvideoram(*this, "bgvideoram"), @@ -25,6 +28,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; required_device<tecmo_spr_device> m_sprgen; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_txvideoram; required_shared_ptr<UINT8> m_fgvideoram; diff --git a/src/mame/includes/tecmo16.h b/src/mame/includes/tecmo16.h index f4a10d1f5be..7017d4f7f3e 100644 --- a/src/mame/includes/tecmo16.h +++ b/src/mame/includes/tecmo16.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Hau, Nicola Salmoria + +#include "machine/gen_latch.h" #include "video/tecmo_spr.h" #include "video/tecmo_mix.h" @@ -15,6 +17,7 @@ public: m_palette(*this, "palette"), m_sprgen(*this, "spritegen"), m_mixer(*this, "mixer"), + m_soundlatch(*this, "soundlatch"), m_videoram(*this, "videoram"), m_colorram(*this, "colorram"), m_videoram2(*this, "videoram2"), @@ -30,6 +33,7 @@ public: required_device<palette_device> m_palette; required_device<tecmo_spr_device> m_sprgen; required_device<tecmo_mix_device> m_mixer; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_videoram; required_shared_ptr<UINT16> m_colorram; diff --git a/src/mame/includes/tecmosys.h b/src/mame/includes/tecmosys.h index 7f39d3b3bf3..17b082c86cf 100644 --- a/src/mame/includes/tecmosys.h +++ b/src/mame/includes/tecmosys.h @@ -5,7 +5,9 @@ tecmosys protection simulation ***************************************************************************/ + #include "machine/eepromser.h" +#include "machine/gen_latch.h" #include "machine/watchdog.h" class tecmosys_state : public driver_device @@ -20,6 +22,8 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2"), m_spriteram(*this, "spriteram"), m_tilemap_paletteram16(*this, "tmap_palette"), m_bg2tilemap_ram(*this, "bg2tilemap_ram"), @@ -42,6 +46,8 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; + required_device<generic_latch_8_device> m_soundlatch2; required_shared_ptr<UINT16> m_spriteram; required_shared_ptr<UINT16> m_tilemap_paletteram16; @@ -91,7 +97,6 @@ public: DECLARE_WRITE16_MEMBER(bg2_tilemap_lineram_w); DECLARE_READ16_MEMBER(eeprom_r); DECLARE_WRITE16_MEMBER(eeprom_w); - DECLARE_WRITE_LINE_MEMBER(sound_irq); DECLARE_DRIVER_INIT(tkdensha); DECLARE_DRIVER_INIT(deroon); diff --git a/src/mame/includes/tehkanwc.h b/src/mame/includes/tehkanwc.h index 22f98d76586..3202531818e 100644 --- a/src/mame/includes/tehkanwc.h +++ b/src/mame/includes/tehkanwc.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Ernesto Corvi, Roberto Fresca + +#include "machine/gen_latch.h" #include "sound/msm5205.h" class tehkanwc_state : public driver_device @@ -18,6 +20,8 @@ public: m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2"), m_videoram(*this, "videoram"), m_colorram(*this, "colorram"), m_videoram2(*this, "videoram2"), @@ -29,6 +33,8 @@ public: required_device<msm5205_device> m_msm; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; + required_device<generic_latch_8_device> m_soundlatch2; required_shared_ptr<UINT8> m_videoram; required_shared_ptr<UINT8> m_colorram; diff --git a/src/mame/includes/thedeep.h b/src/mame/includes/thedeep.h index c95574628b9..341efdb0b3b 100644 --- a/src/mame/includes/thedeep.h +++ b/src/mame/includes/thedeep.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Luca Elia + +#include "machine/gen_latch.h" #include "video/decmxc06.h" @@ -13,12 +15,13 @@ public: m_mcu(*this, "mcu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_spritegen(*this, "spritegen"), + m_soundlatch(*this, "soundlatch"), m_spriteram(*this, "spriteram"), m_vram_0(*this, "vram_0"), m_vram_1(*this, "vram_1"), m_scroll(*this, "scroll"), - m_scroll2(*this, "scroll2"), - m_spritegen(*this, "spritegen") + m_scroll2(*this, "scroll2") { } required_device<cpu_device> m_maincpu; @@ -26,13 +29,14 @@ public: required_device<cpu_device> m_mcu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<deco_mxc06_device> m_spritegen; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_spriteram; required_shared_ptr<UINT8> m_vram_0; required_shared_ptr<UINT8> m_vram_1; required_shared_ptr<UINT8> m_scroll; required_shared_ptr<UINT8> m_scroll2; - required_device<deco_mxc06_device> m_spritegen; int m_nmi_enable; UINT8 m_protection_command; diff --git a/src/mame/includes/tigeroad.h b/src/mame/includes/tigeroad.h index 35f37c18a89..0dbe96a99b5 100644 --- a/src/mame/includes/tigeroad.h +++ b/src/mame/includes/tigeroad.h @@ -51,7 +51,6 @@ public: virtual void video_start() override; UINT32 screen_update_tigeroad(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void f1dream_protection_w(address_space &space); - DECLARE_WRITE_LINE_MEMBER(irqhandler); required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; optional_device<msm5205_device> m_msm; diff --git a/src/mame/includes/timelimt.h b/src/mame/includes/timelimt.h index 7b7af434c15..0b8da8c3398 100644 --- a/src/mame/includes/timelimt.h +++ b/src/mame/includes/timelimt.h @@ -1,5 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Ernesto Corvi + class timelimt_state : public driver_device { public: diff --git a/src/mame/includes/tnzs.h b/src/mame/includes/tnzs.h index 9ac5c6688da..3020bfc0ebc 100644 --- a/src/mame/includes/tnzs.h +++ b/src/mame/includes/tnzs.h @@ -1,10 +1,12 @@ // license:BSD-3-Clause // copyright-holders:Luca Elia, Mirko Buffoni, Takahiro Nogi + #include "sound/dac.h" #include "sound/samples.h" #include "video/seta001.h" #include "cpu/mcs48/mcs48.h" #include "machine/bankdev.h" +#include "machine/gen_latch.h" #define MAX_SAMPLES 0x2f /* max samples */ @@ -35,6 +37,7 @@ public: m_dac(*this, "dac"), m_samples(*this, "samples"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_mainbank(*this, "mainbank"), m_subbank(*this, "subbank"), m_audiobank(*this, "audiobank"), @@ -58,6 +61,7 @@ public: optional_device<dac_device> m_dac; optional_device<samples_device> m_samples; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; optional_device<address_map_bank_device> m_mainbank; optional_memory_bank m_subbank; /* optional because of reuse from cchance.c */ optional_memory_bank m_audiobank; diff --git a/src/mame/includes/toaplan2.h b/src/mame/includes/toaplan2.h index 198cd1ce6ec..660d809899f 100644 --- a/src/mame/includes/toaplan2.h +++ b/src/mame/includes/toaplan2.h @@ -1,5 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Quench, Yochizo, David Haywood + /**************** Machine stuff ******************/ //#define USE_HD64x180 /* Define if CPU support is available */ //#define TRUXTON2_STEREO /* Uncomment to hear truxton2 music in stereo */ @@ -9,6 +10,7 @@ #include "cpu/m68000/m68000.h" #include "machine/eepromser.h" +#include "machine/gen_latch.h" #include "machine/nmk112.h" #include "machine/upd4992.h" #include "video/gp9001.h" @@ -43,7 +45,9 @@ public: m_rtc(*this, "rtc"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), + m_soundlatch2(*this, "soundlatch2") { } optional_shared_ptr<UINT8> m_shared_ram; // 8 bit RAM shared between 68K and sound CPU optional_shared_ptr<UINT16> m_shared_ram16; // Really 8 bit RAM connected to Z180 @@ -66,6 +70,8 @@ public: optional_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; // batrider and bgaregga and batsugun + optional_device<generic_latch_8_device> m_soundlatch2; UINT16 m_mcu_data; INT8 m_old_p1_paddle_h; /* For Ghox */ diff --git a/src/mame/includes/toki.h b/src/mame/includes/toki.h index 23718749380..ca8af3876ee 100644 --- a/src/mame/includes/toki.h +++ b/src/mame/includes/toki.h @@ -1,6 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Jarek Parchanski + #include "audio/seibu.h" +#include "machine/gen_latch.h" #include "sound/msm5205.h" #include "video/bufsprite.h" @@ -16,7 +18,8 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), - m_spriteram(*this, "spriteram") , + m_soundlatch(*this, "soundlatch"), + m_spriteram(*this, "spriteram"), m_background1_videoram(*this, "bg1_vram"), m_background2_videoram(*this, "bg2_vram"), m_videoram(*this, "videoram"), @@ -29,6 +32,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; // tokib required_device<buffered_spriteram16_device> m_spriteram; required_shared_ptr<UINT16> m_background1_videoram; diff --git a/src/mame/includes/tsamurai.h b/src/mame/includes/tsamurai.h index 2db05642d68..cd371126147 100644 --- a/src/mame/includes/tsamurai.h +++ b/src/mame/includes/tsamurai.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Phil Stroffolino + +#include "machine/gen_latch.h" + class tsamurai_state : public driver_device { public: @@ -11,6 +14,7 @@ public: m_audio3(*this, "audio3"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_videoram(*this, "videoram"), m_colorram(*this, "colorram"), m_bg_videoram(*this, "bg_videoram"), @@ -22,6 +26,7 @@ public: optional_device<cpu_device> m_audio3; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; // vsgongf only required_shared_ptr<UINT8> m_videoram; optional_shared_ptr<UINT8> m_colorram; diff --git a/src/mame/includes/vball.h b/src/mame/includes/vball.h index ad1c41d9a07..65613c99715 100644 --- a/src/mame/includes/vball.h +++ b/src/mame/includes/vball.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Paul Hampson + +#include "machine/gen_latch.h" + class vball_state : public driver_device { public: @@ -10,6 +13,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_attribram(*this, "attribram"), m_videoram(*this, "videoram"), m_scrolly_lo(*this, "scrolly_lo"), @@ -20,6 +24,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_attribram; required_shared_ptr<UINT8> m_videoram; diff --git a/src/mame/includes/volfied.h b/src/mame/includes/volfied.h index b809e001d8c..f9e256e489a 100644 --- a/src/mame/includes/volfied.h +++ b/src/mame/includes/volfied.h @@ -60,9 +60,8 @@ public: UINT32 screen_update_volfied(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(volfied_timer_callback); void refresh_pixel_layer( bitmap_ind16 &bitmap ); - void volfied_cchip_init( ); - void volfied_cchip_reset( ); - DECLARE_WRITE_LINE_MEMBER(irqhandler); + void volfied_cchip_init(); + void volfied_cchip_reset(); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; diff --git a/src/mame/includes/wc90.h b/src/mame/includes/wc90.h index 46944d5da83..0fafbf92886 100644 --- a/src/mame/includes/wc90.h +++ b/src/mame/includes/wc90.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Ernesto Corvi + +#include "machine/gen_latch.h" #include "video/tecmo_spr.h" class wc90_state : public driver_device @@ -12,6 +14,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_sprgen(*this, "spritegen"), + m_soundlatch(*this, "soundlatch"), m_fgvideoram(*this, "fgvideoram"), m_bgvideoram(*this, "bgvideoram"), m_txvideoram(*this, "txvideoram"), @@ -36,6 +39,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; required_device<tecmo_spr_device> m_sprgen; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_fgvideoram; required_shared_ptr<UINT8> m_bgvideoram; diff --git a/src/mame/includes/wc90b.h b/src/mame/includes/wc90b.h index c4c81289a3a..7140969b407 100644 --- a/src/mame/includes/wc90b.h +++ b/src/mame/includes/wc90b.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Ernesto Corvi + +#include "machine/gen_latch.h" #include "sound/msm5205.h" class wc90b_state : public driver_device @@ -12,6 +14,7 @@ public: m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_fgvideoram(*this, "fgvideoram"), m_bgvideoram(*this, "bgvideoram"), m_txvideoram(*this, "txvideoram"), @@ -27,6 +30,7 @@ public: required_device<msm5205_device> m_msm; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_fgvideoram; required_shared_ptr<UINT8> m_bgvideoram; diff --git a/src/mame/includes/welltris.h b/src/mame/includes/welltris.h index cedd5ab7385..aac5479d961 100644 --- a/src/mame/includes/welltris.h +++ b/src/mame/includes/welltris.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:David Haywood + +#include "machine/gen_latch.h" #include "video/vsystem_spr2.h" class welltris_state : public driver_device @@ -11,6 +13,7 @@ public: m_audiocpu(*this, "audiocpu"), m_spr_old(*this, "vsystem_spr_old"), m_gfxdecode(*this, "gfxdecode"), + m_soundlatch(*this, "soundlatch"), m_spriteram(*this, "spriteram"), m_pixelram(*this, "pixelram"), m_charvideoram(*this, "charvideoram") { } @@ -20,6 +23,7 @@ public: required_device<cpu_device> m_audiocpu; required_device<vsystem_spr2_device> m_spr_old; required_device<gfxdecode_device> m_gfxdecode; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_spriteram; required_shared_ptr<UINT16> m_pixelram; @@ -41,7 +45,6 @@ public: DECLARE_WRITE16_MEMBER(gfxbank_w); DECLARE_WRITE16_MEMBER(scrollreg_w); DECLARE_WRITE16_MEMBER(charvideoram_w); - DECLARE_WRITE_LINE_MEMBER(irqhandler); DECLARE_CUSTOM_INPUT_MEMBER(pending_sound_r); diff --git a/src/mame/includes/wgp.h b/src/mame/includes/wgp.h index d5298b6eaac..1b0842552a3 100644 --- a/src/mame/includes/wgp.h +++ b/src/mame/includes/wgp.h @@ -105,7 +105,6 @@ public: void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs ); void wgp_piv_layer_draw( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer, int flags, UINT32 priority ); void parse_control(); - DECLARE_WRITE_LINE_MEMBER(irqhandler); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; diff --git a/src/mame/includes/wwfsstar.h b/src/mame/includes/wwfsstar.h index 70fdd5dfab3..da7d6cfc0ff 100644 --- a/src/mame/includes/wwfsstar.h +++ b/src/mame/includes/wwfsstar.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:David Haywood + +#include "machine/gen_latch.h" + class wwfsstar_state : public driver_device { public: @@ -10,6 +13,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_spriteram(*this, "spriteram"), m_fg0_videoram(*this, "fg0_videoram"), m_bg0_videoram(*this, "bg0_videoram") { } @@ -19,6 +23,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT16> m_spriteram; required_shared_ptr<UINT16> m_fg0_videoram; diff --git a/src/mame/includes/xain.h b/src/mame/includes/xain.h index ad7c14cfdb9..db61f38e425 100644 --- a/src/mame/includes/xain.h +++ b/src/mame/includes/xain.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Carlos A. Lozano, Rob Rosenbrock, Phil Stroffolino + +#include "machine/gen_latch.h" + class xain_state : public driver_device { public: @@ -12,6 +15,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_charram(*this, "charram"), m_bgram0(*this, "bgram0"), m_bgram1(*this, "bgram1"), @@ -24,6 +28,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<UINT8> m_charram; required_shared_ptr<UINT8> m_bgram0; diff --git a/src/mame/includes/yunsun16.h b/src/mame/includes/yunsun16.h index 0e21a85b962..90c20686d8f 100644 --- a/src/mame/includes/yunsun16.h +++ b/src/mame/includes/yunsun16.h @@ -1,11 +1,14 @@ // license:BSD-3-Clause // copyright-holders:Luca Elia + /************************************************************************* Yun Sung 16 Bit Games *************************************************************************/ +#include "machine/gen_latch.h" + class yunsun16_state : public driver_device { public: @@ -16,6 +19,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_vram_0(*this, "vram_0"), m_vram_1(*this, "vram_1"), m_scrollram_0(*this, "scrollram_0"), @@ -29,6 +33,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; // not shocking /* memory pointers */ required_shared_ptr<UINT16> m_vram_0; diff --git a/src/mame/includes/yunsung8.h b/src/mame/includes/yunsung8.h index 9fb440e8d9a..3d6c0e9982f 100644 --- a/src/mame/includes/yunsung8.h +++ b/src/mame/includes/yunsung8.h @@ -5,6 +5,7 @@ Yun Sung 8 Bit Games *************************************************************************/ + #include "sound/msm5205.h" class yunsung8_state : public driver_device diff --git a/src/mame/layout/fidel_eas.lay b/src/mame/layout/fidel_eas.lay new file mode 100644 index 00000000000..f97db3ef9b4 --- /dev/null +++ b/src/mame/layout/fidel_eas.lay @@ -0,0 +1,376 @@ +<?xml version="1.0"?> +<mamelayout version="2"> + +<!-- define elements --> + + <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element> + + <element name="digit" defstate="0"> + <led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg> + </element> + + <element name="led" defstate="0"> + <disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk> + <disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk> + </element> + + <element name="hl" defstate="0"> + <text string=" "> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="0.0" green="0.0" blue="0.0" /> + </text> + <disk state="1"> + <bounds x="0.12" y="0.12" width="0.76" height="0.76" /> + <color red="1.0" green="1.0" blue="1.0" /> + </disk> + </element> + <element name="but" defstate="0"> + <disk state="0"><color red="0.17" green="0.15" blue="0.15" /></disk> + <disk state="1"><color red="0.34" green="0.3" blue="0.3" /></disk> + </element> + + <element name="black"><rect><color red="0.17" green="0.15" blue="0.15" /></rect></element> + <element name="white"><rect><color red="0.81" green="0.8" blue="0.79" /></rect></element> + <element name="disk_black"><disk><color red="0.17" green="0.15" blue="0.15" /></disk></element> + <element name="disk_white"><disk><color red="0.81" green="0.8" blue="0.79" /></disk></element> + + <element name="text_1"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_2"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_3"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_4"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_5"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_6"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_7"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_8"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + + <element name="text_a"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_b"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_c"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_d"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_e"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_f"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_g"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_h"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + + +<!-- build screen --> + + <view name="Internal Layout"> + <bounds left="-2" right="88" top="-2" bottom="100.5" /> + <bezel element="static_black"> + <bounds left="-2" right="88" top="-2" bottom="100.5" /> + </bezel> + + <bezel element="white"><bounds x="-2.5" y="-2.5" width="91" height="90.5" /></bezel> + + <!-- chessboard coords --> + + <bezel element="text_8"><bounds x="-0.8" y="7" width="2" height="2" /></bezel> + <bezel element="text_7"><bounds x="-0.8" y="17" width="2" height="2" /></bezel> + <bezel element="text_6"><bounds x="-0.8" y="27" width="2" height="2" /></bezel> + <bezel element="text_5"><bounds x="-0.8" y="37" width="2" height="2" /></bezel> + <bezel element="text_4"><bounds x="-0.8" y="47" width="2" height="2" /></bezel> + <bezel element="text_3"><bounds x="-0.8" y="57" width="2" height="2" /></bezel> + <bezel element="text_2"><bounds x="-0.8" y="67" width="2" height="2" /></bezel> + <bezel element="text_1"><bounds x="-0.8" y="77" width="2" height="2" /></bezel> + + <bezel element="text_a"><bounds x="7" y="85" width="2" height="2" /></bezel> + <bezel element="text_b"><bounds x="17" y="85" width="2" height="2" /></bezel> + <bezel element="text_c"><bounds x="27" y="85" width="2" height="2" /></bezel> + <bezel element="text_d"><bounds x="37" y="85" width="2" height="2" /></bezel> + <bezel element="text_e"><bounds x="47" y="85" width="2" height="2" /></bezel> + <bezel element="text_f"><bounds x="57" y="85" width="2" height="2" /></bezel> + <bezel element="text_g"><bounds x="67" y="85" width="2" height="2" /></bezel> + <bezel element="text_h"><bounds x="77" y="85" width="2" height="2" /></bezel> + + <!-- chessboard bezel --> + + <bezel element="black"><bounds x="2" y="2" width="82" height="82" /></bezel> + <bezel element="white"><bounds x="3" y="3" width="80" height="80" /></bezel> + + <bezel element="black"><bounds x="13" y="2.5" width="10" height="10.5" /></bezel> + <bezel element="black"><bounds x="33" y="2.5" width="10" height="10.5" /></bezel> + <bezel element="black"><bounds x="53" y="2.5" width="10" height="10.5" /></bezel> + <bezel element="black"><bounds x="73" y="2.5" width="10.5" height="10.5" /></bezel> + + <bezel element="black"><bounds x="2.5" y="13" width="10.5" height="10" /></bezel> + <bezel element="black"><bounds x="23" y="13" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="43" y="13" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="63" y="13" width="10" height="10" /></bezel> + + <bezel element="black"><bounds x="13" y="23" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="33" y="23" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="53" y="23" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="73" y="23" width="10.5" height="10" /></bezel> + + <bezel element="black"><bounds x="2.5" y="33" width="10.5" height="10" /></bezel> + <bezel element="black"><bounds x="23" y="33" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="43" y="33" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="63" y="33" width="10" height="10" /></bezel> + + <bezel element="black"><bounds x="13" y="43" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="33" y="43" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="53" y="43" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="73" y="43" width="10.5" height="10" /></bezel> + + <bezel element="black"><bounds x="2.5" y="53" width="10.5" height="10" /></bezel> + <bezel element="black"><bounds x="23" y="53" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="43" y="53" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="63" y="53" width="10" height="10" /></bezel> + + <bezel element="black"><bounds x="13" y="63" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="33" y="63" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="53" y="63" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="73" y="63" width="10.5" height="10" /></bezel> + + <bezel element="black"><bounds x="2.5" y="73" width="10.5" height="10.5" /></bezel> + <bezel element="black"><bounds x="23" y="73" width="10" height="10.5" /></bezel> + <bezel element="black"><bounds x="43" y="73" width="10" height="10.5" /></bezel> + <bezel element="black"><bounds x="63" y="73" width="10" height="10.5" /></bezel> + + <!-- chessboard leds --> + + <bezel name="4.7" element="led"><bounds x="3.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.7" element="led"><bounds x="13.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.7" element="led"><bounds x="23.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.7" element="led"><bounds x="33.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.7" element="led"><bounds x="43.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.7" element="led"><bounds x="53.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.7" element="led"><bounds x="63.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.7" element="led"><bounds x="73.2" y="11.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.6" element="led"><bounds x="3.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.6" element="led"><bounds x="13.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.6" element="led"><bounds x="23.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.6" element="led"><bounds x="33.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.6" element="led"><bounds x="43.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.6" element="led"><bounds x="53.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.6" element="led"><bounds x="63.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.6" element="led"><bounds x="73.2" y="21.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.5" element="led"><bounds x="3.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.5" element="led"><bounds x="13.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.5" element="led"><bounds x="23.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.5" element="led"><bounds x="33.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.5" element="led"><bounds x="43.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.5" element="led"><bounds x="53.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.5" element="led"><bounds x="63.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.5" element="led"><bounds x="73.2" y="31.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.4" element="led"><bounds x="3.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.4" element="led"><bounds x="13.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.4" element="led"><bounds x="23.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.4" element="led"><bounds x="33.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.4" element="led"><bounds x="43.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.4" element="led"><bounds x="53.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.4" element="led"><bounds x="63.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.4" element="led"><bounds x="73.2" y="41.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.3" element="led"><bounds x="3.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.3" element="led"><bounds x="13.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.3" element="led"><bounds x="23.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.3" element="led"><bounds x="33.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.3" element="led"><bounds x="43.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.3" element="led"><bounds x="53.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.3" element="led"><bounds x="63.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.3" element="led"><bounds x="73.2" y="51.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.2" element="led"><bounds x="3.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.2" element="led"><bounds x="13.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.2" element="led"><bounds x="23.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.2" element="led"><bounds x="33.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.2" element="led"><bounds x="43.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.2" element="led"><bounds x="53.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.2" element="led"><bounds x="63.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.2" element="led"><bounds x="73.2" y="61.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.1" element="led"><bounds x="3.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.1" element="led"><bounds x="13.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.1" element="led"><bounds x="23.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.1" element="led"><bounds x="33.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.1" element="led"><bounds x="43.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.1" element="led"><bounds x="53.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.1" element="led"><bounds x="63.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.1" element="led"><bounds x="73.2" y="71.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.0" element="led"><bounds x="3.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.0" element="led"><bounds x="13.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.0" element="led"><bounds x="23.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.0" element="led"><bounds x="33.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.0" element="led"><bounds x="43.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.0" element="led"><bounds x="53.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.0" element="led"><bounds x="63.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.0" element="led"><bounds x="73.2" y="81.3" width="1.5" height="1.5" /></bezel> + + <!-- chessboard sensors --> + + <bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="3" y="3" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="13" y="3" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="23" y="3" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="33" y="3" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="43" y="3" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x01"><bounds x="53" y="3" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x01"><bounds x="63" y="3" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x01"><bounds x="73" y="3" width="10" height="10" /><color alpha="0.2" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="3" y="13" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="13" y="13" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="23" y="13" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="33" y="13" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x02"><bounds x="43" y="13" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x02"><bounds x="53" y="13" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x02"><bounds x="63" y="13" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x02"><bounds x="73" y="13" width="10" height="10" /><color alpha="0.4" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="3" y="23" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="13" y="23" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="23" y="23" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="33" y="23" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x04"><bounds x="43" y="23" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x04"><bounds x="53" y="23" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x04"><bounds x="63" y="23" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x04"><bounds x="73" y="23" width="10" height="10" /><color alpha="0.2" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="3" y="33" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="13" y="33" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="23" y="33" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="33" y="33" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="43" y="33" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x08"><bounds x="53" y="33" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x08"><bounds x="63" y="33" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x08"><bounds x="73" y="33" width="10" height="10" /><color alpha="0.4" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x10"><bounds x="3" y="43" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x10"><bounds x="13" y="43" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x10"><bounds x="23" y="43" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x10"><bounds x="33" y="43" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x10"><bounds x="43" y="43" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x10"><bounds x="53" y="43" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x10"><bounds x="63" y="43" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x10"><bounds x="73" y="43" width="10" height="10" /><color alpha="0.2" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x20"><bounds x="3" y="53" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x20"><bounds x="13" y="53" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x20"><bounds x="23" y="53" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x20"><bounds x="33" y="53" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x20"><bounds x="43" y="53" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x20"><bounds x="53" y="53" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x20"><bounds x="63" y="53" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x20"><bounds x="73" y="53" width="10" height="10" /><color alpha="0.4" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x40"><bounds x="3" y="63" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x40"><bounds x="13" y="63" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x40"><bounds x="23" y="63" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x40"><bounds x="33" y="63" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x40"><bounds x="43" y="63" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x40"><bounds x="53" y="63" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x40"><bounds x="63" y="63" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x40"><bounds x="73" y="63" width="10" height="10" /><color alpha="0.2" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x80"><bounds x="3" y="73" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x80"><bounds x="13" y="73" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x80"><bounds x="23" y="73" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x80"><bounds x="33" y="73" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x80"><bounds x="43" y="73" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x80"><bounds x="53" y="73" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x80"><bounds x="63" y="73" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x80"><bounds x="73" y="73" width="10" height="10" /><color alpha="0.4" /></bezel> + + <!-- bottom side --> + + <bezel name="12.0" element="led"><bounds x="42" y="90" width="1.5" height="1.5" /></bezel> + <bezel name="12.1" element="led"><bounds x="45" y="90" width="1.5" height="1.5" /></bezel> + <bezel name="12.2" element="led"><bounds x="48" y="90" width="1.5" height="1.5" /></bezel> + <bezel name="12.3" element="led"><bounds x="51" y="90" width="1.5" height="1.5" /></bezel> + <bezel name="12.4" element="led"><bounds x="54" y="90" width="1.5" height="1.5" /></bezel> + <bezel name="12.5" element="led"><bounds x="57" y="90" width="1.5" height="1.5" /></bezel> + + <bezel name="12.6" element="led"><bounds x="73.2" y="90" width="1.5" height="1.5" /></bezel> + <bezel name="12.7" element="led"><bounds x="73.2" y="93.5" width="1.5" height="1.5" /></bezel> + + <bezel element="but" inputtag="IN.8" inputmask="0x01"><bounds x="33.9" y="93.5" width="1.5" height="1.5" /></bezel> + <bezel element="but" inputtag="IN.8" inputmask="0x02"><bounds x="36.9" y="93.5" width="1.5" height="1.5" /></bezel> + + <bezel element="but" inputtag="IN.8" inputmask="0x04"><bounds x="42" y="93.5" width="1.5" height="1.5" /></bezel> + <bezel element="but" inputtag="IN.8" inputmask="0x08"><bounds x="45" y="93.5" width="1.5" height="1.5" /></bezel> + <bezel element="but" inputtag="IN.8" inputmask="0x10"><bounds x="48" y="93.5" width="1.5" height="1.5" /></bezel> + <bezel element="but" inputtag="IN.8" inputmask="0x20"><bounds x="51" y="93.5" width="1.5" height="1.5" /></bezel> + <bezel element="but" inputtag="IN.8" inputmask="0x40"><bounds x="54" y="93.5" width="1.5" height="1.5" /></bezel> + <bezel element="but" inputtag="IN.8" inputmask="0x80"><bounds x="57" y="93.5" width="1.5" height="1.5" /></bezel> + + <bezel element="but" inputtag="IN.8" inputmask="0x80"><bounds x="62.1" y="93.5" width="1.5" height="1.5" /></bezel> + <bezel element="but" inputtag="IN.8" inputmask="0x80"><bounds x="65.1" y="93.5" width="1.5" height="1.5" /></bezel> + <bezel element="but" inputtag="IN.8" inputmask="0x80"><bounds x="68.1" y="93.5" width="1.5" height="1.5" /></bezel> + + <!-- panel 7seg leds --> + + <bezel name="digit1" element="digit"> + <bounds x="3" y="90" width="5.66" height="8.5" /> + </bezel> + <bezel name="digit0" element="digit"> + <bounds x="8.66" y="90" width="5.66" height="8.5" /> + </bezel> + <bezel name="digit2" element="digit"> + <bounds x="17.16" y="90" width="5.66" height="8.5" /> + </bezel> + <bezel name="digit3" element="digit"> + <bounds x="22.82" y="90" width="5.66" height="8.5" /> + </bezel> + + <bezel name="0.7" element="led"> + <bounds x="15.58" y="91.5" width="0.85" height="0.85" /> + </bezel> + <bezel name="1.7" element="led"> + <bounds x="15.13" y="96.15" width="0.85" height="0.85" /> + </bezel> + + </view> +</mamelayout> diff --git a/src/mame/layout/fidel_su9.lay b/src/mame/layout/fidel_su9.lay new file mode 100644 index 00000000000..cb934930f23 --- /dev/null +++ b/src/mame/layout/fidel_su9.lay @@ -0,0 +1,524 @@ +<?xml version="1.0"?> +<mamelayout version="2"> + +<!-- layout is a mix of csc and sc9 --> + +<!-- define elements --> + + <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element> + + <element name="digit" defstate="0"> + <led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg> + </element> + + <element name="led" defstate="0"> + <disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk> + <disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk> + </element> + + <element name="hl" defstate="0"> + <text string=" "> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="0.0" green="0.0" blue="0.0" /> + </text> + <disk state="1"> + <bounds x="0.12" y="0.12" width="0.76" height="0.76" /> + <color red="1.0" green="1.0" blue="1.0" /> + </disk> + </element> + <element name="hlb" defstate="0"> + <text string=" "> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="0.0" green="0.0" blue="0.0" /> + </text> + <disk state="1"> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="1.0" green="1.0" blue="1.0" /> + </disk> + </element> + <element name="hlp" defstate="0"> + <text string=" "> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="0.0" green="0.0" blue="0.0" /> + </text> + <rect state="1"> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="1.0" green="1.0" blue="1.0" /> + </rect> + </element> + + <element name="black"><rect><color red="0.17" green="0.15" blue="0.15" /></rect></element> + <element name="white"><rect><color red="0.81" green="0.8" blue="0.79" /></rect></element> + <element name="disk_black"><disk><color red="0.17" green="0.15" blue="0.15" /></disk></element> + <element name="disk_white"><disk><color red="0.81" green="0.8" blue="0.79" /></disk></element> + + <element name="text_1"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_2"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_3"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_4"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_5"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_6"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_7"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_8"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + + <element name="text_a"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_b"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_c"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_d"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_e"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_f"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_g"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + <element name="text_h"> + <rect><color red="0.81" green="0.8" blue="0.79" /></rect> + <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> + </element> + + <element name="text_re"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="RE"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_cl"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="CL"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_pb"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="PB"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_pv"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="PV"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_lv"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="LV"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_tb"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="TB"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_dm"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="DM"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_rv"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="RV"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + + <element name="text_king"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="♔"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_queen"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="♕"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_rook"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="♖"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_bishop"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="♗"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_knight"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="♘"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + <element name="text_pion"> + <disk><color red="0.81" green="0.8" blue="0.79" /></disk> + <text string="♙"><color red="0.17" green="0.15" blue="0.15" /></text> + </element> + + <element name="text_tmp"> + <rect><color red="0.17" green="0.15" blue="0.15" /></rect> + <text string="TM"><color red="0.81" green="0.8" blue="0.79" /></text> + </element> + <element name="text_rvp"> + <rect><color red="0.17" green="0.15" blue="0.15" /></rect> + <text string="RV"><color red="0.81" green="0.8" blue="0.79" /></text> + </element> + <element name="text_speak"> + <rect><color red="0.17" green="0.15" blue="0.15" /></rect> + <text string="spk"><color red="0.81" green="0.8" blue="0.79" /></text> + </element> + <element name="text_stp"> + <rect><color red="0.17" green="0.15" blue="0.15" /></rect> + <text string="ST"><color red="0.81" green="0.8" blue="0.79" /></text> + </element> + <element name="text_dmp"> + <rect><color red="0.17" green="0.15" blue="0.15" /></rect> + <text string="DM"><color red="0.81" green="0.8" blue="0.79" /></text> + </element> + <element name="text_lvp"> + <rect><color red="0.17" green="0.15" blue="0.15" /></rect> + <text string="LV"><color red="0.81" green="0.8" blue="0.79" /></text> + </element> + + +<!-- build screen --> + + <view name="Internal Layout"> + <bounds left="-2" right="100" top="-18" bottom="88" /> + <bezel element="static_black"> + <bounds left="-2" right="100" top="-18" bottom="88" /> + </bezel> + + <bezel element="white"><bounds x="-2.5" y="-2" width="103" height="90.5" /></bezel> + + <!-- chessboard coords --> + + <bezel element="text_8"><bounds x="-0.8" y="7" width="2" height="2" /></bezel> + <bezel element="text_7"><bounds x="-0.8" y="17" width="2" height="2" /></bezel> + <bezel element="text_6"><bounds x="-0.8" y="27" width="2" height="2" /></bezel> + <bezel element="text_5"><bounds x="-0.8" y="37" width="2" height="2" /></bezel> + <bezel element="text_4"><bounds x="-0.8" y="47" width="2" height="2" /></bezel> + <bezel element="text_3"><bounds x="-0.8" y="57" width="2" height="2" /></bezel> + <bezel element="text_2"><bounds x="-0.8" y="67" width="2" height="2" /></bezel> + <bezel element="text_1"><bounds x="-0.8" y="77" width="2" height="2" /></bezel> + + <bezel element="text_a"><bounds x="7" y="85" width="2" height="2" /></bezel> + <bezel element="text_b"><bounds x="17" y="85" width="2" height="2" /></bezel> + <bezel element="text_c"><bounds x="27" y="85" width="2" height="2" /></bezel> + <bezel element="text_d"><bounds x="37" y="85" width="2" height="2" /></bezel> + <bezel element="text_e"><bounds x="47" y="85" width="2" height="2" /></bezel> + <bezel element="text_f"><bounds x="57" y="85" width="2" height="2" /></bezel> + <bezel element="text_g"><bounds x="67" y="85" width="2" height="2" /></bezel> + <bezel element="text_h"><bounds x="77" y="85" width="2" height="2" /></bezel> + + <!-- chessboard bezel --> + + <bezel element="black"><bounds x="2" y="2" width="82" height="82" /></bezel> + <bezel element="white"><bounds x="3" y="3" width="80" height="80" /></bezel> + + <bezel element="black"><bounds x="13" y="2.5" width="10" height="10.5" /></bezel> + <bezel element="black"><bounds x="33" y="2.5" width="10" height="10.5" /></bezel> + <bezel element="black"><bounds x="53" y="2.5" width="10" height="10.5" /></bezel> + <bezel element="black"><bounds x="73" y="2.5" width="10.5" height="10.5" /></bezel> + + <bezel element="black"><bounds x="2.5" y="13" width="10.5" height="10" /></bezel> + <bezel element="black"><bounds x="23" y="13" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="43" y="13" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="63" y="13" width="10" height="10" /></bezel> + + <bezel element="black"><bounds x="13" y="23" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="33" y="23" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="53" y="23" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="73" y="23" width="10.5" height="10" /></bezel> + + <bezel element="black"><bounds x="2.5" y="33" width="10.5" height="10" /></bezel> + <bezel element="black"><bounds x="23" y="33" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="43" y="33" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="63" y="33" width="10" height="10" /></bezel> + + <bezel element="black"><bounds x="13" y="43" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="33" y="43" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="53" y="43" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="73" y="43" width="10.5" height="10" /></bezel> + + <bezel element="black"><bounds x="2.5" y="53" width="10.5" height="10" /></bezel> + <bezel element="black"><bounds x="23" y="53" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="43" y="53" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="63" y="53" width="10" height="10" /></bezel> + + <bezel element="black"><bounds x="13" y="63" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="33" y="63" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="53" y="63" width="10" height="10" /></bezel> + <bezel element="black"><bounds x="73" y="63" width="10.5" height="10" /></bezel> + + <bezel element="black"><bounds x="2.5" y="73" width="10.5" height="10.5" /></bezel> + <bezel element="black"><bounds x="23" y="73" width="10" height="10.5" /></bezel> + <bezel element="black"><bounds x="43" y="73" width="10" height="10.5" /></bezel> + <bezel element="black"><bounds x="63" y="73" width="10" height="10.5" /></bezel> + + <!-- chessboard leds --> + + <bezel name="4.7" element="led"><bounds x="3.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.7" element="led"><bounds x="13.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.7" element="led"><bounds x="23.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.7" element="led"><bounds x="33.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.7" element="led"><bounds x="43.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.7" element="led"><bounds x="53.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.7" element="led"><bounds x="63.2" y="11.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.7" element="led"><bounds x="73.2" y="11.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.6" element="led"><bounds x="3.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.6" element="led"><bounds x="13.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.6" element="led"><bounds x="23.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.6" element="led"><bounds x="33.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.6" element="led"><bounds x="43.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.6" element="led"><bounds x="53.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.6" element="led"><bounds x="63.2" y="21.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.6" element="led"><bounds x="73.2" y="21.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.5" element="led"><bounds x="3.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.5" element="led"><bounds x="13.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.5" element="led"><bounds x="23.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.5" element="led"><bounds x="33.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.5" element="led"><bounds x="43.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.5" element="led"><bounds x="53.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.5" element="led"><bounds x="63.2" y="31.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.5" element="led"><bounds x="73.2" y="31.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.4" element="led"><bounds x="3.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.4" element="led"><bounds x="13.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.4" element="led"><bounds x="23.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.4" element="led"><bounds x="33.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.4" element="led"><bounds x="43.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.4" element="led"><bounds x="53.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.4" element="led"><bounds x="63.2" y="41.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.4" element="led"><bounds x="73.2" y="41.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.3" element="led"><bounds x="3.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.3" element="led"><bounds x="13.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.3" element="led"><bounds x="23.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.3" element="led"><bounds x="33.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.3" element="led"><bounds x="43.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.3" element="led"><bounds x="53.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.3" element="led"><bounds x="63.2" y="51.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.3" element="led"><bounds x="73.2" y="51.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.2" element="led"><bounds x="3.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.2" element="led"><bounds x="13.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.2" element="led"><bounds x="23.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.2" element="led"><bounds x="33.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.2" element="led"><bounds x="43.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.2" element="led"><bounds x="53.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.2" element="led"><bounds x="63.2" y="61.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.2" element="led"><bounds x="73.2" y="61.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.1" element="led"><bounds x="3.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.1" element="led"><bounds x="13.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.1" element="led"><bounds x="23.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.1" element="led"><bounds x="33.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.1" element="led"><bounds x="43.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.1" element="led"><bounds x="53.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.1" element="led"><bounds x="63.2" y="71.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.1" element="led"><bounds x="73.2" y="71.3" width="1.5" height="1.5" /></bezel> + + <bezel name="4.0" element="led"><bounds x="3.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="5.0" element="led"><bounds x="13.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="6.0" element="led"><bounds x="23.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="7.0" element="led"><bounds x="33.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="8.0" element="led"><bounds x="43.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="9.0" element="led"><bounds x="53.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="10.0" element="led"><bounds x="63.2" y="81.3" width="1.5" height="1.5" /></bezel> + <bezel name="11.0" element="led"><bounds x="73.2" y="81.3" width="1.5" height="1.5" /></bezel> + + <!-- chessboard sensors --> + + <bezel element="hl" inputtag="IN.0" inputmask="0x80"><bounds x="3" y="3" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x80"><bounds x="13" y="3" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x80"><bounds x="23" y="3" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x80"><bounds x="33" y="3" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x80"><bounds x="43" y="3" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x80"><bounds x="53" y="3" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x80"><bounds x="63" y="3" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x80"><bounds x="73" y="3" width="10" height="10" /><color alpha="0.2" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x40"><bounds x="3" y="13" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x40"><bounds x="13" y="13" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x40"><bounds x="23" y="13" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x40"><bounds x="33" y="13" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x40"><bounds x="43" y="13" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x40"><bounds x="53" y="13" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x40"><bounds x="63" y="13" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x40"><bounds x="73" y="13" width="10" height="10" /><color alpha="0.4" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x20"><bounds x="3" y="23" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x20"><bounds x="13" y="23" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x20"><bounds x="23" y="23" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x20"><bounds x="33" y="23" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x20"><bounds x="43" y="23" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x20"><bounds x="53" y="23" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x20"><bounds x="63" y="23" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x20"><bounds x="73" y="23" width="10" height="10" /><color alpha="0.2" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x10"><bounds x="3" y="33" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x10"><bounds x="13" y="33" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x10"><bounds x="23" y="33" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x10"><bounds x="33" y="33" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x10"><bounds x="43" y="33" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x10"><bounds x="53" y="33" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x10"><bounds x="63" y="33" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x10"><bounds x="73" y="33" width="10" height="10" /><color alpha="0.4" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="3" y="43" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="13" y="43" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="23" y="43" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="33" y="43" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="43" y="43" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x08"><bounds x="53" y="43" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x08"><bounds x="63" y="43" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x08"><bounds x="73" y="43" width="10" height="10" /><color alpha="0.2" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="3" y="53" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="13" y="53" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="23" y="53" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="33" y="53" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x04"><bounds x="43" y="53" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x04"><bounds x="53" y="53" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x04"><bounds x="63" y="53" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x04"><bounds x="73" y="53" width="10" height="10" /><color alpha="0.4" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="3" y="63" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="13" y="63" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="23" y="63" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="33" y="63" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x02"><bounds x="43" y="63" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x02"><bounds x="53" y="63" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x02"><bounds x="63" y="63" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x02"><bounds x="73" y="63" width="10" height="10" /><color alpha="0.2" /></bezel> + + <bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="3" y="73" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="13" y="73" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="23" y="73" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="33" y="73" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="43" y="73" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.5" inputmask="0x01"><bounds x="53" y="73" width="10" height="10" /><color alpha="0.4" /></bezel> + <bezel element="hl" inputtag="IN.6" inputmask="0x01"><bounds x="63" y="73" width="10" height="10" /><color alpha="0.2" /></bezel> + <bezel element="hl" inputtag="IN.7" inputmask="0x01"><bounds x="73" y="73" width="10" height="10" /><color alpha="0.4" /></bezel> + + <!-- right side --> + + <bezel name="0.7" element="led"><bounds x="91.95" y="7.25" width="1.5" height="1.5" /></bezel> + + <bezel element="text_king"><bounds x="84.01" y="31.1" width="6" height="6" /></bezel> + <bezel element="text_queen"><bounds x="84.01" y="39.9" width="6" height="6" /></bezel> + <bezel element="text_rook"><bounds x="84.01" y="48.7" width="6" height="6" /></bezel> + <bezel element="text_bishop"><bounds x="84.01" y="57.5" width="6" height="6" /></bezel> + <bezel element="text_knight"><bounds x="84.01" y="66.3" width="6" height="6" /></bezel> + <bezel element="text_pion"><bounds x="84.01" y="75.1" width="6" height="6" /></bezel> + + <bezel element="disk_black"><bounds x="89" y="13" width="7.4" height="7.4" /></bezel> + <bezel element="disk_black"><bounds x="89" y="21.8" width="7.4" height="7.4" /></bezel> + <bezel element="disk_black"><bounds x="89" y="30.6" width="7.4" height="7.4" /></bezel> + <bezel element="disk_black"><bounds x="89" y="39.4" width="7.4" height="7.4" /></bezel> + <bezel element="disk_black"><bounds x="89" y="48.2" width="7.4" height="7.4" /></bezel> + <bezel element="disk_black"><bounds x="89" y="57" width="7.4" height="7.4" /></bezel> + <bezel element="disk_black"><bounds x="89" y="65.8" width="7.4" height="7.4" /></bezel> + <bezel element="disk_black"><bounds x="89" y="74.6" width="7.4" height="7.4" /></bezel> + + <bezel element="disk_white"><bounds x="89.7" y="13.7" width="6" height="6" /></bezel> + <bezel element="disk_white"><bounds x="89.7" y="22.5" width="6" height="6" /></bezel> + <bezel element="disk_white"><bounds x="89.7" y="31.3" width="6" height="6" /></bezel> + <bezel element="disk_white"><bounds x="89.7" y="40.1" width="6" height="6" /></bezel> + <bezel element="disk_white"><bounds x="89.7" y="48.9" width="6" height="6" /></bezel> + <bezel element="disk_white"><bounds x="89.7" y="57.7" width="6" height="6" /></bezel> + <bezel element="disk_white"><bounds x="89.7" y="66.5" width="6" height="6" /></bezel> + <bezel element="disk_white"><bounds x="89.7" y="75.3" width="6" height="6" /></bezel> + + <bezel element="text_re"><bounds x="90.2" y="15.2" width="5" height="3" /></bezel> + <bezel element="text_cl"><bounds x="90.2" y="24" width="5" height="3" /></bezel> + <bezel element="text_pb"><bounds x="90.2" y="32.8" width="5" height="3" /></bezel> + <bezel element="text_pv"><bounds x="90.2" y="41.6" width="5" height="3" /></bezel> + <bezel element="text_lv"><bounds x="90.2" y="50.4" width="5" height="3" /></bezel> + <bezel element="text_tb"><bounds x="90.2" y="59.2" width="5" height="3" /></bezel> + <bezel element="text_dm"><bounds x="90.2" y="68" width="5" height="3" /></bezel> + <bezel element="text_rv"><bounds x="90.2" y="76.8" width="5" height="3" /></bezel> + + <bezel element="hlb" inputtag="IN.8" inputmask="0x80"><bounds x="89" y="13" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> + <bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="89" y="21.8" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> + <bezel element="hlb" inputtag="IN.8" inputmask="0x20"><bounds x="89" y="30.6" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> + <bezel element="hlb" inputtag="IN.8" inputmask="0x10"><bounds x="89" y="39.4" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> + <bezel element="hlb" inputtag="IN.8" inputmask="0x08"><bounds x="89" y="48.2" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> + <bezel element="hlb" inputtag="IN.8" inputmask="0x04"><bounds x="89" y="57" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> + <bezel element="hlb" inputtag="IN.8" inputmask="0x02"><bounds x="89" y="65.8" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> + <bezel element="hlb" inputtag="IN.8" inputmask="0x01"><bounds x="89" y="74.6" width="7.4" height="7.4" /><color alpha="0.3" /></bezel> + + <!-- panel 7seg leds --> + + <bezel name="digit3" element="digit"> + <bounds x="33" y="-14.5" width="5.66" height="8.5" /> + </bezel> + <bezel name="digit2" element="digit"> + <bounds x="38.66" y="-14.5" width="5.66" height="8.5" /> + </bezel> + <bezel name="digit1" element="digit"> + <bounds x="47.16" y="-14.5" width="5.66" height="8.5" /> + </bezel> + <bezel name="digit0" element="digit"> + <bounds x="52.82" y="-14.5" width="5.66" height="8.5" /> + </bezel> + + <bezel name="2.7" element="led"> + <bounds x="45.58" y="-13" width="0.85" height="0.85" /> + </bezel> + <bezel name="3.7" element="led"> + <bounds x="45.13" y="-8.35" width="0.85" height="0.85" /> + </bezel> + + <!-- panel buttons --> + + <bezel element="black"><bounds x="73" y="-14.5" width="5" height="3" /></bezel> + <bezel element="text_tmp"><bounds x="73.05" y="-14.45" width="4.9" height="2.9" /></bezel> + <bezel element="hlp" inputtag="IN.2" inputmask="0x100"><bounds x="73" y="-14.5" width="5" height="3" /><color alpha="0.25" /></bezel> + + <bezel element="black"><bounds x="79.2" y="-14.5" width="5" height="3" /></bezel> + <bezel element="text_rvp"><bounds x="79.25" y="-14.45" width="4.9" height="2.9" /></bezel> + <bezel element="hlp" inputtag="IN.1" inputmask="0x100"><bounds x="79.2" y="-14.5" width="5" height="3" /><color alpha="0.25" /></bezel> + + <bezel element="black"><bounds x="85.4" y="-14.5" width="5" height="3" /></bezel> + <bezel element="text_speak"><bounds x="85.45" y="-14.45" width="4.9" height="2.9" /></bezel> + <bezel element="hlp" inputtag="IN.0" inputmask="0x100"><bounds x="85.4" y="-14.5" width="5" height="3" /><color alpha="0.25" /></bezel> + + <bezel element="black"><bounds x="73" y="-9" width="5" height="3" /></bezel> + <bezel element="text_stp"><bounds x="73.05" y="-8.95" width="4.9" height="2.9" /></bezel> + <bezel element="hlp" inputtag="IN.5" inputmask="0x100"><bounds x="73" y="-9" width="5" height="3" /><color alpha="0.25" /></bezel> + + <bezel element="black"><bounds x="79.2" y="-9" width="5" height="3" /></bezel> + <bezel element="text_dmp"><bounds x="79.25" y="-8.95" width="4.9" height="2.9" /></bezel> + <bezel element="hlp" inputtag="IN.4" inputmask="0x100"><bounds x="79.2" y="-9" width="5" height="3" /><color alpha="0.25" /></bezel> + + <bezel element="black"><bounds x="85.4" y="-9" width="5" height="3" /></bezel> + <bezel element="text_lvp"><bounds x="85.45" y="-8.95" width="4.9" height="2.9" /></bezel> + <bezel element="hlp" inputtag="IN.3" inputmask="0x100"><bounds x="85.4" y="-9" width="5" height="3" /><color alpha="0.25" /></bezel> + + </view> +</mamelayout> diff --git a/src/mame/machine/3do.cpp b/src/mame/machine/3do.cpp index cb3de112e79..b172b88cfa4 100644 --- a/src/mame/machine/3do.cpp +++ b/src/mame/machine/3do.cpp @@ -771,8 +771,8 @@ READ32_MEMBER(_3do_state::_3do_clio_r) return m_clio.uncle_rom; default: - if (!space.debugger_access()) - logerror( "%08X: unhandled CLIO read offset = %08X\n", m_maincpu->pc(), offset * 4 ); + if (!space.debugger_access()) + logerror( "%08X: unhandled CLIO read offset = %08X\n", m_maincpu->pc(), offset * 4 ); break; } return 0; diff --git a/src/mame/machine/6883sam.cpp b/src/mame/machine/6883sam.cpp index c3ce94e0fc6..bc9a913f0e6 100644 --- a/src/mame/machine/6883sam.cpp +++ b/src/mame/machine/6883sam.cpp @@ -103,8 +103,8 @@ void sam6883_device::device_start() m_read_res.resolve_safe(0); // install SAM handlers - m_cpu_space->install_read_handler(0xFFC0, 0xFFDF, 0, 0, read8_delegate(FUNC(sam6883_device::read), this)); - m_cpu_space->install_write_handler(0xFFC0, 0xFFDF, 0, 0, write8_delegate(FUNC(sam6883_device::write), this)); + m_cpu_space->install_read_handler(0xFFC0, 0xFFDF, read8_delegate(FUNC(sam6883_device::read), this)); + m_cpu_space->install_write_handler(0xFFC0, 0xFFDF, write8_delegate(FUNC(sam6883_device::write), this)); // save state support save_item(NAME(m_sam_state)); @@ -511,6 +511,8 @@ void sam6883_device::sam_space<_addrstart, _addrend>::point_specific_bank(const if (mask != 0) offset &= mask; + UINT32 mirror = (addrend - addrstart) ^ mask; + // this bank is a memory bank - first ensure that we have a bank if (!memory_bank || !memory_bank->matches_exactly(addrstart, addrend) || (mask != m_mask)) { @@ -519,9 +521,9 @@ void sam6883_device::sam_space<_addrstart, _addrend>::point_specific_bank(const // install it if (is_write) - cpu_space().install_write_bank(addrstart, addrend, mask, 0, buffer); + cpu_space().install_write_bank(addrstart, addrend, mirror, buffer); else - cpu_space().install_read_bank(addrstart, addrend, mask, 0, buffer); + cpu_space().install_read_bank(addrstart, addrend, mirror, buffer); m_mask = mask; // and get it @@ -545,12 +547,12 @@ void sam6883_device::sam_space<_addrstart, _addrend>::point_specific_bank(const if (is_write) { if (!bank->m_whandler.isnull()) - cpu_space().install_write_handler(addrstart, addrend, 0, 0, bank->m_whandler); + cpu_space().install_write_handler(addrstart, addrend, bank->m_whandler); } else { if (!bank->m_rhandler.isnull()) - cpu_space().install_read_handler(addrstart, addrend, 0, 0, bank->m_rhandler); + cpu_space().install_read_handler(addrstart, addrend, bank->m_rhandler); } } } diff --git a/src/mame/machine/abc1600mac.cpp b/src/mame/machine/abc1600mac.cpp index 1c0329463b5..409bf5695b1 100644 --- a/src/mame/machine/abc1600mac.cpp +++ b/src/mame/machine/abc1600mac.cpp @@ -75,6 +75,7 @@ ADDRESS_MAP_END static MACHINE_CONFIG_FRAGMENT( abc1600_mac ) MCFG_WATCHDOG_ADD("watchdog") + MCFG_WATCHDOG_TIME_INIT(attotime::from_msec(1600)) // XTAL_64MHz/8/10/20000/8/8 MACHINE_CONFIG_END machine_config_constructor abc1600_mac_device::device_mconfig_additions() const @@ -92,7 +93,7 @@ ROM_START( abc1600_mac ) ROM_LOAD( "boot 6490356-04.1f", 0x0000, 0x4000, CRC(9372f6f2) SHA1(86f0681f7ef8dd190b49eda5e781881582e0c2a4) ) ROM_REGION( 0x104, "plds", 0 ) - ROM_LOAD( "1022 6490351-01.17e", 0x000, 0x104, CRC(5dd00d43) SHA1(a3871f0d796bea9df8f25d41b3169dd4b8ef65ab) ) // MAC register address decoder + ROM_LOAD( "1022 6490351-01.17e", 0x000, 0x104, CRC(5dd00d43) SHA1(a3871f0d796bea9df8f25d41b3169dd4b8ef65ab) ) // PAL16L8 MAC register address decoder ROM_END diff --git a/src/mame/machine/atarigen.cpp b/src/mame/machine/atarigen.cpp index 6c22710e0d3..ab9a2117bc1 100644 --- a/src/mame/machine/atarigen.cpp +++ b/src/mame/machine/atarigen.cpp @@ -1201,7 +1201,7 @@ void atarigen_state::slapstic_configure(cpu_device &device, offs_t base, offs_t // install the memory handlers address_space &program = device.space(AS_PROGRAM); - program.install_readwrite_handler(base, base + 0x7fff, 0, mirror, read16_delegate(FUNC(atarigen_state::slapstic_r), this), write16_delegate(FUNC(atarigen_state::slapstic_w), this)); + program.install_readwrite_handler(base, base + 0x7fff, 0, mirror, 0, read16_delegate(FUNC(atarigen_state::slapstic_r), this), write16_delegate(FUNC(atarigen_state::slapstic_w), this)); m_slapstic = (UINT16 *)mem; // allocate memory for a copy of bank 0 diff --git a/src/mame/machine/atarixga.cpp b/src/mame/machine/atarixga.cpp new file mode 100644 index 00000000000..7680a09005a --- /dev/null +++ b/src/mame/machine/atarixga.cpp @@ -0,0 +1,291 @@ +// license:BSD-3-Clause +// copyright-holders:Morten Shearman Kirkegaard, Samuel Neves, Peter Wilhelmsen +/************************************************************************* + + atarixga.cpp + + Atari XGA encryption FPGA + + ************************************************************************** + + Part numbers: + + 136094-0072 Moto Frenzy + 136095-0072 Space Lords + ? Road Riot's Revenge + 136094-0004A Primal Rage + ? T-Mek + +*************************************************************************/ + +#include "emu.h" +#include "atarixga.h" + + +extern const device_type ATARI_XGA = &device_creator<atari_xga_device>; + +atari_xga_device::atari_xga_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) +: device_t(mconfig, ATARI_XGA, "Atari XGA", tag, owner, clock, "xga", __FILE__), + m_mode(FPGA_RESET), + m_address(0), + m_ciphertext(0) +{ +} + + + +/************************************* + * + * Initialization + * + *************************************/ + +void atari_xga_device::device_start() +{ + m_ram = std::make_unique<UINT16[]>(RAM_WORDS); + + save_pointer(NAME(m_ram.get()), RAM_WORDS * sizeof(UINT16)); + save_item(NAME(m_address)); + save_item(NAME(m_ciphertext)); +} + +void atari_xga_device::device_reset() +{ + memset(m_ram.get(), 0, RAM_WORDS * sizeof(UINT16)); + m_mode = FPGA_RESET; + m_address = 0; + m_ciphertext = 0; +} + + + +/************************************* + * + * Definitions + * + *************************************/ + +// TODO: Add definitions for other games +// Moto Frenzy + +/* key 0x10 is special, it has 15 "identical twins". */ +static const UINT8 kmap[128] = +{ + 0x6B,0x11,0x1B,0x19,0x4B,0x50,0x17,0x09, + 0x5D,0x69,0x43,0x33,0x0F,0x0C,0x28,0x3F, + 0x00,0x20,0x15,0x3C,0x57,0x38,0x00,0x07, + 0x49,0x25,0x61,0x2F,0x2B,0x4E,0x64,0x00, + 0x45,0x41,0x6D,0x52,0x31,0x66,0x22,0x59, + 0x00,0x70,0x6F,0x5B,0x46,0x6E,0x67,0x5A, + 0x26,0x30,0x2C,0x65,0x21,0x3D,0x58,0x00, + 0x5E,0x44,0x0D,0x40,0x6C,0x1C,0x51,0x0A, + 0x35,0x2A,0x13,0x4D,0x63,0x00,0x00,0x3A, + 0x00,0x48,0x54,0x24,0x60,0x1E,0x2E,0x01, + 0x56,0x03,0x37,0x00,0x04,0x00,0x05,0x06, + 0x00,0x55,0x1F,0x02,0x36,0x14,0x00,0x3B, + 0x5F,0x0E,0x1D,0x0B,0x27,0x2D,0x3E,0x00, + 0x00,0x5C,0x47,0x68,0x42,0x53,0x32,0x23, + 0x4A,0x62,0x4F,0x00,0x00,0x16,0x39,0x08, + 0x6A,0x34,0x10,0x29,0x12,0x1A,0x4C,0x18 +}; + + + +/************************************* + * + * Decryption + * + *************************************/ + +UINT16 atari_xga_device::ctz(UINT16 x) +{ + UINT16 n = 0; + if (x == 0) return 16; + if (!(x & 0x00FF)) n += 8, x >>= 8; + if (!(x & 0x000F)) n += 4, x >>= 4; + if (!(x & 0x0003)) n += 2, x >>= 2; + if (!(x & 0x0001)) n += 1, x >>= 1; + return n; +} + +size_t atari_xga_device::popcount(UINT16 x) +{ + size_t count = 0; + while (x != 0) + { + count += 1; + x &= x - 1; + } + return count; +} + +UINT16 atari_xga_device::parity(UINT16 x) +{ + return popcount(x) & 1; +} + +UINT16 atari_xga_device::lfsr1(UINT16 x) +{ + const UINT16 bit = parity(x & 0x8016); + return (x << 1) | bit; +} + +UINT16 atari_xga_device::lfsr2(UINT16 x) +{ + UINT16 bit = parity(x & 0x002D); + return (x >> 1) | (bit << 15); +} + +UINT16 atari_xga_device::powers2(UINT8 k, UINT16 x) +{ + static const UINT16 L[16] = { + 0x5E85,0xBD0B,0x2493,0x17A3, + 0x2F47,0x0005,0x000B,0x0017, + 0x002F,0x005E,0x00BD,0x017A, + 0x02F4,0x05E8,0x0BD0,0x17A1 + }; + + UINT16 t = (x == 16) ? (L[4] ^ L[5]) : L[x]; + + for (size_t i = 0; i < k; ++i) + t = lfsr1(t); + + return t; +} + +UINT16 atari_xga_device::decipher(UINT8 k, UINT16 c) +{ + UINT16 p = 0; + + /* Only 128 keys internally, if high bit set, + then find the 7-bit "twin" by xor 0xA8. */ + if (k & 0x80) + k ^= 0xA8; + + k = kmap[k]; + + if ((c & (c - 1)) == 0) + return powers2(k, ctz(c)); + + for (UINT16 bit = 0; bit < 5; ++bit) + { + if ((c >> bit) & 1) + { + p ^= powers2(k, bit); + } + } + + for (UINT16 bit = 5; bit < 16; ++bit) + { + if ((c >> bit) & 1) + { + p ^= powers2(k, bit + 1); + } + } + + UINT16 x = 0x8010; + for (UINT16 i = 0; i < k + 3; ++i) + { + if (x == c) + { + return (p == 1) ? 0 : lfsr2(p); + } + x = lfsr2(x); + } + + return p; +} + + + +/************************************* + * + * Write/Read access + * + *************************************/ + +WRITE32_MEMBER(atari_xga_device::write) +{ + switch (m_mode) + { + case FPGA_RESET: + return; + + case FPGA_SETKEY: + /* Write table to FPGA SRAM. */ + if (ACCESSING_BITS_16_31) + m_ram[offset << 1] = UINT16 (data >> 16); + if (ACCESSING_BITS_0_15) + m_ram[(offset << 1) + 1] = UINT16(data & 0xFFFF); + break; + + case FPGA_DECIPHER: + /* Send Ciphertext to FPGA for decryption. */ + if (ACCESSING_BITS_16_31) + { + m_address = offset << 2; + m_ciphertext = UINT16(data >> 16); + } + if (ACCESSING_BITS_0_15) + { + m_address = (offset << 2) + 2; + m_ciphertext = UINT16(data & 0xFFFF); + } + break; + } +} + +READ32_MEMBER(atari_xga_device::read) +{ + switch (offset << 2) + { + case 0x0FC0: + m_mode = FPGA_RESET; + break; + case 0x0010: + m_mode = FPGA_SETKEY; + break; + case 0x0020: + m_mode = FPGA_DECIPHER; + break; + } + + if (m_mode == FPGA_RESET) + return 0; + + UINT32 plaintext = 0; + if (m_mode == FPGA_DECIPHER) + { + UINT16 address = (offset << 2) - 0x400; + + if (ACCESSING_BITS_0_15) + address += 2; + + /* Reply with decrypted plaintext */ + if (address == m_address) + { + UINT16 key_offset, key_byte; + + /* Algorithm to select key byte based on offset. */ + key_offset = ((((address >> 4) & 1) ^ 1) << 0) + ^ ((((address >> 2) & 1) ^ 0) << 1) + ^ ((((address >> 8) & 1) ^ 0) << 2) + ^ ((((address >> 3) & 1) ^ 1) << 3) + ^ ((((address >> 1) & 1) ^ 1) << 4) + ^ ((((address >> 6) & 1) ^ 0) << 5) + ^ ((((address >> 7) & 1) ^ 0) << 6) + ^ ((((address >> 5) & 1) ^ 1) << 7) + ^ ((((address >> 9) & 1) ^ 0) << 8) + ^ ((((address >> 10) & 1) ^ 0) << 9); + key_byte = m_ram[key_offset]; + + /* And now for the full magic. */ + plaintext = decipher(key_byte, m_ciphertext); + + if (ACCESSING_BITS_16_31) + plaintext <<= 16; + } + } + + return plaintext; +} diff --git a/src/mame/machine/atarixga.h b/src/mame/machine/atarixga.h new file mode 100644 index 00000000000..710aedb22c2 --- /dev/null +++ b/src/mame/machine/atarixga.h @@ -0,0 +1,54 @@ +// license:BSD-3-Clause +// copyright-holders:Morten Shearman Kirkegaard, Samuel Neves, Peter Wilhelmsen +/************************************************************************* + + atarixga.h + + Atari XGA encryption FPGA + +*************************************************************************/ + +#ifndef __MACHINE_ATARIXGA__ +#define __MACHINE_ATARIXGA__ + +extern const device_type ATARI_XGA; + +class atari_xga_device : public device_t +{ +public: + // construction/destruction + atari_xga_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + DECLARE_WRITE32_MEMBER(write); + DECLARE_READ32_MEMBER(read); + +protected: + virtual void device_start() override; + virtual void device_reset() override; + +private: + static const size_t RAM_WORDS = 2048; + + enum fpga_mode + { + FPGA_RESET, + FPGA_SETKEY, + FPGA_DECIPHER + }; + + UINT16 powers2(UINT8 k, UINT16 x); + UINT16 lfsr2(UINT16 x); + UINT16 lfsr1(UINT16 x); + UINT16 parity(UINT16 x); + size_t popcount(UINT16 x); + UINT16 ctz(UINT16 x); + UINT16 decipher(UINT8 k, UINT16 c); + + fpga_mode m_mode; + UINT16 m_address; // last written address + UINT16 m_ciphertext; // last written ciphertext + std::unique_ptr<UINT16[]> m_ram; // CY7C185-45PC, only 16-Kbit used +}; + + +#endif diff --git a/src/mame/machine/awboard.cpp b/src/mame/machine/awboard.cpp index b9d5a28ced6..03cd59a9118 100644 --- a/src/mame/machine/awboard.cpp +++ b/src/mame/machine/awboard.cpp @@ -301,7 +301,7 @@ READ16_MEMBER(aw_rom_board::pio_r) UINT32 roffset = epr_offset & 0x3ffffff; if (roffset >= (mpr_offset / 2)) roffset += mpr_bank * 0x4000000; - UINT16 retval = (m_region->bytes() > (roffset * 2)) ? m_region->u16(roffset) : 0; // not endian-safe? + UINT16 retval = (m_region->bytes() > (roffset * 2)) ? m_region->u16(roffset) : 0; // not endian-safe? return retval; } diff --git a/src/mame/machine/bebox.cpp b/src/mame/machine/bebox.cpp index 4b89b4b6871..d5f99d9d0a7 100644 --- a/src/mame/machine/bebox.cpp +++ b/src/mame/machine/bebox.cpp @@ -770,7 +770,8 @@ void bebox_state::machine_reset() m_ppc1->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); m_ppc2->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - memcpy(m_flash->space().get_read_ptr(0),memregion("user1")->base(),0x200000); + // Endianness? Bah! + memcpy(m_flash->base(),memregion("user1")->base(),0x200000); } void bebox_state::machine_start() @@ -786,8 +787,8 @@ DRIVER_INIT_MEMBER(bebox_state,bebox) membank("bank2")->set_base(memregion("user2")->base()); /* install MESS managed RAM */ - space_0.install_readwrite_bank(0, m_ram->size() - 1, 0, 0x02000000, "bank3"); - space_1.install_readwrite_bank(0, m_ram->size() - 1, 0, 0x02000000, "bank3"); + space_0.install_readwrite_bank(0, m_ram->size() - 1, 0x02000000, "bank3"); + space_1.install_readwrite_bank(0, m_ram->size() - 1, 0x02000000, "bank3"); membank("bank3")->set_base(m_ram->pointer()); /* The following is a verrrry ugly hack put in to support NetBSD for diff --git a/src/mame/machine/bublbobl.cpp b/src/mame/machine/bublbobl.cpp index df5cf37dbac..1b9a288e153 100644 --- a/src/mame/machine/bublbobl.cpp +++ b/src/mame/machine/bublbobl.cpp @@ -2,7 +2,7 @@ // copyright-holders:Chris Moore, Nicola Salmoria /*************************************************************************** - machine.c + bublbobl.cpp Functions to emulate general aspects of the machine (RAM, ROM, interrupts, I/O ports) @@ -107,7 +107,7 @@ void bublbobl_state::device_timer(emu_timer &timer, device_timer_id id, int para WRITE8_MEMBER(bublbobl_state::bublbobl_sound_command_w) { - soundlatch_byte_w(space, offset, data); + m_soundlatch->write(space, offset, data); synchronize(TIMER_NMI, data); } diff --git a/src/mame/machine/fd1094.cpp b/src/mame/machine/fd1094.cpp index 7616adcd0b9..ed358b97cc2 100644 --- a/src/mame/machine/fd1094.cpp +++ b/src/mame/machine/fd1094.cpp @@ -816,7 +816,7 @@ UINT16 fd1094_device::decrypt_one(offs_t address, UINT16 val, const UINT8 *main_ val = BITSWAP16(val, 15, 9,10,13, 3,12, 0,14, 6, 5, 2,11, 8, 1, 4, 7); if (!global_xor1) if (~val & 0x0800) val ^= 0x3002; // 1,12,13 - if (~val & 0x0020) val ^= 0x0044; // 2,6 + if (true) if (~val & 0x0020) val ^= 0x0044; // 2,6 if (!key_1b) if (~val & 0x0400) val ^= 0x0890; // 4,7,11 if (!global_swap2) if (!key_0c) val ^= 0x0308; // 3,8,9 val ^= 0x6561; diff --git a/src/mame/machine/hp48.cpp b/src/mame/machine/hp48.cpp index 71bb4b656ff..c7674751b16 100644 --- a/src/mame/machine/hp48.cpp +++ b/src/mame/machine/hp48.cpp @@ -644,15 +644,15 @@ void hp48_state::hp48_apply_modules() m_io_addr = 0x100000; /* NCE1 (ROM) is a bit special, so treat it separately */ - space.unmap_readwrite( 0, 0xfffff, 0, 0 ); + space.unmap_readwrite( 0, 0xfffff ); if ( HP49_G_MODEL ) { int bank_lo = (m_bank_switch >> 5) & 3; int bank_hi = (m_bank_switch >> 1) & 15; LOG(( "hp48_apply_modules: low ROM bank is %i\n", bank_lo )); LOG(( "hp48_apply_modules: high ROM bank is %i\n", bank_hi )); - space.install_read_bank( 0x00000, 0x3ffff, 0, 0x80000, "bank5" ); - space.install_read_bank( 0x40000, 0x7ffff, 0, 0x80000, "bank6" ); + space.install_read_bank( 0x00000, 0x3ffff, 0x80000, "bank5" ); + space.install_read_bank( 0x40000, 0x7ffff, 0x80000, "bank6" ); if ( m_rom ) { membank("bank5")->set_base( m_rom + bank_lo * 0x40000 ); @@ -675,21 +675,21 @@ void hp48_state::hp48_apply_modules() /* A19 */ LOG(( "hp48_apply_modules: A19 enabled, NCE3 disabled\n" )); nce3_enable = 0; - space.install_read_bank( 0, 0xfffff, 0, 0, "bank5" ); + space.install_read_bank( 0, 0xfffff, "bank5" ); } else { /* NCE3 */ nce3_enable = m_bank_switch >> 6; LOG(( "hp48_apply_modules: A19 disabled, NCE3 %s\n", nce3_enable ? "enabled" : "disabled" )); - space.install_read_bank( 0, 0x7ffff, 0, 0x80000, "bank5" ); + space.install_read_bank( 0, 0x7ffff, 0x80000, "bank5" ); } if ( m_rom ) membank("bank5")->set_base( m_rom ); } else { - space.install_read_bank( 0, 0x7ffff, 0, 0x80000, "bank5" ); + space.install_read_bank( 0, 0x7ffff, 0x80000, "bank5" ); if ( m_rom ) membank("bank5")->set_base( m_rom ); } @@ -720,25 +720,25 @@ void hp48_state::hp48_apply_modules() } if (m_modules[i].data) - space.install_read_bank( base, end, 0, mirror, bank ); + space.install_read_bank( base, end, mirror, bank ); else { if (!m_modules[i].read.isnull()) - space.install_read_handler( base, end, 0, mirror, m_modules[i].read ); + space.install_read_handler( base, end, 0, mirror, 0, m_modules[i].read ); } if (m_modules[i].isnop) - space.nop_write(base, end, 0, mirror); + space.nop_write(base, end | mirror); else { if (m_modules[i].data) { - space.install_write_bank( base, end, 0, mirror, bank ); + space.install_write_bank( base, end, mirror, bank ); } else { if (!m_modules[i].write.isnull()) - space.install_write_handler( base, end, 0, mirror, m_modules[i].write ); + space.install_write_handler( base, end, 0, mirror, 0, m_modules[i].write ); } } diff --git a/src/mame/machine/jvs13551.cpp b/src/mame/machine/jvs13551.cpp index fa0350e60a0..be82ed40bb8 100644 --- a/src/mame/machine/jvs13551.cpp +++ b/src/mame/machine/jvs13551.cpp @@ -123,8 +123,9 @@ bool sega_837_13551::coin_counters(UINT8 *&buf, UINT8 count) *buf++ = coin_counter[0] >> 8; *buf++ = coin_counter[0]; - if(count > 1) + if(count > 1) { *buf++ = coin_counter[1] >> 8; *buf++ = coin_counter[1]; + } return true; } diff --git a/src/mame/machine/kaneko_calc3.cpp b/src/mame/machine/kaneko_calc3.cpp index 10390dae679..79b20362875 100644 --- a/src/mame/machine/kaneko_calc3.cpp +++ b/src/mame/machine/kaneko_calc3.cpp @@ -1336,11 +1336,11 @@ int kaneko_calc3_device::decompress_table(int tabnum, UINT8* dstram, int dstoffs //printf("save to eeprom\n"); { - address_space &eeprom_space = space.machine().device<eeprom_serial_93cxx_device>(":eeprom")->space(); + eeprom_serial_93cxx_device *eeprom = space.machine().device<eeprom_serial_93cxx_device>(":eeprom"); for (i=0;i<0x80;i++) { - eeprom_space.write_byte(i, space.read_byte(m_eeprom_addr+0x200000+i)); + eeprom->internal_write(i, space.read_byte(m_eeprom_addr+0x200000+i)); } } @@ -1672,11 +1672,11 @@ void kaneko_calc3_device::mcu_run() } #endif { - address_space &eeprom_space = space.machine().device<eeprom_serial_93cxx_device>(":eeprom")->space(); + eeprom_serial_93cxx_device *eeprom = space.machine().device<eeprom_serial_93cxx_device>(":eeprom"); for (i=0;i<0x80;i++) { - space.write_byte(m_eeprom_addr+0x200000+i, eeprom_space.read_byte(i)); + space.write_byte(m_eeprom_addr+0x200000+i, eeprom->internal_read(i)); } } diff --git a/src/mame/machine/kaneko_toybox.cpp b/src/mame/machine/kaneko_toybox.cpp index 73e8927b7ed..ee863a303d7 100644 --- a/src/mame/machine/kaneko_toybox.cpp +++ b/src/mame/machine/kaneko_toybox.cpp @@ -178,11 +178,11 @@ void kaneko_toybox_device::mcu_run() { UINT8* nvdat = (UINT8*)&m_mcuram[mcu_offset]; - address_space &eeprom_space = machine().device<eeprom_serial_93cxx_device>(":eeprom")->space(); + eeprom_serial_93cxx_device *eeprom = machine().device<eeprom_serial_93cxx_device>(":eeprom"); for (int i=0;i<0x80;i++) { - nvdat[i] = eeprom_space.read_byte(i); + nvdat[i] = eeprom->internal_read(i); } logerror("%s : MCU executed command: %04X %04X (load NVRAM settings)\n", machine().describe_context(), mcu_command, mcu_offset*2); @@ -192,11 +192,11 @@ void kaneko_toybox_device::mcu_run() case 0x42: // Write to NVRAM { - address_space &eeprom_space = machine().device<eeprom_serial_93cxx_device>(":eeprom")->space(); + eeprom_serial_93cxx_device *eeprom = machine().device<eeprom_serial_93cxx_device>(":eeprom"); UINT8* nvdat = (UINT8*)&m_mcuram[mcu_offset]; for (int i=0;i<0x80;i++) { - eeprom_space.write_byte(i, nvdat[i]); + eeprom->internal_write(i, nvdat[i]); } logerror("%s : MCU executed command: %04X %04X (save NVRAM settings)\n", machine().describe_context(), mcu_command, mcu_offset*2); @@ -210,12 +210,11 @@ void kaneko_toybox_device::mcu_run() { //memcpy(m_nvram_save, bonkadv_mcu_43, sizeof(bonkadv_mcu_43)); - - address_space &eeprom_space = machine().device<eeprom_serial_93cxx_device>(":eeprom")->space(); + eeprom_serial_93cxx_device *eeprom = machine().device<eeprom_serial_93cxx_device>(":eeprom"); UINT8* nvdat = (UINT8*)&bonkadv_mcu_43[0]; for (int i=0;i<0x80;i++) { - eeprom_space.write_byte(i, nvdat[i]); + eeprom->internal_write(i, nvdat[i]); } logerror("%s : MCU executed command: %04X %04X (restore default NVRAM settings)\n", machine().describe_context(), mcu_command, mcu_offset*2); } diff --git a/src/mame/machine/kc.cpp b/src/mame/machine/kc.cpp index b324f334751..92e379b0eb4 100644 --- a/src/mame/machine/kc.cpp +++ b/src/mame/machine/kc.cpp @@ -309,8 +309,8 @@ void kc_state::update_0x00000() { LOG(("Module at 0x0000\n")); - space.install_read_handler (0x0000, 0x3fff, 0, 0, read8_delegate(FUNC(kc_state::expansion_read), this), 0); - space.install_write_handler(0x0000, 0x3fff, 0, 0, write8_delegate(FUNC(kc_state::expansion_write), this), 0); + space.install_read_handler (0x0000, 0x3fff, read8_delegate(FUNC(kc_state::expansion_read), this), 0); + space.install_write_handler(0x0000, 0x3fff, write8_delegate(FUNC(kc_state::expansion_write), this), 0); } } @@ -321,8 +321,8 @@ void kc_state::update_0x04000() LOG(("Module at 0x4000\n")); - space.install_read_handler (0x4000, 0x7fff, 0, 0, read8_delegate(FUNC(kc_state::expansion_4000_r), this), 0); - space.install_write_handler(0x4000, 0x7fff, 0, 0, write8_delegate(FUNC(kc_state::expansion_4000_w), this), 0); + space.install_read_handler (0x4000, 0x7fff, read8_delegate(FUNC(kc_state::expansion_4000_r), this), 0); + space.install_write_handler(0x4000, 0x7fff, write8_delegate(FUNC(kc_state::expansion_4000_w), this), 0); } @@ -345,8 +345,8 @@ void kc_state::update_0x0c000() { LOG(("Module at 0x0c000\n")); - space.install_read_handler (0xc000, 0xdfff, 0, 0, read8_delegate(FUNC(kc_state::expansion_c000_r), this), 0); - space.install_write_handler(0xc000, 0xdfff, 0, 0, write8_delegate(FUNC(kc_state::expansion_c000_w), this), 0); + space.install_read_handler (0xc000, 0xdfff, read8_delegate(FUNC(kc_state::expansion_c000_r), this), 0); + space.install_write_handler(0xc000, 0xdfff, write8_delegate(FUNC(kc_state::expansion_c000_w), this), 0); } } @@ -368,8 +368,8 @@ void kc_state::update_0x0e000() { LOG(("Module at 0x0e000\n")); - space.install_read_handler (0xe000, 0xffff, 0, 0, read8_delegate(FUNC(kc_state::expansion_e000_r), this), 0); - space.install_write_handler(0xe000, 0xffff, 0, 0, write8_delegate(FUNC(kc_state::expansion_e000_w), this), 0); + space.install_read_handler (0xe000, 0xffff, read8_delegate(FUNC(kc_state::expansion_e000_r), this), 0); + space.install_write_handler(0xe000, 0xffff, write8_delegate(FUNC(kc_state::expansion_e000_w), this), 0); } } @@ -391,8 +391,8 @@ void kc_state::update_0x08000() { LOG(("Module at 0x8000!\n")); - space.install_read_handler(0x8000, 0xbfff, 0, 0, read8_delegate(FUNC(kc_state::expansion_8000_r), this), 0); - space.install_write_handler(0x8000, 0xbfff, 0, 0, write8_delegate(FUNC(kc_state::expansion_8000_w), this), 0); + space.install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(kc_state::expansion_8000_r), this), 0); + space.install_write_handler(0x8000, 0xbfff, write8_delegate(FUNC(kc_state::expansion_8000_w), this), 0); } } @@ -433,8 +433,8 @@ void kc85_4_state::update_0x04000() { LOG(("Module at 0x4000\n")); - space.install_read_handler (0x4000, 0x7fff, 0, 0, read8_delegate(FUNC(kc_state::expansion_4000_r), this), 0); - space.install_write_handler(0x4000, 0x7fff, 0, 0, write8_delegate(FUNC(kc_state::expansion_4000_w), this), 0); + space.install_read_handler (0x4000, 0x7fff, read8_delegate(FUNC(kc_state::expansion_4000_r), this), 0); + space.install_write_handler(0x4000, 0x7fff, write8_delegate(FUNC(kc_state::expansion_4000_w), this), 0); } } @@ -470,8 +470,8 @@ void kc85_4_state::update_0x0c000() { LOG(("Module at 0x0c000\n")); - space.install_read_handler (0xc000, 0xdfff, 0, 0, read8_delegate(FUNC(kc_state::expansion_c000_r), this), 0); - space.install_write_handler(0xc000, 0xdfff, 0, 0, write8_delegate(FUNC(kc_state::expansion_c000_w), this), 0); + space.install_read_handler (0xc000, 0xdfff, read8_delegate(FUNC(kc_state::expansion_c000_r), this), 0); + space.install_write_handler(0xc000, 0xdfff, write8_delegate(FUNC(kc_state::expansion_c000_w), this), 0); } } } @@ -542,8 +542,8 @@ void kc85_4_state::update_0x08000() { LOG(("Module at 0x8000\n")); - space.install_read_handler(0x8000, 0xbfff, 0, 0, read8_delegate(FUNC(kc_state::expansion_8000_r), this), 0); - space.install_write_handler(0x8000, 0xbfff, 0, 0, write8_delegate(FUNC(kc_state::expansion_8000_w), this), 0); + space.install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(kc_state::expansion_8000_r), this), 0); + space.install_write_handler(0x8000, 0xbfff, write8_delegate(FUNC(kc_state::expansion_8000_w), this), 0); } } diff --git a/src/mame/machine/mac.cpp b/src/mame/machine/mac.cpp index a5c1409cbbb..5e1f70bb7c1 100644 --- a/src/mame/machine/mac.cpp +++ b/src/mame/machine/mac.cpp @@ -152,27 +152,27 @@ void mac_state::mac_install_memory(offs_t memory_begin, offs_t memory_end, offs_t memory_size, void *memory_data, int is_rom, const char *bank) { address_space& space = m_maincpu->space(AS_PROGRAM); - offs_t memory_mask; + offs_t memory_mirror; memory_size = MIN(memory_size, (memory_end + 1 - memory_begin)); - memory_mask = memory_size - 1; + memory_mirror = (memory_end - memory_begin) ^ (memory_size - 1); if (!is_rom) { - space.install_readwrite_bank(memory_begin, memory_end, memory_mask, 0, bank); + space.install_readwrite_bank(memory_begin, memory_end, memory_mirror, bank); } else { - space.unmap_write(memory_begin, memory_end, memory_mask, 0); - space.install_read_bank(memory_begin, memory_end, memory_mask, 0, bank); + space.unmap_write(memory_begin, memory_end); + space.install_read_bank(memory_begin, memory_end, memory_mirror, bank); } membank(bank)->set_base(memory_data); if (LOG_MEMORY) { - printf("mac_install_memory(): bank=%s range=[0x%06x...0x%06x] mask=0x%06x ptr=0x%p\n", - bank, memory_begin, memory_end, memory_mask, memory_data); + printf("mac_install_memory(): bank=%s range=[0x%06x...0x%06x] mirror=0x%06x ptr=0x%p\n", + bank, memory_begin, memory_end, memory_mirror, memory_data); } } @@ -355,12 +355,12 @@ void mac_state::v8_resize() static const UINT32 simm_sizes[4] = { 0, 2*1024*1024, 4*1024*1024, 8*1024*1024 }; // re-install ROM in its normal place - size_t rom_mask = memregion("bootrom")->bytes() - 1; - m_maincpu->space(AS_PROGRAM).install_read_bank(0xa00000, 0xafffff, rom_mask, 0, "bankR"); + size_t rom_mirror = 0xfffff ^ (memregion("bootrom")->bytes() - 1); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xa00000, 0xafffff, rom_mirror, "bankR"); membank("bankR")->set_base((void *)memregion("bootrom")->base()); // force unmap of entire RAM region - space.unmap_write(0, 0x9fffff, 0x9fffff, 0); + space.unmap_write(0, 0x9fffff); // LC and Classic II have 2 MB built-in, all other V8-style machines have 4 MB // we reserve the first 2 or 4 MB of mess_ram for the onboard, @@ -447,13 +447,13 @@ void mac_state::set_memory_overlay(int overlay) else if ((m_model == MODEL_MAC_PORTABLE) || (m_model == MODEL_MAC_PB100) || (m_model == MODEL_MAC_IIVX) || (m_model == MODEL_MAC_IIFX)) { address_space& space = m_maincpu->space(AS_PROGRAM); - space.unmap_write(0x000000, 0x9fffff, 0x9fffff, 0); + space.unmap_write(0x000000, 0x9fffff); mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom, "bank1"); } else if ((m_model == MODEL_MAC_PB140) || (m_model == MODEL_MAC_PB160) || ((m_model >= MODEL_MAC_PBDUO_210) && (m_model <= MODEL_MAC_PBDUO_270c))) { address_space& space = m_maincpu->space(AS_PROGRAM); - space.unmap_write(0x000000, 0xffffff, 0xffffff, 0); + space.unmap_write(0x000000, 0xffffff); mac_install_memory(0x000000, memory_size-1, memory_size, memory_data, is_rom, "bank1"); } else if ((m_model >= MODEL_MAC_II) && (m_model <= MODEL_MAC_SE30)) @@ -470,8 +470,8 @@ void mac_state::set_memory_overlay(int overlay) } else { - size_t rom_mask = memregion("bootrom")->bytes() - 1; - m_maincpu->space(AS_PROGRAM).install_read_bank(0x40000000, 0x4fffffff, rom_mask, 0, "bankR"); + size_t rom_mirror = 0xfffffff ^ (memregion("bootrom")->bytes() - 1); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x40000000, 0x4fffffff, rom_mirror, "bankR"); membank("bankR")->set_base((void *)memregion("bootrom")->base()); } } diff --git a/src/mame/machine/micropolis.cpp b/src/mame/machine/micropolis.cpp index a42c692718c..0508f22fe5e 100644 --- a/src/mame/machine/micropolis.cpp +++ b/src/mame/machine/micropolis.cpp @@ -220,7 +220,7 @@ READ8_MEMBER( micropolis_device::status_r ) READ8_MEMBER( micropolis_device::data_r ) { if (m_data_offset >= m_sector_length) - m_data_offset = 0; + return 0; return m_buffer[m_data_offset++]; } @@ -254,7 +254,7 @@ Command (bits 5,6,7) Options (bits 0,1,2,3,4) case 3: if (BIT(data, 0)) { - if (m_track < 77) + if (m_track < 76) { m_track++; direction = 1; @@ -276,17 +276,11 @@ Command (bits 5,6,7) Options (bits 0,1,2,3,4) } - m_status = STAT_RFC; - - if (BIT(data, 5)) - m_status |= STAT_READY; - - m_drive->floppy_drive_set_ready_state(1,0); - - - if (!m_track) + m_status = STAT_RFC | STAT_READY; + if (m_track == 0) m_status |= STAT_TRACK0; + m_drive->floppy_drive_set_ready_state(1,0); m_drive->floppy_drive_seek(direction); } diff --git a/src/mame/machine/nl_breakout.cpp b/src/mame/machine/nl_breakout.cpp index fb0f49587d6..1cfd879c91a 100644 --- a/src/mame/machine/nl_breakout.cpp +++ b/src/mame/machine/nl_breakout.cpp @@ -283,6 +283,9 @@ CIRCUIT_LAYOUT( breakout ) CHIP("J3", 7402) CHIP("J4", 9312) CHIP("J5", 7448) +#if USE_TRUTHTABLE_7448 + PARAM(J5.USE_DEACTIVATE, 0) // only use this if compiled with 7448 as a truthtable +#endif CHIP("J6", 9310) CHIP("J7", 7420) CHIP("J8", 74279) diff --git a/src/mame/machine/pc9801_118.cpp b/src/mame/machine/pc9801_118.cpp index 9b7191c40da..adac1a4ea0b 100644 --- a/src/mame/machine/pc9801_118.cpp +++ b/src/mame/machine/pc9801_118.cpp @@ -138,19 +138,19 @@ void pc9801_118_device::device_validity_check(validity_checker &valid) const // device_start - device-specific startup //------------------------------------------------- -void pc9801_118_device::install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) +void pc9801_118_device::install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler) { int buswidth = machine().firstcpu->space_config(AS_IO)->m_databus_width; switch(buswidth) { case 8: - machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0); + machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, rhandler, whandler, 0); break; case 16: - machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffff); + machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, rhandler, whandler, 0xffff); break; case 32: - machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff); + machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff); break; default: fatalerror("PC-9801-118: Bus width %d not supported\n", buswidth); @@ -170,8 +170,8 @@ void pc9801_118_device::device_start() void pc9801_118_device::device_reset() { UINT16 port_base = (ioport("OPN3_DSW")->read() & 1) << 8; - install_device(port_base + 0x0088, port_base + 0x008f, 0, 0, read8_delegate(FUNC(pc9801_118_device::pc9801_118_r), this), write8_delegate(FUNC(pc9801_118_device::pc9801_118_w), this) ); - install_device(0xa460, 0xa463, 0, 0, read8_delegate(FUNC(pc9801_118_device::pc9801_118_ext_r), this), write8_delegate(FUNC(pc9801_118_device::pc9801_118_ext_w), this) ); + install_device(port_base + 0x0088, port_base + 0x008f, read8_delegate(FUNC(pc9801_118_device::pc9801_118_r), this), write8_delegate(FUNC(pc9801_118_device::pc9801_118_w), this) ); + install_device(0xa460, 0xa463, read8_delegate(FUNC(pc9801_118_device::pc9801_118_ext_r), this), write8_delegate(FUNC(pc9801_118_device::pc9801_118_ext_w), this) ); m_ext_reg = 1; // TODO: enabled or disabled? } diff --git a/src/mame/machine/pc9801_118.h b/src/mame/machine/pc9801_118.h index 83e4cb4b284..fb009163cf0 100644 --- a/src/mame/machine/pc9801_118.h +++ b/src/mame/machine/pc9801_118.h @@ -48,7 +48,7 @@ protected: virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; virtual void device_reset() override; - void install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler); + void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); private: UINT8 m_joy_sel; diff --git a/src/mame/machine/pc9801_26.cpp b/src/mame/machine/pc9801_26.cpp index 8eb8e0f7413..d421e0f40ce 100644 --- a/src/mame/machine/pc9801_26.cpp +++ b/src/mame/machine/pc9801_26.cpp @@ -130,19 +130,19 @@ void pc9801_26_device::device_validity_check(validity_checker &valid) const // device_start - device-specific startup //------------------------------------------------- -void pc9801_26_device::install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) +void pc9801_26_device::install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler) { int buswidth = machine().firstcpu->space_config(AS_IO)->m_databus_width; switch(buswidth) { case 8: - machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0); + machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, rhandler, whandler, 0); break; case 16: - machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffff); + machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, rhandler, whandler, 0xffff); break; case 32: - machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff); + machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff); break; default: fatalerror("PC-9801-26: Bus width %d not supported\n", buswidth); @@ -162,7 +162,7 @@ void pc9801_26_device::device_start() void pc9801_26_device::device_reset() { UINT16 port_base = (ioport("OPN_DSW")->read() & 1) << 8; - install_device(port_base + 0x0088, port_base + 0x008b, 0, 0, read8_delegate(FUNC(pc9801_26_device::pc9801_26_r), this), write8_delegate(FUNC(pc9801_26_device::pc9801_26_w), this) ); + install_device(port_base + 0x0088, port_base + 0x008b, read8_delegate(FUNC(pc9801_26_device::pc9801_26_r), this), write8_delegate(FUNC(pc9801_26_device::pc9801_26_w), this) ); } diff --git a/src/mame/machine/pc9801_26.h b/src/mame/machine/pc9801_26.h index cf87298347a..d48596c8834 100644 --- a/src/mame/machine/pc9801_26.h +++ b/src/mame/machine/pc9801_26.h @@ -45,7 +45,7 @@ protected: virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; virtual void device_reset() override; - void install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler); + void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); private: UINT8 m_joy_sel; diff --git a/src/mame/machine/pc9801_86.cpp b/src/mame/machine/pc9801_86.cpp index db40adbcaa4..8dd0af5a1cf 100644 --- a/src/mame/machine/pc9801_86.cpp +++ b/src/mame/machine/pc9801_86.cpp @@ -148,19 +148,19 @@ void pc9801_86_device::device_validity_check(validity_checker &valid) const // device_start - device-specific startup //------------------------------------------------- -void pc9801_86_device::install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) +void pc9801_86_device::install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler) { int buswidth = machine().firstcpu->space_config(AS_IO)->m_databus_width; switch(buswidth) { case 8: - machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0); + machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, rhandler, whandler, 0); break; case 16: - machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffff); + machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, rhandler, whandler, 0xffff); break; case 32: - machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff); + machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff); break; default: fatalerror("PC-9801-86: Bus width %d not supported\n", buswidth); @@ -181,9 +181,9 @@ void pc9801_86_device::device_start() void pc9801_86_device::device_reset() { UINT16 port_base = (ioport("OPNA_DSW")->read() & 1) << 8; - install_device(port_base + 0x0088, port_base + 0x008f, 0, 0, read8_delegate(FUNC(pc9801_86_device::opn_r), this), write8_delegate(FUNC(pc9801_86_device::opn_w), this) ); - install_device(0xa460, 0xa463, 0, 0, read8_delegate(FUNC(pc9801_86_device::id_r), this), write8_delegate(FUNC(pc9801_86_device::mask_w), this)); - install_device(0xa464, 0xa46f, 0, 0, read8_delegate(FUNC(pc9801_86_device::pcm_r), this), write8_delegate(FUNC(pc9801_86_device::pcm_w), this)); + install_device(port_base + 0x0088, port_base + 0x008f, read8_delegate(FUNC(pc9801_86_device::opn_r), this), write8_delegate(FUNC(pc9801_86_device::opn_w), this) ); + install_device(0xa460, 0xa463, read8_delegate(FUNC(pc9801_86_device::id_r), this), write8_delegate(FUNC(pc9801_86_device::mask_w), this)); + install_device(0xa464, 0xa46f, read8_delegate(FUNC(pc9801_86_device::pcm_r), this), write8_delegate(FUNC(pc9801_86_device::pcm_w), this)); m_mask = 0; m_head = m_tail = m_count = 0; m_fmirq = m_pcmirq = false; diff --git a/src/mame/machine/pc9801_86.h b/src/mame/machine/pc9801_86.h index 61b48dcabb9..36e109e2eee 100644 --- a/src/mame/machine/pc9801_86.h +++ b/src/mame/machine/pc9801_86.h @@ -47,7 +47,7 @@ protected: virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; virtual void device_reset() override; - void install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler); + void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; private: diff --git a/src/mame/machine/pcecommn.cpp b/src/mame/machine/pcecommn.cpp index f231ddc17ab..68a0ce4476a 100644 --- a/src/mame/machine/pcecommn.cpp +++ b/src/mame/machine/pcecommn.cpp @@ -64,8 +64,3 @@ UINT32 pce_common_state::screen_update(screen_device &screen, bitmap_ind16 &bitm m_huc6260->video_update( bitmap, cliprect ); return 0; } - -WRITE_LINE_MEMBER(pce_common_state::pce_irq_changed) -{ - m_maincpu->set_input_line(0, state); -} diff --git a/src/mame/machine/pcecommn.h b/src/mame/machine/pcecommn.h index deed15decaa..732b044768f 100644 --- a/src/mame/machine/pcecommn.h +++ b/src/mame/machine/pcecommn.h @@ -33,7 +33,7 @@ public: virtual UINT8 joy_read(); UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); required_device<huc6260_device> m_huc6260; - DECLARE_WRITE_LINE_MEMBER(pce_irq_changed); + private: UINT8 m_io_port_options; /*driver-specific options for the PCE*/ int m_joystick_port_select; /* internal index of joystick ports */ diff --git a/src/mame/machine/raiden2cop.cpp b/src/mame/machine/raiden2cop.cpp index cba8ff2ece8..3c45b87114c 100644 --- a/src/mame/machine/raiden2cop.cpp +++ b/src/mame/machine/raiden2cop.cpp @@ -11,15 +11,18 @@ #include "emu.h" #include "raiden2cop.h" +#include "debugger.h" // use Z to dump out table info //#define TABLE_DUMPER -#define LOG_CMDS 0 +#define LOG_Commands 0 +#define LOG_Phytagoras 0 +#define LOG_Division 1 #define seibu_cop_log \ - if (LOG_CMDS) logerror + if (LOG_Commands) logerror const device_type RAIDEN2COP = &device_creator<raiden2cop_device>; @@ -185,30 +188,28 @@ void raiden2cop_device::device_start() save_item(NAME(m_LEGACY_r1)); m_videoramout_cb.resolve_safe(); + m_byte_endian_val = m_cpu_is_68k ? 3 : 0; + m_word_endian_val = m_cpu_is_68k ? 2 : 0; } UINT16 raiden2cop_device::cop_read_word(address_space &space, int address) { - if (m_cpu_is_68k) return space.read_word(address ^ 2); - else return space.read_word(address); + return space.read_word(address ^ m_word_endian_val); } UINT8 raiden2cop_device::cop_read_byte(address_space &space, int address) { - if (m_cpu_is_68k) return space.read_byte(address ^ 3); - else return space.read_byte(address); + return space.read_byte(address ^ m_byte_endian_val); } void raiden2cop_device::cop_write_word(address_space &space, int address, UINT16 data) { - if (m_cpu_is_68k) space.write_word(address ^ 2, data); - else space.write_word(address, data); + space.write_word(address ^ m_word_endian_val, data); } void raiden2cop_device::cop_write_byte(address_space &space, int address, UINT8 data) { - if (m_cpu_is_68k) space.write_byte(address ^ 3, data); - else space.write_byte(address, data); + space.write_byte(address ^ m_byte_endian_val, data); } @@ -887,12 +888,9 @@ WRITE16_MEMBER(raiden2cop_device::cop_dma_trigger_w) } /* Number Conversion */ - -WRITE16_MEMBER(raiden2cop_device::cop_itoa_low_w) +void raiden2cop_device::bcd_update() { - cop_itoa = (cop_itoa & ~UINT32(mem_mask)) | (data & mem_mask); - - //int digits = 1 << cop_itoa_mode*2; + //int digits = 1 << cop_itoa_mode*2; UINT32 val = cop_itoa; //if(digits > 9) @@ -918,9 +916,19 @@ WRITE16_MEMBER(raiden2cop_device::cop_itoa_low_w) cop_itoa_digits[9] = 0; } +WRITE16_MEMBER(raiden2cop_device::cop_itoa_low_w) +{ + cop_itoa = (cop_itoa & ~UINT32(mem_mask)) | (data & mem_mask); + + bcd_update(); +} + WRITE16_MEMBER(raiden2cop_device::cop_itoa_high_w) { cop_itoa = (cop_itoa & ~(mem_mask << 16)) | ((data & mem_mask) << 16); + + // Godzilla cares, otherwise you get 2p score overflow in 1p vs 2p, TODO: might actually be HW endianness dependant? + bcd_update(); } WRITE16_MEMBER(raiden2cop_device::cop_itoa_mode_w) @@ -1115,6 +1123,10 @@ void raiden2cop_device::execute_338e(address_space &space, int offset, UINT16 da cop_angle += 0x80; } +#if LOG_Phytagoras + printf("cmd %04x: dx = %d dy = %d angle = %02x\n",data,dx,dy,cop_angle); +#endif + if (data & 0x0080) { space.write_byte(cop_regs[0] + 0x34, cop_angle); } @@ -1140,6 +1152,10 @@ void raiden2cop_device::execute_3b30(address_space &space, int offset, UINT16 da dy = dy >> 16; cop_dist = sqrt((double)(dx*dx + dy*dy)); +#if LOG_Phytagoras + printf("cmd %04x: dx = %d dy = %d dist = %08x \n",data,dx >> 16,dy >> 16,cop_dist); +#endif + if (data & 0x0080) space.write_word(cop_regs[0] + (data & 0x200 ? 0x3a : 0x38), cop_dist); } @@ -1164,6 +1180,11 @@ void raiden2cop_device::LEGACY_execute_3b30(address_space &space, int offset, UI void raiden2cop_device::execute_42c2(address_space &space, int offset, UINT16 data) { int div = space.read_word(cop_regs[0] + (0x36)); + +#if LOG_Division + printf("cmd %04x: div = %04x scale = %04x\n",data,div,cop_scale); +#endif + if (!div) { cop_status |= 0x8000; @@ -1174,6 +1195,13 @@ void raiden2cop_device::execute_42c2(address_space &space, int offset, UINT16 da /* TODO: bits 5-6-15 */ cop_status = 7; +#if LOG_Division + printf("res = %04x dist %04x\n",(cop_dist << (5 - cop_scale)) / div,cop_dist); + +// if(div & 0x8000) +// machine().debugger().debug_break(); +#endif + space.write_word(cop_regs[0] + (0x38), (cop_dist << (5 - cop_scale)) / div); } diff --git a/src/mame/machine/raiden2cop.h b/src/mame/machine/raiden2cop.h index 3fc2240aa76..4a38924fba3 100644 --- a/src/mame/machine/raiden2cop.h +++ b/src/mame/machine/raiden2cop.h @@ -240,10 +240,13 @@ public: DECLARE_WRITE16_MEMBER(LEGACY_cop_cmd_w); - void cop_collision_update_hitbox(address_space &space, UINT16 data, int slot, UINT32 hitadr); - + void cop_collision_update_hitbox(address_space &space, UINT16 data, int slot, UINT32 hitadr); + void bcd_update(); + // endian stuff? int m_cpu_is_68k; + UINT8 m_byte_endian_val; + UINT8 m_word_endian_val; static void set_cpu_is_68k(device_t &device, int value) { downcast<raiden2cop_device &>(device).m_cpu_is_68k = value; } UINT16 cop_read_word(address_space &space, int address); UINT8 cop_read_byte(address_space &space, int address); diff --git a/src/mame/machine/rmnimbus.cpp b/src/mame/machine/rmnimbus.cpp index f91cf819e95..d3c87ba516c 100644 --- a/src/mame/machine/rmnimbus.cpp +++ b/src/mame/machine/rmnimbus.cpp @@ -61,11 +61,11 @@ chdman createhd -o ST125N.chd -chs 41921,1,1 -ss 512 #include <functional> +#include "includes/rmnimbus.h" #include "debugger.h" #include "debug/debugcon.h" #include "debug/debugcpu.h" #include "imagedev/flopdrv.h" -#include "includes/rmnimbus.h" diff --git a/src/mame/machine/samcoupe.cpp b/src/mame/machine/samcoupe.cpp index 0f326879a31..f538a4909b9 100644 --- a/src/mame/machine/samcoupe.cpp +++ b/src/mame/machine/samcoupe.cpp @@ -323,12 +323,12 @@ void samcoupe_state::machine_reset() if (m_config->read() & 0x01) { /* install RTC */ - spaceio.install_readwrite_handler(0xef, 0xef, 0xffff, 0xff00, read8_delegate(FUNC(samcoupe_state::samcoupe_rtc_r),this), write8_delegate(FUNC(samcoupe_state::samcoupe_rtc_w),this)); + spaceio.install_readwrite_handler(0xef, 0xef, 0, 0, 0xff00, read8_delegate(FUNC(samcoupe_state::samcoupe_rtc_r),this), write8_delegate(FUNC(samcoupe_state::samcoupe_rtc_w),this)); } else { /* no RTC support */ - spaceio.unmap_readwrite(0xef, 0xef, 0xffff, 0xff00); + spaceio.unmap_readwrite(0xef, 0xef, 0xff00); } /* initialize memory */ diff --git a/src/mame/machine/segaic16.cpp b/src/mame/machine/segaic16.cpp index 611d8568a96..bef1aed63e9 100644 --- a/src/mame/machine/segaic16.cpp +++ b/src/mame/machine/segaic16.cpp @@ -402,9 +402,9 @@ void sega_315_5195_mapper_device::map_as_rom(UINT32 offset, UINT32 length, offs_ romend = romsize - 1 - rgnoffset + info.start; // map now - m_space->install_read_bank(info.start, romend, 0, info.mirror, bank_name); + m_space->install_read_bank(info.start, romend, info.mirror, bank_name); if (m_decrypted_space) - m_decrypted_space->install_read_bank(info.start, romend, 0, info.mirror, decrypted_bank_name); + m_decrypted_space->install_read_bank(info.start, romend, info.mirror, decrypted_bank_name); // configure the bank memory_bank *bank = owner()->membank(bank_name); @@ -422,9 +422,9 @@ void sega_315_5195_mapper_device::map_as_rom(UINT32 offset, UINT32 length, offs_ // falling through to the memory-mapping registers and crashing the // game during stage 2-4 (see PC:$18a98). Protection maybe? if (!whandler.isnull()) - m_space->install_write_handler(info.start, info.end, 0, info.mirror, whandler); + m_space->install_write_handler(info.start, info.end, 0, info.mirror, 0, whandler); else - m_space->unmap_write(info.start, info.end, 0, info.mirror); + m_space->unmap_write(info.start, info.end | info.mirror); } @@ -446,13 +446,13 @@ void sega_315_5195_mapper_device::map_as_ram(UINT32 offset, UINT32 length, offs_ } // map now - m_space->install_read_bank(info.start, info.end, 0, info.mirror, bank_share_name); + m_space->install_read_bank(info.start, info.end, info.mirror, bank_share_name); // either install a write handler or a write bank, as appropriate if (!whandler.isnull()) - m_space->install_write_handler(info.start, info.end, 0, info.mirror, whandler); + m_space->install_write_handler(info.start, info.end, 0, info.mirror, 0, whandler); else - m_space->install_write_bank(info.start, info.end, 0, info.mirror, bank_share_name); + m_space->install_write_bank(info.start, info.end, info.mirror, bank_share_name); // configure the bank memory_bank *bank = owner()->membank(bank_share_name); @@ -483,9 +483,9 @@ void sega_315_5195_mapper_device::map_as_handler(UINT32 offset, UINT32 length, o // install read/write handlers if (!rhandler.isnull()) - m_space->install_read_handler(info.start, info.end, 0, info.mirror, rhandler); + m_space->install_read_handler(info.start, info.end, 0, info.mirror, 0, rhandler); if (!whandler.isnull()) - m_space->install_write_handler(info.start, info.end, 0, info.mirror, whandler); + m_space->install_write_handler(info.start, info.end, 0, info.mirror, 0, whandler); // clear this rom bank reference m_banks[m_curregion].clear(); diff --git a/src/mame/machine/seicop.cpp b/src/mame/machine/seicop.cpp index d5640aa6881..7588bb1b41e 100644 --- a/src/mame/machine/seicop.cpp +++ b/src/mame/machine/seicop.cpp @@ -212,7 +212,7 @@ WRITE16_MEMBER( seibu_cop_bootleg_device::copdxbl_0_w ) case (0x740/2): { - state->soundlatch_byte_w(space, 0, data & 0xff); + state->m_soundlatch->write(space, 0, data & 0xff); state->m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE ); break; } diff --git a/src/mame/machine/special.cpp b/src/mame/machine/special.cpp index bb1c7f64f31..9f53397438e 100644 --- a/src/mame/machine/special.cpp +++ b/src/mame/machine/special.cpp @@ -337,7 +337,7 @@ void special_state::erik_set_bank() m_bank4->set_base(mem + 0x1c000); space.unmap_write(0xf000, 0xf7ff); space.nop_read(0xf000, 0xf7ff); - space.install_readwrite_handler(0xf800, 0xf803, 0, 0x7fc, read8_delegate(FUNC(i8255_device::read), (i8255_device*)m_ppi), write8_delegate(FUNC(i8255_device::write), (i8255_device*)m_ppi)); + space.install_readwrite_handler(0xf800, 0xf803, 0, 0x7fc, 0, read8_delegate(FUNC(i8255_device::read), (i8255_device*)m_ppi), write8_delegate(FUNC(i8255_device::write), (i8255_device*)m_ppi)); break; } } diff --git a/src/mame/machine/swtpc09.cpp b/src/mame/machine/swtpc09.cpp index 71613a8b8ac..d3edb885d60 100644 --- a/src/mame/machine/swtpc09.cpp +++ b/src/mame/machine/swtpc09.cpp @@ -551,8 +551,8 @@ WRITE8_MEMBER(swtpc09_state::dat_w) } else if (offset==0x0f) // then we need to leave in top part of ram and dat write { - mem.install_ram(logical_address, logical_address+0x0eff, 0, 0, &RAM[physical_address]); - mem.install_rom(logical_address+0xf00, logical_address+0xfff, 0, 0, &RAM[0xff00]); + mem.install_ram(logical_address, logical_address+0x0eff, &RAM[physical_address]); + mem.install_rom(logical_address+0xf00, logical_address+0xfff, &RAM[0xff00]); mem.install_write_handler(logical_address+0xff0, logical_address+0xfff, write8_delegate(FUNC(swtpc09_state::dat_w),this)); } diff --git a/src/mame/machine/trs80.cpp b/src/mame/machine/trs80.cpp index 999a086d466..30c1afc76fe 100644 --- a/src/mame/machine/trs80.cpp +++ b/src/mame/machine/trs80.cpp @@ -570,7 +570,7 @@ WRITE8_MEMBER( trs80_state::lnw80_fe_w ) mem.install_readwrite_handler (0x37ed, 0x37ed, read8_delegate(FUNC(fd1793_t::track_r),(fd1793_t*)m_fdc), write8_delegate(FUNC(fd1793_t::track_w),(fd1793_t*)m_fdc)); mem.install_readwrite_handler (0x37ee, 0x37ee, read8_delegate(FUNC(fd1793_t::sector_r),(fd1793_t*)m_fdc), write8_delegate(FUNC(fd1793_t::sector_w),(fd1793_t*)m_fdc)); mem.install_readwrite_handler (0x37ef, 0x37ef, read8_delegate(FUNC(fd1793_t::data_r),(fd1793_t*)m_fdc),write8_delegate( FUNC(fd1793_t::data_w),(fd1793_t*)m_fdc)); - mem.install_read_handler (0x3800, 0x38ff, 0, 0x0300, read8_delegate(FUNC(trs80_state::trs80_keyboard_r), this)); + mem.install_read_handler (0x3800, 0x38ff, 0, 0x0300, 0, read8_delegate(FUNC(trs80_state::trs80_keyboard_r), this)); mem.install_readwrite_handler (0x3c00, 0x3fff, read8_delegate(FUNC(trs80_state::trs80_videoram_r), this), write8_delegate(FUNC(trs80_state::trs80_videoram_w), this)); } } diff --git a/src/mame/machine/xbox.cpp b/src/mame/machine/xbox.cpp index 7479aec05a2..e4cdcee007b 100644 --- a/src/mame/machine/xbox.cpp +++ b/src/mame/machine/xbox.cpp @@ -2605,7 +2605,6 @@ ADDRESS_MAP_START(xbox_base_map, AS_PROGRAM, 32, xbox_base_state) AM_RANGE(0xfe800000, 0xfe87ffff) AM_READWRITE(audio_apu_r, audio_apu_w) AM_RANGE(0xfec00000, 0xfec00fff) AM_READWRITE(audio_ac93_r, audio_ac93_w) AM_RANGE(0xfef00000, 0xfef003ff) AM_READWRITE(network_r, network_w) - AM_RANGE(0xff000000, 0xff0fffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x00f80000) ADDRESS_MAP_END ADDRESS_MAP_START(xbox_base_map_io, AS_IO, 32, xbox_base_state) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index ad2cb00fcb8..377f5f52ba6 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -185,6 +185,7 @@ searthina // bootleg sflush // (c)1979 Taito shuttlei // (c) 1979 Omori (Arcade Tv Game List - P.79, Left, 6 from bottom) sicv // (c) 1979 Taito +sicv1 // (c) 1979 Taito sinvemag // Zenitone-Microsec Ltd. sinvzen // Zenitone-Microsec Ltd sisv // (c) 1978 Taito @@ -1343,112 +1344,115 @@ wildone // (c) 1997 wtigernz // (c) 1996 @source:aristmk5.cpp +aristmk5 // (c) 1995, USA platform set chips adonis // (c) 1998 adonisa // (c) 1998 -adonise // (c) 2001 -aristmk5 // (c) 1995, USA platform set chips -bootsctn // (c) 1999 -bumblbug // (c) 1997 -cashcham // (c) 1996 +adonisu // (c) 2001 +adonisce +baddog +blackpnt +bootsctn +bootsctnu // (c) 1999 +bumblbug +bumblbugql +bumblbugu // (c) 1997 +buttdeli +cashcat +cashcham +cashchamu // (c) 1996 +cashcra5 chariotc // (c) 1998 -chickena // (c) 1998 -cuckoo // (c) 2000 -dmdtouch // (c) 1997 +chariotca +checkma5 +chickna5 +chickna5u // (c) 1998 +coralrc2 +cuckoo +cuckoou // (c) 2000 +dstbloom +diamdove +dimtouch // (c) 1997 dolphntr // (c) 1996 -dolphtra // (c) 1996 -dolphtre // (c) 1996 -enchfore // (c) 1997 -enchfrst // (c) 1995 -geishanz // (c) 2001 -goldprmd // (c) 1997 +dolphntra // (c) 1996 +dolphntrb +dolphntru // (c) 1996 +dynajack +eldorda5 +eforsta5 // (c) 1995 +eforsta5u // (c) 1997 +fortellr +gambler // (c) 1998 +geisha // (c) 2001 +genmagi +gnomeatw +goldpyr // (c) 1997 goldpyra // (c) 1997 -indiandr // (c) 1998 +goldenra +incasun +incasunsp +incasunnz +indrema5 // (c) 1998 +kgalah koalamnt // (c) 2001 -magicmsk // (c) 2000 -magicmska // (c) 2000 -margmgc // (c) 2000 -marmagic // (c) 2000 +kookabuk +locoloot +locolootnz +lonewolf mgarden // (c) 1997 +magimask // (c) 2000 +magimaska // (c) 2000 +magtcha5 +marmagic // (c) 2000 +marmagicu // (c) 2000 minemine // (c) 1996 -partygrs // (c) 2001 -pengpays // (c) 1997 -prtygras // (c) 2001 -qotn // (c) 1997 -qotna // (c) 1997 -reelrock // (c) 1998 -swheart2 // (c) 1998 -swthrt2v // (c) 1995 -thgamblr // (c) 1998 -trpdlght // (c) 1997 -wldcougr // (c) 1997 -wtiger // (c) 1999 -badbog -blackpnt -bootscot -bumbugs -butdeli -cashchm -cashcroa -chkrun -coralr2v -cuckooa -dstblom -dmddove -drawpka -dyjack -eldora -fortela -genmagi -gnomatw -goldra -hrttrhb -incsun -kookabk -locoloot -lonwolf -mgctouc -monmous -moutmon -mystgrd +monmouse +montree +mountmon +multidrw +mystgard orchidms -oscarar +oscara5 pantmag +partygrs // (c) 2001 +partygrsa // (c) 2001 peaflut pengpay -przfigha -qncsh -sumospin -sbucks3 -tretrva -triptrea -trjhrs -wildbill -wldcoug -chariotca -chkmatar -kgalah -qonilea -qonileb -rwarhl +pengpaya +pengpayb +pengpayu // (c) 1997 +petshop +przfight +qcash +qnile +qnilea +qnileb // (c) 1997 +qnilec +qnileu // (c) 1997 +qnilemax +rainwrce +reelrock // (c) 1998 retrsam -unicornd -dolptra -penpay20 -penpaya -adonishl -goldphm -petshopa -retsam20 -retsam5 -supbuk2 +retrsama +retrsamb +sumospin +sbuk2 +sbuk3 +swhr2 +swhr2u // (c) 1998 +swhr2v // (c) 1995 topbana -wldamz1 -wldamz3 -wldthg -cshcat -incanz -loconz -mtreenz +trstrove +tritreat +trojhors +trpdlght // (c) 1997 +unicornd +wamazon +wamazona +wildbill +wcougar +wcougaru // (c) 1997 +wthing +wtiger // (c) 1999 @source:aristmk6.cpp aristmk6 // @@ -1618,7 +1622,7 @@ pompeia6 pompeia6u prideaf prophecy -qnile +qnilea6 qnilese qnilejc qnilejcsp @@ -1648,7 +1652,7 @@ sunmoon sunmonbb sunqndol sbuk5 -swhr2 +swhr2a6 swh2ld tahitim thaiprnc @@ -9199,7 +9203,8 @@ dking // Crazy Kong Bootleg guzzler // (c) 1983 Tehkan guzzlers // (c) 1983 Tehkan (Swimmer Conversion) monkeyd // bootleg -rpatrol // Orca, from a suspicious set +rpatrol // (c) 1981.01 Orca +rpatrola // bootleg rpatrolb // bootleg silvland // Falcon swimmer // (c) 1982 Tehkan @@ -10919,6 +10924,9 @@ dim68k // discoboy // (c) 1993 Soft Art Co. discoboyp // (c) 1993 Soft Art Co. (Promat license?) +@source:divebomb.cpp +divebomb // GX840 (c) 1989 (Japan) + @source:diverboy.cpp diverboy // (c) 1992 Electronic Devices @@ -12068,6 +12076,9 @@ fb01 // 1986 FB-01 @source:fc100.cpp fc100 // +@source:fccpu30.cpp +fccpu30 // + @source:fcscsi.cpp fcscsi1 // @@ -12095,6 +12106,7 @@ sf2mdta // bootleg sf2mdtb // bootleg sgyxz // bootleg (All-In Electronics) slampic // bootleg +varthb // bootleg @source:feversoc.cpp feversoc // (c) 2004 @@ -12108,17 +12120,24 @@ csc // CSC: Champion Sensory Chess Challenger (Engli cscfr // * French cscg // * German cscsp // * Spanish +feasbu // EAS: Elite A/S Challenger (Budapest program, English) +feasgla // EAS: Elite A/S Challenger (Glasgow program, English) fexcel // fexcelv // fscc9 // fscc12 // reversic // +super9cc // SU9: Super 9 Sensory Chess Challenger (English) +super9ccfr // * French +super9ccg // * German +super9ccsp // * Spanish @source:fidel68k.cpp feagv10 // feagv11 // feagv2 // feagv7 // +feagv9 // @source:fidelz80.cpp bridgec3 // @@ -12389,6 +12408,7 @@ royalcrdd // (c) 1991 TAB-Austria royalcrde // (c) 1991 TAB-Austria royalcrdf // (c) 1991 Evona Electronic royalcrdg // (c) 1991 TAB-Austria +royalcrdh // (c) 1991 TAB-Austria royalcrdp // (c) 1993 Digital Dreams royalcrdt // (c) 1991 TAB-Austria orig saloon // 199? unknown @@ -12572,6 +12592,7 @@ galaxbsf2 // bootleg galaxian // (c) Namco galaxiana // (c) Namco galaxianbl // bootleg +galaxianbl2 // bootleg galaxiani // (c) Irem galaxianm // (c) Midway galaxianmo // (c) Midway @@ -12654,6 +12675,7 @@ scrambp // bootleg (Billport S.A.) scramce // bootleg (Centromatic S.A.) scrampt // bootleg (Petaco S.A.) scramrf // bootleg (Recreativos Franco) +scrammr // bootleg (Model Racing) sfx // (c) 1983 Nichibutsu skelagon // (c) 1983 Nichibutsu USA skybase // (c) 1982 Omori Electric Co., Ltd. @@ -13429,6 +13451,7 @@ cmasterh // (c) 1991 Dyna Electronics cmezspin // (c) 1991 Dyna Electronics cmfun // (c) 1995 Dyna Electronics cmpacman // +cmpacmana // cmtetris // cmtetrsa // cmtetrsb // @@ -13439,6 +13462,9 @@ cmwm // (c) 199? Dyna Electronics crazybon // (c) 199? Sang Ho fb2010 // (c) 2009 Amcoe fl7_3121 // (c) 199? Cyberdyne Systems, Inc. +fl7_50 // (c) 199? Cyberdyne Systems, Inc. +fl7_500 // (c) 199? Cyberdyne Systems, Inc. +fl7_2000 // (c) 199? Cyberdyne Systems, Inc. goldfrui // bootleg goldstar // (c) 198? IGS goldstbl // (c) 198? IGS @@ -17356,6 +17382,10 @@ mainsnk // (c) 1984 @source:majorpkr.cpp majorpkr // (c) 1994 PAL System. +majorpkra // (c) 1994 PAL System. +majorpkrb // (c) 1994 PAL System. +majorpkrc // (c) 1994 PAL System. +luckypkr // bootleg/hack. @source:malzak.cpp malzak // (c) 1980? Kitronix @@ -27416,6 +27446,7 @@ gaiapols // GX123 (c) 1993 (Europe) gaiapolsj // GX123 (c) 1993 (Japan) gaiapolsu // GX123 (c) 1993 (US) metamrph // GX224 (c) 1993 (Europe) +metamrpha // GX224 (c) 1993 (Europe) - Alternate metamrphj // GX224 (c) 1993 (Japan) metamrphu // GX224 (c) 1993 (US) mmaulers // GX170 (c) 1993 (Europe) @@ -28021,7 +28052,8 @@ mtkob2 // 2003.02 MushiKing The King Of Beetle mushi2eo // 2005.?? Mushiking The King Of Beetles II ENG (Ver. 1.001) mushi2k5 // 2005.?? MushiKing The King Of Beetle 2K5 1st mushik2e // 2005.?? Mushiking The King Of Beetles II ENG (Ver. 2.001) -mvsc2 // 2000.03 Marvel Vs. Capcom 2 New Age of Heroes (Export, Rev A) +mvsc2 // 2000.03 Marvel Vs. Capcom 2 New Age of Heroes (Export, Korea) (Rev A) +mvsc2u // 2000.03 Marvel Vs. Capcom 2 New Age of Heroes (USA) (Rev A) naomi // 1998.?? Naomi BIOS naomi2 // 2001.?? Naomi 2 BIOS naomigd // 2001.?? Naomi GD-ROM Bios diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 0ade039ea54..0f992999d71 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -181,6 +181,7 @@ fanucs15.cpp fanucspmg.cpp fb01.cpp fc100.cpp +fccpu30.cpp fidel6502.cpp fidel68k.cpp fidelz80.cpp diff --git a/src/mame/video/8080bw.cpp b/src/mame/video/8080bw.cpp index 9300c329031..cce25bf803a 100644 --- a/src/mame/video/8080bw.cpp +++ b/src/mame/video/8080bw.cpp @@ -159,7 +159,7 @@ UINT32 _8080bw_state::screen_update_schaser(screen_device &screen, bitmap_rgb32 UINT8 x = offs << 3; UINT8 data = m_main_ram[offs]; - UINT8 fore_color = m_colorram[offs & 0x1f9f] & 0x07; + UINT8 fore_color = m_scattered_colorram[(offs & 0x1f) | ((offs & 0x1f80) >> 2)] & 0x07; if (!m_schaser_background_disable) { @@ -189,7 +189,7 @@ UINT32 _8080bw_state::screen_update_schasercv(screen_device &screen, bitmap_rgb3 UINT8 x = offs << 3; UINT8 data = m_main_ram[offs]; - UINT8 fore_color = m_colorram[offs & 0x1f9f] & 0x07; + UINT8 fore_color = m_scattered_colorram[(offs & 0x1f) | ((offs & 0x1f80) >> 2)] & 0x07; /* blue background */ set_8_pixels(bitmap, y, x, data, fore_color, 2); @@ -209,8 +209,8 @@ UINT32 _8080bw_state::screen_update_rollingc(screen_device &screen, bitmap_rgb32 UINT8 x = offs << 3; UINT8 data = m_main_ram[offs]; - UINT8 fore_color = m_colorram[offs & 0x1f1f] & 0x0f; - UINT8 back_color = m_colorram2[offs & 0x1f1f] & 0x0f; + UINT8 fore_color = m_scattered_colorram[(offs & 0x1f) | ((offs & 0x1f00) >> 3)] & 0x0f; + UINT8 back_color = m_scattered_colorram2[(offs & 0x1f) | ((offs & 0x1f00) >> 3)] & 0x0f; set_8_pixels(bitmap, y, x, data, fore_color, back_color); } @@ -242,7 +242,7 @@ UINT32 _8080bw_state::screen_update_polaris(screen_device &screen, bitmap_rgb32 bits 1 and 2 are marked 'not use' (sic) */ UINT8 back_color = (color_map_base[color_address] & 0x01) ? 6 : 2; - UINT8 fore_color = ~m_colorram[offs & 0x1f9f] & 0x07; + UINT8 fore_color = ~m_scattered_colorram[(offs & 0x1f) | ((offs & 0x1f80) >> 2)] & 0x07; UINT8 cloud_y = y - m_polaris_cloud_pos; @@ -293,7 +293,7 @@ UINT32 _8080bw_state::screen_update_lupin3(screen_device &screen, bitmap_rgb32 & UINT8 x = offs << 3; UINT8 data = m_main_ram[offs]; - UINT8 fore_color = ~m_colorram[offs & 0x1f9f] & 0x07; + UINT8 fore_color = ~m_scattered_colorram[(offs & 0x1f) | ((offs & 0x1f80) >> 2)] & 0x07; set_8_pixels(bitmap, y, x, data, fore_color, 0); } @@ -357,7 +357,7 @@ UINT32 _8080bw_state::screen_update_sflush(screen_device &screen, bitmap_rgb32 & UINT8 x = offs << 3; UINT8 data = m_main_ram[offs]; - UINT8 fore_color = m_colorram[offs & 0x1f9f] & 0x07; + UINT8 fore_color = m_scattered_colorram[(offs & 0x1f) | ((offs & 0x1f80) >> 2)] & 0x07; set_8_pixels(bitmap, y, x, data, fore_color, 0); } diff --git a/src/mame/video/abc1600.cpp b/src/mame/video/abc1600.cpp index f7ca47d97bb..441d0a2c711 100644 --- a/src/mame/video/abc1600.cpp +++ b/src/mame/video/abc1600.cpp @@ -101,7 +101,7 @@ ROM_START( abc1600_mover ) ROM_LOAD16_BYTE( "drmskh 6490358-01.1l", 0x00, 0x20, CRC(a4a9a9dc) SHA1(d8575c0335d6021cbb5f7bcd298b41c35294a80a) ) ROM_REGION( 0x104, "plds", 0 ) - ROM_LOAD( "drmsk 6490360-01.1m", 0x000, 0x104, CRC(5f7143c1) SHA1(1129917845f8e505998b15288f02bf907487e4ac) ) // mover word mixer @ 1m,1n,1t,2t + ROM_LOAD( "drmsk 6490360-01.1m", 0x000, 0x104, CRC(5f7143c1) SHA1(1129917845f8e505998b15288f02bf907487e4ac) ) // PAL16L8 mover word mixer @ 1m,1n,1t,2t ROM_END diff --git a/src/mame/video/cheekyms.cpp b/src/mame/video/cheekyms.cpp index 572c2476575..9a68448afb2 100644 --- a/src/mame/video/cheekyms.cpp +++ b/src/mame/video/cheekyms.cpp @@ -123,19 +123,19 @@ void cheekyms_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre if (!flip) code++; - gfx->transpen(bitmap,cliprect, code, color, 0, 0, x, y, 0); + gfx->transpen(bitmap,cliprect, code, color, 0, 0, x, y, 0); } else { if (m_spriteram[offs + 0] & 0x02) { - gfx->transpen(bitmap,cliprect, code | 0x20, color, 0, 0, x, y, 0); - gfx->transpen(bitmap,cliprect, code | 0x21, color, 0, 0, 0x10 + x, y, 0); + gfx->transpen(bitmap,cliprect, code | 0x20, color, 0, 0, x, y, 0); + gfx->transpen(bitmap,cliprect, code | 0x21, color, 0, 0, 0x10 + x, y, 0); } else { - gfx->transpen(bitmap,cliprect, code | 0x20, color, 0, 0, x, y, 0); - gfx->transpen(bitmap,cliprect, code | 0x21, color, 0, 0, x, 0x10 + y, 0); + gfx->transpen(bitmap,cliprect, code | 0x20, color, 0, 0, x, y, 0); + gfx->transpen(bitmap,cliprect, code | 0x21, color, 0, 0, x, 0x10 + y, 0); } } } diff --git a/src/mame/video/cps1.cpp b/src/mame/video/cps1.cpp index 51f37d896f2..4a58350a77e 100644 --- a/src/mame/video/cps1.cpp +++ b/src/mame/video/cps1.cpp @@ -1553,6 +1553,7 @@ static const struct CPS1config cps1_config_table[]= {"sf2mdtb", CPS_B_21_DEF, mapper_S9263B, 0x36, 0, 0, 1 }, {"sf2b", CPS_B_17, mapper_STF29, 0x36, 0, 0, 1 }, {"varth", CPS_B_04, mapper_VA63B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */ // wrong, this set uses VA24B, dumped but equations still not added + {"varthb", CPS_B_04, mapper_VA63B, 0, 0, 0, 0x0F }, {"varthr1", CPS_B_04, mapper_VA63B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */ // wrong, this set uses VA24B, dumped but equations still not added {"varthu", CPS_B_04, mapper_VA63B }, /* CPSB test has been patched out (60=0008) register is also written to, possibly leftover from development */ {"varthj", CPS_B_21_BT5, mapper_VA22B }, /* CPSB test has been patched out (72=0001) register is also written to, possibly leftover from development */ @@ -1947,7 +1948,7 @@ void cps_state::cps1_get_video_base() } /* Some of the sf2 hacks use only sprite port 0x9100 and the scroll layers are offset */ - if (m_game_config->bootleg_kludge == 1) + if (m_game_config->bootleg_kludge == 0x01) { m_cps_a_regs[CPS1_OBJ_BASE] = 0x9100; scroll1xoff = -0x0c; @@ -1955,6 +1956,20 @@ void cps_state::cps1_get_video_base() scroll3xoff = -0x10; } else + if (m_game_config->bootleg_kludge == 0x0E) + { + scroll1xoff = 0xffba; + scroll2xoff = 0xffc0; + scroll3xoff = 0xffba; + } + else + if (m_game_config->bootleg_kludge == 0x0F) + { + scroll1xoff = 0xffc0; + scroll2xoff = 0xffc0; + scroll3xoff = 0xffc0; + } + else if (m_game_config->bootleg_kludge == 2) { m_cps_a_regs[CPS1_OBJ_BASE] = 0x9100; diff --git a/src/mame/video/divebomb.cpp b/src/mame/video/divebomb.cpp new file mode 100644 index 00000000000..275ef64e173 --- /dev/null +++ b/src/mame/video/divebomb.cpp @@ -0,0 +1,209 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood, Phil Bennett +/************************************************************************* + + Kyuukoukabakugekitai - Dive Bomber Squad + +*************************************************************************/ + +#include "emu.h" +#include "includes/divebomb.h" +#include "video/resnet.h" + + + +/************************************* + * + * Tilemap callbacks + * + *************************************/ + +TILE_GET_INFO_MEMBER(divebomb_state::get_fg_tile_info) +{ + UINT32 code = m_fgram[tile_index + 0x000]; + UINT32 attr = m_fgram[tile_index + 0x400]; + UINT32 colour = attr >> 4; + + code |= (attr & 0x3) << 8; + + SET_TILE_INFO_MEMBER(0, code, colour, 0); +} + + + +/************************************* + * + * K051316 callbacks + * + *************************************/ + +K051316_CB_MEMBER(divebomb_state::zoom_callback_1) +{ + *code |= (*color & 0x03) << 8; + *color = 0 + ((roz_pal >> 4) & 3); +} + + +K051316_CB_MEMBER(divebomb_state::zoom_callback_2) +{ + *code |= (*color & 0x03) << 8; + *color = 4 + (roz_pal & 3); +} + + + +/************************************* + * + * Video hardware handlers + * + *************************************/ + +WRITE8_MEMBER(divebomb_state::fgram_w) +{ + m_fgram[offset] = data; + m_fg_tilemap->mark_tile_dirty(offset & 0x3ff); +} + + +WRITE8_MEMBER(divebomb_state::rozcpu_wrap1_enable_w) +{ + roz1_wrap = !(data & 1); +} + + +WRITE8_MEMBER(divebomb_state::rozcpu_enable1_w) +{ + roz1_enable = !(data & 1); +} + + +WRITE8_MEMBER(divebomb_state::rozcpu_enable2_w) +{ + roz2_enable = !(data & 1); +} + + +WRITE8_MEMBER(divebomb_state::rozcpu_wrap2_enable_w) +{ + roz2_wrap = !(data & 1); +} + + +WRITE8_MEMBER(divebomb_state::rozcpu_pal_w) +{ + //.... ..xx K051316 1 palette select + //..xx .... K051316 2 palette select + + roz_pal = data; + + m_k051316_2->mark_tmap_dirty(); + m_k051316_1->mark_tmap_dirty(); + + if (data & 0xcc) + logerror("rozcpu_port50_w %02x\n", data); +} + + + +/************************************* + * + * Video hardware init + * + *************************************/ + +void divebomb_state::decode_proms(const UINT8 * rgn, int size, int index, bool inv) +{ + static const int resistances[4] = { 2000, 1000, 470, 220 }; + + double rweights[4], gweights[4], bweights[4]; + + /* compute the color output resistor weights */ + compute_resistor_weights(0, 255, -1.0, + 4, resistances, rweights, 0, 0, + 4, resistances, gweights, 0, 0, + 4, resistances, bweights, 0, 0); + + /* create a lookup table for the palette */ + for (UINT32 i = 0; i < size; ++i) + { + UINT32 rdata = rgn[i + size*2] & 0x0f; + UINT32 r = combine_4_weights(rweights, BIT(rdata, 0), BIT(rdata, 1), BIT(rdata, 2), BIT(rdata, 3)); + + UINT32 gdata = rgn[i + size] & 0x0f; + UINT32 g = combine_4_weights(gweights, BIT(gdata, 0), BIT(gdata, 1), BIT(gdata, 2), BIT(gdata, 3)); + + UINT32 bdata = rgn[i] & 0x0f; + UINT32 b = combine_4_weights(bweights, BIT(bdata, 0), BIT(bdata, 1), BIT(bdata, 2), BIT(bdata, 3)); + + if (!inv) + m_palette->set_pen_color(index + i, rgb_t(r, g, b)); + else + m_palette->set_pen_color(index + (i ^ 0xff), rgb_t(r, g, b)); + } +} + + +PALETTE_INIT_MEMBER(divebomb_state, divebomb) +{ + decode_proms(memregion("spr_proms")->base(), 0x100, 0x400 + 0x400 + 0x400, false); + decode_proms(memregion("fg_proms")->base(), 0x400, 0x400 + 0x400, false); + decode_proms(memregion("k051316_1_pr")->base(), 0x400, 0, true); + decode_proms(memregion("k051316_2_pr")->base(), 0x400, 0x400, true); +} + + +VIDEO_START_MEMBER(divebomb_state,divebomb) +{ + m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(divebomb_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); + m_fg_tilemap->set_transparent_pen(0); + m_fg_tilemap->set_scrolly(0, 16); +} + + + +/************************************* + * + * Main update + * + *************************************/ + +void divebomb_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + const UINT8 *spriteram = m_spriteram; + + for (UINT32 i = 0; i < m_spriteram.bytes(); i += 4) + { + UINT32 sy = spriteram[i + 3]; + UINT32 sx = spriteram[i + 0]; + UINT32 code = spriteram[i + 2]; + UINT32 attr = spriteram[i + 1]; + + code += (attr & 0x0f) << 8; + + UINT32 colour = attr >> 4; + + m_gfxdecode->gfx(1)->transpen(bitmap, cliprect, code, colour, 0, 0, sx, sy, 0); + m_gfxdecode->gfx(1)->transpen(bitmap, cliprect, code, colour, 0, 0, sx, sy-256, 0); + } +} + + +UINT32 divebomb_state::screen_update_divebomb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + m_k051316_1->wraparound_enable(roz1_wrap); + m_k051316_2->wraparound_enable(roz2_wrap); + + bitmap.fill(m_palette->black_pen(), cliprect); + + if (roz2_enable) + m_k051316_2->zoom_draw(screen, bitmap, cliprect, 0, 0); + + if (roz1_enable) + m_k051316_1->zoom_draw(screen, bitmap, cliprect, 0, 0); + + draw_sprites(bitmap, cliprect); + + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + + return 0; +} diff --git a/src/mame/video/exerion.cpp b/src/mame/video/exerion.cpp index dee291a0419..c2d30a8daac 100644 --- a/src/mame/video/exerion.cpp +++ b/src/mame/video/exerion.cpp @@ -388,12 +388,12 @@ UINT32 exerion_state::screen_update_exerion(screen_device &screen, bitmap_ind16 else code &= ~0x10, code2 |= 0x10; - gfx->transmask(bitmap,cliprect, code2, color, xflip, yflip, x, y + gfx->height(), - m_palette->transpen_mask(*gfx, color, 0x10)); + gfx->transmask(bitmap,cliprect, code2, color, xflip, yflip, x, y + gfx->height(), + m_palette->transpen_mask(*gfx, color, 0x10)); } - gfx->transmask(bitmap,cliprect, code, color, xflip, yflip, x, y, - m_palette->transpen_mask(*gfx, color, 0x10)); + gfx->transmask(bitmap,cliprect, code, color, xflip, yflip, x, y, + m_palette->transpen_mask(*gfx, color, 0x10)); if (doubled) i += 4; } diff --git a/src/mame/video/fcombat.cpp b/src/mame/video/fcombat.cpp index d3ba66e120e..fdd54b92f85 100644 --- a/src/mame/video/fcombat.cpp +++ b/src/mame/video/fcombat.cpp @@ -176,18 +176,18 @@ UINT32 fcombat_state::screen_update_fcombat(screen_device &screen, bitmap_ind16 else code &= ~0x10, code2 |= 0x10; - gfx->transpen(bitmap,cliprect, code2, color, xflip, yflip, x, y + gfx->height(), 0); + gfx->transpen(bitmap,cliprect, code2, color, xflip, yflip, x, y + gfx->height(), 0); } if(flags&0x10) { - gfx->transpen(bitmap,cliprect, code2 + 16, color, xflip, yflip, x, y + gfx->height(), 0); - gfx->transpen(bitmap,cliprect, code2 + 16 * 2, color, xflip, yflip, x, y + 2 * gfx->height(), 0); - gfx->transpen(bitmap,cliprect, code2 + 16 * 3, color, xflip, yflip, x, y + 3 * gfx->height(), 0); + gfx->transpen(bitmap,cliprect, code2 + 16, color, xflip, yflip, x, y + gfx->height(), 0); + gfx->transpen(bitmap,cliprect, code2 + 16 * 2, color, xflip, yflip, x, y + 2 * gfx->height(), 0); + gfx->transpen(bitmap,cliprect, code2 + 16 * 3, color, xflip, yflip, x, y + 3 * gfx->height(), 0); } - gfx->transpen(bitmap,cliprect, code, color, xflip, yflip, x, y, 0); + gfx->transpen(bitmap,cliprect, code, color, xflip, yflip, x, y, 0); if (doubled) i += 4; } diff --git a/src/mame/video/gotya.cpp b/src/mame/video/gotya.cpp index 3f2eace21f2..ca2070a70f1 100644 --- a/src/mame/video/gotya.cpp +++ b/src/mame/video/gotya.cpp @@ -128,11 +128,11 @@ void gotya_state::draw_status_row( bitmap_ind16 &bitmap, const rectangle &clipre sy = 31 - row; - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, - m_videoram2[row * 32 + col], - m_videoram2[row * 32 + col + 0x10] & 0x0f, - flip_screen_x(), flip_screen_y(), - 8 * sx, 8 * sy); + m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, + m_videoram2[row * 32 + col], + m_videoram2[row * 32 + col + 0x10] & 0x0f, + flip_screen_x(), flip_screen_y(), + 8 * sx, 8 * sy); } } @@ -152,10 +152,10 @@ void gotya_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect sy = 240 - sy; - m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, - code, color, - flip_screen_x(), flip_screen_y(), - sx, sy, 0); + m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, + code, color, + flip_screen_x(), flip_screen_y(), + sx, sy, 0); } } diff --git a/src/mame/video/k001005.cpp b/src/mame/video/k001005.cpp index fad84787317..66ea3984cc0 100644 --- a/src/mame/video/k001005.cpp +++ b/src/mame/video/k001005.cpp @@ -969,8 +969,10 @@ void k001005_renderer::draw_scanline(INT32 scanline, const extent_t &extent, con int ibri = (int)(bri); int ifog = (int)(fog); - if (ibri < 0) ibri = 0; if (ibri > 255) ibri = 255; - if (ifog < 0) ifog = 0; if (ifog > 65536) ifog = 65536; + if (ibri < 0) ibri = 0; + if (ibri > 255) ibri = 255; + if (ifog < 0) ifog = 0; + if (ifog > 65536) ifog = 65536; if (z <= zb[x]) { @@ -984,9 +986,12 @@ void k001005_renderer::draw_scanline(INT32 scanline, const extent_t &extent, con g = ((((g * poly_light_g * ibri) >> 16) * ifog) + (poly_fog_g * (65536 - ifog))) >> 16; b = ((((b * poly_light_b * ibri) >> 16) * ifog) + (poly_fog_b * (65536 - ifog))) >> 16; - if (r < 0) r = 0; if (r > 255) r = 255; - if (g < 0) g = 0; if (g > 255) g = 255; - if (b < 0) b = 0; if (b > 255) b = 255; + if (r < 0) r = 0; + if (r > 255) r = 255; + if (g < 0) g = 0; + if (g > 255) g = 255; + if (b < 0) b = 0; + if (b > 255) b = 255; fb[x] = (color & 0xff000000) | (r << 16) | (g << 8) | b; zb[x] = z; @@ -1046,8 +1051,10 @@ void k001005_renderer::draw_scanline_tex(INT32 scanline, const extent_t &extent, int ibri = (int)(bri); int ifog = (int)(fog); - if (ibri < 0) ibri = 0; if (ibri > 255) ibri = 255; - if (ifog < 0) ifog = 0; if (ifog > 65536) ifog = 65536; + if (ibri < 0) ibri = 0; + if (ibri > 255) ibri = 255; + if (ifog < 0) ifog = 0; + if (ifog > 65536) ifog = 65536; if (z <= zb[x]) { @@ -1074,9 +1081,12 @@ void k001005_renderer::draw_scanline_tex(INT32 scanline, const extent_t &extent, g = ((((g * poly_light_g * ibri) >> 16) * ifog) + (poly_fog_g * (65536 - ifog))) >> 16; b = ((((b * poly_light_b * ibri) >> 16) * ifog) + (poly_fog_b * (65536 - ifog))) >> 16; - if (r < 0) r = 0; if (r > 255) r = 255; - if (g < 0) g = 0; if (g > 255) g = 255; - if (b < 0) b = 0; if (b > 255) b = 255; + if (r < 0) r = 0; + if (r > 255) r = 255; + if (g < 0) g = 0; + if (g > 255) g = 255; + if (b < 0) b = 0; + if (b > 255) b = 255; fb[x] = 0xff000000 | (r << 16) | (g << 8) | b; zb[x] = z; @@ -1129,9 +1139,12 @@ void k001005_renderer::draw_scanline_gouraud_blend(INT32 scanline, const extent_ ib = ((ib * ia) >> 8) + ((sb * (0xff-ia)) >> 8); } - if (ir < 0) ir = 0; if (ir > 255) ir = 255; - if (ig < 0) ig = 0; if (ig > 255) ig = 255; - if (ib < 0) ib = 0; if (ib > 255) ib = 255; + if (ir < 0) ir = 0; + if (ir > 255) ir = 255; + if (ig < 0) ig = 0; + if (ig > 255) ig = 255; + if (ib < 0) ib = 0; + if (ib > 255) ib = 255; fb[x] = 0xff000000 | (ir << 16) | (ig << 8) | ib; zb[x] = z; diff --git a/src/mame/video/k052109.cpp b/src/mame/video/k052109.cpp index 6530afb113a..3456778a502 100644 --- a/src/mame/video/k052109.cpp +++ b/src/mame/video/k052109.cpp @@ -337,8 +337,8 @@ READ8_MEMBER( k052109_device::read ) else m_k052109_cb(0, bank, &code, &color, &flags, &priority); - addr = (code << 5) + (offset & 0x1f); - addr &= m_char_rom.mask(); + addr = (code << 5) + (offset & 0x1f); + addr &= m_char_rom.mask(); // logerror("%04x: off = %04x sub = %02x (bnk = %x) adr = %06x\n", space.device().safe_pc(), offset, m_romsubbank, bank, addr); diff --git a/src/mame/video/pacman.cpp b/src/mame/video/pacman.cpp index 0020ac46eb4..0b600d101c5 100644 --- a/src/mame/video/pacman.cpp +++ b/src/mame/video/pacman.cpp @@ -291,7 +291,7 @@ UINT32 pacman_state::screen_update_pacman(screen_device &screen, bitmap_ind16 &b m_gfxdecode->gfx(1)->transmask(bitmap,spriteclip, ( spriteram[offs] >> 2 ) | (m_spritebank << 6), color, - fy,fx, //FIXME: flipping bits are really supposed to be inverted here? + fx,fy, sx - 256,sy + m_xoffsethack, m_palette->transpen_mask(*m_gfxdecode->gfx(1), color & 0x3f, 0)); } diff --git a/src/mame/video/pcd.cpp b/src/mame/video/pcd.cpp index da20168f390..9c9354bd569 100644 --- a/src/mame/video/pcd.cpp +++ b/src/mame/video/pcd.cpp @@ -405,8 +405,8 @@ WRITE8_MEMBER(pcx_video_device::p1_w) void pcd_video_device::device_start() { - m_maincpu->space(AS_IO).install_readwrite_handler(0xfb00, 0xfb01, 0, 0, read8_delegate(FUNC(pcdx_video_device::detect_r), this), write8_delegate(FUNC(pcdx_video_device::detect_w), this), 0xff00); - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf0000, 0xf7fff, 0, 0, read8_delegate(FUNC(pcd_video_device::vram_r), this), write8_delegate(FUNC(pcd_video_device::vram_w), this), 0xffff); + m_maincpu->space(AS_IO).install_readwrite_handler(0xfb00, 0xfb01, read8_delegate(FUNC(pcdx_video_device::detect_r), this), write8_delegate(FUNC(pcdx_video_device::detect_w), this), 0xff00); + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf0000, 0xf7fff, read8_delegate(FUNC(pcd_video_device::vram_r), this), write8_delegate(FUNC(pcd_video_device::vram_w), this), 0xffff); set_gfx(0, std::make_unique<gfx_element>(palette(), pcd_charlayout, &m_charram[0], 0, 1, 0)); } @@ -431,7 +431,7 @@ ADDRESS_MAP_END void pcx_video_device::device_start() { mcs51_cpu_device *mcu = downcast<mcs51_cpu_device *>(m_mcu.target()); - m_maincpu->space(AS_IO).install_readwrite_handler(0xfb00, 0xfb01, 0, 0, read8_delegate(FUNC(pcdx_video_device::detect_r), this), write8_delegate(FUNC(pcdx_video_device::detect_w), this), 0x00ff); + m_maincpu->space(AS_IO).install_readwrite_handler(0xfb00, 0xfb01, read8_delegate(FUNC(pcdx_video_device::detect_r), this), write8_delegate(FUNC(pcdx_video_device::detect_w), this), 0x00ff); m_txd_handler.resolve_safe(); // set serial callbacks diff --git a/src/mame/video/snk.cpp b/src/mame/video/snk.cpp index 3749233adcb..cb7d58d0001 100644 --- a/src/mame/video/snk.cpp +++ b/src/mame/video/snk.cpp @@ -585,10 +585,10 @@ WRITE8_MEMBER(snk_state::ikari_unknown_video_w) Changing palette bank is necessary to fix colors in test mode. */ -if (data != 0x20 && // normal - data != 0x31 && // ikari test - data != 0xaa) // victroad spurious during boot - popmessage("attrs %02x contact MAMEDEV", data); + if (data != 0x20 && // normal + data != 0x31 && // ikari test + data != 0xaa) // victroad spurious during boot + popmessage("attrs %02x contact MAMEDEV", data); m_tx_tilemap->set_palette_offset((data & 0x01) << 4); if (m_tx_tile_offset != ((data & 0x10) << 4)) diff --git a/src/mame/video/strnskil.cpp b/src/mame/video/strnskil.cpp index 20d7e3e2ee5..76316d1d9bf 100644 --- a/src/mame/video/strnskil.cpp +++ b/src/mame/video/strnskil.cpp @@ -107,7 +107,7 @@ void strnskil_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec sx = sx - 256; - m_gfxdecode->gfx(1)->transmask(bitmap,cliprect, + m_gfxdecode->gfx(1)->transmask(bitmap,cliprect, code, color, flipx, flipy, px, py, diff --git a/src/mame/video/taotaido.cpp b/src/mame/video/taotaido.cpp index 21eaa685afc..47cc988fe45 100644 --- a/src/mame/video/taotaido.cpp +++ b/src/mame/video/taotaido.cpp @@ -49,7 +49,7 @@ WRITE16_MEMBER(taotaido_state::tileregs_w) m_video_bank_select[(offset-4)*2] = data >> 8; if(ACCESSING_BITS_0_7) m_video_bank_select[(offset-4)*2+1] = data &0xff; - m_bg_tilemap->mark_all_dirty(); + m_bg_tilemap->mark_all_dirty(); break; } } diff --git a/src/mame/video/vc4000.cpp b/src/mame/video/vc4000.cpp index 45fa1079131..ca57728b645 100644 --- a/src/mame/video/vc4000.cpp +++ b/src/mame/video/vc4000.cpp @@ -542,7 +542,8 @@ inline void vc4000_state::vc4000_draw_grid(UINT8 *collision) } switch (i&3) { case 0: - if (k&1) w=8;break; + if (k&1) w=8; + break; case 1: if ((line%40)<=10) { if (k&2) w=8; diff --git a/src/mame/video/wolfpack.cpp b/src/mame/video/wolfpack.cpp index 07b3aea0acc..03cfdde3da4 100644 --- a/src/mame/video/wolfpack.cpp +++ b/src/mame/video/wolfpack.cpp @@ -196,7 +196,7 @@ void wolfpack_state::draw_pt(bitmap_ind16 &bitmap, const rectangle &cliprect) rect.max_x = 255; - m_gfxdecode->gfx(2)->transpen(bitmap,rect, + m_gfxdecode->gfx(2)->transpen(bitmap,rect, m_pt_pic, 0, 0, 0, @@ -204,7 +204,7 @@ void wolfpack_state::draw_pt(bitmap_ind16 &bitmap, const rectangle &cliprect) m_pt_pos_select ? 0x70 : 0xA0, 0); - m_gfxdecode->gfx(2)->transpen(bitmap,rect, + m_gfxdecode->gfx(2)->transpen(bitmap,rect, m_pt_pic, 0, 0, 0, diff --git a/src/osd/modules/debugger/debugimgui.cpp b/src/osd/modules/debugger/debugimgui.cpp index 504899f560a..81f13926376 100644 --- a/src/osd/modules/debugger/debugimgui.cpp +++ b/src/osd/modules/debugger/debugimgui.cpp @@ -540,12 +540,12 @@ void debug_imgui::draw_view(debug_area* view_ptr, bool exp_change) { char str[2]; map_attr_to_fg_bg(viewdata->attrib,&fg,&bg); - ImU32 fg_col = ImGui::ColorConvertFloat4ToU32(ImVec4(fg.r()/255.0f,fg.g()/255.0f,fg.b()/255.0f,fg.a()/255.0f)); + ImU32 fg_col = IM_COL32(fg.r(),fg.g(),fg.b(),fg.a()); str[0] = v = viewdata->byte; str[1] = '\0'; if(bg != base) { - ImU32 bg_col = ImGui::ColorConvertFloat4ToU32(ImVec4(bg.r()/255.0f,bg.g()/255.0f,bg.b()/255.0f,bg.a()/255.0f)); + ImU32 bg_col = IM_COL32(bg.r(),bg.g(),bg.b(),bg.a()); xy1.x++; xy2.x++; drawlist->AddRectFilled(xy1,xy2,bg_col); xy1.x--; xy2.x--; @@ -560,6 +560,15 @@ void debug_imgui::draw_view(debug_area* view_ptr, bool exp_change) xy1.y += fsize.y; xy2.y += fsize.y; } + + // draw a rect around a view if it has focus + if(view_ptr->has_focus) + { + ImU32 col = IM_COL32(127,127,127,76); + drawlist->AddRect(ImVec2(view_ptr->ofs_x,view_ptr->ofs_y + ImGui::GetScrollY()), + ImVec2(view_ptr->ofs_x + view_ptr->view_width,view_ptr->ofs_y + ImGui::GetScrollY() + view_ptr->view_height),col); + } + ImGui::PopStyleVar(2); } @@ -938,12 +947,15 @@ void debug_imgui::draw_console() draw_view(view_main_console,false); ImGui::EndChild(); ImGui::Separator(); + ImGuiInputTextFlags flags = ImGuiInputTextFlags_EnterReturnsTrue; if(m_running) flags |= ImGuiInputTextFlags_ReadOnly; ImGui::PushItemWidth(-1.0f); if(ImGui::InputText("##console_input",view_main_console->console_input,512,flags)) view_main_console->exec_cmd = true; + if ((ImGui::IsRootWindowOrAnyChildFocused() && !ImGui::IsAnyItemActive() && !ImGui::IsMouseClicked(0))) + ImGui::SetKeyboardFocusHere(-1); // Auto focus previous widget ImGui::PopItemWidth(); ImGui::EndChild(); ImGui::End(); diff --git a/src/osd/modules/debugger/debugwin.cpp b/src/osd/modules/debugger/debugwin.cpp index 0fdd86c7e65..418e24287ef 100644 --- a/src/osd/modules/debugger/debugwin.cpp +++ b/src/osd/modules/debugger/debugwin.cpp @@ -237,7 +237,7 @@ void debugger_windows::show_all() void debugger_windows::hide_all() { - SetForegroundWindow(win_window_list.front()->platform_window<HWND>()); + SetForegroundWindow(osd_common_t::s_window_list.front()->platform_window<HWND>()); for (debugwin_info &info : m_window_list) info.hide(); } diff --git a/src/osd/modules/debugger/qt/dasmwindow.cpp b/src/osd/modules/debugger/qt/dasmwindow.cpp index 7e6b134aef5..a48d900beac 100644 --- a/src/osd/modules/debugger/qt/dasmwindow.cpp +++ b/src/osd/modules/debugger/qt/dasmwindow.cpp @@ -99,7 +99,7 @@ DasmWindow::DasmWindow(running_machine* machine, QWidget* parent) : rightActComments->setActionGroup(rightBarGroup); rightActRaw->setShortcut(QKeySequence("Ctrl+R")); rightActEncrypted->setShortcut(QKeySequence("Ctrl+E")); - rightActComments->setShortcut(QKeySequence("Ctrl+C")); + rightActComments->setShortcut(QKeySequence("Ctrl+N")); rightActRaw->setChecked(true); connect(rightBarGroup, &QActionGroup::triggered, this, &DasmWindow::rightBarChanged); diff --git a/src/osd/modules/debugger/qt/mainwindow.cpp b/src/osd/modules/debugger/qt/mainwindow.cpp index 4020578635d..5fbf77962ae 100644 --- a/src/osd/modules/debugger/qt/mainwindow.cpp +++ b/src/osd/modules/debugger/qt/mainwindow.cpp @@ -76,7 +76,7 @@ MainWindow::MainWindow(running_machine* machine, QWidget* parent) : rightActComments->setActionGroup(rightBarGroup); rightActRaw->setShortcut(QKeySequence("Ctrl+R")); rightActEncrypted->setShortcut(QKeySequence("Ctrl+E")); - rightActComments->setShortcut(QKeySequence("Ctrl+C")); + rightActComments->setShortcut(QKeySequence("Ctrl+N")); rightActRaw->setChecked(true); connect(rightBarGroup, &QActionGroup::triggered, this, &MainWindow::rightBarChanged); diff --git a/src/osd/modules/debugger/win/debugwininfo.cpp b/src/osd/modules/debugger/win/debugwininfo.cpp index f46c3332bfb..8bb9e7592f1 100644 --- a/src/osd/modules/debugger/win/debugwininfo.cpp +++ b/src/osd/modules/debugger/win/debugwininfo.cpp @@ -36,7 +36,7 @@ debugwin_info::debugwin_info(debugger_windows_interface &debugger, bool is_main_ register_window_class(); m_wnd = win_create_window_ex_utf8(DEBUG_WINDOW_STYLE_EX, "MAMEDebugWindow", title, DEBUG_WINDOW_STYLE, - 0, 0, 100, 100, win_window_list.front()->platform_window<HWND>(), create_standard_menubar(), GetModuleHandleUni(), this); + 0, 0, 100, 100, osd_common_t::s_window_list.front()->platform_window<HWND>(), create_standard_menubar(), GetModuleHandleUni(), this); if (m_wnd == nullptr) return; diff --git a/src/osd/modules/debugger/win/disasmbasewininfo.cpp b/src/osd/modules/debugger/win/disasmbasewininfo.cpp index b8f65aa925d..c7aea8d125a 100644 --- a/src/osd/modules/debugger/win/disasmbasewininfo.cpp +++ b/src/osd/modules/debugger/win/disasmbasewininfo.cpp @@ -39,7 +39,7 @@ disasmbasewin_info::disasmbasewin_info(debugger_windows_interface &debugger, boo AppendMenu(optionsmenu, MF_DISABLED | MF_SEPARATOR, 0, TEXT("")); AppendMenu(optionsmenu, MF_ENABLED, ID_SHOW_RAW, TEXT("Raw opcodes\tCtrl+R")); AppendMenu(optionsmenu, MF_ENABLED, ID_SHOW_ENCRYPTED, TEXT("Encrypted opcodes\tCtrl+E")); - AppendMenu(optionsmenu, MF_ENABLED, ID_SHOW_COMMENTS, TEXT("Comments\tCtrl+M")); + AppendMenu(optionsmenu, MF_ENABLED, ID_SHOW_COMMENTS, TEXT("Comments\tCtrl+N")); AppendMenu(GetMenu(window()), MF_ENABLED | MF_POPUP, (UINT_PTR)optionsmenu, TEXT("Options")); // set up the view to track the initial expression diff --git a/src/osd/modules/diagnostics/diagnostics_win32.cpp b/src/osd/modules/diagnostics/diagnostics_win32.cpp index d24bffe75a7..70e290240c2 100644 --- a/src/osd/modules/diagnostics/diagnostics_win32.cpp +++ b/src/osd/modules/diagnostics/diagnostics_win32.cpp @@ -22,30 +22,21 @@ #include <memory> #include <vector> -#include <windows/winutil.h> -template<typename _FunctionPtr> -class dynamic_bind -{ -public: - // constructor which looks up the function - dynamic_bind(const TCHAR *dll, const char *symbol) - : m_function(nullptr) - { - HMODULE module = LoadLibrary(dll); - if (module != nullptr) - m_function = reinterpret_cast<_FunctionPtr>(GetProcAddress(module, symbol)); - } +#include "modules/lib/osdlib.h" - // bool to test if the function is nullptr or not - operator bool() const { return (m_function != nullptr); } +#include <windows/winutil.h> - // dereference to get the underlying pointer - _FunctionPtr operator *() const { return m_function; } - -private: - _FunctionPtr m_function; -}; +// Typedefs for dynamically loaded functions +typedef BOOL (WINAPI *StackWalk64_fn)(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID, PREAD_PROCESS_MEMORY_ROUTINE64, PFUNCTION_TABLE_ACCESS_ROUTINE64, PGET_MODULE_BASE_ROUTINE64, PTRANSLATE_ADDRESS_ROUTINE64); +typedef BOOL (WINAPI *SymInitialize_fn)(HANDLE, LPCTSTR, BOOL); +typedef PVOID (WINAPI *SymFunctionTableAccess64_fn)(HANDLE, DWORD64); +typedef DWORD64 (WINAPI *SymGetModuleBase64_fn)(HANDLE, DWORD64); +typedef BOOL (WINAPI *SymFromAddr_fn)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFO); +typedef BOOL (WINAPI *SymGetLineFromAddr64_fn)(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64); +typedef PIMAGE_SECTION_HEADER (WINAPI *ImageRvaToSection_fn)(PIMAGE_NT_HEADERS, PVOID, ULONG); +typedef PIMAGE_NT_HEADERS (WINAPI *ImageNtHeader_fn)(PVOID); +typedef VOID (WINAPI *RtlCaptureContext_fn)(PCONTEXT); class stack_walker { @@ -67,12 +58,14 @@ private: CONTEXT m_context; bool m_first; - dynamic_bind<BOOL(WINAPI *)(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID, PREAD_PROCESS_MEMORY_ROUTINE64, PFUNCTION_TABLE_ACCESS_ROUTINE64, PGET_MODULE_BASE_ROUTINE64, PTRANSLATE_ADDRESS_ROUTINE64)> - m_stack_walk_64; - dynamic_bind<BOOL(WINAPI *)(HANDLE, LPCTSTR, BOOL)> m_sym_initialize; - dynamic_bind<PVOID(WINAPI *)(HANDLE, DWORD64)> m_sym_function_table_access_64; - dynamic_bind<DWORD64(WINAPI *)(HANDLE, DWORD64)> m_sym_get_module_base_64; - dynamic_bind<VOID(WINAPI *)(PCONTEXT)> m_rtl_capture_context; + osd::dynamic_module::ptr m_dbghelp_dll; + osd::dynamic_module::ptr m_kernel32_dll; + + StackWalk64_fn m_stack_walk_64; + SymInitialize_fn m_sym_initialize; + SymFunctionTableAccess64_fn m_sym_function_table_access_64; + SymGetModuleBase64_fn m_sym_get_module_base_64; + RtlCaptureContext_fn m_rtl_capture_context; static bool s_initialized; }; @@ -126,8 +119,10 @@ private: FPTR m_last_base; FPTR m_text_base; - dynamic_bind<BOOL(WINAPI *)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFO)> m_sym_from_addr; - dynamic_bind<BOOL(WINAPI *)(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64)> m_sym_get_line_from_addr_64; + osd::dynamic_module::ptr m_dbghelp_dll; + + SymFromAddr_fn m_sym_from_addr; + SymGetLineFromAddr64_fn m_sym_get_line_from_addr_64; }; class sampling_profiler @@ -176,17 +171,21 @@ bool stack_walker::s_initialized = false; stack_walker::stack_walker() : m_process(GetCurrentProcess()), m_thread(GetCurrentThread()), - m_first(true), - m_stack_walk_64(TEXT("dbghelp.dll"), "StackWalk64"), - m_sym_initialize(TEXT("dbghelp.dll"), "SymInitialize"), - m_sym_function_table_access_64(TEXT("dbghelp.dll"), "SymFunctionTableAccess64"), - m_sym_get_module_base_64(TEXT("dbghelp.dll"), "SymGetModuleBase64"), - m_rtl_capture_context(TEXT("kernel32.dll"), "RtlCaptureContext") + m_first(true) { // zap the structs memset(&m_stackframe, 0, sizeof(m_stackframe)); memset(&m_context, 0, sizeof(m_context)); + m_dbghelp_dll = osd::dynamic_module::open({ "dbghelp.dll" }); + m_kernel32_dll = osd::dynamic_module::open({ "kernel32.dll" }); + + m_stack_walk_64 = m_dbghelp_dll->bind<StackWalk64_fn>("StackWalk64"); + m_sym_initialize = m_dbghelp_dll->bind<SymInitialize_fn>("SymInitialize"); + m_sym_function_table_access_64 = m_dbghelp_dll->bind<SymFunctionTableAccess64_fn>("SymFunctionTableAccess64"); + m_sym_get_module_base_64 = m_dbghelp_dll->bind<SymGetModuleBase64_fn>("SymGetModuleBase64"); + m_rtl_capture_context = m_kernel32_dll->bind<RtlCaptureContext_fn>("RtlCaptureContext"); + // initialize the symbols if (!s_initialized && m_sym_initialize && m_stack_walk_64 && m_sym_function_table_access_64 && m_sym_get_module_base_64) { @@ -294,9 +293,7 @@ symbol_manager::symbol_manager(const char *argv0) m_symfile(argv0), m_process(GetCurrentProcess()), m_last_base(0), - m_text_base(0), - m_sym_from_addr(TEXT("dbghelp.dll"), "SymFromAddr"), - m_sym_get_line_from_addr_64(TEXT("dbghelp.dll"), "SymGetLineFromAddr64") + m_text_base(0) { #ifdef __GNUC__ // compute the name of the mapfile @@ -317,6 +314,11 @@ symbol_manager::symbol_manager(const char *argv0) // expand the buffer to be decently large up front m_buffer = string_format("%500s", ""); + + m_dbghelp_dll = osd::dynamic_module::open({ "dbghelp.dll" }); + + m_sym_from_addr = m_dbghelp_dll->bind<SymFromAddr_fn>("SymFromAddr"); + m_sym_get_line_from_addr_64 = m_dbghelp_dll->bind<SymGetLineFromAddr64_fn>("SymGetLineFromAddr64"); } @@ -603,8 +605,10 @@ void symbol_manager::format_symbol(const char *name, UINT32 displacement, const FPTR symbol_manager::get_text_section_base() { - dynamic_bind<PIMAGE_SECTION_HEADER(WINAPI *)(PIMAGE_NT_HEADERS, PVOID, ULONG)> image_rva_to_section(TEXT("dbghelp.dll"), "ImageRvaToSection"); - dynamic_bind<PIMAGE_NT_HEADERS(WINAPI *)(PVOID)> image_nt_header(TEXT("dbghelp.dll"), "ImageNtHeader"); + osd::dynamic_module::ptr m_dbghelp_dll = osd::dynamic_module::open({ "dbghelp.dll" }); + + ImageRvaToSection_fn image_rva_to_section = m_dbghelp_dll->bind<ImageRvaToSection_fn>("ImageRvaToSection"); + ImageNtHeader_fn image_nt_header = m_dbghelp_dll->bind<ImageNtHeader_fn>("ImageNtHeader"); // start with the image base PVOID base = reinterpret_cast<PVOID>(GetModuleHandleUni()); diff --git a/src/osd/modules/font/font_dwrite.cpp b/src/osd/modules/font/font_dwrite.cpp index 670986f0cfc..599a562de2b 100644 --- a/src/osd/modules/font/font_dwrite.cpp +++ b/src/osd/modules/font/font_dwrite.cpp @@ -7,6 +7,7 @@ #include "font_module.h" #include "modules/osdmodule.h" +#include "modules/lib/osdlib.h" // We take dependencies on WRL client headers and // we can only build with a high enough version @@ -78,8 +79,8 @@ struct osd_deleter typedef std::unique_ptr<char, osd_deleter> osd_utf8_ptr; // Typedefs for dynamically loaded functions -typedef lazy_loaded_function_p4<HRESULT, D2D1_FACTORY_TYPE, REFIID, const D2D1_FACTORY_OPTIONS*, void**> d2d_create_factory_fn; -typedef lazy_loaded_function_p3<HRESULT, DWRITE_FACTORY_TYPE, REFIID, IUnknown**> dwrite_create_factory_fn; +typedef HRESULT (WINAPI *d2d_create_factory_fn)(D2D1_FACTORY_TYPE, REFIID, const D2D1_FACTORY_OPTIONS *, void **); +typedef HRESULT (WINAPI *dwrite_create_factory_fn)(DWRITE_FACTORY_TYPE, REFIID, IUnknown **); // Debugging functions #ifdef DWRITE_DEBUGGING @@ -88,7 +89,7 @@ typedef lazy_loaded_function_p3<HRESULT, DWRITE_FACTORY_TYPE, REFIID, IUnknown** // Save image to file //------------------------------------------------- -void SaveBitmap(IWICBitmap* bitmap, GUID pixelFormat, const WCHAR *filename) +HRESULT SaveBitmap(IWICBitmap* bitmap, GUID pixelFormat, const WCHAR *filename) { HRESULT result = S_OK; ComPtr<IWICStream> stream; @@ -96,13 +97,17 @@ void SaveBitmap(IWICBitmap* bitmap, GUID pixelFormat, const WCHAR *filename) ComPtr<IDWriteFactory> dwriteFactory; ComPtr<IWICImagingFactory> wicFactory; - d2d_create_factory_fn pfn_D2D1CreateFactory("D2D1CreateFactory", L"D2d1.dll"); - dwrite_create_factory_fn pfn_DWriteCreateFactory("DWriteCreateFactory", L"Dwrite.dll"); - HR_RET(pfn_D2D1CreateFactory.initialize()); - HR_RET(pfn_DWriteCreateFactory.initialize()); + osd::dynamic_module::ptr d2d1_dll = osd::dynamic_module::open({ "d2d1.dll" }); + osd::dynamic_module::ptr dwrite_dll = osd::dynamic_module::open({ "dwrite.dll" }); + + d2d_create_factory_fn pfn_D2D1CreateFactory = d2d1_dll->bind<d2d_create_factory_fn>("D2D1CreateFactory"); + dwrite_create_factory_fn pfn_DWriteCreateFactory = dwrite_dll->bind<dwrite_create_factory_fn>("DWriteCreateFactory"); + + if (!pfn_D2D1CreateFactory || !pfn_DWriteCreateFactory) + return ERROR_DLL_NOT_FOUND; // Create a Direct2D factory - HR_RET(pfn_D2D1CreateFactory( + HR_RETHR((*pfn_D2D1CreateFactory)( D2D1_FACTORY_TYPE_SINGLE_THREADED, __uuidof(ID2D1Factory1), nullptr, @@ -112,41 +117,43 @@ void SaveBitmap(IWICBitmap* bitmap, GUID pixelFormat, const WCHAR *filename) CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); // Create a DirectWrite factory. - HR_RET(pfn_DWriteCreateFactory( + HR_RETHR((*pfn_DWriteCreateFactory)( DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), reinterpret_cast<IUnknown **>(dwriteFactory.GetAddressOf()))); - HR_RET(CoCreateInstance( + HR_RETHR(CoCreateInstance( CLSID_WICImagingFactory, nullptr, CLSCTX_INPROC_SERVER, __uuidof(IWICImagingFactory), (void**)&wicFactory)); - HR_RET(wicFactory->CreateStream(&stream)); - HR_RET(stream->InitializeFromFilename(filename, GENERIC_WRITE)); + HR_RETHR(wicFactory->CreateStream(&stream)); + HR_RETHR(stream->InitializeFromFilename(filename, GENERIC_WRITE)); ComPtr<IWICBitmapEncoder> encoder; - HR_RET(wicFactory->CreateEncoder(GUID_ContainerFormatBmp, nullptr, &encoder)); - HR_RET(encoder->Initialize(stream.Get(), WICBitmapEncoderNoCache)); + HR_RETHR(wicFactory->CreateEncoder(GUID_ContainerFormatBmp, nullptr, &encoder)); + HR_RETHR(encoder->Initialize(stream.Get(), WICBitmapEncoderNoCache)); ComPtr<IWICBitmapFrameEncode> frameEncode; - HR_RET(encoder->CreateNewFrame(&frameEncode, nullptr)); - HR_RET(frameEncode->Initialize(nullptr)); + HR_RETHR(encoder->CreateNewFrame(&frameEncode, nullptr)); + HR_RETHR(frameEncode->Initialize(nullptr)); UINT width, height; - HR_RET(bitmap->GetSize(&width, &height)); - HR_RET(frameEncode->SetSize(width, height)); - HR_RET(frameEncode->SetPixelFormat(&pixelFormat)); + HR_RETHR(bitmap->GetSize(&width, &height)); + HR_RETHR(frameEncode->SetSize(width, height)); + HR_RETHR(frameEncode->SetPixelFormat(&pixelFormat)); - HR_RET(frameEncode->WriteSource(bitmap, nullptr)); + HR_RETHR(frameEncode->WriteSource(bitmap, nullptr)); - HR_RET(frameEncode->Commit()); - HR_RET(encoder->Commit()); + HR_RETHR(frameEncode->Commit()); + HR_RETHR(encoder->Commit()); + + return S_OK; } -void SaveBitmap2(bitmap_argb32 &bitmap, const WCHAR *filename) +HRESULT SaveBitmap2(bitmap_argb32 &bitmap, const WCHAR *filename) { HRESULT result; @@ -158,12 +165,12 @@ void SaveBitmap2(bitmap_argb32 &bitmap, const WCHAR *filename) for (int x = 0; x < bitmap.width(); x++) { UINT32 pixel = bitmap.pix32(y, x); - pRow[x] = (pixel == 0xFFFFFFFF) ? rgb_t(0xFF, 0x00, 0x00, 0x00) : pRow[x] = rgb_t(0xFF, 0xFF, 0xFF, 0xFF); + pRow[x] = (pixel == 0xFFFFFFFF) ? rgb_t(0xFF, 0x00, 0x00, 0x00) : rgb_t(0xFF, 0xFF, 0xFF, 0xFF); } } ComPtr<IWICImagingFactory> wicFactory; - HR_RET(CoCreateInstance( + HR_RETHR(CoCreateInstance( CLSID_WICImagingFactory, nullptr, CLSCTX_INPROC_SERVER, @@ -182,6 +189,8 @@ void SaveBitmap2(bitmap_argb32 &bitmap, const WCHAR *filename) &bmp2); SaveBitmap(bmp2.Get(), GUID_WICPixelFormat32bppRGBA, filename); + + return S_OK; } #endif @@ -648,18 +657,18 @@ private: class font_dwrite : public osd_module, public font_module { private: - d2d_create_factory_fn m_pfnD2D1CreateFactory; - dwrite_create_factory_fn m_pfnDWriteCreateFactory; - ComPtr<ID2D1Factory> m_d2dfactory; - ComPtr<IDWriteFactory> m_dwriteFactory; - ComPtr<IWICImagingFactory> m_wicFactory; + osd::dynamic_module::ptr m_d2d1_dll; + osd::dynamic_module::ptr m_dwrite_dll; + d2d_create_factory_fn m_pfnD2D1CreateFactory; + dwrite_create_factory_fn m_pfnDWriteCreateFactory; + ComPtr<ID2D1Factory> m_d2dfactory; + ComPtr<IDWriteFactory> m_dwriteFactory; + ComPtr<IWICImagingFactory> m_wicFactory; public: font_dwrite() : osd_module(OSD_FONT_PROVIDER, "dwrite"), font_module(), - m_pfnD2D1CreateFactory("D2D1CreateFactory", L"D2d1.dll"), - m_pfnDWriteCreateFactory("DWriteCreateFactory", L"Dwrite.dll"), m_d2dfactory(nullptr), m_dwriteFactory(nullptr), m_wicFactory(nullptr) @@ -668,12 +677,15 @@ public: virtual bool probe() override { + m_d2d1_dll = osd::dynamic_module::open({ "d2d1.dll" }); + m_dwrite_dll = osd::dynamic_module::open({ "dwrite.dll" }); + + m_pfnD2D1CreateFactory = m_d2d1_dll->bind<d2d_create_factory_fn>("D2D1CreateFactory"); + m_pfnDWriteCreateFactory = m_dwrite_dll->bind<dwrite_create_factory_fn>("DWriteCreateFactory"); + // This module is available if it can load the expected API Functions - if (m_pfnD2D1CreateFactory.initialize() != 0 - || m_pfnDWriteCreateFactory.initialize() != 0) - { + if (!m_pfnD2D1CreateFactory || !m_pfnDWriteCreateFactory) return false; - } return true; } @@ -685,15 +697,14 @@ public: osd_printf_verbose("FontProvider: Initializing DirectWrite\n"); // Make sure we can initialize our api functions - if (m_pfnD2D1CreateFactory.initialize() - || m_pfnDWriteCreateFactory.initialize()) + if (!m_pfnD2D1CreateFactory || !m_pfnDWriteCreateFactory) { osd_printf_error("ERROR: FontProvider: Failed to load DirectWrite functions.\n"); return -1; } // Create a Direct2D factory. - HR_RET1(m_pfnD2D1CreateFactory( + HR_RET1((*m_pfnD2D1CreateFactory)( D2D1_FACTORY_TYPE_SINGLE_THREADED, __uuidof(ID2D1Factory), nullptr, @@ -703,7 +714,7 @@ public: CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); // Create a DirectWrite factory. - HR_RET1(m_pfnDWriteCreateFactory( + HR_RET1((*m_pfnDWriteCreateFactory)( DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), reinterpret_cast<IUnknown **>(m_dwriteFactory.GetAddressOf()))); diff --git a/src/osd/modules/input/input_dinput.cpp b/src/osd/modules/input/input_dinput.cpp index 81351608b8a..21874cbbe95 100644 --- a/src/osd/modules/input/input_dinput.cpp +++ b/src/osd/modules/input/input_dinput.cpp @@ -136,8 +136,7 @@ void dinput_keyboard_device::reset() dinput_api_helper::dinput_api_helper(int version) : m_dinput(nullptr), - m_dinput_version(version), - m_pfn_DirectInputCreate("DirectInputCreateW", L"dinput.dll") + m_dinput_version(version) { } @@ -163,18 +162,23 @@ int dinput_api_helper::initialize() else #endif { - result = m_pfn_DirectInputCreate.initialize(); - if (result != DI_OK) - return result; + m_dinput_dll = osd::dynamic_module::open({ "dinput.dll" }); + + m_dinput_create_prt = m_dinput_dll->bind<dinput_create_fn>("DirectInputCreateW"); + if (m_dinput_create_prt == nullptr) + { + osd_printf_verbose("Legacy DirectInput library dinput.dll is not available\n"); + return ERROR_DLL_NOT_FOUND; + } // first attempt to initialize DirectInput at v7 m_dinput_version = 0x0700; - result = m_pfn_DirectInputCreate(GetModuleHandleUni(), m_dinput_version, m_dinput.GetAddressOf(), nullptr); + result = (*m_dinput_create_prt)(GetModuleHandleUni(), m_dinput_version, m_dinput.GetAddressOf(), nullptr); if (result != DI_OK) { // if that fails, try version 5 m_dinput_version = 0x0500; - result = m_pfn_DirectInputCreate(GetModuleHandleUni(), m_dinput_version, m_dinput.GetAddressOf(), nullptr); + result = (*m_dinput_create_prt)(GetModuleHandleUni(), m_dinput_version, m_dinput.GetAddressOf(), nullptr); if (result != DI_OK) { m_dinput_version = 0; @@ -574,7 +578,7 @@ public: dinput_joystick_device *devinfo; int result = 0; - if (!win_window_list.empty() && win_window_list.front()->win_has_menu()) + if (!osd_common_t::s_window_list.empty() && osd_common_t::s_window_list.front()->win_has_menu()) cooperative_level = DISCL_BACKGROUND | DISCL_NONEXCLUSIVE; // allocate and link in a new device diff --git a/src/osd/modules/input/input_dinput.h b/src/osd/modules/input/input_dinput.h index b314b3bd538..5fc3dec30f6 100644 --- a/src/osd/modules/input/input_dinput.h +++ b/src/osd/modules/input/input_dinput.h @@ -2,7 +2,7 @@ #define INPUT_DINPUT_H_ #include "input_common.h" -#include "winutil.h" +#include "modules/lib/osdlib.h" //============================================================ // dinput_device - base directinput device @@ -43,10 +43,11 @@ public: virtual BOOL device_enum_callback(LPCDIDEVICEINSTANCE instance, LPVOID ref) = 0; }; +// Typedef for dynamically loaded function #if DIRECTINPUT_VERSION >= 0x0800 -typedef lazy_loaded_function_p4<HRESULT, HMODULE, int, IDirectInput8 **, LPUNKNOWN> pfn_dinput_create; +typedef HRESULT (WINAPI *dinput_create_fn)(HINSTANCE, DWORD, LPDIRECTINPUT8 *, LPUNKNOWN); #else -typedef lazy_loaded_function_p4<HRESULT, HMODULE, int, IDirectInput **, LPUNKNOWN> pfn_dinput_create; +typedef HRESULT (WINAPI *dinput_create_fn)(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN); #endif class dinput_api_helper @@ -58,7 +59,8 @@ private: Microsoft::WRL::ComPtr<IDirectInput> m_dinput; #endif int m_dinput_version; - pfn_dinput_create m_pfn_DirectInputCreate; + osd::dynamic_module::ptr m_dinput_dll; + dinput_create_fn m_dinput_create_prt; public: dinput_api_helper(int version); @@ -117,7 +119,7 @@ public: } // set the cooperative level - result = devinfo->dinput.device->SetCooperativeLevel(win_window_list.front()->platform_window<HWND>(), cooperative_level); + result = devinfo->dinput.device->SetCooperativeLevel(osd_common_t::s_window_list.front()->platform_window<HWND>(), cooperative_level); if (result != DI_OK) goto error; diff --git a/src/osd/modules/input/input_rawinput.cpp b/src/osd/modules/input/input_rawinput.cpp index 7476fea24a6..c4f84642b2f 100644 --- a/src/osd/modules/input/input_rawinput.cpp +++ b/src/osd/modules/input/input_rawinput.cpp @@ -26,7 +26,7 @@ #include "strconv.h" // MAMEOS headers -#include "winutil.h" +#include "modules/lib/osdlib.h" #include "winmain.h" #include "window.h" @@ -37,17 +37,11 @@ // MACROS //============================================================ -#ifdef UNICODE -#define UNICODE_SUFFIX "W" -#else -#define UNICODE_SUFFIX "A" -#endif - -// RawInput APIs -typedef lazy_loaded_function_p3<INT, PRAWINPUTDEVICELIST, PINT, UINT> get_rawinput_device_list_ptr; -typedef lazy_loaded_function_p5<INT, HRAWINPUT, UINT, LPVOID, PINT, UINT> get_rawinput_data_ptr; -typedef lazy_loaded_function_p4<INT, HANDLE, UINT, LPVOID, PINT> get_rawinput_device_info_ptr; -typedef lazy_loaded_function_p3<BOOL, PCRAWINPUTDEVICE, UINT, UINT> register_rawinput_devices_ptr; +// Typedefs for dynamically loaded functions +typedef UINT (WINAPI *get_rawinput_device_list_ptr)(PRAWINPUTDEVICELIST, PUINT, UINT); +typedef UINT (WINAPI *get_rawinput_data_ptr)( HRAWINPUT, UINT, LPVOID, PUINT, UINT); +typedef UINT (WINAPI *get_rawinput_device_info_ptr)(HANDLE, UINT, LPVOID, PUINT); +typedef BOOL (WINAPI *register_rawinput_devices_ptr)(PCRAWINPUTDEVICE, UINT, UINT); class safe_regkey { @@ -395,13 +389,6 @@ public: } }; -/* -register_rawinput_devices = (register_rawinput_devices_ptr)GetProcAddress(user32, "RegisterRawInputDevices"); -get_rawinput_device_list = (get_rawinput_device_list_ptr)GetProcAddress(user32, "GetRawInputDeviceList"); -get_rawinput_device_info = (get_rawinput_device_info_ptr)GetProcAddress(user32, "GetRawInputDeviceInfo" UNICODE_SUFFIX); -get_rawinput_data = (get_rawinput_data_ptr)GetProcAddress(user32, "GetRawInputData"); -*/ - //============================================================ // rawinput_module - base class for rawinput modules //============================================================ @@ -409,32 +396,33 @@ get_rawinput_data = (get_rawinput_data_ptr)GetProcAddress(user32, "GetRawInputDa class rawinput_module : public wininput_module { private: - // RawInput variables - get_rawinput_device_list_ptr get_rawinput_device_list; - get_rawinput_data_ptr get_rawinput_data; - get_rawinput_device_info_ptr get_rawinput_device_info; - register_rawinput_devices_ptr register_rawinput_devices; - std::mutex m_module_lock; + osd::dynamic_module::ptr m_user32_dll; + get_rawinput_device_list_ptr get_rawinput_device_list; + get_rawinput_data_ptr get_rawinput_data; + get_rawinput_device_info_ptr get_rawinput_device_info; + register_rawinput_devices_ptr register_rawinput_devices; + std::mutex m_module_lock; public: rawinput_module(const char *type, const char* name) - : wininput_module(type, name), - get_rawinput_device_list("GetRawInputDeviceList", L"user32.dll"), - get_rawinput_data("GetRawInputData", L"user32.dll"), - get_rawinput_device_info("GetRawInputDeviceInfoW", L"user32.dll"), - register_rawinput_devices("RegisterRawInputDevices", L"user32.dll") + : wininput_module(type, name) { } bool probe() override { - int status = get_rawinput_device_list.initialize(); - status |= get_rawinput_data.initialize(); - status |= get_rawinput_device_info.initialize(); - status |= register_rawinput_devices.initialize(); + m_user32_dll = osd::dynamic_module::open({ "user32.dll" }); + + get_rawinput_device_list = m_user32_dll->bind<get_rawinput_device_list_ptr>("GetRawInputDeviceList"); + get_rawinput_data = m_user32_dll->bind<get_rawinput_data_ptr>("GetRawInputData"); + get_rawinput_device_info = m_user32_dll->bind<get_rawinput_device_info_ptr>("GetRawInputDeviceInfoW"); + register_rawinput_devices = m_user32_dll->bind<register_rawinput_devices_ptr>("RegisterRawInputDevices"); - if (status != 0) + if (!get_rawinput_device_list || !get_rawinput_data || + !get_rawinput_device_info || !register_rawinput_devices ) + { return false; + } return true; } @@ -442,15 +430,15 @@ public: void input_init(running_machine &machine) override { // get the number of devices, allocate a device list, and fetch it - int device_count = 0; - if (get_rawinput_device_list(nullptr, &device_count, sizeof(RAWINPUTDEVICELIST)) != 0) + UINT device_count = 0; + if ((*get_rawinput_device_list)(nullptr, &device_count, sizeof(RAWINPUTDEVICELIST)) != 0) return; if (device_count == 0) return; auto rawinput_devices = std::make_unique<RAWINPUTDEVICELIST[]>(device_count); - if (get_rawinput_device_list(rawinput_devices.get(), &device_count, sizeof(RAWINPUTDEVICELIST)) == -1) + if ((*get_rawinput_device_list)(rawinput_devices.get(), &device_count, sizeof(RAWINPUTDEVICELIST)) == -1) return; // iterate backwards through devices; new devices are added at the head @@ -475,10 +463,10 @@ public: registration.usUsagePage = usagepage(); registration.usUsage = usage(); registration.dwFlags = m_global_inputs_enabled ? 0x00000100 : 0; - registration.hwndTarget = win_window_list.front()->platform_window<HWND>(); + registration.hwndTarget = osd_common_t::s_window_list.front()->platform_window<HWND>(); // register the device - register_rawinput_devices(®istration, 1, sizeof(registration)); + (*register_rawinput_devices)(®istration, 1, sizeof(registration)); } protected: @@ -488,13 +476,11 @@ protected: int init_internal() override { - // look up the entry points - int status = get_rawinput_device_list.initialize(); - status |= get_rawinput_data.initialize(); - status |= get_rawinput_device_info.initialize(); - status |= register_rawinput_devices.initialize(); - if (status != 0) + if (!get_rawinput_device_list || !get_rawinput_data || + !get_rawinput_device_info || !register_rawinput_devices ) + { return 1; + } osd_printf_verbose("RawInput: APIs detected\n"); return 0; @@ -504,13 +490,13 @@ protected: TDevice* create_rawinput_device(running_machine &machine, PRAWINPUTDEVICELIST rawinputdevice) { TDevice* devinfo; - INT name_length = 0; + UINT name_length = 0; // determine the length of the device name, allocate it, and fetch it if not nameless - if (get_rawinput_device_info(rawinputdevice->hDevice, RIDI_DEVICENAME, nullptr, &name_length) != 0) + if ((*get_rawinput_device_info)(rawinputdevice->hDevice, RIDI_DEVICENAME, nullptr, &name_length) != 0) return nullptr; std::unique_ptr<TCHAR[]> tname = std::make_unique<TCHAR[]>(name_length + 1); - if (name_length > 1 && get_rawinput_device_info(rawinputdevice->hDevice, RIDI_DEVICENAME, tname.get(), &name_length) == -1) + if (name_length > 1 && (*get_rawinput_device_info)(rawinputdevice->hDevice, RIDI_DEVICENAME, tname.get(), &name_length) == -1) return nullptr; // if this is an RDP name, skip it @@ -544,14 +530,14 @@ protected: std::unique_ptr<BYTE[]> larger_buffer; LPBYTE data = small_buffer; BOOL result; - int size; + UINT size; // ignore if not enabled if (!input_enabled()) return FALSE; // determine the size of databuffer we need - if (get_rawinput_data(rawinputdevice, RID_INPUT, nullptr, &size, sizeof(RAWINPUTHEADER)) != 0) + if ((*get_rawinput_data)(rawinputdevice, RID_INPUT, nullptr, &size, sizeof(RAWINPUTHEADER)) != 0) return FALSE; // if necessary, allocate a temporary buffer and fetch the data @@ -564,7 +550,7 @@ protected: } // fetch the data and process the appropriate message types - result = get_rawinput_data(static_cast<HRAWINPUT>(rawinputdevice), RID_INPUT, data, &size, sizeof(RAWINPUTHEADER)); + result = (*get_rawinput_data)(static_cast<HRAWINPUT>(rawinputdevice), RID_INPUT, data, &size, sizeof(RAWINPUTHEADER)); if (result) { std::lock_guard<std::mutex> scope_lock(m_module_lock); diff --git a/src/osd/modules/input/input_sdl.cpp b/src/osd/modules/input/input_sdl.cpp index 6ba3ccb2be2..64e30302a3e 100644 --- a/src/osd/modules/input/input_sdl.cpp +++ b/src/osd/modules/input/input_sdl.cpp @@ -144,7 +144,7 @@ public: case SDL_KEYDOWN: keyboard.state[OSD_SDL_INDEX_KEYSYM(&sdlevent.key.keysym)] = 0x80; if (sdlevent.key.keysym.sym < 0x20) - machine().ui_input().push_char_event(sdl_window_list.front()->target(), sdlevent.key.keysym.sym); + machine().ui_input().push_char_event(osd_common_t::s_window_list.front()->target(), sdlevent.key.keysym.sym); break; case SDL_KEYUP: @@ -155,7 +155,7 @@ public: if (*sdlevent.text.text) { auto window = GET_FOCUS_WINDOW(&event.text); - //printf("Focus window is %p - wl %p\n", window, sdl_window_list); + //printf("Focus window is %p - wl %p\n", window, osd_common_t::s_window_list); if (window != nullptr) { auto ptr = sdlevent.text.text; diff --git a/src/osd/modules/input/input_sdlcommon.cpp b/src/osd/modules/input/input_sdlcommon.cpp index 3071959a463..479e5975666 100644 --- a/src/osd/modules/input/input_sdlcommon.cpp +++ b/src/osd/modules/input/input_sdlcommon.cpp @@ -39,12 +39,12 @@ static inline std::shared_ptr<sdl_window_info> window_from_id(Uint32 windowID) { SDL_Window *window = SDL_GetWindowFromID(windowID); - for (auto w : sdl_window_list) + for (auto w : osd_common_t::s_window_list) { //printf("w->window_id: %d\n", w->window_id); if (w->platform_window<SDL_Window*>() == window) { - return w; + return std::static_pointer_cast<sdl_window_info>(w); } } return nullptr; diff --git a/src/osd/modules/input/input_win32.cpp b/src/osd/modules/input/input_win32.cpp index d02c73c987a..0a51e68e4d7 100644 --- a/src/osd/modules/input/input_win32.cpp +++ b/src/osd/modules/input/input_win32.cpp @@ -152,7 +152,7 @@ public: mouse.lY = (cursor_info.ptScreenPos.y - win32_mouse.last_point.y) * INPUT_RELATIVE_PER_PIXEL; RECT window_pos = {0}; - GetWindowRect(win_window_list.front()->platform_window<HWND>(), &window_pos); + GetWindowRect(osd_common_t::s_window_list.front()->platform_window<HWND>(), &window_pos); // We reset the cursor position to the middle of the window each frame win32_mouse.last_point.x = window_pos.left + (window_pos.right - window_pos.left) / 2; @@ -269,13 +269,13 @@ public: // get the cursor position and transform into final results GetCursorPos(&mousepos); - if (!win_window_list.empty()) + if (!osd_common_t::s_window_list.empty()) { RECT client_rect; // get the position relative to the window - GetClientRect(win_window_list.front()->platform_window<HWND>(), &client_rect); - ScreenToClient(win_window_list.front()->platform_window<HWND>(), &mousepos); + GetClientRect(osd_common_t::s_window_list.front()->platform_window<HWND>(), &client_rect); + ScreenToClient(osd_common_t::s_window_list.front()->platform_window<HWND>(), &mousepos); // convert to absolute coordinates xpos = normalize_absolute_axis(mousepos.x, client_rect.left, client_rect.right); @@ -335,10 +335,10 @@ private: POINT mousepos; // get the position relative to the window - GetClientRect(win_window_list.front()->platform_window<HWND>(), &client_rect); + GetClientRect(osd_common_t::s_window_list.front()->platform_window<HWND>(), &client_rect); mousepos.x = args.xpos; mousepos.y = args.ypos; - ScreenToClient(win_window_list.front()->platform_window<HWND>(), &mousepos); + ScreenToClient(osd_common_t::s_window_list.front()->platform_window<HWND>(), &mousepos); // convert to absolute coordinates mouse.lX = normalize_absolute_axis(mousepos.x, client_rect.left, client_rect.right); diff --git a/src/osd/modules/input/input_windows.cpp b/src/osd/modules/input/input_windows.cpp index f80a4d57459..606072d1997 100644 --- a/src/osd/modules/input/input_windows.cpp +++ b/src/osd/modules/input/input_windows.cpp @@ -23,20 +23,41 @@ bool windows_osd_interface::should_hide_mouse() const { bool hidemouse = false; - hidemouse |= downcast<wininput_module*>(m_keyboard_input)->should_hide_mouse(); - hidemouse |= downcast<wininput_module*>(m_mouse_input)->should_hide_mouse(); - hidemouse |= downcast<wininput_module*>(m_lightgun_input)->should_hide_mouse(); - hidemouse |= downcast<wininput_module*>(m_joystick_input)->should_hide_mouse(); + wininput_module* mod = nullptr; + + mod = dynamic_cast<wininput_module*>(m_keyboard_input); + if (mod) hidemouse |= mod->should_hide_mouse(); + + mod = dynamic_cast<wininput_module*>(m_mouse_input); + if (mod) hidemouse |= mod->should_hide_mouse(); + + mod = dynamic_cast<wininput_module*>(m_lightgun_input); + if (mod) hidemouse |= mod->should_hide_mouse(); + + mod = dynamic_cast<wininput_module*>(m_joystick_input); + if (mod) hidemouse |= mod->should_hide_mouse(); + return hidemouse; } bool windows_osd_interface::handle_input_event(input_event eventid, void* eventdata) const { bool handled = false; - handled |= downcast<wininput_module*>(m_keyboard_input)->handle_input_event(eventid, eventdata); - handled |= downcast<wininput_module*>(m_mouse_input)->handle_input_event(eventid, eventdata); - handled |= downcast<wininput_module*>(m_lightgun_input)->handle_input_event(eventid, eventdata); - handled |= downcast<wininput_module*>(m_joystick_input)->handle_input_event(eventid, eventdata); + + wininput_module* mod = nullptr; + + mod = dynamic_cast<wininput_module*>(m_keyboard_input); + if (mod) handled |= mod->handle_input_event(eventid, eventdata); + + mod = dynamic_cast<wininput_module*>(m_mouse_input); + if (mod) handled |= mod->handle_input_event(eventid, eventdata); + + mod = dynamic_cast<wininput_module*>(m_lightgun_input); + if (mod) handled |= mod->handle_input_event(eventid, eventdata); + + mod = dynamic_cast<wininput_module*>(m_joystick_input); + if (mod) handled |= mod->handle_input_event(eventid, eventdata); + return handled; } diff --git a/src/osd/modules/input/input_windows.h b/src/osd/modules/input/input_windows.h index d9dd28bac58..56eaae0fd78 100644 --- a/src/osd/modules/input/input_windows.h +++ b/src/osd/modules/input/input_windows.h @@ -52,7 +52,7 @@ public: virtual bool should_hide_mouse() { if (winwindow_has_focus() // has focus - && (!video_config.windowed || !win_window_list.front()->win_has_menu()) // not windowed or doesn't have a menu + && (!video_config.windowed || !osd_common_t::s_window_list.front()->win_has_menu()) // not windowed or doesn't have a menu && (input_enabled() && !input_paused()) // input enabled and not paused && (mouse_enabled() || lightgun_enabled())) // either mouse or lightgun enabled in the core { diff --git a/src/osd/modules/input/input_winhybrid.cpp b/src/osd/modules/input/input_winhybrid.cpp index ffbdb5974dc..a7453d59cf8 100644 --- a/src/osd/modules/input/input_winhybrid.cpp +++ b/src/osd/modules/input/input_winhybrid.cpp @@ -167,7 +167,7 @@ public: goto exit; } - if (!win_window_list.empty() && win_window_list.front()->win_has_menu()) + if (!osd_common_t::s_window_list.empty() && osd_common_t::s_window_list.front()->win_has_menu()) cooperative_level = DISCL_BACKGROUND | DISCL_NONEXCLUSIVE; // allocate and link in a new device @@ -218,7 +218,7 @@ protected: { XINPUT_STATE state = { 0 }; - if (m_xinput_helper->XInputGetState(i, &state) == ERROR_SUCCESS) + if (m_xinput_helper->xinput_get_state(i, &state) == ERROR_SUCCESS) { // allocate and link in a new device devinfo = m_xinput_helper->create_xinput_device(machine, i, *this); diff --git a/src/osd/modules/input/input_xinput.cpp b/src/osd/modules/input/input_xinput.cpp index 593cf16fc28..2d01b702bd8 100644 --- a/src/osd/modules/input/input_xinput.cpp +++ b/src/osd/modules/input/input_xinput.cpp @@ -32,50 +32,28 @@ #include "input_windows.h" #include "input_xinput.h" - -xinput_api_helper::xinput_api_helper() #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) - : XInputGetState("XInputGetState", xinput_dll_names, ARRAY_LENGTH(xinput_dll_names)) - , XInputGetCapabilities("XInputGetCapabilities", xinput_dll_names, ARRAY_LENGTH(xinput_dll_names)) +#define XINPUT_LIBRARIES { "xinput1_4.dll", "xinput9_1_0.dll" } +#else +#define XINPUT_LIBRARIES { "xinput1_4.dll" } #endif -{ -} int xinput_api_helper::initialize() { -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) - int status; - status = XInputGetState.initialize(); - if (status != 0) - { - osd_printf_verbose("Failed to initialize function pointer for %s. Error: %d\n", XInputGetState.name(), status); - return -1; - } + m_xinput_dll = osd::dynamic_module::open(XINPUT_LIBRARIES); - status = XInputGetCapabilities.initialize(); - if (status != 0) + XInputGetState = m_xinput_dll->bind<xinput_get_state_fn>("XInputGetState"); + XInputGetCapabilities = m_xinput_dll->bind<xinput_get_caps_fn>("XInputGetCapabilities"); + + if (!XInputGetState || !XInputGetCapabilities) { - osd_printf_verbose("Failed to initialize function pointer for %s. Error: %d\n", XInputGetCapabilities.name(), status); + osd_printf_verbose("Could not find XInput. Please try to reinstall DirectX runtime package.\n"); return -1; } -#endif return 0; } -#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) -// Pass-through functions for Universal Windows -inline DWORD xinput_api_helper::XInputGetState(DWORD dwUserindex, XINPUT_STATE *pState) -{ - return ::XInputGetState(dwUserindex, pState); -} - -inline DWORD xinput_api_helper::XInputGetCapabilities(DWORD dwUserindex, DWORD dwFlags, XINPUT_CAPABILITIES* pCapabilities) -{ - return ::XInputGetCapabilities(dwUserindex, dwFlags, pCapabilities); -} -#endif - //============================================================ // create_xinput_device //============================================================ @@ -85,7 +63,7 @@ xinput_joystick_device * xinput_api_helper::create_xinput_device(running_machine xinput_joystick_device *devinfo; XINPUT_CAPABILITIES caps = { 0 }; - if (FAILED(XInputGetCapabilities(index, 0, &caps))) + if (FAILED(xinput_get_capabilities(index, 0, &caps))) { // If we can't get the capabilities skip this device return nullptr; @@ -125,7 +103,7 @@ void xinput_joystick_device::poll() return; // poll the device first - HRESULT result = m_xinput_helper->XInputGetState(xinput_state.player_index, &xinput_state.xstate); + HRESULT result = m_xinput_helper->xinput_get_state(xinput_state.player_index, &xinput_state.xstate); // If we can't poll the device, skip if (FAILED(result)) @@ -262,7 +240,7 @@ protected: { XINPUT_STATE state = {0}; - if (m_xinput_helper->XInputGetState(i, &state) == ERROR_SUCCESS) + if (m_xinput_helper->xinput_get_state(i, &state) == ERROR_SUCCESS) { // allocate and link in a new device devinfo = m_xinput_helper->create_xinput_device(machine, i, *this); diff --git a/src/osd/modules/input/input_xinput.h b/src/osd/modules/input/input_xinput.h index 791fc36f310..0c0a4de897e 100644 --- a/src/osd/modules/input/input_xinput.h +++ b/src/osd/modules/input/input_xinput.h @@ -3,6 +3,8 @@ #include <mutex> +#include "modules/lib/osdlib.h" + #define XINPUT_MAX_POV 4 #define XINPUT_MAX_BUTTONS 10 #define XINPUT_MAX_AXIS 4 @@ -88,34 +90,30 @@ struct xinput_api_state XINPUT_CAPABILITIES caps; }; -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) -// Typedef for pointers to XInput Functions -typedef lazy_loaded_function_p2<DWORD, DWORD, XINPUT_STATE*> xinput_get_state_fn; -typedef lazy_loaded_function_p3<DWORD, DWORD, DWORD, XINPUT_CAPABILITIES*> xinput_get_caps_fn; -#endif +// Typedefs for dynamically loaded functions +typedef DWORD (WINAPI *xinput_get_state_fn)(DWORD, XINPUT_STATE *); +typedef DWORD (WINAPI *xinput_get_caps_fn)(DWORD, DWORD, XINPUT_CAPABILITIES *); class xinput_api_helper : public std::enable_shared_from_this<xinput_api_helper> { -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) -private: - const wchar_t* xinput_dll_names[2] = { L"xinput1_4.dll", L"xinput9_1_0.dll" }; - -public: - xinput_get_state_fn XInputGetState; - xinput_get_caps_fn XInputGetCapabilities; -#endif - public: - xinput_api_helper(); - int initialize(); xinput_joystick_device * create_xinput_device(running_machine &machine, UINT index, wininput_module &module); -#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) - // Pass-through functions for Universal Windows - inline DWORD XInputGetState(DWORD dwUserindex, XINPUT_STATE *pState); - inline DWORD XInputGetCapabilities(DWORD dwUserindex, DWORD dwFlags, XINPUT_CAPABILITIES* pCapabilities); -#endif + inline DWORD xinput_get_state(DWORD dwUserindex, XINPUT_STATE *pState) + { + return (*XInputGetState)(dwUserindex, pState); + } + + inline DWORD xinput_get_capabilities(DWORD dwUserindex, DWORD dwFlags, XINPUT_CAPABILITIES* pCapabilities) + { + return (*XInputGetCapabilities)(dwUserindex, dwFlags, pCapabilities); + } + +private: + osd::dynamic_module::ptr m_xinput_dll; + xinput_get_state_fn XInputGetState; + xinput_get_caps_fn XInputGetCapabilities; }; class xinput_joystick_device : public device_info diff --git a/src/osd/modules/lib/osdlib.h b/src/osd/modules/lib/osdlib.h index f4a632dbbd1..64bd556cd3c 100644 --- a/src/osd/modules/lib/osdlib.h +++ b/src/osd/modules/lib/osdlib.h @@ -19,6 +19,10 @@ #ifndef __OSDLIB__ #define __OSDLIB__ +#include <string> +#include <type_traits> +#include <vector> + /*----------------------------------------------------------------------------- osd_process_kill: kill the current process @@ -30,8 +34,10 @@ None. -----------------------------------------------------------------------------*/ + void osd_process_kill(void); + /*----------------------------------------------------------------------------- osd_setenv: set environment variable @@ -48,14 +54,52 @@ void osd_process_kill(void); int osd_setenv(const char *name, const char *value, int overwrite); + /*----------------------------------------------------------------------------- osd_get_clipboard_text: retrieves text from the clipboard Return value: the returned string needs to be osd_free()-ed! - -----------------------------------------------------------------------------*/ + char *osd_get_clipboard_text(void); + +/*----------------------------------------------------------------------------- + dynamic_module: load functions from optional shared libraries + + Notes: + + - Supports Mac OS X, Unix and Windows (both desktop and Windows + Store universal applications) + - A symbol can be searched in a list of libraries (e.g. more + revisions of a same library) +-----------------------------------------------------------------------------*/ + +namespace osd { + +class dynamic_module +{ +public: + typedef std::unique_ptr<dynamic_module> ptr; + + static ptr open(std::vector<std::string> &&libraries); + + virtual ~dynamic_module() { }; + + template <typename T> + typename std::enable_if<std::is_pointer<T>::value, T>::type bind(char const *symbol) + { + return reinterpret_cast<T>(get_symbol_address(symbol)); + } + +protected: + typedef void (*generic_fptr_t)(); + + virtual generic_fptr_t get_symbol_address(char const *symbol) = 0; +}; + +} // namespace osd + #endif /* __OSDLIB__ */ diff --git a/src/osd/modules/lib/osdlib_macosx.cpp b/src/osd/modules/lib/osdlib_macosx.cpp index 07cfa05226a..b3a7ed642e3 100644 --- a/src/osd/modules/lib/osdlib_macosx.cpp +++ b/src/osd/modules/lib/osdlib_macosx.cpp @@ -13,6 +13,12 @@ #include <sys/mman.h> #include <sys/types.h> #include <signal.h> +#include <dlfcn.h> + +#include <codecvt> +#include <iomanip> +#include <memory> + #include <mach/mach.h> #include <mach/mach_time.h> @@ -215,3 +221,71 @@ char *osd_get_clipboard_text(void) return result; } + +//============================================================ +// dynamic_module_posix_impl +//============================================================ + +namespace osd { + +class dynamic_module_posix_impl : public dynamic_module +{ +public: + dynamic_module_posix_impl(std::vector<std::string> &libraries) + : m_module(nullptr) + { + m_libraries = libraries; + } + + virtual ~dynamic_module_posix_impl() override + { + if (m_module != nullptr) + dlclose(m_module); + }; + +protected: + virtual generic_fptr_t get_symbol_address(char const *symbol) override + { + /* + * given a list of libraries, if a first symbol is successfully loaded from + * one of them, all additional symbols will be loaded from the same library + */ + if (m_module) + { + return reinterpret_cast<generic_fptr_t>(dlsym(m_module, symbol)); + } + + for (auto const &library : m_libraries) + { + void *module = dlopen(library.c_str(), RTLD_LAZY); + + if (module != nullptr) + { + generic_fptr_t function = reinterpret_cast<generic_fptr_t>(dlsym(module, symbol)); + + if (function != nullptr) + { + m_module = module; + return function; + } + else + { + dlclose(module); + } + } + } + + return nullptr; + } + +private: + std::vector<std::string> m_libraries; + void * m_module; +}; + +dynamic_module::ptr dynamic_module::open(std::vector<std::string> &&names) +{ + return std::make_unique<dynamic_module_posix_impl>(names); +} + +} // namespace osd diff --git a/src/osd/modules/lib/osdlib_unix.cpp b/src/osd/modules/lib/osdlib_unix.cpp index 52999835a1c..81d9967ff64 100644 --- a/src/osd/modules/lib/osdlib_unix.cpp +++ b/src/osd/modules/lib/osdlib_unix.cpp @@ -13,12 +13,19 @@ #include <sys/mman.h> #include <sys/types.h> #include <signal.h> +#include <dlfcn.h> + +#include <codecvt> +#include <iomanip> +#include <memory> + // MAME headers #include "osdcore.h" #include "osdlib.h" #include <SDL2/SDL.h> + //============================================================ // osd_getenv //============================================================ @@ -159,3 +166,71 @@ char *osd_get_clipboard_text(void) } #endif + +//============================================================ +// dynamic_module_posix_impl +//============================================================ + +namespace osd { + +class dynamic_module_posix_impl : public dynamic_module +{ +public: + dynamic_module_posix_impl(std::vector<std::string> &libraries) + : m_module(nullptr) + { + m_libraries = libraries; + } + + virtual ~dynamic_module_posix_impl() override + { + if (m_module != nullptr) + dlclose(m_module); + }; + +protected: + virtual generic_fptr_t get_symbol_address(char const *symbol) override + { + /* + * given a list of libraries, if a first symbol is successfully loaded from + * one of them, all additional symbols will be loaded from the same library + */ + if (m_module) + { + return reinterpret_cast<generic_fptr_t>(dlsym(m_module, symbol)); + } + + for (auto const &library : m_libraries) + { + void *module = dlopen(library.c_str(), RTLD_LAZY); + + if (module != nullptr) + { + generic_fptr_t function = reinterpret_cast<generic_fptr_t>(dlsym(module, symbol)); + + if (function != nullptr) + { + m_module = module; + return function; + } + else + { + dlclose(module); + } + } + } + + return nullptr; + } + +private: + std::vector<std::string> m_libraries; + void * m_module; +}; + +dynamic_module::ptr dynamic_module::open(std::vector<std::string> &&names) +{ + return std::make_unique<dynamic_module_posix_impl>(names); +} + +} // namespace osd diff --git a/src/osd/modules/lib/osdlib_win32.cpp b/src/osd/modules/lib/osdlib_win32.cpp index f778977614a..e65509cc436 100644 --- a/src/osd/modules/lib/osdlib_win32.cpp +++ b/src/osd/modules/lib/osdlib_win32.cpp @@ -17,6 +17,8 @@ #include <unistd.h> #endif +#include <memory> + // MAME headers #include "osdlib.h" #include "osdcomm.h" @@ -314,3 +316,85 @@ char *osd_get_clipboard_text(void) return result; } + +//============================================================ +// osd_dynamic_bind +//============================================================ + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +// for classic desktop applications +#define load_library(filename) LoadLibrary(filename) +#else +// for Windows Store universal applications +#define load_library(filename) LoadPackagedLibrary(filename, 0) +#endif + +namespace osd { + +class dynamic_module_win32_impl : public dynamic_module +{ +public: + dynamic_module_win32_impl(std::vector<std::string> &libraries) + : m_module(nullptr) + { + m_libraries = libraries; + } + + virtual ~dynamic_module_win32_impl() override + { + if (m_module != nullptr) + FreeLibrary(m_module); + }; + +protected: + virtual generic_fptr_t get_symbol_address(char const *symbol) override + { + /* + * given a list of libraries, if a first symbol is successfully loaded from + * one of them, all additional symbols will be loaded from the same library + */ + if (m_module) + { + return reinterpret_cast<generic_fptr_t>(GetProcAddress(m_module, symbol)); + } + + for (auto const &library : m_libraries) + { + TCHAR *tempstr = tstring_from_utf8(library.c_str()); + if (!tempstr) + return nullptr; + + HMODULE module = load_library(tempstr); + + osd_free(tempstr); + + if (module != nullptr) + { + generic_fptr_t function = reinterpret_cast<generic_fptr_t>(GetProcAddress(module, symbol)); + + if (function != nullptr) + { + m_module = module; + return function; + } + else + { + FreeLibrary(module); + } + } + } + + return nullptr; + } + +private: + std::vector<std::string> m_libraries; + HMODULE m_module; +}; + +dynamic_module::ptr dynamic_module::open(std::vector<std::string> &&names) +{ + return std::make_unique<dynamic_module_win32_impl>(names); +} + +} // namespace osd diff --git a/src/osd/modules/lib/osdobj_common.cpp b/src/osd/modules/lib/osdobj_common.cpp index 61aec1b49d3..b54756d1847 100644 --- a/src/osd/modules/lib/osdobj_common.cpp +++ b/src/osd/modules/lib/osdobj_common.cpp @@ -159,6 +159,8 @@ osd_options::osd_options() add_entries(osd_options::s_option_entries); } +// Window list +std::list<std::shared_ptr<osd_window>> osd_common_t::s_window_list; //------------------------------------------------- // osd_interface - constructor diff --git a/src/osd/modules/lib/osdobj_common.h b/src/osd/modules/lib/osdobj_common.h index 5bb2fc994ec..cc36320f53a 100644 --- a/src/osd/modules/lib/osdobj_common.h +++ b/src/osd/modules/lib/osdobj_common.h @@ -164,6 +164,7 @@ private: }; // ======================> osd_interface +class osd_window; // description of the currently-running machine class osd_common_t : public osd_interface, osd_output @@ -237,6 +238,8 @@ public: void set_verbose(bool print_verbose) { m_print_verbose = print_verbose; } void notify(const char *outname, INT32 value) const { m_output->notify(outname, value); } + + static std::list<std::shared_ptr<osd_window>> s_window_list; protected: virtual bool input_init(); virtual void input_pause(); diff --git a/src/osd/modules/netdev/pcap.cpp b/src/osd/modules/netdev/pcap.cpp index 541ed422d8a..91ff840473b 100644 --- a/src/osd/modules/netdev/pcap.cpp +++ b/src/osd/modules/netdev/pcap.cpp @@ -1,61 +1,47 @@ // license:BSD-3-Clause // copyright-holders:Carl -#if defined(OSD_NET_USE_PCAP) -#if defined(SDLMAME_WIN32) || defined(OSD_WINDOWS) -#ifdef UNICODE -#define LIB_NAME L"wpcap.dll" -#define LoadDynamicLibrary LoadLibraryW -#else -#define LIB_NAME "wpcap.dll" -#define LoadDynamicLibrary LoadLibraryA -#endif -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#endif - -#include <pcap.h> +#if defined(OSD_NET_USE_PCAP) #include "emu.h" #include "osdnet.h" #include "netdev_module.h" #include "modules/osdmodule.h" +#include "modules/lib/osdlib.h" #if defined(SDLMAME_WIN32) || defined(OSD_WINDOWS) +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#undef interface +#define LIB_NAME "wpcap.dll" -#define LIB_ERROR_STR "Unable to load winpcap: %lx\n" -typedef DWORD except_type; - -#else - -#include <dlfcn.h> -#ifdef SDLMAME_MACOSX +#elif defined(SDLMAME_MACOSX) #include <pthread.h> #include <libkern/OSAtomic.h> -#endif - -#ifdef SDLMAME_MACOSX #define LIB_NAME "libpcap.dylib" + #else #define LIB_NAME "libpcap.so" #endif -#define LIB_ERROR_STR "Unable to load pcap: %s\n" -typedef void *HMODULE; -typedef const char *except_type; -#define FreeLibrary(x) dlclose(x) -#define GetLastError() dlerror() -#define GetProcAddress(x, y) dlsym(x, y) -#define LoadDynamicLibrary(x) dlopen(x, RTLD_LAZY) +#include <pcap.h> -#endif +// Typedefs for dynamically loaded functions +typedef int (*pcap_findalldevs_fn)(pcap_if_t **, char *); +typedef pcap_t *(*pcap_open_live_fn)(const char *, int, int, int, char *); +typedef int (*pcap_next_ex_fn)(pcap_t *, struct pcap_pkthdr **, const u_char **); +typedef int (*pcap_compile_fn)(pcap_t *, struct bpf_program *, const char *, int, bpf_u_int32); +typedef void (*pcap_close_fn)(pcap_t *); +typedef int (*pcap_setfilter_fn)(pcap_t *, struct bpf_program *); +typedef int (*pcap_sendpacket_fn)(pcap_t *, const u_char *, int); +typedef int (*pcap_set_datalink_fn)(pcap_t *, int); +typedef int (*pcap_dispatch_fn)(pcap_t *, int, pcap_handler, u_char *); class pcap_module : public osd_module, public netdev_module { public: - pcap_module() - : osd_module(OSD_NETDEV_PROVIDER, "pcap"), netdev_module(), handle(nullptr) + : osd_module(OSD_NETDEV_PROVIDER, "pcap"), netdev_module() { } virtual ~pcap_module() { } @@ -63,32 +49,46 @@ public: virtual int init(const osd_options &options) override; virtual void exit() override; - virtual bool probe() override; + virtual bool probe() override + { + pcap_dll = osd::dynamic_module::open({ LIB_NAME }); + + pcap_findalldevs_dl = pcap_dll->bind<pcap_findalldevs_fn>("pcap_findalldevs"); + pcap_open_live_dl = pcap_dll->bind<pcap_open_live_fn>("pcap_open_live"); + pcap_next_ex_dl = pcap_dll->bind<pcap_next_ex_fn>("pcap_next_ex"); + pcap_compile_dl = pcap_dll->bind<pcap_compile_fn>("pcap_compile"); + pcap_close_dl = pcap_dll->bind<pcap_close_fn>("pcap_close"); + pcap_setfilter_dl = pcap_dll->bind<pcap_setfilter_fn>("pcap_setfilter"); + pcap_sendpacket_dl = pcap_dll->bind<pcap_sendpacket_fn>("pcap_sendpacket"); + pcap_set_datalink_dl = pcap_dll->bind<pcap_set_datalink_fn>("pcap_set_datalink"); + pcap_dispatch_dl = pcap_dll->bind<pcap_dispatch_fn>("pcap_dispatch"); + + if (!pcap_findalldevs_dl || !pcap_open_live_dl || !pcap_next_ex_dl || + !pcap_compile_dl || !pcap_close_dl || !pcap_setfilter_dl || + !pcap_sendpacket_dl || !pcap_set_datalink_dl || !pcap_dispatch_dl) + { + osd_printf_verbose("Unable to load the PCAP library\n"); + return false; + } + + return true; + } - HMODULE handle; + osd::dynamic_module::ptr pcap_dll; + + pcap_findalldevs_fn pcap_findalldevs_dl; + pcap_open_live_fn pcap_open_live_dl; + pcap_next_ex_fn pcap_next_ex_dl; + pcap_compile_fn pcap_compile_dl; + pcap_close_fn pcap_close_dl; + pcap_setfilter_fn pcap_setfilter_dl; + pcap_sendpacket_fn pcap_sendpacket_dl; + pcap_set_datalink_fn pcap_set_datalink_dl; + pcap_dispatch_fn pcap_dispatch_dl; }; -static int (*pcap_compile_dl)(pcap_t *, struct bpf_program *, char *, int, bpf_u_int32) = nullptr; -static int (*pcap_findalldevs_dl)(pcap_if_t **, char *) = nullptr; -static pcap_t *(*pcap_open_live_dl)(const char *name, int, int, int, char *) = nullptr; -static int (*pcap_next_ex_dl)(pcap_t *, struct pcap_pkthdr **, const u_char **) = nullptr; -static void (*pcap_close_dl)(pcap_t *) = nullptr; -static int (*pcap_setfilter_dl)(pcap_t *, struct bpf_program *) = nullptr; -static int (*pcap_sendpacket_dl)(pcap_t *, u_char *, int) = nullptr; -static int (*pcap_set_datalink_dl)(pcap_t *, int) = nullptr; -static int (*pcap_dispatch_dl)(pcap_t *, int, pcap_handler callback, u_char *) = nullptr; - - -#if 0 -#define pcap_compile_dl pcap_compile -#define pcap_findalldevs_dl pcap_findalldevs -#define pcap_open_live_dl pcap_open_live -#define pcap_next_ex_dl pcap_next_ex -#define pcap_close_dl pcap_close -#define pcap_setfilter_dl pcap_setfilter -#define pcap_sendpacket_dl pcap_sendpacket -#define pcap_set_datalink_dl pcap_set_datalink -#endif +// FIXME: bridge between pcap_module and netdev_pcap +static pcap_module *module = nullptr; #ifdef SDLMAME_MACOSX struct netdev_pcap_context { @@ -140,7 +140,7 @@ static void *netdev_pcap_blocker(void *arg) { struct netdev_pcap_context *ctx = (struct netdev_pcap_context*)arg; while(ctx && ctx->p) { - pcap_dispatch_dl(ctx->p, 1, netdev_pcap_handler, (u_char*)ctx); + (*module->pcap_dispatch_dl)(ctx->p, 1, netdev_pcap_handler, (u_char*)ctx); } return 0; @@ -152,19 +152,19 @@ netdev_pcap::netdev_pcap(const char *name, class device_network_interface *ifdev { char errbuf[PCAP_ERRBUF_SIZE]; #if defined(SDLMAME_WIN32) || defined(OSD_WINDOWS) - m_p = pcap_open_live_dl(name, 65535, 1, -1, errbuf); + m_p = (*module->pcap_open_live_dl)(name, 65535, 1, -1, errbuf); #else - m_p = pcap_open_live_dl(name, 65535, 1, 1, errbuf); + m_p = (*module->pcap_open_live_dl)(name, 65535, 1, 1, errbuf); #endif if(!m_p) { osd_printf_error("Unable to open %s: %s\n", name, errbuf); return; } - if(pcap_set_datalink_dl(m_p, DLT_EN10MB) == -1) + if ((*module->pcap_set_datalink_dl)(m_p, DLT_EN10MB) == -1) { osd_printf_error("Unable to set %s to ethernet", name); - pcap_close_dl(m_p); + (*module->pcap_close_dl)(m_p); m_p = nullptr; return; } @@ -188,10 +188,10 @@ void netdev_pcap::set_mac(const char *mac) #else sprintf(filter, "ether dst %.2X:%.2X:%.2X:%.2X:%.2X:%.2X or ether multicast or ether broadcast", (unsigned char)mac[0], (unsigned char)mac[1], (unsigned char)mac[2],(unsigned char)mac[3], (unsigned char)mac[4], (unsigned char)mac[5]); #endif - if(pcap_compile_dl(m_p, &fp, filter, 1, 0) == -1) { + if ((*module->pcap_compile_dl)(m_p, &fp, filter, 1, 0) == -1) { osd_printf_error("Error with pcap_compile\n"); } - if(pcap_setfilter_dl(m_p, &fp) == -1) { + if ((*module->pcap_setfilter_dl)(m_p, &fp) == -1) { osd_printf_error("Error with pcap_setfilter\n"); } } @@ -203,7 +203,7 @@ int netdev_pcap::send(UINT8 *buf, int len) printf("send invoked, but no pcap context\n"); return 0; } - ret = pcap_sendpacket_dl(m_p, buf, len); + ret = (*module->pcap_sendpacket_dl)(m_p, buf, len); printf("sent packet length %d, returned %d\n", len, ret); return ret ? len : 0; //return (!pcap_sendpacket_dl(m_p, buf, len))?len:0; @@ -228,7 +228,7 @@ int netdev_pcap::recv_dev(UINT8 **buf) #else struct pcap_pkthdr *header; if(!m_p) return 0; - return (pcap_next_ex_dl(m_p, &header, (const u_char **)buf) == 1)?header->len:0; + return ((*module->pcap_next_ex_dl)(m_p, &header, (const u_char **)buf) == 1)?header->len:0; #endif } @@ -239,7 +239,7 @@ netdev_pcap::~netdev_pcap() pthread_cancel(m_thread); pthread_join(m_thread, nullptr); #endif - if(m_p) pcap_close_dl(m_p); + if(m_p) (*module->pcap_close_dl)(m_p); m_p = nullptr; } @@ -249,52 +249,16 @@ static CREATE_NETDEV(create_pcap) return dynamic_cast<osd_netdev *>(dev); } -bool pcap_module::probe() -{ - if (handle == nullptr) - { - handle = LoadDynamicLibrary(LIB_NAME); - return (handle != nullptr); - } - return true; -} - - int pcap_module::init(const osd_options &options) { pcap_if_t *devs; char errbuf[PCAP_ERRBUF_SIZE]; - try - { - if(!(pcap_findalldevs_dl = (int (*)(pcap_if_t **, char *))GetProcAddress(handle, "pcap_findalldevs"))) - throw GetLastError(); - if(!(pcap_open_live_dl = (pcap_t* (*)(const char *, int, int, int, char *))GetProcAddress(handle, "pcap_open_live"))) - throw GetLastError(); - if(!(pcap_next_ex_dl = (int (*)(pcap_t *, struct pcap_pkthdr **, const u_char **))GetProcAddress(handle, "pcap_next_ex"))) - throw GetLastError(); - if(!(pcap_compile_dl = (int (*)(pcap_t *, struct bpf_program *, char *, int, bpf_u_int32))GetProcAddress(handle, "pcap_compile"))) - throw GetLastError(); - if(!(pcap_close_dl = (void (*)(pcap_t *))GetProcAddress(handle, "pcap_close"))) - throw GetLastError(); - if(!(pcap_setfilter_dl = (int (*)(pcap_t *, struct bpf_program *))GetProcAddress(handle, "pcap_setfilter"))) - throw GetLastError(); - if(!(pcap_sendpacket_dl = (int (*)(pcap_t *, u_char *, int))GetProcAddress(handle, "pcap_sendpacket"))) - throw GetLastError(); - if(!(pcap_set_datalink_dl = (int (*)(pcap_t *, int))GetProcAddress(handle, "pcap_set_datalink"))) - throw GetLastError(); - if(!(pcap_dispatch_dl = (int (*)(pcap_t *, int, pcap_handler callback, u_char *))GetProcAddress(handle, "pcap_dispatch"))) - throw GetLastError(); - } - catch (except_type e) - { - FreeLibrary(handle); - osd_printf_error(LIB_ERROR_STR, e); - return 1; - } - if(pcap_findalldevs_dl(&devs, errbuf) == -1) + // FIXME: bridge between pcap_module and netdev_pcap + module = this; + + if ((*pcap_findalldevs_dl)(&devs, errbuf) == -1) { - FreeLibrary(handle); osd_printf_error("Unable to get network devices: %s\n", errbuf); return 1; } @@ -314,9 +278,8 @@ int pcap_module::init(const osd_options &options) void pcap_module::exit() { clear_netdev(); - //FreeLibrary(handle); - //handle = nullptr; } + #else #include "modules/osdmodule.h" #include "netdev_module.h" diff --git a/src/osd/modules/osdwindow.cpp b/src/osd/modules/osdwindow.cpp index 3868f83e6ea..c7afccb029c 100644 --- a/src/osd/modules/osdwindow.cpp +++ b/src/osd/modules/osdwindow.cpp @@ -21,10 +21,6 @@ #include "render/drawsdl.h" #endif -osd_window::~osd_window() -{ -} - std::unique_ptr<osd_renderer> osd_renderer::make_for_type(int mode, std::shared_ptr<osd_window> window, int extra_flags) { switch(mode) diff --git a/src/osd/modules/osdwindow.h b/src/osd/modules/osdwindow.h index c9f311c6ebf..eefde3baf49 100644 --- a/src/osd/modules/osdwindow.h +++ b/src/osd/modules/osdwindow.h @@ -125,8 +125,6 @@ public: m_main(nullptr) {} - virtual ~osd_window(); - virtual render_target *target() = 0; virtual int fullscreen() const = 0; virtual running_machine &machine() const = 0; @@ -175,6 +173,9 @@ public: virtual void show_pointer() = 0; virtual void hide_pointer() = 0; + virtual void update() = 0; + virtual void destroy() = 0; + void renderer_reset() { m_renderer.reset(); } #ifndef OSD_SDL virtual bool win_has_menu() = 0; diff --git a/src/osd/modules/render/bgfx/shaders/shader.mk b/src/osd/modules/render/bgfx/shaders/shader.mk index 6e6730b5c29..222730c824b 100644 --- a/src/osd/modules/render/bgfx/shaders/shader.mk +++ b/src/osd/modules/render/bgfx/shaders/shader.mk @@ -109,17 +109,17 @@ endif $(BUILD_INTERMEDIATE_DIR)/vs_%.bin : $(SHADERS_DIR)vs_%.sc @echo [$(<)] - $(SILENT) $(SHADERC) $(VS_FLAGS) --type vertex --depends -o $(@) -f $(<) --disasm + $(SILENT) $(SHADERC) -f $(<) -o $(@) --type vertex $(VS_FLAGS) --depends --disasm $(SILENT) cp $(@) $(BUILD_OUTPUT_DIR)/$(@F) $(BUILD_INTERMEDIATE_DIR)/fs_%.bin : $(SHADERS_DIR)fs_%.sc @echo [$(<)] - $(SILENT) $(SHADERC) $(FS_FLAGS) --type fragment --depends -o $(@) -f $(<) --disasm + $(SILENT) $(SHADERC) -f $(<) -o $(@) --type fragment $(FS_FLAGS) --depends --disasm $(SILENT) cp $(@) $(BUILD_OUTPUT_DIR)/$(@F) $(BUILD_INTERMEDIATE_DIR)/cs_%.bin : $(SHADERS_DIR)cs_%.sc @echo [$(<)] - $(SILENT) $(SHADERC) $(CS_FLAGS) --type compute --depends -o $(@) -f $(<) --disasm + $(SILENT) $(SHADERC) -f $(<) -o $(@) --type compute $(CS_FLAGS) --depends --disasm $(SILENT) cp $(@) $(BUILD_OUTPUT_DIR)/$(@F) .PHONY: all diff --git a/src/osd/modules/render/d3d/d3d9intf.cpp b/src/osd/modules/render/d3d/d3d9intf.cpp deleted file mode 100644 index 435ec7ef64c..00000000000 --- a/src/osd/modules/render/d3d/d3d9intf.cpp +++ /dev/null @@ -1,619 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -//============================================================ -// -// d3d9intf.c - Direct3D 9 abstraction layer -// -//============================================================ - -// standard windows headers -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#include <d3d9.h> -#include <d3dx9.h> -#undef interface - -// MAME headers -#include "emu.h" - -// MAMEOS headers -#include "d3dintf.h" - - - -//============================================================ -// TYPE DEFINITIONS -//============================================================ - -typedef IDirect3D9 *(WINAPI *direct3dcreate9_ptr)(UINT SDKVersion); - -//============================================================ -// PROTOTYPES -//============================================================ - -static void set_interfaces(d3d_base *d3dptr); - -//============================================================ -// INLINES -//============================================================ - -static inline void convert_present_params(const present_parameters *params, D3DPRESENT_PARAMETERS *d3d9params) -{ - memset(d3d9params, 0, sizeof(*d3d9params)); - d3d9params->BackBufferWidth = params->BackBufferWidth; - d3d9params->BackBufferHeight = params->BackBufferHeight; - d3d9params->BackBufferFormat = params->BackBufferFormat; - d3d9params->BackBufferCount = params->BackBufferCount; - d3d9params->MultiSampleType = params->MultiSampleType; - d3d9params->MultiSampleQuality = params->MultiSampleQuality; - d3d9params->SwapEffect = params->SwapEffect; - d3d9params->hDeviceWindow = params->hDeviceWindow; - d3d9params->Windowed = params->Windowed; - d3d9params->EnableAutoDepthStencil = params->EnableAutoDepthStencil; - d3d9params->AutoDepthStencilFormat = params->AutoDepthStencilFormat; - d3d9params->Flags = params->Flags; - d3d9params->FullScreen_RefreshRateInHz = params->FullScreen_RefreshRateInHz; - d3d9params->PresentationInterval = params->PresentationInterval; -} - - - -//============================================================ -// drawd3d9_init -//============================================================ - -d3d_base *drawd3d9_init(void) -{ - bool post_available = true; - - // dynamically grab the create function from d3d9.dll - HINSTANCE dllhandle = LoadLibrary(TEXT("d3d9.dll")); - if (dllhandle == nullptr) - { - osd_printf_verbose("Direct3D: Unable to access d3d9.dll\n"); - return nullptr; - } - - // import the create function - direct3dcreate9_ptr direct3dcreate9 = (direct3dcreate9_ptr)GetProcAddress(dllhandle, "Direct3DCreate9"); - if (direct3dcreate9 == nullptr) - { - osd_printf_verbose("Direct3D: Unable to find Direct3DCreate9\n"); - FreeLibrary(dllhandle); - return nullptr; - } - - // create our core direct 3d object - IDirect3D9 *d3d9 = (*direct3dcreate9)(D3D_SDK_VERSION); - if (d3d9 == nullptr) - { - osd_printf_verbose("Direct3D: Error attempting to initialize Direct3D9\n"); - FreeLibrary(dllhandle); - return nullptr; - } - - // dynamically grab the shader load function from d3dx9.dll - HINSTANCE fxhandle = nullptr; - for (int idx = 99; idx >= 0; idx--) // a shameful moogle - { - #ifdef UNICODE - wchar_t dllbuf[13]; - wsprintf(dllbuf, TEXT("d3dx9_%d.dll"), idx); - fxhandle = LoadLibrary(dllbuf); - #else - char dllbuf[13]; - sprintf(dllbuf, "d3dx9_%d.dll", idx); - fxhandle = LoadLibraryA(dllbuf); - #endif - if (fxhandle != nullptr) - { - break; - } - } - if (fxhandle == nullptr) - { - osd_printf_verbose("Direct3D: Warning - Unable find any D3D9 DLLs; disabling post-effect rendering\n"); - post_available = false; - } - - // allocate an object to hold our data - auto d3dptr = global_alloc(d3d_base); - d3dptr->version = 9; - d3dptr->d3dobj = d3d9; - d3dptr->dllhandle = dllhandle; - d3dptr->post_fx_available = post_available; - d3dptr->libhandle = fxhandle; - set_interfaces(d3dptr); - - osd_printf_verbose("Direct3D: Using Direct3D 9\n"); - return d3dptr; -} - - - -//============================================================ -// Direct3D interfaces -//============================================================ - -static HRESULT check_device_format(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, D3DFORMAT adapterformat, DWORD usage, D3DRESOURCETYPE restype, D3DFORMAT format) -{ - IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj; - return IDirect3D9_CheckDeviceFormat(d3d9, adapter, devtype, adapterformat, usage, restype, format); -} - - -static HRESULT check_device_type(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, D3DFORMAT format, D3DFORMAT backformat, BOOL windowed) -{ - IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj; - return IDirect3D9_CheckDeviceType(d3d9, adapter, devtype, format, backformat, windowed); -} - -static HRESULT create_device(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, HWND focus, DWORD behavior, present_parameters *params, device **dev) -{ - IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj; - D3DPRESENT_PARAMETERS d3d9params; - convert_present_params(params, &d3d9params); - return IDirect3D9_CreateDevice(d3d9, adapter, devtype, focus, behavior, &d3d9params, (IDirect3DDevice9 **)dev); -} - -static HRESULT enum_adapter_modes(d3d_base *d3dptr, UINT adapter, D3DFORMAT format, UINT index, D3DDISPLAYMODE *mode) -{ - IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj; - return IDirect3D9_EnumAdapterModes(d3d9, adapter, format, index, mode); -} - - -static UINT get_adapter_count(d3d_base *d3dptr) -{ - IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj; - return IDirect3D9_GetAdapterCount(d3d9); -} - - -static HRESULT get_adapter_display_mode(d3d_base *d3dptr, UINT adapter, D3DDISPLAYMODE *mode) -{ - IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj; - return IDirect3D9_GetAdapterDisplayMode(d3d9, adapter, mode); -} - - -static HRESULT get_adapter_identifier(d3d_base *d3dptr, UINT adapter, DWORD flags, adapter_identifier *identifier) -{ - IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj; - D3DADAPTER_IDENTIFIER9 id; - HRESULT result = IDirect3D9_GetAdapterIdentifier(d3d9, adapter, flags, &id); - memcpy(identifier->Driver, id.Driver, sizeof(identifier->Driver)); - memcpy(identifier->Description, id.Description, sizeof(identifier->Description)); - identifier->DriverVersion = id.DriverVersion; - identifier->VendorId = id.VendorId; - identifier->DeviceId = id.DeviceId; - identifier->SubSysId = id.SubSysId; - identifier->Revision = id.Revision; - identifier->DeviceIdentifier = id.DeviceIdentifier; - identifier->WHQLLevel = id.WHQLLevel; - return result; -} - - -static UINT get_adapter_mode_count(d3d_base *d3dptr, UINT adapter, D3DFORMAT format) -{ - IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj; - return IDirect3D9_GetAdapterModeCount(d3d9, adapter, format); -} - - -static HMONITOR get_adapter_monitor(d3d_base *d3dptr, UINT adapter) -{ - IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj; - return IDirect3D9_GetAdapterMonitor(d3d9, adapter); -} - - -static HRESULT get_caps_dword(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, caps_index which, DWORD *value) -{ - IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj; - D3DCAPS9 caps; - HRESULT result = IDirect3D9_GetDeviceCaps(d3d9, adapter, devtype, &caps); - switch (which) - { - case CAPS_PRESENTATION_INTERVALS: *value = caps.PresentationIntervals; break; - case CAPS_CAPS2: *value = caps.Caps2; break; - case CAPS_DEV_CAPS: *value = caps.DevCaps; break; - case CAPS_SRCBLEND_CAPS: *value = caps.SrcBlendCaps; break; - case CAPS_DSTBLEND_CAPS: *value = caps.DestBlendCaps; break; - case CAPS_TEXTURE_CAPS: *value = caps.TextureCaps; break; - case CAPS_TEXTURE_FILTER_CAPS: *value = caps.TextureFilterCaps; break; - case CAPS_TEXTURE_ADDRESS_CAPS: *value = caps.TextureAddressCaps; break; - case CAPS_TEXTURE_OP_CAPS: *value = caps.TextureOpCaps; break; - case CAPS_MAX_TEXTURE_ASPECT: *value = caps.MaxTextureAspectRatio; break; - case CAPS_MAX_TEXTURE_WIDTH: *value = caps.MaxTextureWidth; break; - case CAPS_MAX_TEXTURE_HEIGHT: *value = caps.MaxTextureHeight; break; - case CAPS_STRETCH_RECT_FILTER: *value = caps.StretchRectFilterCaps; break; - case CAPS_MAX_PS30_INSN_SLOTS: *value = caps.MaxPixelShader30InstructionSlots; break; - } - return result; -} - - -static ULONG release(d3d_base *d3dptr) -{ - IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj; - ULONG result = IDirect3D9_Release(d3d9); - FreeLibrary(d3dptr->dllhandle); - global_free(d3dptr); - return result; -} - - -static const interface d3d9_interface = -{ - check_device_format, - check_device_type, - create_device, - enum_adapter_modes, - get_adapter_count, - get_adapter_display_mode, - get_adapter_identifier, - get_adapter_mode_count, - get_adapter_monitor, - get_caps_dword, - release -}; - - - -//============================================================ -// Direct3DDevice interfaces -//============================================================ - -static HRESULT device_begin_scene(device *dev) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_BeginScene(device); -} - -static HRESULT device_clear(device *dev, DWORD count, const D3DRECT *rects, DWORD flags, D3DCOLOR color, float z, DWORD stencil) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_Clear(device, count, rects, flags, color, z, stencil); -} - - -static HRESULT device_create_offscreen_plain_surface(device *dev, UINT width, UINT height, D3DFORMAT format, D3DPOOL pool, surface **surface) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_CreateOffscreenPlainSurface(device, width, height, format, pool, (IDirect3DSurface9 **)surface, nullptr); -} - -static HRESULT device_create_texture(device *dev, UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, texture **texture) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_CreateTexture(device, width, height, levels, usage, format, pool, (IDirect3DTexture9 **)texture, nullptr); -} - - -static HRESULT device_create_vertex_buffer(device *dev, UINT length, DWORD usage, DWORD fvf, D3DPOOL pool, vertex_buffer **buf) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_CreateVertexBuffer(device, length, usage, fvf, pool, (IDirect3DVertexBuffer9 **)buf, nullptr); -} - - -static HRESULT device_draw_primitive(device *dev, D3DPRIMITIVETYPE type, UINT start, UINT count) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_DrawPrimitive(device, type, start, count); -} - - -static HRESULT device_end_scene(device *dev) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_EndScene(device); -} - - -static HRESULT device_get_raster_status(device *dev, D3DRASTER_STATUS *status) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_GetRasterStatus(device, 0, status); -} - - -static HRESULT device_get_render_target(device *dev, DWORD index, surface **surface) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_GetRenderTarget(device, index, (IDirect3DSurface9 **)surface); -} - - -static HRESULT device_get_render_target_data(device *dev, surface *rendertarget, surface *destsurface) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_GetRenderTargetData(device, (IDirect3DSurface9 *)rendertarget, (IDirect3DSurface9 *)destsurface); -} - - -static HRESULT device_present(device *dev, const RECT *source, const RECT *dest, HWND override, RGNDATA *dirty, DWORD flags) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - if (flags != 0) - { - IDirect3DSwapChain9 *chain; - HRESULT result = IDirect3DDevice9_GetSwapChain(device, 0, &chain); - if (result == D3D_OK) - { - result = IDirect3DSwapChain9_Present(chain, source, dest, override, dirty, flags); - IDirect3DSwapChain9_Release(chain); - return result; - } - } - return IDirect3DDevice9_Present(device, source, dest, override, dirty); -} - - -static ULONG device_release(device *dev) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_Release(device); -} - - -static HRESULT device_reset(device *dev, present_parameters *params) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - D3DPRESENT_PARAMETERS d3d9params; - convert_present_params(params, &d3d9params); - return IDirect3DDevice9_Reset(device, &d3d9params); -} - - -static void device_set_gamma_ramp(device *dev, DWORD flags, const D3DGAMMARAMP *ramp) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - IDirect3DDevice9_SetGammaRamp(device, 0, flags, ramp); -} - - -static HRESULT device_set_render_state(device *dev, D3DRENDERSTATETYPE state, DWORD value) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_SetRenderState(device, state, value); -} - - -static HRESULT device_set_render_target(device *dev, DWORD index, surface *surf) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - IDirect3DSurface9 *surface = (IDirect3DSurface9 *)surf; - return IDirect3DDevice9_SetRenderTarget(device, index, surface); -} - - -static HRESULT device_create_render_target(device *dev, UINT width, UINT height, D3DFORMAT format, surface **surface) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_CreateRenderTarget(device, width, height, format, D3DMULTISAMPLE_NONE, 0, false, (IDirect3DSurface9 **)surface, nullptr); -} - - -static HRESULT device_set_stream_source(device *dev, UINT number, vertex_buffer *vbuf, UINT stride) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - IDirect3DVertexBuffer9 *vertexbuf = (IDirect3DVertexBuffer9 *)vbuf; - return IDirect3DDevice9_SetStreamSource(device, number, vertexbuf, 0, stride); -} - - -static HRESULT device_set_texture(device *dev, DWORD stage, texture *tex) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - IDirect3DBaseTexture9 *texture = (IDirect3DBaseTexture9 *)tex; - return IDirect3DDevice9_SetTexture(device, stage, texture); -} - - -static HRESULT device_set_texture_stage_state(device *dev, DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD value) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - - // some state which was here got pushed into sampler state in D3D9 - switch ((DWORD)state) - { - case D3DTSS_ADDRESSU: - return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_ADDRESSU, value); - case D3DTSS_ADDRESSV: - return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_ADDRESSV, value); - case D3DTSS_BORDERCOLOR: - return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_BORDERCOLOR, value); - case D3DTSS_MAGFILTER: - return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MAGFILTER, value); - case D3DTSS_MINFILTER: - return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MINFILTER, value); - case D3DTSS_MIPFILTER: - return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MIPFILTER, value); - case D3DTSS_MIPMAPLODBIAS: - return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MIPMAPLODBIAS, value); - case D3DTSS_MAXMIPLEVEL: - return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MAXMIPLEVEL, value); - case D3DTSS_MAXANISOTROPY: - return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MAXANISOTROPY, value); - default: - return IDirect3DDevice9_SetTextureStageState(device, stage, state, value); - } -} - - -static HRESULT device_set_vertex_format(device *dev, D3DFORMAT format) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_SetFVF(device, format); -} - - -static HRESULT device_stretch_rect(device *dev, surface *source, const RECT *srcrect, surface *dest, const RECT *dstrect, D3DTEXTUREFILTERTYPE filter) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - IDirect3DSurface9 *ssurface = (IDirect3DSurface9 *)source; - IDirect3DSurface9 *dsurface = (IDirect3DSurface9 *)dest; - return IDirect3DDevice9_StretchRect(device, ssurface, srcrect, dsurface, dstrect, filter); -} - - -static HRESULT device_test_cooperative_level(device *dev) -{ - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; - return IDirect3DDevice9_TestCooperativeLevel(device); -} - - -static const d3d_device_interface d3d9_device_interface = -{ - device_begin_scene, - device_clear, - device_create_offscreen_plain_surface, - device_create_texture, - device_create_vertex_buffer, - device_create_render_target, - device_draw_primitive, - device_end_scene, - device_get_raster_status, - device_get_render_target, - device_get_render_target_data, - device_present, - device_release, - device_reset, - device_set_gamma_ramp, - device_set_render_state, - device_set_render_target, - device_set_stream_source, - device_set_texture, - device_set_texture_stage_state, - device_set_vertex_format, - device_stretch_rect, - device_test_cooperative_level -}; - - - -//============================================================ -// Direct3DSurface interfaces -//============================================================ - -static HRESULT surface_lock_rect(surface *surf, D3DLOCKED_RECT *locked, const RECT *rect, DWORD flags) -{ - IDirect3DSurface9 *surface = (IDirect3DSurface9 *)surf; - return IDirect3DSurface9_LockRect(surface, locked, rect, flags); -} - - -static ULONG surface_release(surface *surf) -{ - IDirect3DSurface9 *surface = (IDirect3DSurface9 *)surf; - return IDirect3DSurface9_Release(surface); -} - - -static HRESULT surface_unlock_rect(surface *surf) -{ - IDirect3DSurface9 *surface = (IDirect3DSurface9 *)surf; - return IDirect3DSurface9_UnlockRect(surface); -} - - -static const surface_interface d3d9_surface_interface = -{ - surface_lock_rect, - surface_release, - surface_unlock_rect -}; - - - -//============================================================ -// Direct3DTexture interfaces -//============================================================ - -static HRESULT texture_get_surface_level(texture *tex, UINT level, surface **surface) -{ - IDirect3DTexture9 *texture = (IDirect3DTexture9 *)tex; - return IDirect3DTexture9_GetSurfaceLevel(texture, level, (IDirect3DSurface9 **)surface); -} - - -static HRESULT texture_lock_rect(texture *tex, UINT level, D3DLOCKED_RECT *locked, const RECT *rect, DWORD flags) -{ - IDirect3DTexture9 *texture = (IDirect3DTexture9 *)tex; - return IDirect3DTexture9_LockRect(texture, level, locked, rect, flags); -} - - -static ULONG texture_release(texture *tex) -{ - IDirect3DTexture9 *texture = (IDirect3DTexture9 *)tex; - return IDirect3DTexture9_Release(texture); -} - - -static HRESULT texture_unlock_rect(texture *tex, UINT level) -{ - IDirect3DTexture9 *texture = (IDirect3DTexture9 *)tex; - return IDirect3DTexture9_UnlockRect(texture, level); -} - - -static const texture_interface d3d9_texture_interface = -{ - texture_get_surface_level, - texture_lock_rect, - texture_release, - texture_unlock_rect -}; - - - -//============================================================ -// Direct3DVertexBuffer interfaces -//============================================================ - -static HRESULT vertex_buffer_lock(vertex_buffer *vbuf, UINT offset, UINT size, VOID **data, DWORD flags) -{ - IDirect3DVertexBuffer9 *vertexbuf = (IDirect3DVertexBuffer9 *)vbuf; - return IDirect3DVertexBuffer9_Lock(vertexbuf, offset, size, data, flags); -} - - -static ULONG vertex_buffer_release(vertex_buffer *vbuf) -{ - IDirect3DVertexBuffer9 *vertexbuf = (IDirect3DVertexBuffer9 *)vbuf; - return IDirect3DVertexBuffer9_Release(vertexbuf); -} - - -static HRESULT vertex_buffer_unlock(vertex_buffer *vbuf) -{ - IDirect3DVertexBuffer9 *vertexbuf = (IDirect3DVertexBuffer9 *)vbuf; - return IDirect3DVertexBuffer9_Unlock(vertexbuf); -} - - -static const vertex_buffer_interface d3d9_vertex_buffer_interface = -{ - vertex_buffer_lock, - vertex_buffer_release, - vertex_buffer_unlock -}; - - -//============================================================ -// set_interfaces -//============================================================ - -static void set_interfaces(d3d_base *d3dptr) -{ - d3dptr->d3d = d3d9_interface; - d3dptr->device = d3d9_device_interface; - d3dptr->surface = d3d9_surface_interface; - d3dptr->texture = d3d9_texture_interface; - d3dptr->vertexbuf = d3d9_vertex_buffer_interface; -} diff --git a/src/osd/modules/render/d3d/d3dcomm.h b/src/osd/modules/render/d3d/d3dcomm.h index 89a7f33a8e8..ebd2294a203 100644 --- a/src/osd/modules/render/d3d/d3dcomm.h +++ b/src/osd/modules/render/d3d/d3dcomm.h @@ -64,7 +64,6 @@ public: { } d3d_texture_manager(renderer_d3d9 *d3d); - ~d3d_texture_manager(); void update_textures(); @@ -142,9 +141,9 @@ public: int get_cur_frame() const { return m_cur_frame; } int get_prev_frame() const { return m_prev_frame; } - texture * get_tex() const { return m_d3dtex; } - surface * get_surface() const { return m_d3dsurface; } - texture * get_finaltex() const { return m_d3dfinaltex; } + IDirect3DTexture9 * get_tex() const { return m_d3dtex; } + IDirect3DSurface9 * get_surface() const { return m_d3dsurface; } + IDirect3DTexture9 * get_finaltex() const { return m_d3dfinaltex; } vec2f & get_uvstart() { return m_start; } vec2f & get_uvstop() { return m_stop; } @@ -173,9 +172,9 @@ private: int m_xprescale, m_yprescale; // X/Y prescale factor int m_cur_frame; // what is our current frame? int m_prev_frame; // what was our last frame? (used to determine pause state) - texture * m_d3dtex; // Direct3D texture pointer - surface * m_d3dsurface; // Direct3D offscreen plain surface pointer - texture * m_d3dfinaltex; // Direct3D final (post-scaled) texture + IDirect3DTexture9 * m_d3dtex; // Direct3D texture pointer + IDirect3DSurface9 * m_d3dsurface; // Direct3D offscreen plain surface pointer + IDirect3DTexture9 * m_d3dfinaltex; // Direct3D final (post-scaled) texture }; /* poly_info holds information about a single polygon/d3d primitive */ @@ -254,8 +253,8 @@ public: bool init(renderer_d3d9 *d3d, d3d_base *d3dintf, int source_width, int source_height, int target_width, int target_height); - surface *last_target; - texture *last_texture; + IDirect3DSurface9 *last_target; + IDirect3DTexture9 *last_texture; int target_width; int target_height; @@ -293,16 +292,16 @@ public: int screen_index; int page_index; - surface *target_surface[2]; - texture *target_texture[2]; - surface *source_surface[2]; - texture *source_texture[2]; + IDirect3DSurface9 *target_surface[2]; + IDirect3DTexture9 *target_texture[2]; + IDirect3DSurface9 *source_surface[2]; + IDirect3DTexture9 *source_texture[2]; d3d_render_target *next; d3d_render_target *prev; - surface *bloom_surface[MAX_BLOOM_COUNT]; - texture *bloom_texture[MAX_BLOOM_COUNT]; + IDirect3DSurface9 *bloom_surface[MAX_BLOOM_COUNT]; + IDirect3DTexture9 *bloom_texture[MAX_BLOOM_COUNT]; float bloom_dims[MAX_BLOOM_COUNT][2]; diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp index 5c1bef296cf..9dcb3f06f8e 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.cpp +++ b/src/osd/modules/render/d3d/d3dhlsl.cpp @@ -2,18 +2,10 @@ // copyright-holders:Aaron Giles //============================================================ // -// d3dhlsl.c - Win32 Direct3D HLSL implementation +// d3dhlsl.cpp - Win32 Direct3D HLSL implementation // //============================================================ -// Useful info: -// Windows XP/2003 shipped with DirectX 8.1 -// Windows 2000 shipped with DirectX 7a -// Windows 98SE shipped with DirectX 6.1a -// Windows 98 shipped with DirectX 5 -// Windows NT shipped with DirectX 3.0a -// Windows 95 shipped with DirectX 2 - // MAME headers #include "emu.h" #include "drivenum.h" @@ -47,14 +39,6 @@ static void get_vector(const char *data, int count, float *out, bool report_erro //============================================================ -// TYPE DEFINITIONS -//============================================================ - -typedef HRESULT (WINAPI *direct3dx9_loadeffect_ptr)(LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, const D3DXMACRO *pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT *ppEffect, LPD3DXBUFFER *ppCompilationErrors); -static direct3dx9_loadeffect_ptr g_load_effect = nullptr; - - -//============================================================ // shader manager constructor //============================================================ @@ -119,21 +103,21 @@ void shaders::window_save() return; } - HRESULT result = (*d3dintf->device.create_texture)(d3d->get_device(), snap_width, snap_height, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &snap_copy_texture); - if (result != D3D_OK) + HRESULT result = d3d->get_device()->CreateTexture(snap_width, snap_height, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &snap_copy_texture, nullptr); + if (FAILED(result)) { osd_printf_verbose("Direct3D: Unable to init system-memory target for HLSL snapshot (%08x), bailing\n", (UINT32)result); return; } - (*d3dintf->texture.get_surface_level)(snap_copy_texture, 0, &snap_copy_target); + snap_copy_texture->GetSurfaceLevel(0, &snap_copy_target); - result = (*d3dintf->device.create_texture)(d3d->get_device(), snap_width, snap_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &snap_texture); - if (result != D3D_OK) + result = d3d->get_device()->CreateTexture(snap_width, snap_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &snap_texture, nullptr); + if (FAILED(result)) { osd_printf_verbose("Direct3D: Unable to init video-memory target for HLSL snapshot (%08x), bailing\n", (UINT32)result); return; } - (*d3dintf->texture.get_surface_level)(snap_texture, 0, &snap_target); + snap_texture->GetSurfaceLevel(0, &snap_target); render_snap = true; snap_rendered = false; @@ -169,7 +153,7 @@ void shaders::window_record() // shaders::avi_update_snap //============================================================ -void shaders::avi_update_snap(surface *surface) +void shaders::avi_update_snap(IDirect3DSurface9 *surface) { if (!master_enable || !d3dintf->post_fx_available) { @@ -185,15 +169,15 @@ void shaders::avi_update_snap(surface *surface) } // copy the texture - HRESULT result = (*d3dintf->device.get_render_target_data)(d3d->get_device(), surface, avi_copy_surface); - if (result != D3D_OK) + HRESULT result = d3d->get_device()->GetRenderTargetData(surface, avi_copy_surface); + if (FAILED(result)) { return; } // lock the texture - result = (*d3dintf->surface.lock_rect)(avi_copy_surface, &rect, nullptr, D3DLOCK_DISCARD); - if (result != D3D_OK) + result = avi_copy_surface->LockRect(&rect, nullptr, D3DLOCK_DISCARD); + if (FAILED(result)) { return; } @@ -211,11 +195,9 @@ void shaders::avi_update_snap(surface *surface) } // unlock - result = (*d3dintf->surface.unlock_rect)(avi_copy_surface); - if (result != D3D_OK) - { - osd_printf_verbose("Direct3D: Error %08X during texture unlock_rect call\n", (int)result); - } + result = avi_copy_surface->UnlockRect(); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during texture UnlockRect call\n", result); } @@ -224,7 +206,7 @@ void shaders::avi_update_snap(surface *surface) // hlsl_render_snapshot //============================================================ -void shaders::render_snapshot(surface *surface) +void shaders::render_snapshot(IDirect3DSurface9 *surface) { if (!master_enable || !d3dintf->post_fx_available) { @@ -242,15 +224,15 @@ void shaders::render_snapshot(surface *surface) } // copy the texture - HRESULT result = (*d3dintf->device.get_render_target_data)(d3d->get_device(), surface, snap_copy_target); - if (result != D3D_OK) + HRESULT result = d3d->get_device()->GetRenderTargetData(surface, snap_copy_target); + if (FAILED(result)) { return; } // lock the texture - result = (*d3dintf->surface.lock_rect)(snap_copy_target, &rect, nullptr, D3DLOCK_DISCARD); - if (result != D3D_OK) + result = snap_copy_target->LockRect(&rect, nullptr, D3DLOCK_DISCARD); + if (FAILED(result)) { return; } @@ -292,30 +274,31 @@ void shaders::render_snapshot(surface *surface) png_free(&pnginfo); // unlock - result = (*d3dintf->surface.unlock_rect)(snap_copy_target); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during texture unlock_rect call\n", (int)result); + result = snap_copy_target->UnlockRect(); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during texture UnlockRect call\n", result); if (snap_texture != nullptr) { - (*d3dintf->texture.release)(snap_texture); + snap_texture->Release(); snap_texture = nullptr; } if (snap_target != nullptr) { - (*d3dintf->surface.release)(snap_target); + snap_target->Release(); snap_target = nullptr; } if (snap_copy_texture != nullptr) { - (*d3dintf->texture.release)(snap_copy_texture); + snap_copy_texture->Release(); snap_copy_texture = nullptr; } if (snap_copy_target != nullptr) { - (*d3dintf->surface.release)(snap_copy_target); + snap_copy_target->Release(); snap_copy_target = nullptr; } } @@ -332,7 +315,7 @@ void shaders::record_texture() return; } - surface *surface = avi_final_target; + IDirect3DSurface9 *surface = avi_final_target; // ignore if nothing to do if (avi_output_file == nullptr || surface == nullptr) @@ -621,20 +604,17 @@ void shaders::set_texture(texture_info *texture) void shaders::init(d3d_base *d3dintf, running_machine *machine, renderer_d3d9 *renderer) { - if (!d3dintf->post_fx_available) - { - return; - } + d3dx9_dll = osd::dynamic_module::open({ "d3dx9_43.dll" }); - g_load_effect = (direct3dx9_loadeffect_ptr)GetProcAddress(d3dintf->libhandle, "D3DXCreateEffectFromFileW"); - if (g_load_effect == nullptr) + d3dx_create_effect_from_file_ptr = d3dx9_dll->bind<d3dx_create_effect_from_file_fn>("D3DXCreateEffectFromFileW"); + if (!d3dx_create_effect_from_file_ptr) { - printf("Direct3D: Unable to find D3DXCreateEffectFromFileW\n"); + osd_printf_verbose("Direct3D: Unable to find D3DXCreateEffectFromFileW\n"); d3dintf->post_fx_available = false; - return; } + d3dintf->post_fx_available = true; this->d3dintf = d3dintf; this->machine = machine; this->d3d = renderer; @@ -837,41 +817,44 @@ int shaders::create_resources(bool reset, std::vector<ui::menu_item>& sliders) options = &last_options; } - HRESULT result = (*d3dintf->device.get_render_target)(d3d->get_device(), 0, &backbuffer); - if (result != D3D_OK) + HRESULT result = d3d->get_device()->GetRenderTarget(0, &backbuffer); + if (FAILED(result)) { - osd_printf_verbose("Direct3D: Error %08X during device get_render_target call\n", (int)result); + osd_printf_verbose("Direct3D: Error %08lX during device GetRenderTarget call\n", result); } - result = (*d3dintf->device.create_texture)(d3d->get_device(), 4, 4, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &black_texture); - if (result != D3D_OK) + result = d3d->get_device()->CreateTexture(4, 4, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &black_texture, nullptr); + if (FAILED(result)) { osd_printf_verbose("Direct3D: Unable to init video-memory target for black texture (%08x)\n", (UINT32)result); return 1; } - (*d3dintf->texture.get_surface_level)(black_texture, 0, &black_surface); - result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, black_surface); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_target call\n", (int)result); - result = (*d3dintf->device.clear)(d3d->get_device(), 0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 0, 0); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device clear call\n", (int)result); - result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, backbuffer); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_target call\n", (int)result); + black_texture->GetSurfaceLevel(0, &black_surface); + result = d3d->get_device()->SetRenderTarget(0, black_surface); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderTarget call\n", result); + result = d3d->get_device()->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 0, 0); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device clear call\n", result); + result = d3d->get_device()->SetRenderTarget(0, backbuffer); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderTarget call\n", result); - result = (*d3dintf->device.create_texture)(d3d->get_device(), (int)snap_width, (int)snap_height, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &avi_copy_texture); - if (result != D3D_OK) + result = d3d->get_device()->CreateTexture((int)snap_width, (int)snap_height, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &avi_copy_texture, nullptr); + if (FAILED(result)) { osd_printf_verbose("Direct3D: Unable to init system-memory target for HLSL AVI dumping (%08x)\n", (UINT32)result); return 1; } - (*d3dintf->texture.get_surface_level)(avi_copy_texture, 0, &avi_copy_surface); + avi_copy_texture->GetSurfaceLevel(0, &avi_copy_surface); - result = (*d3dintf->device.create_texture)(d3d->get_device(), (int)snap_width, (int)snap_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &avi_final_texture); - if (result != D3D_OK) + result = d3d->get_device()->CreateTexture((int)snap_width, (int)snap_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &avi_final_texture, nullptr); + if (FAILED(result)) { osd_printf_verbose("Direct3D: Unable to init video-memory target for HLSL AVI dumping (%08x)\n", (UINT32)result); return 1; } - (*d3dintf->texture.get_surface_level)(avi_final_texture, 0, &avi_final_target); + avi_final_texture->GetSurfaceLevel(0, &avi_final_target); emu_file file(machine->options().art_path(), OPEN_FLAG_READ); render_load_png(shadow_bitmap, file, nullptr, options->shadow_mask_texture); @@ -890,7 +873,7 @@ int shaders::create_resources(bool reset, std::vector<ui::menu_item>& sliders) texture.seqid = 0; // now create it (no prescale, no wrap) - shadow_texture = new texture_info(d3d->get_texture_manager(), &texture, 1, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXFORMAT(TEXFORMAT_ARGB32)); + shadow_texture = global_alloc(texture_info(d3d->get_texture_manager(), &texture, 1, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXFORMAT(TEXFORMAT_ARGB32))); } const char *fx_dir = downcast<windows_options &>(machine->options()).screen_post_fx_dir(); @@ -1035,10 +1018,10 @@ void shaders::begin_draw() downsample_effect->set_technique("DefaultTechnique"); vector_effect->set_technique("DefaultTechnique"); - HRESULT result = (*d3dintf->device.get_render_target)(d3d->get_device(), 0, &backbuffer); - if (result != D3D_OK) + HRESULT result = d3d->get_device()->GetRenderTarget(0, &backbuffer); + if (FAILED(result)) { - osd_printf_verbose("Direct3D: Error %08X during device get_render_target call\n", (int)result); + osd_printf_verbose("Direct3D: Error %08lX during device GetRenderTarget call\n", result); } } @@ -1058,7 +1041,7 @@ void shaders::begin_frame() //============================================================ void shaders::blit( - surface *dst, + IDirect3DSurface9 *dst, bool clear_dst, D3DPRIMITIVETYPE prim_type, UINT32 prim_index, @@ -1068,18 +1051,18 @@ void shaders::blit( if (dst != nullptr) { - result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, dst); - if (result != D3D_OK) + result = d3d->get_device()->SetRenderTarget(0, dst); + if (FAILED(result)) { - osd_printf_verbose("Direct3D: Error %08X during device set_render_target call\n", (int)result); + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderTarget call\n", result); } if (clear_dst) { - result = (*d3dintf->device.clear)(d3d->get_device(), 0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(1,0,0,0), 0, 0); - if (result != D3D_OK) + result = d3d->get_device()->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(1,0,0,0), 0, 0); + if (FAILED(result)) { - osd_printf_verbose("Direct3D: Error %08X during device clear call\n", (int)result); + osd_printf_verbose("Direct3D: Error %08lX during device clear call\n", result); } } } @@ -1092,10 +1075,10 @@ void shaders::blit( curr_effect->begin_pass(pass); // add the primitives - result = (*d3dintf->device.draw_primitive)(d3d->get_device(), prim_type, prim_index, prim_count); - if (result != D3D_OK) + result = d3d->get_device()->DrawPrimitive(prim_type, prim_index, prim_count); + if (FAILED(result)) { - osd_printf_verbose("Direct3D: Error %08X during device draw_primitive call\n", (int)result); + osd_printf_verbose("Direct3D: Error %08lX during device DrawPrimitive call\n", result); } curr_effect->end_pass(); @@ -1565,10 +1548,10 @@ int shaders::screen_pass(d3d_render_target *rt, int source_index, poly_info *pol { blit(avi_final_target, false, poly->get_type(), vertnum, poly->get_count()); - HRESULT result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, backbuffer); - if (result != D3D_OK) + HRESULT result = d3d->get_device()->SetRenderTarget(0, backbuffer); + if (FAILED(result)) { - osd_printf_verbose("Direct3D: Error %08X during device set_render_target call\n", (int)result); + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderTarget call\n", result); } } @@ -1576,10 +1559,10 @@ int shaders::screen_pass(d3d_render_target *rt, int source_index, poly_info *pol { blit(snap_target, false, poly->get_type(), vertnum, poly->get_count()); - HRESULT result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, backbuffer); - if (result != D3D_OK) + HRESULT result = d3d->get_device()->SetRenderTarget(0, backbuffer); + if (FAILED(result)) { - osd_printf_verbose("Direct3D: Error %08X during device set_render_target call\n", (int)result); + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderTarget call\n", result); } snap_rendered = true; @@ -1684,10 +1667,10 @@ void shaders::render_quad(poly_info *poly, int vertnum) next_index = vector_pass(rt, next_index, poly, vertnum); - HRESULT result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, backbuffer); - if (result != D3D_OK) + HRESULT result = d3d->get_device()->SetRenderTarget(0, backbuffer); + if (FAILED(result)) { - osd_printf_verbose("Direct3D: Error %08X during device set_render_target call\n", (int)result); + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderTarget call\n", result); } } else if (PRIMFLAG_GET_VECTORBUF(poly->get_flags()) && vector_enable) @@ -1736,10 +1719,10 @@ void shaders::render_quad(poly_info *poly, int vertnum) next_index = screen_pass(rt, next_index, poly, vertnum); d3d->set_wrap(PRIMFLAG_GET_TEXWRAP(curr_texture->get_flags()) ? D3DTADDRESS_WRAP : D3DTADDRESS_CLAMP); - HRESULT result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, backbuffer); - if (result != D3D_OK) + HRESULT result = d3d->get_device()->SetRenderTarget(0, backbuffer); + if (FAILED(result)) { - osd_printf_verbose("Direct3D: Error %08X during device set_render_target call\n", (int)result); + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderTarget call\n", result); } lines_pending = false; @@ -1770,13 +1753,14 @@ void shaders::end_draw() return; } - (*d3dintf->surface.release)(backbuffer); + backbuffer->Release(); } //============================================================ // shaders::add_cache_target - register a cache target //============================================================ + bool shaders::add_cache_target(renderer_d3d9* d3d, texture_info* texture, int source_width, int source_height, int target_width, int target_height, int screen_index) { cache_target* target = (cache_target*)global_alloc_clear<cache_target>(); @@ -1803,6 +1787,7 @@ bool shaders::add_cache_target(renderer_d3d9* d3d, texture_info* texture, int so //============================================================ // shaders::get_texture_target(render_primitive::prim, texture_info::texture) //============================================================ + d3d_render_target* shaders::get_texture_target(render_primitive *prim, texture_info *texture) { auto win = d3d->assert_window(); @@ -2108,42 +2093,42 @@ void shaders::delete_resources(bool reset) if (backbuffer != nullptr) { - (*d3dintf->surface.release)(backbuffer); + backbuffer->Release(); backbuffer = nullptr; } if (black_surface != nullptr) { - (*d3dintf->surface.release)(black_surface); + black_surface->Release(); black_surface = nullptr; } if (black_texture != nullptr) { - (*d3dintf->texture.release)(black_texture); + black_texture->Release(); black_texture = nullptr; } if (avi_copy_texture != nullptr) { - (*d3dintf->texture.release)(avi_copy_texture); + avi_copy_texture->Release(); avi_copy_texture = nullptr; } if (avi_copy_surface != nullptr) { - (*d3dintf->surface.release)(avi_copy_surface); + avi_copy_surface->Release(); avi_copy_surface = nullptr; } if (avi_final_texture != nullptr) { - (*d3dintf->texture.release)(avi_final_texture); + avi_final_texture->Release(); avi_final_texture = nullptr; } if (avi_final_target != nullptr) { - (*d3dintf->surface.release)(avi_final_target); + avi_final_target->Release(); avi_final_target = nullptr; } @@ -2909,12 +2894,12 @@ void uniform::set(bool x) m_bval = x; } -void uniform::set(matrix *mat) +void uniform::set(D3DMATRIX *mat) { m_mval = mat; } -void uniform::set(texture *tex) +void uniform::set(IDirect3DTexture9 *tex) { m_texture = tex; } @@ -2951,9 +2936,8 @@ void uniform::upload() // effect functions //============================================================ -effect::effect(shaders *shadersys, device *dev, const char *name, const char *path) +effect::effect(shaders *shadersys, IDirect3DDevice9 *dev, const char *name, const char *path) { - IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev; LPD3DXBUFFER buffer_errors = nullptr; m_shaders = shadersys; @@ -2966,7 +2950,7 @@ effect::effect(shaders *shadersys, device *dev, const char *name, const char *pa sprintf(name_cstr, "%s\\%s", path, name); TCHAR *effect_name = tstring_from_utf8(name_cstr); - HRESULT hr = (*g_load_effect)(device, effect_name, nullptr, nullptr, 0, nullptr, &m_effect, &buffer_errors); + HRESULT hr = (*shadersys->d3dx_create_effect_from_file_ptr)(dev, effect_name, nullptr, nullptr, 0, nullptr, &m_effect, &buffer_errors); if (FAILED(hr)) { if (buffer_errors != nullptr) @@ -3093,14 +3077,14 @@ void effect::set_bool(D3DXHANDLE param, bool value) m_effect->SetBool(param, value); } -void effect::set_matrix(D3DXHANDLE param, matrix *matrix) +void effect::set_matrix(D3DXHANDLE param, D3DMATRIX *matrix) { m_effect->SetMatrix(param, (D3DXMATRIX*)matrix); } -void effect::set_texture(D3DXHANDLE param, texture *tex) +void effect::set_texture(D3DXHANDLE param, IDirect3DTexture9 *tex) { - m_effect->SetTexture(param, (IDirect3DTexture9*)tex); + m_effect->SetTexture(param, tex); } D3DXHANDLE effect::get_parameter(D3DXHANDLE param, const char *name) diff --git a/src/osd/modules/render/d3d/d3dhlsl.h b/src/osd/modules/render/d3d/d3dhlsl.h index 6f6e31f1933..3c9daa3c6ad 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.h +++ b/src/osd/modules/render/d3d/d3dhlsl.h @@ -13,16 +13,15 @@ #include "aviio.h" #include "../frontend/mame/ui/menuitem.h" #include "../frontend/mame/ui/slider.h" - -//============================================================ -// CONSTANTS -//============================================================ - +#include "modules/lib/osdlib.h" //============================================================ // TYPE DEFINITIONS //============================================================ +// Typedefs for dynamically loaded functions +typedef HRESULT (WINAPI *d3dx_create_effect_from_file_fn)(LPDIRECT3DDEVICE9, LPCTSTR, const D3DXMACRO *, LPD3DXINCLUDE, DWORD, LPD3DXEFFECTPOOL, LPD3DXEFFECT *, LPD3DXBUFFER *); + class effect; class shaders; @@ -115,8 +114,8 @@ public: void set(float x); void set(int x); void set(bool x); - void set(matrix *mat); - void set(texture *tex); + void set(D3DMATRIX *mat); + void set(IDirect3DTexture9 *tex); void upload(); void update(); @@ -127,10 +126,10 @@ protected: float m_vec[4]; int m_ival; bool m_bval; - matrix *m_mval; - texture *m_texture; + D3DMATRIX *m_mval; + IDirect3DTexture9 *m_texture; int m_count; - uniform_type m_type; + uniform_type m_type; int m_id; effect *m_shader; @@ -142,7 +141,7 @@ class effect friend class uniform; public: - effect(shaders *shadersys, device *dev, const char *name, const char *path); + effect(shaders *shadersys, IDirect3DDevice9 *dev, const char *name, const char *path); ~effect(); void begin(UINT *passes, DWORD flags); @@ -157,8 +156,8 @@ public: void set_float(D3DXHANDLE param, float value); void set_int(D3DXHANDLE param, int value); void set_bool(D3DXHANDLE param, bool value); - void set_matrix(D3DXHANDLE param, matrix *matrix); - void set_texture(D3DXHANDLE param, texture *tex); + void set_matrix(D3DXHANDLE param, D3DMATRIX *matrix); + void set_texture(D3DXHANDLE param, IDirect3DTexture9 *tex); void add_uniform(const char *name, uniform::uniform_type type, int id); void update_uniforms(); @@ -329,8 +328,8 @@ public: void window_record(); bool recording() const { return avi_output_file != nullptr; } - void avi_update_snap(surface *surface); - void render_snapshot(surface *surface); + void avi_update_snap(IDirect3DSurface9 *surface); + void render_snapshot(IDirect3DSurface9 *surface); void record_texture(); void init_fsfx_quad(void *vertbuf); @@ -350,7 +349,7 @@ public: void *get_slider_option(int id, int index = 0); private: - void blit(surface *dst, bool clear_dst, D3DPRIMITIVETYPE prim_type, UINT32 prim_index, UINT32 prim_count); + void blit(IDirect3DSurface9 *dst, bool clear_dst, D3DPRIMITIVETYPE prim_type, UINT32 prim_index, UINT32 prim_count); void enumerate_screens(); void end_avi_recording(); @@ -399,28 +398,28 @@ private: int avi_frame; // AVI frame attotime avi_frame_period; // AVI frame period attotime avi_next_frame_time; // AVI next frame time - surface * avi_copy_surface; // AVI destination surface in system memory - texture * avi_copy_texture; // AVI destination texture in system memory - surface * avi_final_target; // AVI upscaled surface - texture * avi_final_texture; // AVI upscaled texture + IDirect3DSurface9 * avi_copy_surface; // AVI destination surface in system memory + IDirect3DTexture9 * avi_copy_texture; // AVI destination texture in system memory + IDirect3DSurface9 * avi_final_target; // AVI upscaled surface + IDirect3DTexture9 * avi_final_texture; // AVI upscaled texture - surface * black_surface; // black dummy surface - texture * black_texture; // black dummy texture + IDirect3DSurface9 * black_surface; // black dummy surface + IDirect3DTexture9 * black_texture; // black dummy texture bool render_snap; // whether or not to take HLSL post-render snapshot bool snap_rendered; // whether we just rendered our HLSL post-render shot or not - surface * snap_copy_target; // snapshot destination surface in system memory - texture * snap_copy_texture; // snapshot destination surface in system memory - surface * snap_target; // snapshot upscaled surface - texture * snap_texture; // snapshot upscaled texture + IDirect3DSurface9 * snap_copy_target; // snapshot destination surface in system memory + IDirect3DTexture9 * snap_copy_texture; // snapshot destination surface in system memory + IDirect3DSurface9 * snap_target; // snapshot upscaled surface + IDirect3DTexture9 * snap_texture; // snapshot upscaled texture int snap_width; // snapshot width int snap_height; // snapshot height bool lines_pending; // whether or not we have lines to flush on the next quad - bool initialized; // whether or not we're initialize + bool initialized; // whether or not we're initialized // HLSL effects - surface * backbuffer; // pointer to our device's backbuffer + IDirect3DSurface9 * backbuffer; // pointer to our device's backbuffer effect * curr_effect; // pointer to the currently active effect object effect * default_effect; // pointer to the primary-effect object effect * prescale_effect; // pointer to the prescale-effect object @@ -447,6 +446,9 @@ private: static slider_desc s_sliders[]; static hlsl_options last_options; // last used options static char last_system_name[16]; // last used system + + osd::dynamic_module::ptr d3dx9_dll; + d3dx_create_effect_from_file_fn d3dx_create_effect_from_file_ptr; }; #endif diff --git a/src/osd/modules/render/d3d/d3dintf.h b/src/osd/modules/render/d3d/d3dintf.h deleted file mode 100644 index 3e0a90a46f5..00000000000 --- a/src/osd/modules/render/d3d/d3dintf.h +++ /dev/null @@ -1,239 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -//============================================================ -// -// d3dintf.h - Direct3D 8/9 interface abstractions -// -//============================================================ - -#ifndef __WIN_D3DINTF__ -#define __WIN_D3DINTF__ - -// standard windows headers -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#include <tchar.h> -#include <mmsystem.h> -#include <d3d9.h> -#include <d3dx9.h> -#include <math.h> -#undef interface - -//============================================================ -// CONSTANTS -//============================================================ - -#ifndef D3DCAPS2_DYNAMICTEXTURES -#define D3DCAPS2_DYNAMICTEXTURES 0x20000000L -#endif - -#ifndef D3DPRESENT_DONOTWAIT -#define D3DPRESENT_DONOTWAIT 0x00000001L -#endif - - -#define D3DTSS_ADDRESSU 13 -#define D3DTSS_ADDRESSV 14 -#define D3DTSS_BORDERCOLOR 15 -#define D3DTSS_MAGFILTER 16 -#define D3DTSS_MINFILTER 17 -#define D3DTSS_MIPFILTER 18 -#define D3DTSS_MIPMAPLODBIAS 19 -#define D3DTSS_MAXMIPLEVEL 20 -#define D3DTSS_MAXANISOTROPY 21 - -//============================================================ -// TYPE DEFINITIONS -//============================================================ - -struct d3d_base; -struct device; -struct surface; -struct texture; -struct vertex_buffer; -class effect; -typedef D3DXVECTOR4 vector; -typedef D3DMATRIX matrix; - -//============================================================ -// Abstracted presentation parameters -//============================================================ - -struct present_parameters -{ - UINT BackBufferWidth; - UINT BackBufferHeight; - D3DFORMAT BackBufferFormat; - UINT BackBufferCount; - D3DMULTISAMPLE_TYPE MultiSampleType; - DWORD MultiSampleQuality; - D3DSWAPEFFECT SwapEffect; - HWND hDeviceWindow; - BOOL Windowed; - BOOL EnableAutoDepthStencil; - D3DFORMAT AutoDepthStencilFormat; - DWORD Flags; - UINT FullScreen_RefreshRateInHz; - UINT PresentationInterval; -}; - - -//============================================================ -// Abstracted device identifier -//============================================================ - -struct adapter_identifier -{ - char Driver[512]; - char Description[512]; - LARGE_INTEGER DriverVersion; - DWORD VendorId; - DWORD DeviceId; - DWORD SubSysId; - DWORD Revision; - GUID DeviceIdentifier; - DWORD WHQLLevel; -}; - - -//============================================================ -// Caps enumeration -//============================================================ - -enum caps_index -{ - CAPS_PRESENTATION_INTERVALS, - CAPS_CAPS2, - CAPS_DEV_CAPS, - CAPS_SRCBLEND_CAPS, - CAPS_DSTBLEND_CAPS, - CAPS_TEXTURE_CAPS, - CAPS_TEXTURE_FILTER_CAPS, - CAPS_TEXTURE_ADDRESS_CAPS, - CAPS_TEXTURE_OP_CAPS, - CAPS_MAX_TEXTURE_ASPECT, - CAPS_MAX_TEXTURE_WIDTH, - CAPS_MAX_TEXTURE_HEIGHT, - CAPS_STRETCH_RECT_FILTER, - CAPS_MAX_PS30_INSN_SLOTS -}; - - -//============================================================ -// Direct3D interfaces -//============================================================ - -struct interface -{ - HRESULT (*check_device_format)(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, D3DFORMAT adapterformat, DWORD usage, D3DRESOURCETYPE restype, D3DFORMAT format); - HRESULT (*check_device_type)(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, D3DFORMAT format, D3DFORMAT backformat, BOOL windowed); - HRESULT (*create_device)(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, HWND focus, DWORD behavior, present_parameters *params, device **dev); - HRESULT (*enum_adapter_modes)(d3d_base *d3dptr, UINT adapter, D3DFORMAT format, UINT index, D3DDISPLAYMODE *mode); - UINT (*get_adapter_count)(d3d_base *d3dptr); - HRESULT (*get_adapter_display_mode)(d3d_base *d3dptr, UINT adapter, D3DDISPLAYMODE *mode); - HRESULT (*get_adapter_identifier)(d3d_base *d3dptr, UINT adapter, DWORD flags, adapter_identifier *identifier); - UINT (*get_adapter_mode_count)(d3d_base *d3dptr, UINT adapter, D3DFORMAT format); - HMONITOR (*get_adapter_monitor)(d3d_base *d3dptr, UINT adapter); - HRESULT (*get_caps_dword)(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, caps_index which, DWORD *value); - ULONG (*release)(d3d_base *d3dptr); -}; - - -//============================================================ -// Direct3DDevice interfaces -//============================================================ - -struct d3d_device_interface -{ - HRESULT (*begin_scene)(device *dev); - HRESULT (*clear)(device *dev, DWORD count, const D3DRECT *rects, DWORD flags, D3DCOLOR color, float z, DWORD stencil); - HRESULT (*create_offscreen_plain_surface)(device *dev, UINT width, UINT height, D3DFORMAT format, D3DPOOL pool, surface **surface); - HRESULT (*create_texture)(device *dev, UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, texture **texture); - HRESULT (*create_vertex_buffer)(device *dev, UINT length, DWORD usage, DWORD fvf, D3DPOOL pool, vertex_buffer **buf); - HRESULT (*create_render_target)(device *dev, UINT width, UINT height, D3DFORMAT format, surface **surface); - HRESULT (*draw_primitive)(device *dev, D3DPRIMITIVETYPE type, UINT start, UINT count); - HRESULT (*end_scene)(device *dev); - HRESULT (*get_raster_status)(device *dev, D3DRASTER_STATUS *status); - HRESULT (*get_render_target)(device *dev, DWORD index, surface **surface); - HRESULT (*get_render_target_data)(device *dev, surface *rendertarget, surface *destsurface); - HRESULT (*present)(device *dev, const RECT *source, const RECT *dest, HWND override, RGNDATA *dirty, DWORD flags); - ULONG (*release)(device *dev); - HRESULT (*reset)(device *dev, present_parameters *params); - void (*set_gamma_ramp)(device *dev, DWORD flags, const D3DGAMMARAMP *ramp); - HRESULT (*set_render_state)(device *dev, D3DRENDERSTATETYPE state, DWORD value); - HRESULT (*set_render_target)(device *dev, DWORD index, surface *surf); - HRESULT (*set_stream_source)(device *dev, UINT number, vertex_buffer *vbuf, UINT stride); - HRESULT (*set_texture)(device *dev, DWORD stage, texture *tex); - HRESULT (*set_texture_stage_state)(device *dev, DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD value); - HRESULT (*set_vertex_format)(device *dev, D3DFORMAT format); - HRESULT (*stretch_rect)(device *dev, surface *source, const RECT *srcrect, surface *dest, const RECT *dstrect, D3DTEXTUREFILTERTYPE filter); - HRESULT (*test_cooperative_level)(device *dev); -}; - - -//============================================================ -// Direct3DSurface interfaces -//============================================================ - -struct surface_interface -{ - HRESULT (*lock_rect)(surface *surf, D3DLOCKED_RECT *locked, const RECT *rect, DWORD flags); - ULONG (*release)(surface *tex); - HRESULT (*unlock_rect)(surface *surf); -}; - - -//============================================================ -// Direct3DTexture interfaces -//============================================================ - -struct texture_interface -{ - HRESULT (*get_surface_level)(texture *tex, UINT level, surface **surface); - HRESULT (*lock_rect)(texture *tex, UINT level, D3DLOCKED_RECT *locked, const RECT *rect, DWORD flags); - ULONG (*release)(texture *tex); - HRESULT (*unlock_rect)(texture *tex, UINT level); -}; - - -//============================================================ -// Direct3DVertexBuffer interfaces -//============================================================ - -struct vertex_buffer_interface -{ - HRESULT (*lock)(vertex_buffer *vbuf, UINT offset, UINT size, VOID **data, DWORD flags); - ULONG (*release)(vertex_buffer *vbuf); - HRESULT (*unlock)(vertex_buffer *vbuf); -}; - - -//============================================================ -// Core D3D object -//============================================================ - -struct d3d_base -{ - // internal objects - int version; - void * d3dobj; - HINSTANCE dllhandle; - bool post_fx_available; - HINSTANCE libhandle; - - // interface pointers - interface d3d; - d3d_device_interface device; - surface_interface surface; - texture_interface texture; - vertex_buffer_interface vertexbuf; -}; - - -//============================================================ -// PROTOTYPES -//============================================================ - -d3d_base *drawd3d9_init(void); - -#endif diff --git a/src/osd/modules/render/drawd3d.cpp b/src/osd/modules/render/drawd3d.cpp index 44dd1b10600..4fb1696a1eb 100644 --- a/src/osd/modules/render/drawd3d.cpp +++ b/src/osd/modules/render/drawd3d.cpp @@ -2,18 +2,10 @@ // copyright-holders:Aaron Giles //============================================================ // -// drawd3d.c - Win32 Direct3D implementation +// drawd3d.cpp - Win32 Direct3D implementation // //============================================================ -// Useful info: -// Windows XP/2003 shipped with DirectX 8.1 -// Windows 2000 shipped with DirectX 7a -// Windows 98SE shipped with DirectX 6.1a -// Windows 98 shipped with DirectX 5 -// Windows NT shipped with DirectX 3.0a -// Windows 95 shipped with DirectX 2 - // MAME headers #include "emu.h" #include "render.h" @@ -30,6 +22,13 @@ //============================================================ +// TYPE DEFINITIONS +//============================================================ + +typedef IDirect3D9* (WINAPI *d3d9_create_fn)(UINT); + + +//============================================================ // CONSTANTS //============================================================ @@ -122,10 +121,6 @@ static d3d_base * d3dintf; // FIX ME //============================================================ -// PROTOTYPES -//============================================================ - -//============================================================ // drawd3d_window_init //============================================================ @@ -133,7 +128,7 @@ int renderer_d3d9::create() { if (!initialize()) { - osd_printf_error("Unable to initialize Direct3D.\n"); + osd_printf_error("Unable to initialize Direct3D 9\n"); return 1; } @@ -183,21 +178,31 @@ render_primitive_list *renderer_d3d9::get_primitives() //============================================================ -// drawnone_create +// renderer_d3d9::init //============================================================ bool renderer_d3d9::init(running_machine &machine) { - // Use Direct3D9 - d3dintf = drawd3d9_init(); + d3dintf = global_alloc(d3d_base); + + d3dintf->d3d9_dll = osd::dynamic_module::open({ "d3d9.dll" }); - // if we failed, note the error - if (d3dintf == nullptr) + d3d9_create_fn d3d9_create_ptr = d3dintf->d3d9_dll->bind<d3d9_create_fn>("Direct3DCreate9"); + if (d3d9_create_ptr == nullptr) { - osd_printf_error("Unable to initialize Direct3D.\n"); + osd_printf_verbose("Direct3D: Unable to find Direct3D 9 runtime library\n"); + return true; + } + + d3dintf->d3dobj = (*d3d9_create_ptr)(D3D_SDK_VERSION); + if (d3dintf->d3dobj == nullptr) + { + osd_printf_verbose("Direct3D: Unable to initialize Direct3D 9\n"); return true; } + osd_printf_verbose("Direct3D: Using Direct3D 9\n"); + return false; } @@ -225,9 +230,10 @@ void renderer_d3d9::set_texture(texture_info *texture) { m_last_texture = texture; m_last_texture_flags = (texture == nullptr ? 0 : texture->get_flags()); - HRESULT result = (*d3dintf->device.set_texture)(m_device, 0, (texture == nullptr) ? get_default_texture()->get_finaltex() : texture->get_finaltex()); + HRESULT result = m_device->SetTexture(0, (texture == nullptr) ? get_default_texture()->get_finaltex() : texture->get_finaltex()); m_shaders->set_texture(texture); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture call\n", (int)result); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device set_texture call\n", result); } } @@ -236,14 +242,18 @@ void renderer_d3d9::set_filter(int filter) if (filter != m_last_filter) { m_last_filter = filter; - HRESULT result = (*d3dintf->device.set_texture_stage_state)(m_device, 0, (D3DTEXTURESTAGESTATETYPE)D3DTSS_MINFILTER, filter ? D3DTEXF_LINEAR : D3DTEXF_POINT); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture_stage_state call\n", (int)result); - result = (*d3dintf->device.set_texture_stage_state)(m_device, 0, (D3DTEXTURESTAGESTATETYPE)D3DTSS_MAGFILTER, filter ? D3DTEXF_LINEAR : D3DTEXF_POINT); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture_stage_state call\n", (int)result); - result = (*d3dintf->device.set_texture_stage_state)(m_device, 1, (D3DTEXTURESTAGESTATETYPE)D3DTSS_MINFILTER, filter ? D3DTEXF_LINEAR : D3DTEXF_POINT); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture_stage_state call\n", (int)result); - result = (*d3dintf->device.set_texture_stage_state)(m_device, 1, (D3DTEXTURESTAGESTATETYPE)D3DTSS_MAGFILTER, filter ? D3DTEXF_LINEAR : D3DTEXF_POINT); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture_stage_state call\n", (int)result); + HRESULT result = m_device->SetSamplerState(0, D3DSAMP_MINFILTER, filter ? D3DTEXF_LINEAR : D3DTEXF_POINT); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetSamplerState call\n", result); + result = m_device->SetSamplerState(0, D3DSAMP_MAGFILTER, filter ? D3DTEXF_LINEAR : D3DTEXF_POINT); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetSamplerState call\n", result); + result = m_device->SetSamplerState(1, D3DSAMP_MINFILTER, filter ? D3DTEXF_LINEAR : D3DTEXF_POINT); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetSamplerState call\n", result); + result = m_device->SetSamplerState(1, D3DSAMP_MAGFILTER, filter ? D3DTEXF_LINEAR : D3DTEXF_POINT); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetSamplerState call\n", result); } } @@ -252,14 +262,18 @@ void renderer_d3d9::set_wrap(unsigned int wrap) if (wrap != m_last_wrap) { m_last_wrap = wrap; - HRESULT result = (*d3dintf->device.set_texture_stage_state)(m_device, 0, (D3DTEXTURESTAGESTATETYPE)D3DTSS_ADDRESSU, wrap); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture_stage_state call\n", (int)result); - result = (*d3dintf->device.set_texture_stage_state)(m_device, 0, (D3DTEXTURESTAGESTATETYPE)D3DTSS_ADDRESSV, wrap); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture_stage_state call\n", (int)result); - result = (*d3dintf->device.set_texture_stage_state)(m_device, 1, (D3DTEXTURESTAGESTATETYPE)D3DTSS_ADDRESSU, wrap); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture_stage_state call\n", (int)result); - result = (*d3dintf->device.set_texture_stage_state)(m_device, 1, (D3DTEXTURESTAGESTATETYPE)D3DTSS_ADDRESSV, wrap); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture_stage_state call\n", (int)result); + HRESULT result = m_device->SetSamplerState(0, D3DSAMP_ADDRESSU, wrap); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetSamplerState call\n", result); + result = m_device->SetSamplerState(0, D3DSAMP_ADDRESSV, wrap); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetSamplerState call\n", result); + result = m_device->SetSamplerState(1, D3DSAMP_ADDRESSU, wrap); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetSamplerState call\n", result); + result = m_device->SetSamplerState(1, D3DSAMP_ADDRESSV, wrap); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetSamplerState call\n", result); } } @@ -268,10 +282,12 @@ void renderer_d3d9::set_modmode(int modmode) if (modmode != m_last_modmode) { m_last_modmode = modmode; - HRESULT result = (*d3dintf->device.set_texture_stage_state)(m_device, 0, D3DTSS_COLOROP, modmode); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture_stage_state call\n", (int)result); - result = (*d3dintf->device.set_texture_stage_state)(m_device, 1, D3DTSS_COLOROP, modmode); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture_stage_state call\n", (int)result); + HRESULT result = m_device->SetTextureStageState(0, D3DTSS_COLOROP, modmode); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetTextureStageState call\n", result); + result = m_device->SetTextureStageState(1, D3DTSS_COLOROP, modmode); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetTextureStageState call\n", result); } } @@ -296,29 +312,33 @@ void renderer_d3d9::set_blendmode(int blendmode) if (blendenable != m_last_blendenable) { m_last_blendenable = blendenable; - HRESULT result = (*d3dintf->device.set_render_state)(m_device, D3DRS_ALPHABLENDENABLE, blendenable); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_state call\n", (int)result); + HRESULT result = m_device->SetRenderState(D3DRS_ALPHABLENDENABLE, blendenable); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderState call\n", result); } if (blendop != m_last_blendop) { m_last_blendop = blendop; - HRESULT result = (*d3dintf->device.set_render_state)(m_device, D3DRS_BLENDOP, blendop); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_state call\n", (int)result); + HRESULT result = m_device->SetRenderState(D3DRS_BLENDOP, blendop); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderState call\n", result); } if (blendsrc != m_last_blendsrc) { m_last_blendsrc = blendsrc; - HRESULT result = (*d3dintf->device.set_render_state)(m_device, D3DRS_SRCBLEND, blendsrc); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_state call\n", (int)result); + HRESULT result = m_device->SetRenderState(D3DRS_SRCBLEND, blendsrc); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderState call\n", result); } if (blenddst != m_last_blenddst) { m_last_blenddst = blenddst; - HRESULT result = (*d3dintf->device.set_render_state)(m_device, D3DRS_DESTBLEND, blenddst); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_state call\n", (int)result); + HRESULT result = m_device->SetRenderState(D3DRS_DESTBLEND, blenddst); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderState call\n", result); } } @@ -341,37 +361,35 @@ d3d_texture_manager::d3d_texture_manager(renderer_d3d9 *d3d) m_texlist = nullptr; m_default_texture = nullptr; + D3DCAPS9 caps; + HRESULT result = d3dintf->d3dobj->GetDeviceCaps(d3d->get_adapter(), D3DDEVTYPE_HAL, &caps); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during GetDeviceCaps call\n", result); + // check for dynamic texture support - DWORD tempcaps; - HRESULT result = (*d3dintf->d3d.get_caps_dword)(d3dintf, d3d->get_adapter(), D3DDEVTYPE_HAL, CAPS_CAPS2, &tempcaps); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during get_caps_dword call\n", (int)result); - m_dynamic_supported = ((tempcaps & D3DCAPS2_DYNAMICTEXTURES) != 0); - if (m_dynamic_supported) osd_printf_verbose("Direct3D: Using dynamic textures\n"); + m_dynamic_supported = ((caps.Caps2 & D3DCAPS2_DYNAMICTEXTURES) != 0); + if (m_dynamic_supported) + osd_printf_verbose("Direct3D: Using dynamic textures\n"); // check for stretchrect support - result = (*d3dintf->d3d.get_caps_dword)(d3dintf, d3d->get_adapter(), D3DDEVTYPE_HAL, CAPS_STRETCH_RECT_FILTER, &tempcaps); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during get_caps_dword call\n", (int)result); - m_stretch_supported = ((tempcaps & D3DPTFILTERCAPS_MAGFPOINT) != 0); - if (m_stretch_supported && video_config.prescale > 1) osd_printf_verbose("Direct3D: Using StretchRect for prescaling\n"); + m_stretch_supported = ((caps.StretchRectFilterCaps & D3DPTFILTERCAPS_MAGFPOINT) != 0); + if (m_stretch_supported && video_config.prescale > 1) + osd_printf_verbose("Direct3D: Using StretchRect for prescaling\n"); // get texture caps - result = (*d3dintf->d3d.get_caps_dword)(d3dintf, d3d->get_adapter(), D3DDEVTYPE_HAL, CAPS_TEXTURE_CAPS, &m_texture_caps); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during get_caps_dword call\n", (int)result); - result = (*d3dintf->d3d.get_caps_dword)(d3dintf, d3d->get_adapter(), D3DDEVTYPE_HAL, CAPS_MAX_TEXTURE_ASPECT, &m_texture_max_aspect); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during get_caps_dword call\n", (int)result); - result = (*d3dintf->d3d.get_caps_dword)(d3dintf, d3d->get_adapter(), D3DDEVTYPE_HAL, CAPS_MAX_TEXTURE_WIDTH, &m_texture_max_width); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during get_caps_dword call\n", (int)result); - result = (*d3dintf->d3d.get_caps_dword)(d3dintf, d3d->get_adapter(), D3DDEVTYPE_HAL, CAPS_MAX_TEXTURE_HEIGHT, &m_texture_max_height); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during get_caps_dword call\n", (int)result); + m_texture_caps = caps.TextureCaps; + m_texture_max_aspect = caps.MaxTextureAspectRatio; + m_texture_max_width = caps.MaxTextureWidth; + m_texture_max_height = caps.MaxTextureHeight; // pick a YUV texture format m_yuv_format = D3DFMT_UYVY; - result = (*d3dintf->d3d.check_device_format)(d3dintf, d3d->get_adapter(), D3DDEVTYPE_HAL, d3d->get_pixel_format(), 0, D3DRTYPE_TEXTURE, D3DFMT_UYVY); - if (result != D3D_OK) + result = d3dintf->d3dobj->CheckDeviceFormat(d3d->get_adapter(), D3DDEVTYPE_HAL, d3d->get_pixel_format(), 0, D3DRTYPE_TEXTURE, D3DFMT_UYVY); + if (FAILED(result)) { m_yuv_format = D3DFMT_YUY2; - result = (*d3dintf->d3d.check_device_format)(d3dintf, d3d->get_adapter(), D3DDEVTYPE_HAL, d3d->get_pixel_format(), 0, D3DRTYPE_TEXTURE, D3DFMT_YUY2); - if (result != D3D_OK) + result = d3dintf->d3dobj->CheckDeviceFormat(d3d->get_adapter(), D3DDEVTYPE_HAL, d3d->get_pixel_format(), 0, D3DRTYPE_TEXTURE, D3DFMT_YUY2); + if (FAILED(result)) m_yuv_format = D3DFMT_A8R8G8B8; } osd_printf_verbose("Direct3D: YUV format = %s\n", (m_yuv_format == D3DFMT_YUY2) ? "YUY2" : (m_yuv_format == D3DFMT_UYVY) ? "UYVY" : "RGB"); @@ -383,10 +401,6 @@ d3d_texture_manager::d3d_texture_manager(renderer_d3d9 *d3d) osd_printf_verbose("Direct3D: Max texture size = %dx%d\n", (int)m_texture_max_width, (int)m_texture_max_height); } -d3d_texture_manager::~d3d_texture_manager() -{ -} - void d3d_texture_manager::create_resources() { auto win = m_renderer->assert_window(); @@ -631,8 +645,9 @@ void renderer_d3d9::begin_frame() { auto win = assert_window(); - HRESULT result = (*d3dintf->device.clear)(m_device, 0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 0, 0); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device clear call\n", (int)result); + HRESULT result = m_device->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 0, 0); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device clear call\n", result); m_shaders->begin_frame(); @@ -642,8 +657,9 @@ void renderer_d3d9::begin_frame() m_texture_manager->update_textures(); // begin the scene - result = (*d3dintf->device.begin_scene)(m_device); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device begin_scene call\n", (int)result); + result = m_device->BeginScene(); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device BeginScene call\n", result); m_lockedbuf = nullptr; @@ -710,12 +726,14 @@ void renderer_d3d9::end_frame() m_shaders->end_frame(); // finish the scene - HRESULT result = (*d3dintf->device.end_scene)(m_device); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device end_scene call\n", (int)result); + HRESULT result = m_device->EndScene(); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device end_scene call\n", result); // present the current buffers - result = (*d3dintf->device.present)(m_device, nullptr, nullptr, nullptr, nullptr, 0); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device present call\n", (int)result); + result = m_device->Present(nullptr, nullptr, nullptr, nullptr); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device present call\n", result); } //============================================================ @@ -743,8 +761,8 @@ int renderer_d3d9::device_create(HWND device_hwnd) } // verify texture formats - HRESULT result = (*d3dintf->d3d.check_device_format)(d3dintf, m_adapter, D3DDEVTYPE_HAL, m_pixformat, 0, D3DRTYPE_TEXTURE, D3DFMT_A8R8G8B8); - if (result != D3D_OK) + HRESULT result = d3dintf->d3dobj->CheckDeviceFormat(m_adapter, D3DDEVTYPE_HAL, m_pixformat, 0, D3DRTYPE_TEXTURE, D3DFMT_A8R8G8B8); + if (FAILED(result)) { osd_printf_error("Error: A8R8G8B8 format textures not supported\n"); return 1; @@ -755,18 +773,18 @@ int renderer_d3d9::device_create(HWND device_hwnd) try_again: // try for XRGB first m_screen_format = D3DFMT_X8R8G8B8; - result = (*d3dintf->d3d.check_device_format)(d3dintf, m_adapter, D3DDEVTYPE_HAL, m_pixformat, m_texture_manager->is_dynamic_supported() ? D3DUSAGE_DYNAMIC : 0, D3DRTYPE_TEXTURE, m_screen_format); - if (result != D3D_OK) + result = d3dintf->d3dobj->CheckDeviceFormat(m_adapter, D3DDEVTYPE_HAL, m_pixformat, m_texture_manager->is_dynamic_supported() ? D3DUSAGE_DYNAMIC : 0, D3DRTYPE_TEXTURE, m_screen_format); + if (FAILED(result)) { // if not, try for ARGB m_screen_format = D3DFMT_A8R8G8B8; - result = (*d3dintf->d3d.check_device_format)(d3dintf, m_adapter, D3DDEVTYPE_HAL, m_pixformat, m_texture_manager->is_dynamic_supported() ? D3DUSAGE_DYNAMIC : 0, D3DRTYPE_TEXTURE, m_screen_format); - if (result != D3D_OK && m_texture_manager->is_dynamic_supported()) + result = d3dintf->d3dobj->CheckDeviceFormat(m_adapter, D3DDEVTYPE_HAL, m_pixformat, m_texture_manager->is_dynamic_supported() ? D3DUSAGE_DYNAMIC : 0, D3DRTYPE_TEXTURE, m_screen_format); + if (FAILED(result) && m_texture_manager->is_dynamic_supported()) { m_texture_manager->set_dynamic_supported(FALSE); goto try_again; } - if (result != D3D_OK) + if (FAILED(result)) { osd_printf_error("Error: unable to configure a screen texture format\n"); return 1; @@ -794,9 +812,9 @@ try_again: D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; // create the D3D device - result = (*d3dintf->d3d.create_device)(d3dintf, m_adapter, D3DDEVTYPE_HAL, device_hwnd, + result = d3dintf->d3dobj->CreateDevice(m_adapter, D3DDEVTYPE_HAL, device_hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE, &m_presentation, &m_device); - if (result != D3D_OK) + if (FAILED(result)) { // if we got a "DEVICELOST" error, it may be transitory; count it and only fail if // we exceed a threshold @@ -839,7 +857,7 @@ try_again: { ramp.red[i] = ramp.green[i] = ramp.blue[i] = apply_brightness_contrast_gamma(i, brightness, contrast, gamma) << 8; } - (*d3dintf->device.set_gamma_ramp)(m_device, 0, &ramp); + m_device->SetGammaRamp(0, 0, &ramp); } } } @@ -874,57 +892,56 @@ try_again: int renderer_d3d9::device_create_resources() { // allocate a vertex buffer to use - HRESULT result = (*d3dintf->device.create_vertex_buffer)(m_device, - sizeof(vertex) * VERTEX_BUFFER_SIZE, + HRESULT result = m_device->CreateVertexBuffer(sizeof(vertex) * VERTEX_BUFFER_SIZE, D3DUSAGE_DYNAMIC | D3DUSAGE_SOFTWAREPROCESSING | D3DUSAGE_WRITEONLY, VERTEX_BASE_FORMAT | ((m_shaders->enabled() && d3dintf->post_fx_available) ? D3DFVF_XYZW : D3DFVF_XYZRHW), - D3DPOOL_DEFAULT, &m_vertexbuf); - if (result != D3D_OK) + D3DPOOL_DEFAULT, &m_vertexbuf, nullptr); + if (FAILED(result)) { osd_printf_error("Error creating vertex buffer (%08X)\n", (UINT32)result); return 1; } // set the vertex format - result = (*d3dintf->device.set_vertex_format)(m_device, (D3DFORMAT)(VERTEX_BASE_FORMAT | ((m_shaders->enabled() && + result = m_device->SetFVF((D3DFORMAT)(VERTEX_BASE_FORMAT | ((m_shaders->enabled() && d3dintf->post_fx_available) ? D3DFVF_XYZW : D3DFVF_XYZRHW))); - if (result != D3D_OK) + if (FAILED(result)) { osd_printf_error("Error setting vertex format (%08X)\n", (UINT32)result); return 1; } // set the fixed render state - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_ZENABLE, D3DZB_FALSE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_FILLMODE, D3DFILL_SOLID); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_SHADEMODE, D3DSHADE_FLAT); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_ZWRITEENABLE, FALSE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_ALPHATESTENABLE, TRUE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_LASTPIXEL, TRUE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_CULLMODE, D3DCULL_NONE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_ZFUNC, D3DCMP_LESS); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_ALPHAREF, 0); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_ALPHAFUNC, D3DCMP_GREATER); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_DITHERENABLE, FALSE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_FOGENABLE, FALSE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_SPECULARENABLE, FALSE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_STENCILENABLE, FALSE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_WRAP0, FALSE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_CLIPPING, TRUE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_LIGHTING, FALSE); - result = (*d3dintf->device.set_render_state)(m_device, D3DRS_COLORVERTEX, TRUE); - - result = (*d3dintf->device.set_texture_stage_state)(m_device, 0, D3DTSS_COLOROP, D3DTOP_MODULATE); - result = (*d3dintf->device.set_texture_stage_state)(m_device, 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); - result = (*d3dintf->device.set_texture_stage_state)(m_device, 1, D3DTSS_COLOROP, D3DTOP_MODULATE); - result = (*d3dintf->device.set_texture_stage_state)(m_device, 1, D3DTSS_ALPHAOP, D3DTOP_MODULATE); + result = m_device->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); + result = m_device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); + result = m_device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT); + result = m_device->SetRenderState(D3DRS_ZWRITEENABLE, FALSE); + result = m_device->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); + result = m_device->SetRenderState(D3DRS_LASTPIXEL, TRUE); + result = m_device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); + result = m_device->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS); + result = m_device->SetRenderState(D3DRS_ALPHAREF, 0); + result = m_device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER); + result = m_device->SetRenderState(D3DRS_DITHERENABLE, FALSE); + result = m_device->SetRenderState(D3DRS_FOGENABLE, FALSE); + result = m_device->SetRenderState(D3DRS_SPECULARENABLE, FALSE); + result = m_device->SetRenderState(D3DRS_STENCILENABLE, FALSE); + result = m_device->SetRenderState(D3DRS_WRAP0, FALSE); + result = m_device->SetRenderState(D3DRS_CLIPPING, TRUE); + result = m_device->SetRenderState(D3DRS_LIGHTING, FALSE); + result = m_device->SetRenderState(D3DRS_COLORVERTEX, TRUE); + + result = m_device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); + result = m_device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); + result = m_device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE); + result = m_device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_MODULATE); // reset the local states to force updates reset_render_states(); // clear the buffer - result = (*d3dintf->device.clear)(m_device, 0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 0, 0); - result = (*d3dintf->device.present)(m_device, nullptr, nullptr, nullptr, nullptr, 0); + result = m_device->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 0, 0); + result = m_device->Present(nullptr, nullptr, nullptr, nullptr); m_texture_manager->create_resources(); @@ -953,7 +970,10 @@ renderer_d3d9::~renderer_d3d9() void renderer_d3d9::exit() { if (d3dintf != nullptr) - (*d3dintf->d3d.release)(d3dintf); + { + d3dintf->d3dobj->Release(); + global_free(d3dintf); + } } void renderer_d3d9::device_delete() @@ -980,7 +1000,7 @@ void renderer_d3d9::device_delete() // free the device itself if (m_device != nullptr) { - (*d3dintf->device.release)(m_device); + m_device->Release(); m_device = nullptr; } } @@ -1000,7 +1020,7 @@ void renderer_d3d9::device_delete_resources() // free the vertex buffer if (m_vertexbuf != nullptr) { - (*d3dintf->vertexbuf.release)(m_vertexbuf); + m_vertexbuf->Release(); m_vertexbuf = nullptr; } } @@ -1014,59 +1034,53 @@ int renderer_d3d9::device_verify_caps() { int retval = 0; - DWORD tempcaps; - HRESULT result = (*d3dintf->d3d.get_caps_dword)(d3dintf, m_adapter, D3DDEVTYPE_HAL, CAPS_MAX_PS30_INSN_SLOTS, &tempcaps); - if (result != D3D_OK) osd_printf_verbose("Direct3D Error %08X during get_caps_dword call\n", (int)result); - if (tempcaps < 512) + D3DCAPS9 caps; + HRESULT result = d3dintf->d3dobj->GetDeviceCaps(m_adapter, D3DDEVTYPE_HAL, &caps); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during GetDeviceCaps call\n", result); + + if (caps.MaxPixelShader30InstructionSlots < 512) { osd_printf_verbose("Direct3D: Warning - Device does not support Pixel Shader 3.0, falling back to non-PS rendering\n"); d3dintf->post_fx_available = false; } // verify presentation capabilities - result = (*d3dintf->d3d.get_caps_dword)(d3dintf, m_adapter, D3DDEVTYPE_HAL, CAPS_PRESENTATION_INTERVALS, &tempcaps); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during get_caps_dword call\n", (int)result); - if (!(tempcaps & D3DPRESENT_INTERVAL_IMMEDIATE)) + if (!(caps.PresentationIntervals & D3DPRESENT_INTERVAL_IMMEDIATE)) { osd_printf_verbose("Direct3D: Error - Device does not support immediate presentations\n"); retval = 2; } - if (!(tempcaps & D3DPRESENT_INTERVAL_ONE)) + if (!(caps.PresentationIntervals & D3DPRESENT_INTERVAL_ONE)) { osd_printf_verbose("Direct3D: Error - Device does not support per-refresh presentations\n"); retval = 2; } // verify device capabilities - result = (*d3dintf->d3d.get_caps_dword)(d3dintf, m_adapter, D3DDEVTYPE_HAL, CAPS_DEV_CAPS, &tempcaps); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during get_caps_dword call\n", (int)result); - if (!(tempcaps & D3DDEVCAPS_CANRENDERAFTERFLIP)) + if (!(caps.DevCaps & D3DDEVCAPS_CANRENDERAFTERFLIP)) { osd_printf_verbose("Direct3D: Warning - Device does not support queued rendering after a page flip\n"); retval = 1; } - if (!(tempcaps & D3DDEVCAPS_HWRASTERIZATION)) + if (!(caps.DevCaps & D3DDEVCAPS_HWRASTERIZATION)) { osd_printf_verbose("Direct3D: Warning - Device does not support hardware rasterization\n"); retval = 1; } // verify texture operation capabilities - result = (*d3dintf->d3d.get_caps_dword)(d3dintf, m_adapter, D3DDEVTYPE_HAL, CAPS_TEXTURE_OP_CAPS, &tempcaps); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during get_caps_dword call\n", (int)result); - if (!(tempcaps & D3DTEXOPCAPS_MODULATE)) + if (!(caps.TextureOpCaps & D3DTEXOPCAPS_MODULATE)) { osd_printf_verbose("Direct3D: Warning - Device does not support texture modulation\n"); retval = 1; } // set a simpler flag to indicate mod2x and mod4x texture modes - m_mod2x_supported = ((tempcaps & D3DTEXOPCAPS_MODULATE2X) != 0); - m_mod4x_supported = ((tempcaps & D3DTEXOPCAPS_MODULATE4X) != 0); + m_mod2x_supported = ((caps.TextureOpCaps & D3DTEXOPCAPS_MODULATE2X) != 0); + m_mod4x_supported = ((caps.TextureOpCaps & D3DTEXOPCAPS_MODULATE4X) != 0); - result = (*d3dintf->d3d.get_caps_dword)(d3dintf, m_adapter, D3DDEVTYPE_HAL, CAPS_CAPS2, &tempcaps); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during get_caps_dword call\n", (int)result); - m_gamma_supported = ((tempcaps & D3DCAPS2_FULLSCREENGAMMA) != 0); + m_gamma_supported = ((caps.Caps2 & D3DCAPS2_FULLSCREENGAMMA) != 0); return retval; } @@ -1079,7 +1093,7 @@ int renderer_d3d9::device_verify_caps() int renderer_d3d9::device_test_cooperative() { // check our current status; if we lost the device, punt to GDI - HRESULT result = (*d3dintf->device.test_cooperative_level)(m_device); + HRESULT result = m_device->TestCooperativeLevel(); if (result == D3DERR_DEVICELOST) return 1; @@ -1092,12 +1106,12 @@ int renderer_d3d9::device_test_cooperative() m_sliders.clear(); m_shaders->delete_resources(true); device_delete_resources(); - result = (*d3dintf->device.reset)(m_device, &m_presentation); + result = m_device->Reset(&m_presentation); // if it didn't work, punt to GDI - if (result != D3D_OK) + if (FAILED(result)) { - osd_printf_error("Unable to reset, result %08x\n", (UINT32)result); + osd_printf_error("Unable to reset, result %08lX\n", result); return 1; } @@ -1127,23 +1141,23 @@ int renderer_d3d9::device_test_cooperative() int renderer_d3d9::config_adapter_mode() { - adapter_identifier identifier; - // choose the monitor number m_adapter = get_adapter_for_monitor(); // get the identifier - HRESULT result = (*d3dintf->d3d.get_adapter_identifier)(d3dintf, m_adapter, 0, &identifier); - if (result != D3D_OK) + D3DADAPTER_IDENTIFIER9 id; + HRESULT result = d3dintf->d3dobj->GetAdapterIdentifier(m_adapter, 0, &id); + if (FAILED(result)) { osd_printf_error("Error getting identifier for adapter #%d\n", m_adapter); return 1; } - osd_printf_verbose("Direct3D: Configuring adapter #%d = %s\n", m_adapter, identifier.Description); + + osd_printf_verbose("Direct3D: Configuring adapter #%d = %s\n", m_adapter, id.Description); // get the current display mode - result = (*d3dintf->d3d.get_adapter_display_mode)(d3dintf, m_adapter, &m_origmode); - if (result != D3D_OK) + result = d3dintf->d3dobj->GetAdapterDisplayMode(m_adapter, &m_origmode); + if (FAILED(result)) { osd_printf_error("Error getting mode for adapter #%d\n", m_adapter); return 1; @@ -1188,8 +1202,8 @@ int renderer_d3d9::config_adapter_mode() } // see if we can handle the device type - result = (*d3dintf->d3d.check_device_type)(d3dintf, m_adapter, D3DDEVTYPE_HAL, m_pixformat, m_pixformat, !win->fullscreen()); - if (result != D3D_OK) + result = d3dintf->d3dobj->CheckDeviceType(m_adapter, D3DDEVTYPE_HAL, m_pixformat, m_pixformat, !win->fullscreen()); + if (FAILED(result)) { osd_printf_error("Proposed video mode not supported on device %s\n", win->monitor()->devicename()); return 1; @@ -1204,7 +1218,7 @@ int renderer_d3d9::config_adapter_mode() int renderer_d3d9::get_adapter_for_monitor() { - int maxadapter = (*d3dintf->d3d.get_adapter_count)(d3dintf); + int maxadapter = d3dintf->d3dobj->GetAdapterCount(); auto win = assert_window(); @@ -1212,7 +1226,7 @@ int renderer_d3d9::get_adapter_for_monitor() for (int adapternum = 0; adapternum < maxadapter; adapternum++) { // get the monitor for this adapter - HMONITOR curmonitor = (*d3dintf->d3d.get_adapter_monitor)(d3dintf, adapternum); + HMONITOR curmonitor = d3dintf->d3dobj->GetAdapterMonitor(adapternum); // if we match the proposed monitor, this is it if (curmonitor == *((HMONITOR *)win->monitor()->oshandle())) @@ -1256,7 +1270,7 @@ void renderer_d3d9::pick_best_mode() INT32 target_height = minheight; // determine the maximum number of modes - int maxmodes = (*d3dintf->d3d.get_adapter_mode_count)(d3dintf, m_adapter, D3DFMT_X8R8G8B8); + int maxmodes = d3dintf->d3dobj->GetAdapterModeCount(m_adapter, D3DFMT_X8R8G8B8); // enumerate all the video modes and find the best match osd_printf_verbose("Direct3D: Selecting video mode...\n"); @@ -1264,8 +1278,8 @@ void renderer_d3d9::pick_best_mode() { // check this mode D3DDISPLAYMODE mode; - HRESULT result = (*d3dintf->d3d.enum_adapter_modes)(d3dintf, m_adapter, D3DFMT_X8R8G8B8, modenum, &mode); - if (result != D3D_OK) + HRESULT result = d3dintf->d3dobj->EnumAdapterModes(m_adapter, D3DFMT_X8R8G8B8, modenum, &mode); + if (FAILED(result)) break; // skip non-32 bit modes @@ -1753,8 +1767,8 @@ vertex *renderer_d3d9::mesh_alloc(int numverts) // if we don't have a lock, grab it now if (m_lockedbuf == nullptr) { - result = (*d3dintf->vertexbuf.lock)(m_vertexbuf, 0, 0, (VOID **)&m_lockedbuf, D3DLOCK_DISCARD); - if (result != D3D_OK) + result = m_vertexbuf->Lock(0, 0, (VOID **)&m_lockedbuf, D3DLOCK_DISCARD); + if (FAILED(result)) return nullptr; } @@ -1777,18 +1791,19 @@ void renderer_d3d9::primitive_flush_pending() { // ignore if we're not locked if (m_lockedbuf == nullptr) - { return; - } // unlock the buffer - HRESULT result = (*d3dintf->vertexbuf.unlock)(m_vertexbuf); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during vertex buffer unlock call\n", (int)result); + HRESULT result = m_vertexbuf->Unlock(); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during vertex buffer unlock call\n", result); + m_lockedbuf = nullptr; // set the stream - result = (*d3dintf->device.set_stream_source)(m_device, 0, m_vertexbuf, sizeof(vertex)); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_stream_source call\n", (int)result); + result = m_device->SetStreamSource(0, m_vertexbuf, 0, sizeof(vertex)); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetStreamSource call\n", result); m_shaders->begin_draw(); @@ -1839,9 +1854,9 @@ void renderer_d3d9::primitive_flush_pending() else { // add the primitives - result = (*d3dintf->device.draw_primitive)(m_device, m_poly[polynum].get_type(), vertnum, - m_poly[polynum].get_count()); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device draw_primitive call\n", (int)result); + result = m_device->DrawPrimitive(m_poly[polynum].get_type(), vertnum, m_poly[polynum].get_count()); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device draw_primitive call\n", result); } vertnum += m_poly[polynum].get_vertcount(); @@ -1864,22 +1879,16 @@ texture_info::~texture_info() if (m_d3dfinaltex != nullptr) { if (m_d3dtex == m_d3dfinaltex) - { m_d3dtex = nullptr; - } - (*d3dintf->texture.release)(m_d3dfinaltex); - m_d3dfinaltex = nullptr; + + m_d3dfinaltex->Release(); } + if (m_d3dtex != nullptr) - { - (*d3dintf->texture.release)(m_d3dtex); - m_d3dtex = nullptr; - } + m_d3dtex->Release(); + if (m_d3dsurface != nullptr) - { - (*d3dintf->surface.release)(m_d3dsurface); - m_d3dsurface = nullptr; - } + m_d3dsurface->Release(); } @@ -1935,8 +1944,8 @@ texture_info::texture_info(d3d_texture_manager *manager, const render_texinfo* t if (!PRIMFLAG_GET_SCREENTEX(flags)) { assert(PRIMFLAG_TEXFORMAT(flags) != TEXFORMAT_YUY16); - result = (*d3dintf->device.create_texture)(m_renderer->get_device(), m_rawdims.c.x, m_rawdims.c.y, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_d3dtex); - if (result != D3D_OK) + result = m_renderer->get_device()->CreateTexture(m_rawdims.c.x, m_rawdims.c.y, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_d3dtex, nullptr); + if (FAILED(result)) goto error; m_d3dfinaltex = m_d3dtex; } @@ -2001,7 +2010,7 @@ texture_info::texture_info(d3d_texture_manager *manager, const render_texinfo* t // screen textures with no prescaling are pretty easy if (m_xprescale == 1 && m_yprescale == 1) { - result = (*d3dintf->device.create_texture)(m_renderer->get_device(), m_rawdims.c.x, m_rawdims.c.y, 1, usage, format, pool, &m_d3dtex); + result = m_renderer->get_device()->CreateTexture(m_rawdims.c.x, m_rawdims.c.y, 1, usage, format, pool, &m_d3dtex, nullptr); if (result == D3D_OK) { m_d3dfinaltex = m_d3dtex; @@ -2015,8 +2024,8 @@ texture_info::texture_info(d3d_texture_manager *manager, const render_texinfo* t // (won't work for YUY textures) if (m_texture_manager->is_stretch_supported() && PRIMFLAG_GET_TEXFORMAT(flags) != TEXFORMAT_YUY16) { - result = (*d3dintf->device.create_offscreen_plain_surface)(m_renderer->get_device(), m_rawdims.c.x, m_rawdims.c.y, format, D3DPOOL_DEFAULT, &m_d3dsurface); - if (result != D3D_OK) + result = m_renderer->get_device()->CreateOffscreenPlainSurface(m_rawdims.c.x, m_rawdims.c.y, format, D3DPOOL_DEFAULT, &m_d3dsurface, nullptr); + if (FAILED(result)) { continue; } @@ -2024,8 +2033,8 @@ texture_info::texture_info(d3d_texture_manager *manager, const render_texinfo* t // otherwise, we allocate a dynamic texture for the source else { - result = (*d3dintf->device.create_texture)(m_renderer->get_device(), m_rawdims.c.x, m_rawdims.c.y, 1, usage, format, pool, &m_d3dtex); - if (result != D3D_OK) + result = m_renderer->get_device()->CreateTexture(m_rawdims.c.x, m_rawdims.c.y, 1, usage, format, pool, &m_d3dtex, nullptr); + if (FAILED(result)) { continue; } @@ -2038,13 +2047,13 @@ texture_info::texture_info(d3d_texture_manager *manager, const render_texinfo* t // target surfaces typically cannot be YCbCr, so we always pick RGB in that case D3DFORMAT finalfmt = (format != m_texture_manager->get_yuv_format()) ? format : D3DFMT_A8R8G8B8; - result = (*d3dintf->device.create_texture)(m_renderer->get_device(), scwidth, scheight, 1, D3DUSAGE_RENDERTARGET, finalfmt, D3DPOOL_DEFAULT, &m_d3dfinaltex); + result = m_renderer->get_device()->CreateTexture(scwidth, scheight, 1, D3DUSAGE_RENDERTARGET, finalfmt, D3DPOOL_DEFAULT, &m_d3dfinaltex, nullptr); if (result == D3D_OK) { break; } - (*d3dintf->texture.release)(m_d3dtex); + m_d3dtex->Release(); m_d3dtex = nullptr; } } @@ -2065,9 +2074,9 @@ error: d3dintf->post_fx_available = false; osd_printf_error("Direct3D: Critical warning: A texture failed to allocate. Expect things to get bad quickly.\n"); if (m_d3dsurface != nullptr) - (*d3dintf->surface.release)(m_d3dsurface); + m_d3dsurface->Release(); if (m_d3dtex != nullptr) - (*d3dintf->texture.release)(m_d3dtex); + m_d3dtex->Release(); } @@ -2536,11 +2545,11 @@ void texture_info::set_data(const render_texinfo *texsource, UINT32 flags) switch (m_type) { default: - case TEXTURE_TYPE_PLAIN: result = (*d3dintf->texture.lock_rect)(m_d3dtex, 0, &rect, nullptr, 0); break; - case TEXTURE_TYPE_DYNAMIC: result = (*d3dintf->texture.lock_rect)(m_d3dtex, 0, &rect, nullptr, D3DLOCK_DISCARD); break; - case TEXTURE_TYPE_SURFACE: result = (*d3dintf->surface.lock_rect)(m_d3dsurface, &rect, nullptr, D3DLOCK_DISCARD); break; + case TEXTURE_TYPE_PLAIN: result = m_d3dtex->LockRect(0, &rect, nullptr, 0); break; + case TEXTURE_TYPE_DYNAMIC: result = m_d3dtex->LockRect(0, &rect, nullptr, D3DLOCK_DISCARD); break; + case TEXTURE_TYPE_SURFACE: result = m_d3dsurface->LockRect(&rect, nullptr, D3DLOCK_DISCARD); break; } - if (result != D3D_OK) + if (FAILED(result)) { return; } @@ -2591,14 +2600,12 @@ void texture_info::set_data(const render_texinfo *texsource, UINT32 flags) switch (m_type) { default: - case TEXTURE_TYPE_PLAIN: result = (*d3dintf->texture.unlock_rect)(m_d3dtex, 0); break; - case TEXTURE_TYPE_DYNAMIC: result = (*d3dintf->texture.unlock_rect)(m_d3dtex, 0); break; - case TEXTURE_TYPE_SURFACE: result = (*d3dintf->surface.unlock_rect)(m_d3dsurface); break; - } - if (result != D3D_OK) - { - osd_printf_verbose("Direct3D: Error %08X during texture unlock_rect call\n", (int)result); + case TEXTURE_TYPE_PLAIN: result = m_d3dtex->UnlockRect(0); break; + case TEXTURE_TYPE_DYNAMIC: result = m_d3dtex->UnlockRect(0); break; + case TEXTURE_TYPE_SURFACE: result = m_d3dsurface->UnlockRect(); break; } + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during texture UnlockRect call\n", result); // prescale prescale(); @@ -2611,7 +2618,7 @@ void texture_info::set_data(const render_texinfo *texsource, UINT32 flags) void texture_info::prescale() { - surface *scale_surface; + IDirect3DSurface9 *scale_surface; HRESULT result; int i; @@ -2620,8 +2627,9 @@ void texture_info::prescale() return; // for all cases, we need to get the surface of the render target - result = (*d3dintf->texture.get_surface_level)(m_d3dfinaltex, 0, &scale_surface); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during texture get_surface_level call\n", (int)result); + result = m_d3dfinaltex->GetSurfaceLevel(0, &scale_surface); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during texture GetSurfaceLevel call\n", result); // if we have an offscreen plain surface, we can just StretchRect to it if (m_type == TEXTURE_TYPE_SURFACE) @@ -2641,37 +2649,43 @@ void texture_info::prescale() dest.bottom *= m_yprescale; // do the stretchrect - result = (*d3dintf->device.stretch_rect)(m_renderer->get_device(), m_d3dsurface, &source, scale_surface, &dest, D3DTEXF_POINT); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device stretct_rect call\n", (int)result); + result = m_renderer->get_device()->StretchRect(m_d3dsurface, &source, scale_surface, &dest, D3DTEXF_POINT); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device stretct_rect call\n", result); } // if we are using a texture render target, we need to do more preparations else { - surface *backbuffer; + IDirect3DSurface9 *backbuffer; assert(m_d3dtex != nullptr); // first remember the original render target and set the new one - result = (*d3dintf->device.get_render_target)(m_renderer->get_device(), 0, &backbuffer); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device get_render_target call\n", (int)result); - result = (*d3dintf->device.set_render_target)(m_renderer->get_device(), 0, scale_surface); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_target call 1\n", (int)result); + result = m_renderer->get_device()->GetRenderTarget(0, &backbuffer); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device GetRenderTarget call\n", result); + result = m_renderer->get_device()->SetRenderTarget(0, scale_surface); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderTarget call 1\n", result); m_renderer->reset_render_states(); // start the scene - result = (*d3dintf->device.begin_scene)(m_renderer->get_device()); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device begin_scene call\n", (int)result); + result = m_renderer->get_device()->BeginScene(); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device BeginScene call\n", result); // configure the rendering pipeline m_renderer->set_filter(FALSE); m_renderer->set_blendmode(BLENDMODE_NONE); - result = (*d3dintf->device.set_texture)(m_renderer->get_device(), 0, m_d3dtex); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_texture call\n", (int)result); + result = m_renderer->get_device()->SetTexture(0, m_d3dtex); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetTexture call\n", result); // lock the vertex buffer - result = (*d3dintf->vertexbuf.lock)(m_renderer->get_vertex_buffer(), 0, 0, m_renderer->get_locked_buffer_ptr(), D3DLOCK_DISCARD); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during vertex buffer lock call\n", (int)result); + result = m_renderer->get_vertex_buffer()->Lock(0, 0, m_renderer->get_locked_buffer_ptr(), D3DLOCK_DISCARD); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during vertex buffer lock call\n", result); // configure the X/Y coordinates on the target surface vertex *lockedbuf = m_renderer->get_locked_buffer(); @@ -2703,29 +2717,34 @@ void texture_info::prescale() } // unlock the vertex buffer - result = (*d3dintf->vertexbuf.unlock)(m_renderer->get_vertex_buffer()); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during vertex buffer unlock call\n", (int)result); + result = m_renderer->get_vertex_buffer()->Unlock(); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during vertex buffer unlock call\n", result); m_renderer->set_locked_buffer(nullptr); // set the stream and draw the triangle strip - result = (*d3dintf->device.set_stream_source)(m_renderer->get_device(), 0, m_renderer->get_vertex_buffer(), sizeof(vertex)); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_stream_source call\n", (int)result); - result = (*d3dintf->device.draw_primitive)(m_renderer->get_device(), D3DPT_TRIANGLESTRIP, 0, 2); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device draw_primitive call\n", (int)result); + result = m_renderer->get_device()->SetStreamSource(0, m_renderer->get_vertex_buffer(), 0, sizeof(vertex)); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetStreamSource call\n", result); + result = m_renderer->get_device()->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device DrawPrimitive call\n", result); // end the scene - result = (*d3dintf->device.end_scene)(m_renderer->get_device()); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device end_scene call\n", (int)result); + result = m_renderer->get_device()->EndScene(); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device end_scene call\n", result); // reset the render target and release our reference to the backbuffer - result = (*d3dintf->device.set_render_target)(m_renderer->get_device(), 0, backbuffer); - if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_target call 2\n", (int)result); - (*d3dintf->surface.release)(backbuffer); + result = m_renderer->get_device()->SetRenderTarget(0, backbuffer); + if (FAILED(result)) + osd_printf_verbose("Direct3D: Error %08lX during device SetRenderTarget call 2\n", result); + backbuffer->Release(); m_renderer->reset_render_states(); } // release our reference to the target surface - (*d3dintf->surface.release)(scale_surface); + scale_surface->Release(); } @@ -2736,15 +2755,10 @@ void texture_info::prescale() cache_target::~cache_target() { if (last_texture != nullptr) - { - (*d3dintf->texture.release)(last_texture); - last_texture = nullptr; - } + last_texture->Release(); + if (last_target != nullptr) - { - (*d3dintf->surface.release)(last_target); - last_target = nullptr; - } + last_target->Release(); } @@ -2759,12 +2773,11 @@ bool cache_target::init(renderer_d3d9 *d3d, d3d_base *d3dintf, int source_width, this->target_width = target_width; this->target_height = target_height; - HRESULT result = (*d3dintf->device.create_texture)(d3d->get_device(), target_width, target_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &last_texture); - if (result != D3D_OK) - { + HRESULT result = d3d->get_device()->CreateTexture(target_width, target_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &last_texture, nullptr); + if (FAILED(result)) return false; - } - (*d3dintf->texture.get_surface_level)(last_texture, 0, &last_target); + + last_texture->GetSurfaceLevel(0, &last_target); return true; } @@ -2779,39 +2792,25 @@ d3d_render_target::~d3d_render_target() for (int index = 0; index < MAX_BLOOM_COUNT; index++) { if (bloom_texture[index] != nullptr) - { - (*d3dintf->texture.release)(bloom_texture[index]); - bloom_texture[index] = nullptr; - } + bloom_texture[index]->Release(); + if (bloom_surface[index] != nullptr) - { - (*d3dintf->surface.release)(bloom_surface[index]); - bloom_surface[index] = nullptr; - } + bloom_surface[index]->Release(); } for (int index = 0; index < 2; index++) { if (source_texture[index] != nullptr) - { - (*d3dintf->texture.release)(source_texture[index]); - source_texture[index] = nullptr; - } + source_texture[index]->Release(); + if (source_surface[index] != nullptr) - { - (*d3dintf->surface.release)(source_surface[index]); - source_surface[index] = nullptr; - } + source_surface[index]->Release(); + if (target_texture[index] != nullptr) - { - (*d3dintf->texture.release)(target_texture[index]); - target_texture[index] = nullptr; - } + target_texture[index]->Release(); + if (target_surface[index] != nullptr) - { - (*d3dintf->surface.release)(target_surface[index]); - target_surface[index] = nullptr; - } + target_surface[index]->Release(); } } @@ -2832,19 +2831,17 @@ bool d3d_render_target::init(renderer_d3d9 *d3d, d3d_base *d3dintf, int source_w for (int index = 0; index < 2; index++) { - result = (*d3dintf->device.create_texture)(d3d->get_device(), source_width, source_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &source_texture[index]); - if (result != D3D_OK) - { + result = d3d->get_device()->CreateTexture(source_width, source_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &source_texture[index], nullptr); + if (FAILED(result)) return false; - } - (*d3dintf->texture.get_surface_level)(source_texture[index], 0, &source_surface[index]); - result = (*d3dintf->device.create_texture)(d3d->get_device(), target_width, target_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &target_texture[index]); - if (result != D3D_OK) - { + source_texture[index]->GetSurfaceLevel(0, &source_surface[index]); + + result = d3d->get_device()->CreateTexture(target_width, target_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &target_texture[index], nullptr); + if (FAILED(result)) return false; - } - (*d3dintf->texture.get_surface_level)(target_texture[index], 0, &target_surface[index]); + + target_texture[index]->GetSurfaceLevel(0, &target_surface[index]); } auto win = d3d->assert_window(); @@ -2865,12 +2862,11 @@ bool d3d_render_target::init(renderer_d3d9 *d3d, d3d_base *d3dintf, int source_w this->bloom_dims[bloom_index][0] = (int)bloom_width; this->bloom_dims[bloom_index][1] = (int)bloom_height; - result = (*d3dintf->device.create_texture)(d3d->get_device(), (int)bloom_width, (int)bloom_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &bloom_texture[bloom_index]); - if (result != D3D_OK) - { + result = d3d->get_device()->CreateTexture((int)bloom_width, (int)bloom_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &bloom_texture[bloom_index], nullptr); + if (FAILED(result)) return false; - } - (*d3dintf->texture.get_surface_level)(bloom_texture[bloom_index], 0, &bloom_surface[bloom_index]); + + bloom_texture[bloom_index]->GetSurfaceLevel(0, &bloom_surface[bloom_index]); bloom_width *= scale_factor; bloom_height *= scale_factor; diff --git a/src/osd/modules/render/drawd3d.h b/src/osd/modules/render/drawd3d.h index 59d32a46ce7..1c044299b36 100644 --- a/src/osd/modules/render/drawd3d.h +++ b/src/osd/modules/render/drawd3d.h @@ -13,8 +13,17 @@ #ifdef OSD_WINDOWS -#include "d3d/d3dintf.h" +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <tchar.h> +#include <mmsystem.h> +#include <d3d9.h> +#include <d3dx9.h> +#include <math.h> +#undef interface + #include "d3d/d3dcomm.h" +#include "modules/lib/osdlib.h" //============================================================ // CONSTANTS @@ -27,14 +36,17 @@ // TYPE DEFINITIONS //============================================================ -struct vertex; -class texture_info; -class texture_manager; -struct device; -struct vertex_buffer; +struct d3d_base +{ + // internal objects + IDirect3D9 *d3dobj; + bool post_fx_available; + + osd::dynamic_module::ptr d3d9_dll; +}; + class shaders; struct hlsl_options; -class poly_info; /* renderer is the information about Direct3D for the current screen */ class renderer_d3d9 : public osd_renderer @@ -97,10 +109,10 @@ public: int get_height() const { return m_height; } int get_refresh() const { return m_refresh; } - device * get_device() const { return m_device; } - present_parameters * get_presentation() { return &m_presentation; } + IDirect3DDevice9 * get_device() const { return m_device; } + D3DPRESENT_PARAMETERS * get_presentation() { return &m_presentation; } - vertex_buffer * get_vertex_buffer() const { return m_vertexbuf; } + IDirect3DVertexBuffer9 *get_vertex_buffer() const { return m_vertexbuf; } vertex * get_locked_buffer() const { return m_lockedbuf; } VOID ** get_locked_buffer_ptr()const { return (VOID **)&m_lockedbuf; } void set_locked_buffer(vertex *lockedbuf) { m_lockedbuf = lockedbuf; } @@ -128,13 +140,13 @@ private: int m_refresh; // current refresh rate int m_create_error_count; // number of consecutive create errors - device * m_device; // pointer to the Direct3DDevice object + IDirect3DDevice9 * m_device; // pointer to the Direct3DDevice object int m_gamma_supported; // is full screen gamma supported? - present_parameters m_presentation; // set of presentation parameters + D3DPRESENT_PARAMETERS m_presentation; // set of presentation parameters D3DDISPLAYMODE m_origmode; // original display mode for the adapter D3DFORMAT m_pixformat; // pixel format we are using - vertex_buffer * m_vertexbuf; // pointer to the vertex buffer object + IDirect3DVertexBuffer9 *m_vertexbuf; // pointer to the vertex buffer object vertex * m_lockedbuf; // pointer to the locked vertex buffer int m_numverts; // number of accumulated vertices diff --git a/src/osd/modules/render/drawogl.cpp b/src/osd/modules/render/drawogl.cpp index 77acf017790..83a48e67b51 100644 --- a/src/osd/modules/render/drawogl.cpp +++ b/src/osd/modules/render/drawogl.cpp @@ -360,17 +360,11 @@ static void loadgl_functions(osd_gl_context *context) osd_gl_dispatch *gl_dispatch; #endif -#ifdef OSD_WINDOWS -HMODULE win_gl_context::m_module; -#endif - void renderer_ogl::load_gl_lib(running_machine &machine) { if (!s_dll_loaded) { -#ifdef OSD_WINDOWS - win_gl_context::load_library(); -#else +#ifndef OSD_WINDOWS #ifdef USE_DISPATCH_GL /* * directfb and and x11 use this env var diff --git a/src/osd/modules/render/winglcontext.h b/src/osd/modules/render/winglcontext.h index 843532fe33f..ec63b11ff72 100644 --- a/src/osd/modules/render/winglcontext.h +++ b/src/osd/modules/render/winglcontext.h @@ -14,6 +14,17 @@ #define __WIN_GL_CONTEXT__ #include "modules/opengl/osd_opengl.h" +#include "modules/lib/osdlib.h" + +// Typedefs for dynamically loaded functions +typedef PROC (WINAPI *wglGetProcAddress_fn)(LPCSTR); +typedef HGLRC (WINAPI *wglCreateContext_fn)(HDC); +typedef BOOL (WINAPI *wglDeleteContext_fn)(HGLRC); +typedef BOOL (WINAPI *wglMakeCurrent_fn)(HDC, HGLRC); + +typedef const char * (WINAPI *wglGetExtensionsStringEXT_fn)(void); +typedef BOOL (WINAPI *wglSwapIntervalEXT_fn)(int); +typedef int (WINAPI *wglGetSwapIntervalEXT_fn)(void); class win_gl_context : public osd_gl_context { @@ -22,17 +33,25 @@ public: { m_error[0] = 0; - this->pfn_wglGetProcAddress = (PROC (WINAPI *)(LPCSTR lpszProc)) GetProcAddress(m_module, "wglGetProcAddress"); - this->pfn_wglCreateContext = (HGLRC (WINAPI *)(HDC hdc)) GetProcAddress(m_module, "wglCreateContext"); - this->pfn_wglDeleteContext = (BOOL (WINAPI *)(HGLRC hglrc)) GetProcAddress(m_module, "wglDeleteContext"); - this->pfn_wglMakeCurrent = (BOOL (WINAPI *)(HDC hdc, HGLRC hglrc)) GetProcAddress(m_module, "wglMakeCurrent"); + opengl32_dll = osd::dynamic_module::open({ "opengl32.dll" }); - this->pfn_wglGetExtensionsStringEXT = (const char *(WINAPI *) (void)) pfn_wglGetProcAddress("wglGetExtensionsStringEXT"); + pfn_wglGetProcAddress = opengl32_dll->bind<wglGetProcAddress_fn>("wglGetProcAddress"); + pfn_wglCreateContext = opengl32_dll->bind<wglCreateContext_fn>("wglCreateContext"); + pfn_wglDeleteContext = opengl32_dll->bind<wglDeleteContext_fn>("wglDeleteContext"); + pfn_wglMakeCurrent = opengl32_dll->bind<wglMakeCurrent_fn>("wglMakeCurrent"); + + if (pfn_wglGetProcAddress == nullptr || pfn_wglCreateContext == nullptr || + pfn_wglDeleteContext == nullptr || pfn_wglMakeCurrent == nullptr) + { + return; + } + + pfn_wglGetExtensionsStringEXT = (wglGetExtensionsStringEXT_fn)(*pfn_wglGetProcAddress)("wglGetExtensionsStringEXT"); if (WGLExtensionSupported("WGL_EXT_swap_control")) { - this->pfn_wglSwapIntervalEXT = (BOOL (WINAPI *) (int)) getProcAddress("wglSwapIntervalEXT"); - this->pfn_wglGetSwapIntervalEXT = (int (WINAPI *) (void)) getProcAddress("wglGetSwapIntervalEXT"); + pfn_wglSwapIntervalEXT = (BOOL (WINAPI *) (int)) getProcAddress("wglSwapIntervalEXT"); + pfn_wglGetSwapIntervalEXT = (int (WINAPI *) (void)) getProcAddress("wglGetSwapIntervalEXT"); } else { @@ -43,25 +62,25 @@ public: m_hdc = GetDC(window); if (!setupPixelFormat(m_hdc)) { - m_context = this->pfn_wglCreateContext(m_hdc); - if (!m_context) + m_context = (*pfn_wglCreateContext)(m_hdc); + if (!m_context) { FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, GetLastError(), 0, m_error, 255, nullptr); return; } - this->pfn_wglMakeCurrent(m_hdc, m_context); + (*pfn_wglMakeCurrent)(m_hdc, m_context); } } virtual ~win_gl_context() { - this->pfn_wglDeleteContext(m_context); + (*pfn_wglDeleteContext)(m_context); ReleaseDC(m_window, m_hdc); } virtual void MakeCurrent() override { - this->pfn_wglMakeCurrent(m_hdc, m_context); + (*pfn_wglMakeCurrent)(m_hdc, m_context); } virtual const char *LastErrorMsg() override @@ -74,17 +93,14 @@ public: virtual void *getProcAddress(const char *proc) override { - void *ret = (void *) GetProcAddress(m_module, proc); - if (ret == nullptr) - ret = (void *) this->pfn_wglGetProcAddress(proc); - return ret; + return (void *)(*pfn_wglGetProcAddress)(proc); } virtual int SetSwapInterval(const int swap) override { - if (this->pfn_wglSwapIntervalEXT != nullptr) + if (pfn_wglSwapIntervalEXT != nullptr) { - this->pfn_wglSwapIntervalEXT(swap ? 1 : 0); + pfn_wglSwapIntervalEXT(swap ? 1 : 0); } return 0; } @@ -95,11 +111,6 @@ public: //wglSwapLayerBuffers(GetDC(window().m_hwnd), WGL_SWAP_MAIN_PLANE); } - static void load_library() - { - m_module = LoadLibraryA("opengl32.dll"); - } - private: int setupPixelFormat(HDC hDC) @@ -124,15 +135,17 @@ private: 0, /* reserved */ 0, 0, 0, /* no layer, visible, damage masks */ }; - int pixelFormat; - pixelFormat = ChoosePixelFormat(hDC, &pfd); - if (pixelFormat == 0) { - strcpy(m_error, "ChoosePixelFormat failed"); + int pixelFormat = ChoosePixelFormat(hDC, &pfd); + + if (pixelFormat == 0) + { + strcpy(m_error, "ChoosePixelFormat failed."); return 1; } - if (SetPixelFormat(hDC, pixelFormat, &pfd) != TRUE) { + if (SetPixelFormat(hDC, pixelFormat, &pfd) != TRUE) + { strcpy(m_error, "SetPixelFormat failed."); return 1; } @@ -141,10 +154,12 @@ private: bool WGLExtensionSupported(const char *extension_name) { - //if (pfn_wglGetExtensionsStringEXT != nullptr) - // printf("%s\n", this->pfn_wglGetExtensionsStringEXT()); + if (pfn_wglGetExtensionsStringEXT == nullptr) + return false; + + // printf("%s\n", pfn_wglGetExtensionsStringEXT()); - if (pfn_wglGetExtensionsStringEXT != nullptr && strstr(pfn_wglGetExtensionsStringEXT(), extension_name) != nullptr) + if (strstr(pfn_wglGetExtensionsStringEXT(), extension_name) != nullptr) return true; else return false; @@ -155,16 +170,15 @@ private: HDC m_hdc; char m_error[256]; - PROC (WINAPI *pfn_wglGetProcAddress)(LPCSTR lpszProc); - HGLRC (WINAPI *pfn_wglCreateContext)(HDC hdc); - BOOL (WINAPI *pfn_wglDeleteContext)(HGLRC hglrc); - BOOL (WINAPI *pfn_wglMakeCurrent)(HDC hdc, HGLRC hglrc); - - const char *(WINAPI *pfn_wglGetExtensionsStringEXT) (void); - BOOL (WINAPI *pfn_wglSwapIntervalEXT) (int interval); - int (WINAPI * pfn_wglGetSwapIntervalEXT) (void); + osd::dynamic_module::ptr opengl32_dll; + wglGetProcAddress_fn pfn_wglGetProcAddress; + wglCreateContext_fn pfn_wglCreateContext; + wglDeleteContext_fn pfn_wglDeleteContext; + wglMakeCurrent_fn pfn_wglMakeCurrent; - static HMODULE m_module; + wglGetExtensionsStringEXT_fn pfn_wglGetExtensionsStringEXT; + wglSwapIntervalEXT_fn pfn_wglSwapIntervalEXT; + wglGetSwapIntervalEXT_fn pfn_wglGetSwapIntervalEXT; }; #endif // __WIN_GL_CONTEXT__ diff --git a/src/osd/modules/sound/direct_sound.cpp b/src/osd/modules/sound/direct_sound.cpp index 25a82146d6b..04d29866876 100644 --- a/src/osd/modules/sound/direct_sound.cpp +++ b/src/osd/modules/sound/direct_sound.cpp @@ -404,10 +404,10 @@ HRESULT sound_direct_sound::dsound_init() #ifdef SDLMAME_WIN32 SDL_SysWMinfo wminfo; SDL_VERSION(&wminfo.version); - SDL_GetWindowWMInfo(sdl_window_list.front()->platform_window<SDL_Window*>(), &wminfo); + SDL_GetWindowWMInfo(osd_common_t::s_window_list.front()->platform_window<SDL_Window*>(), &wminfo); HWND const window = wminfo.info.win.window; #else // SDLMAME_WIN32 - HWND const window = win_window_list.front()->platform_window<HWND>(); + HWND const window = osd_common_t::s_window_list.front()->platform_window<HWND>(); #endif // SDLMAME_WIN32 result = m_dsound->SetCooperativeLevel(window, DSSCL_PRIORITY); } diff --git a/src/osd/modules/sound/xaudio2_sound.cpp b/src/osd/modules/sound/xaudio2_sound.cpp index f4da54db2ec..0f6ec2b5297 100644..100755 --- a/src/osd/modules/sound/xaudio2_sound.cpp +++ b/src/osd/modules/sound/xaudio2_sound.cpp @@ -24,6 +24,7 @@ #include <mutex> #include <thread> #include <queue> +#include <chrono> #undef interface @@ -33,6 +34,8 @@ #include "winutil.h" +#include "modules/lib/osdlib.h" + //============================================================ // Constants //============================================================ @@ -118,7 +121,7 @@ typedef std::unique_ptr<IXAudio2MasteringVoice, xaudio2_custom_deleter> masterin typedef std::unique_ptr<IXAudio2SourceVoice, xaudio2_custom_deleter> src_voice_ptr; // Typedef for pointer to XAudio2Create -typedef lazy_loaded_function_p3<HRESULT, IXAudio2**, UINT32, XAUDIO2_PROCESSOR> xaudio2_create_ptr; +typedef HRESULT (WINAPI *xaudio2_create_ptr)(IXAudio2 **, UINT32, XAUDIO2_PROCESSOR); //============================================================ // Helper classes @@ -181,28 +184,27 @@ public: class sound_xaudio2 : public osd_module, public sound_module, public IXAudio2VoiceCallback { private: - const wchar_t* XAUDIO_DLLS[2] = { L"XAudio2_9.dll", L"XAudio2_8.dll" }; - - Microsoft::WRL::ComPtr<IXAudio2> m_xAudio2; - mastering_voice_ptr m_masterVoice; - src_voice_ptr m_sourceVoice; - DWORD m_sample_bytes; - std::unique_ptr<BYTE[]> m_buffer; - DWORD m_buffer_size; - DWORD m_buffer_count; - DWORD m_writepos; - std::mutex m_buffer_lock; - HANDLE m_hEventBufferCompleted; - HANDLE m_hEventDataAvailable; - HANDLE m_hEventExiting; - std::thread m_audioThread; - std::queue<xaudio2_buffer> m_queue; - std::unique_ptr<bufferpool> m_buffer_pool; - UINT32 m_overflows; - UINT32 m_underflows; - BOOL m_in_underflow; - xaudio2_create_ptr XAudio2Create; - BOOL m_initialized; + Microsoft::WRL::ComPtr<IXAudio2> m_xAudio2; + mastering_voice_ptr m_masterVoice; + src_voice_ptr m_sourceVoice; + DWORD m_sample_bytes; + std::unique_ptr<BYTE[]> m_buffer; + DWORD m_buffer_size; + DWORD m_buffer_count; + DWORD m_writepos; + std::mutex m_buffer_lock; + HANDLE m_hEventBufferCompleted; + HANDLE m_hEventDataAvailable; + HANDLE m_hEventExiting; + std::thread m_audioThread; + std::queue<xaudio2_buffer> m_queue; + std::unique_ptr<bufferpool> m_buffer_pool; + UINT32 m_overflows; + UINT32 m_underflows; + BOOL m_in_underflow; + osd::dynamic_module::ptr m_xaudio_dll; + xaudio2_create_ptr XAudio2Create; + BOOL m_initialized; public: sound_xaudio2() : @@ -223,7 +225,6 @@ public: m_overflows(0), m_underflows(0), m_in_underflow(FALSE), - XAudio2Create("XAudio2Create", XAUDIO_DLLS, ARRAY_LENGTH(XAUDIO_DLLS)), m_initialized(FALSE) { } @@ -261,8 +262,13 @@ private: bool sound_xaudio2::probe() { - int status = XAudio2Create.initialize(); - return status == 0; + m_xaudio_dll = osd::dynamic_module::open({ "XAudio2_9.dll", "XAudio2_8.dll" }); + if (m_xaudio_dll == nullptr) + return false; + + XAudio2Create = m_xaudio_dll->bind<xaudio2_create_ptr>("XAudio2Create"); + + return (XAudio2Create ? true : false); } //============================================================ @@ -273,13 +279,15 @@ int sound_xaudio2::init(osd_options const &options) { HRESULT result; WAVEFORMATEX format = {0}; + auto init_start = std::chrono::system_clock::now(); + std::chrono::milliseconds init_time; + CoInitializeEx(nullptr, COINIT_MULTITHREADED); // Make sure our XAudio2Create entrypoint is bound - int status = XAudio2Create.initialize(); - if (status != 0) + if (!XAudio2Create) { - osd_printf_error("Could not find XAudio2 library\n"); + osd_printf_error("Could not find XAudio2. Please try to reinstall DirectX runtime package.\n"); return 1; } @@ -311,7 +319,8 @@ int sound_xaudio2::init(osd_options const &options) // Start the thread listening m_audioThread = std::thread([](sound_xaudio2* self) { self->process_audio(); }, this); - osd_printf_verbose("Sound: XAudio2 initialized\n"); + init_time = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - init_start); + osd_printf_verbose("Sound: XAudio2 initialized. %d ms.\n", static_cast<int>(init_time.count())); m_initialized = TRUE; return 0; diff --git a/src/osd/sdl/video.cpp b/src/osd/sdl/video.cpp index 6b887f5a26a..a9a1b592bc6 100644 --- a/src/osd/sdl/video.cpp +++ b/src/osd/sdl/video.cpp @@ -140,7 +140,7 @@ void sdl_osd_interface::update(bool skip_redraw) if (!skip_redraw) { // profiler_mark(PROFILER_BLIT); - for (auto window : sdl_window_list) + for (auto window : osd_common_t::s_window_list) window->update(); // profiler_mark(PROFILER_END); } @@ -273,11 +273,11 @@ static void check_osd_inputs(running_machine &machine) // check for toggling fullscreen mode if (machine.ui_input().pressed(IPT_OSD_1)) { - for (auto curwin : sdl_window_list) - curwin->toggle_full_screen(); + for (auto curwin : osd_common_t::s_window_list) + std::static_pointer_cast<sdl_window_info>(curwin)->toggle_full_screen(); } - auto window = sdl_window_list.front(); + auto window = osd_common_t::s_window_list.front(); if (machine.ui_input().pressed(IPT_OSD_2)) { //FIXME: on a per window basis @@ -304,10 +304,10 @@ static void check_osd_inputs(running_machine &machine) #endif if (machine.ui_input().pressed(IPT_OSD_6)) - window->modify_prescale(-1); + std::static_pointer_cast<sdl_window_info>(window)->modify_prescale(-1); if (machine.ui_input().pressed(IPT_OSD_7)) - window->modify_prescale(1); + std::static_pointer_cast<sdl_window_info>(window)->modify_prescale(1); if (machine.ui_input().pressed(IPT_OSD_8)) window->renderer().record(); diff --git a/src/osd/sdl/window.cpp b/src/osd/sdl/window.cpp index a5b3a6910cf..fd4bc8943f2 100644 --- a/src/osd/sdl/window.cpp +++ b/src/osd/sdl/window.cpp @@ -64,12 +64,6 @@ #define WMSZ_RIGHT (7) #endif -//============================================================ -// GLOBAL VARIABLES -//============================================================ - -std::list<std::shared_ptr<sdl_window_info>> sdl_window_list; - class SDL_DM_Wrapper { public: @@ -154,7 +148,7 @@ bool sdl_osd_interface::window_init() void sdl_osd_interface::update_slider_list() { - for (auto window : sdl_window_list) + for (auto window : osd_common_t::s_window_list) { // check if any window has dirty sliders if (window->renderer().sliders_dirty()) @@ -169,7 +163,7 @@ void sdl_osd_interface::build_slider_list() { m_sliders.clear(); - for (auto window : sdl_window_list) + for (auto window : osd_common_t::s_window_list) { std::vector<ui::menu_item> window_sliders = window->renderer().get_slider_list(); m_sliders.insert(m_sliders.end(), window_sliders.begin(), window_sliders.end()); @@ -186,9 +180,9 @@ void sdl_osd_interface::window_exit() osd_printf_verbose("Enter sdlwindow_exit\n"); // free all the windows - while (!sdl_window_list.empty()) + while (!osd_common_t::s_window_list.empty()) { - auto window = sdl_window_list.front(); + auto window = osd_common_t::s_window_list.front(); // Part of destroy removes the window from the list window->destroy(); @@ -399,7 +393,7 @@ int sdl_window_info::window_init() m_startmaximized = options.maximize(); // add us to the list - sdl_window_list.push_back(std::static_pointer_cast<sdl_window_info>(shared_from_this())); + osd_common_t::s_window_list.push_back(std::static_pointer_cast<sdl_window_info>(shared_from_this())); set_renderer(osd_renderer::make_for_type(video_config.mode, static_cast<osd_window*>(this)->shared_from_this())); @@ -451,7 +445,7 @@ void sdl_window_info::destroy() //osd_event_wait(window->rendered_event, osd_ticks_per_second()*10); // remove us from the list - sdl_window_list.remove(std::static_pointer_cast<sdl_window_info>(shared_from_this())); + osd_common_t::s_window_list.remove(std::static_pointer_cast<sdl_window_info>(shared_from_this())); // free the textures etc complete_destroy(); @@ -773,7 +767,7 @@ int sdl_window_info::complete_create() // set main window if (m_index > 0) { - for (auto w : sdl_window_list) + for (auto w : osd_common_t::s_window_list) { if (w->m_index == 0) { diff --git a/src/osd/sdl/window.h b/src/osd/sdl/window.h index ed03359d0ae..d1c28c06e95 100644 --- a/src/osd/sdl/window.h +++ b/src/osd/sdl/window.h @@ -45,11 +45,11 @@ public: int window_init(); - void update(); + void update() override; void toggle_full_screen(); void modify_prescale(int dir); void resize(INT32 width, INT32 height); - void destroy(); + void destroy() override; void capture_pointer() override; void release_pointer() override; @@ -122,13 +122,6 @@ struct osd_draw_callbacks }; //============================================================ -// GLOBAL VARIABLES -//============================================================ - -// window - list -extern std::list<std::shared_ptr<sdl_window_info>> sdl_window_list; - -//============================================================ // PROTOTYPES //============================================================ diff --git a/src/osd/windows/video.cpp b/src/osd/windows/video.cpp index e891ee6827f..5d42b4d7f7b 100644 --- a/src/osd/windows/video.cpp +++ b/src/osd/windows/video.cpp @@ -80,7 +80,7 @@ bool windows_osd_interface::video_init() } if (video_config.mode != VIDEO_MODE_NONE) - SetForegroundWindow(win_window_list.front()->platform_window<HWND>()); + SetForegroundWindow(osd_common_t::s_window_list.front()->platform_window<HWND>()); return true; } @@ -169,7 +169,7 @@ void windows_osd_interface::update(bool skip_redraw) if (!skip_redraw) { // profiler_mark(PROFILER_BLIT); - for (auto window : win_window_list) + for (auto window : osd_common_t::s_window_list) window->update(); // profiler_mark(PROFILER_END); } diff --git a/src/osd/windows/window.cpp b/src/osd/windows/window.cpp index 06bd3c67ea0..418c6c6c8f8 100644 --- a/src/osd/windows/window.cpp +++ b/src/osd/windows/window.cpp @@ -85,7 +85,6 @@ using namespace Windows::UI::Core; // GLOBAL VARIABLES //============================================================ -std::list<std::shared_ptr<win_window_info>> win_window_list; static DWORD main_threadid; // actual physical resolution @@ -209,10 +208,10 @@ bool windows_osd_interface::window_init() void windows_osd_interface::update_slider_list() { - for (auto window : win_window_list) + for (auto window : osd_common_t::s_window_list) { // check if any window has dirty sliders - if (window->m_renderer && window->m_renderer->sliders_dirty()) + if (window->renderer().sliders_dirty()) { build_slider_list(); return; @@ -222,27 +221,27 @@ void windows_osd_interface::update_slider_list() int windows_osd_interface::window_count() { - return win_window_list.size(); + return osd_common_t::s_window_list.size(); } void windows_osd_interface::build_slider_list() { m_sliders.clear(); - for (auto window : win_window_list) + for (auto window : osd_common_t::s_window_list) { // take the sliders of the first window - std::vector<ui::menu_item> window_sliders = window->m_renderer->get_slider_list(); + std::vector<ui::menu_item> window_sliders = window->renderer().get_slider_list(); m_sliders.insert(m_sliders.end(), window_sliders.begin(), window_sliders.end()); } } void windows_osd_interface::add_audio_to_recording(const INT16 *buffer, int samples_this_frame) { - auto window = win_window_list.front(); // We only record on the first window - if (window != nullptr && window->m_renderer != nullptr) + auto window = osd_common_t::s_window_list.front(); // We only record on the first window + if (window != nullptr) { - window->m_renderer->add_audio_to_recording(buffer, samples_this_frame); + window->renderer().add_audio_to_recording(buffer, samples_this_frame); } } @@ -256,13 +255,13 @@ void windows_osd_interface::window_exit() assert(GetCurrentThreadId() == main_threadid); // if we hid the cursor during the emulation, show it - if (!win_window_list.empty()) - win_window_list.front()->show_pointer(); + if (!osd_common_t::s_window_list.empty()) + osd_common_t::s_window_list.front()->show_pointer(); // free all the windows - while (!win_window_list.empty()) + while (!osd_common_t::s_window_list.empty()) { - auto window = win_window_list.front(); + auto window = osd_common_t::s_window_list.front(); // Destroy removes it from the list also window->destroy(); @@ -316,7 +315,6 @@ win_window_info::win_window_info( m_lastclicktime(std::chrono::system_clock::time_point::min()), m_lastclickx(0), m_lastclicky(0), - m_renderer(nullptr), m_machine(machine) { memset(m_title,0,sizeof(m_title)); @@ -327,10 +325,6 @@ win_window_info::win_window_info( m_prescale = video_config.prescale; } -win_window_info::~win_window_info() -{ -} - POINT win_window_info::s_saved_cursor_pos = { -1, -1 }; #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) @@ -423,7 +417,7 @@ void winwindow_process_events_periodic(running_machine &machine) static BOOL is_mame_window(HWND hwnd) { - for (auto window : win_window_list) + for (auto window : osd_common_t::s_window_list) if (window->platform_window<HWND>() == hwnd) return TRUE; @@ -587,9 +581,9 @@ void winwindow_take_snap(void) assert(GetCurrentThreadId() == main_threadid); // iterate over windows and request a snap - for (auto window : win_window_list) + for (auto window : osd_common_t::s_window_list) { - window->m_renderer->save(); + window->renderer().save(); } } @@ -605,9 +599,9 @@ void winwindow_toggle_fsfx(void) assert(GetCurrentThreadId() == main_threadid); // iterate over windows and request a snap - for (auto window : win_window_list) + for (auto window : osd_common_t::s_window_list) { - window->m_renderer->toggle_fsfx(); + window->renderer().toggle_fsfx(); } } @@ -623,9 +617,9 @@ void winwindow_take_video(void) assert(GetCurrentThreadId() == main_threadid); // iterate over windows and request a snap - for (auto window : win_window_list) + for (auto window : osd_common_t::s_window_list) { - window->m_renderer->record(); + window->renderer().record(); } } @@ -641,7 +635,7 @@ void winwindow_toggle_full_screen(void) assert(GetCurrentThreadId() == main_threadid); // if we are in debug mode, never go full screen - for (auto window : win_window_list) + for (auto window : osd_common_t::s_window_list) if (window->machine().debug_flags & DEBUG_FLAG_OSD_ENABLED) return; @@ -649,11 +643,11 @@ void winwindow_toggle_full_screen(void) video_config.windowed = !video_config.windowed; // iterate over windows and toggle their fullscreen state - for (auto window : win_window_list) + for (auto window : osd_common_t::s_window_list) SendMessage(window->platform_window<HWND>(), WM_USER_SET_FULLSCREEN, !video_config.windowed, 0); // Set the first window as foreground - SetForegroundWindow(win_window_list.front()->platform_window<HWND>()); + SetForegroundWindow(osd_common_t::s_window_list.front()->platform_window<HWND>()); } @@ -668,7 +662,7 @@ BOOL winwindow_has_focus(void) HWND focuswnd = GetFocus(); // see if one of the video windows has focus - for (auto window : win_window_list) + for (auto window : osd_common_t::s_window_list) if (focuswnd == window->platform_window<HWND>()) return TRUE; @@ -686,10 +680,10 @@ void winwindow_update_cursor_state(running_machine &machine) assert(GetCurrentThreadId() == main_threadid); // If no windows, just return - if (win_window_list.empty()) + if (osd_common_t::s_window_list.empty()) return; - auto window = win_window_list.front(); + auto window = osd_common_t::s_window_list.front(); // if we should hide the mouse cursor, then do it // rules are: @@ -734,11 +728,11 @@ void win_window_info::create(running_machine &machine, int index, osd_monitor_in // set main window if (window->m_index > 0) { - for (auto w : win_window_list) + for (auto w : osd_common_t::s_window_list) { if (w->m_index == 0) { - window->set_main_window(std::dynamic_pointer_cast<osd_window>(w)); + window->set_main_window(std::static_pointer_cast<osd_window>(w)); break; } } @@ -751,12 +745,12 @@ void win_window_info::create(running_machine &machine, int index, osd_monitor_in // see if we are safe for fullscreen window->m_fullscreen_safe = TRUE; - for (auto win : win_window_list) - if (win->m_monitor == monitor) + for (auto win : osd_common_t::s_window_list) + if (win->monitor() == monitor) window->m_fullscreen_safe = FALSE; // add us to the list - win_window_list.push_back(window); + osd_common_t::s_window_list.push_back(window); // load the layout window->m_target = machine.render().target_alloc(); @@ -800,7 +794,7 @@ void win_window_info::destroy() assert(GetCurrentThreadId() == main_threadid); // remove us from the list - win_window_list.remove(std::static_pointer_cast<win_window_info>(shared_from_this())); + osd_common_t::s_window_list.remove(shared_from_this()); // destroy the window if (platform_window<HWND>() != nullptr) @@ -845,7 +839,7 @@ void win_window_info::update() } // if we're visible and running and not in the middle of a resize, draw - if (platform_window<HWND>() != nullptr && m_target != nullptr && m_renderer != nullptr) + if (platform_window<HWND>() != nullptr && m_target != nullptr) { bool got_lock = true; @@ -864,7 +858,7 @@ void win_window_info::update() m_render_lock.unlock(); // ensure the target bounds are up-to-date, and then get the primitives - primlist = m_renderer->get_primitives(); + primlist = renderer().get_primitives(); // post a redraw request with the primitive list as a parameter last_update_time = timeGetTime(); @@ -1088,7 +1082,7 @@ int win_window_info::complete_create() fullscreen() ? FULLSCREEN_STYLE : WINDOW_STYLE, monitorbounds.left() + 20, monitorbounds.top() + 20, monitorbounds.left() + 100, monitorbounds.top() + 100, - nullptr,//(win_window_list != nullptr) ? win_window_list->m_hwnd : nullptr, + nullptr,//(osd_common_t::s_window_list != nullptr) ? osd_common_t::s_window_list->m_hwnd : nullptr, menu, GetModuleHandleUni(), nullptr); @@ -1102,8 +1096,12 @@ int win_window_info::complete_create() SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)this); // skip the positioning stuff for -video none */ - if (video_config.mode == VIDEO_MODE_NONE) + if (video_config.mode == VIDEO_MODE_NONE) + { + set_renderer(osd_renderer::make_for_type(video_config.mode, shared_from_this())); + renderer().create(); return 0; + } // adjust the window position to the initial width/height tempwidth = (m_win_config.width != 0) ? m_win_config.width : 640; @@ -1123,8 +1121,8 @@ int win_window_info::complete_create() // show the window if (!fullscreen() || m_fullscreen_safe) { - m_renderer = osd_renderer::make_for_type(video_config.mode, std::static_pointer_cast<win_window_info>(shared_from_this())); - if (m_renderer->create()) + set_renderer(osd_renderer::make_for_type(video_config.mode, shared_from_this())); + if (renderer().create()) return 1; ShowWindow(platform_window<HWND>(), SW_SHOW); @@ -1320,7 +1318,7 @@ LRESULT CALLBACK win_window_info::video_window_proc(HWND wnd, UINT message, WPAR // destroy: clean up all attached rendering bits and nullptr out our hwnd case WM_DESTROY: - window->m_renderer.reset(); + window->renderer_reset(); window->set_platform_window(nullptr); return DefWindowProc(wnd, message, wparam, lparam); @@ -1366,8 +1364,8 @@ LRESULT CALLBACK win_window_info::video_window_proc(HWND wnd, UINT message, WPAR // set focus: if we're not the primary window, switch back // commented out ATM because this prevents us from resizing secondary windows // case WM_SETFOCUS: -// if (window != win_window_list && win_window_list != nullptr) -// SetFocus(win_window_list->m_hwnd); +// if (window != osd_common_t::s_window_list && osd_common_t::s_window_list != nullptr) +// SetFocus(osd_common_t::s_window_list->m_hwnd); // break; // everything else: defaults @@ -1407,7 +1405,7 @@ void win_window_info::draw_video_contents(HDC dc, int update) { // update DC m_dc = dc; - m_renderer->draw(update); + renderer().draw(update); } } } @@ -1825,8 +1823,8 @@ void win_window_info::set_fullscreen(int fullscreen) if (video_config.mode != VIDEO_MODE_NONE) ShowWindow(platform_window<HWND>(), SW_SHOW); - m_renderer = osd_renderer::make_for_type(video_config.mode, std::static_pointer_cast<win_window_info>(shared_from_this())); - if (m_renderer->create()) + set_renderer(osd_renderer::make_for_type(video_config.mode, shared_from_this())); + if (renderer().create()) exit(1); } @@ -1845,7 +1843,7 @@ bool winwindow_qt_filter(void *message) if(msg->hwnd) // get the machine associated with this window ptr = GetWindowLongPtr(msg->hwnd, GWLP_USERDATA); else // any one will have to do - ptr = (LONG_PTR)win_window_list; + ptr = (LONG_PTR)osd_common_t::s_window_list; winwindow_dispatch_message(((win_window_info *)ptr)->machine(), msg); return true; diff --git a/src/osd/windows/window.h b/src/osd/windows/window.h index b9f84b725b3..a383b425541 100644 --- a/src/osd/windows/window.h +++ b/src/osd/windows/window.h @@ -48,14 +48,13 @@ class win_window_info : public osd_window { public: win_window_info(running_machine &machine, int index, osd_monitor_info *monitor, const osd_window_config *config); - virtual ~win_window_info(); running_machine &machine() const override { return m_machine; } virtual render_target *target() override { return m_target; } int fullscreen() const override { return m_fullscreen; } - void update(); + void update() override; virtual osd_monitor_info *winwindow_video_window_monitor(const osd_rect *proposed) override; @@ -86,7 +85,7 @@ public: virtual osd_monitor_info *monitor() const override { return m_monitor; } - void destroy(); + void destroy() override; // static @@ -126,9 +125,6 @@ public: int m_lastclickx; int m_lastclicky; - // drawing data - std::unique_ptr<osd_renderer> m_renderer; - private: void draw_video_contents(HDC dc, int update); int complete_create(); @@ -159,14 +155,6 @@ struct osd_draw_callbacks void (*exit)(void); }; -//============================================================ -// GLOBAL VARIABLES -//============================================================ - -// windows -extern std::list<std::shared_ptr<win_window_info>> win_window_list; - - //============================================================ // PROTOTYPES diff --git a/src/osd/windows/winmain.cpp b/src/osd/windows/winmain.cpp index 4a4cd95defa..f4197d31e55 100644 --- a/src/osd/windows/winmain.cpp +++ b/src/osd/windows/winmain.cpp @@ -71,11 +71,11 @@ public: char buffer[1024]; // if we are in fullscreen mode, go to windowed mode - if ((video_config.windowed == 0) && !win_window_list.empty()) + if ((video_config.windowed == 0) && !osd_common_t::s_window_list.empty()) winwindow_toggle_full_screen(); vsnprintf(buffer, ARRAY_LENGTH(buffer), msg, args); - win_message_box_utf8(!win_window_list.empty() ? win_window_list.front()->platform_window<HWND>() : nullptr, buffer, emulator_info::get_appname(), MB_OK); + win_message_box_utf8(!osd_common_t::s_window_list.empty() ? osd_common_t::s_window_list.front()->platform_window<HWND>() : nullptr, buffer, emulator_info::get_appname(), MB_OK); } else chain_output(channel, msg, args); @@ -519,9 +519,9 @@ void windows_osd_interface::init(running_machine &machine) osd_common_t::init_subsystems(); // notify listeners of screen configuration - for (auto info : win_window_list) + for (auto info : osd_common_t::s_window_list) { - machine.output().set_value(string_format("Orientation(%s)", info->m_monitor->devicename()).c_str(), info->m_targetorient); + machine.output().set_value(string_format("Orientation(%s)", info->monitor()->devicename()).c_str(), std::static_pointer_cast<win_window_info>(info)->m_targetorient); } // hook up the debugger log diff --git a/src/osd/windows/winutil.cpp b/src/osd/windows/winutil.cpp index 3574f00f398..880e9aa7a06 100644 --- a/src/osd/windows/winutil.cpp +++ b/src/osd/windows/winutil.cpp @@ -111,67 +111,3 @@ HMODULE WINAPI GetModuleHandleUni() VirtualQuery((LPCVOID)GetModuleHandleUni, &mbi, sizeof(mbi)); return (HMODULE)mbi.AllocationBase; } - -//----------------------------------------------------------- -// Lazy loaded function using LoadLibrary / GetProcAddress -//----------------------------------------------------------- - -lazy_loaded_function::lazy_loaded_function(const char * name, const wchar_t* dll_name) - : lazy_loaded_function(name, &dll_name, 1) -{ -} - -lazy_loaded_function::lazy_loaded_function(const char * name, const wchar_t** dll_names, int dll_count) - : m_name(name), m_module(nullptr), m_initialized(false), m_pfn(nullptr) -{ - for (int i = 0; i < dll_count; i++) - m_dll_names.push_back(std::wstring(dll_names[i])); -} - -lazy_loaded_function::~lazy_loaded_function() -{ - if (m_module != nullptr) - { - FreeLibrary(m_module); - m_module = nullptr; - } -} - -int lazy_loaded_function::initialize() -{ - if (m_module == nullptr) - { - for (int i = 0; i < m_dll_names.size(); i++) - { - m_module = LoadLibraryW(m_dll_names[i].c_str()); - if (m_module != nullptr) - break; - } - - if (m_module == nullptr) - { - osd_printf_verbose("Could not find DLL to dynamically link function %s.\n", m_name.c_str()); - return ERROR_DLL_NOT_FOUND; - } - } - - if (m_pfn == nullptr) - { - m_pfn = GetProcAddress(m_module, m_name.c_str()); - if (m_pfn == nullptr) - { - osd_printf_verbose("Could not find function address to dynamically link function %s.\n", m_name.c_str()); - return ERROR_NOT_FOUND; - } - } - - m_initialized = true; - - return 0; -} - -void lazy_loaded_function::check_init() const -{ - if (!m_initialized) - fatalerror("Attempt to use function pointer for function %s prior to init!", name()); -} diff --git a/src/osd/windows/winutil.h b/src/osd/windows/winutil.h index d122679438e..2598a920864 100644 --- a/src/osd/windows/winutil.h +++ b/src/osd/windows/winutil.h @@ -18,160 +18,4 @@ osd_dir_entry_type win_attributes_to_entry_type(DWORD attributes); BOOL win_is_gui_application(void); HMODULE WINAPI GetModuleHandleUni(); -//----------------------------------------------------------- -// Lazy loaded function using LoadLibrary / GetProcAddress -//----------------------------------------------------------- - -class lazy_loaded_function -{ -private: - std::string m_name; - std::vector<std::wstring> m_dll_names; - HMODULE m_module; - bool m_initialized; - -protected: - void check_init() const; - FARPROC m_pfn; - -public: - lazy_loaded_function(const char * name, const wchar_t* dll_name); - lazy_loaded_function(const char * name, const wchar_t** dll_names, int dll_count); - ~lazy_loaded_function(); - int initialize(); - const char * name() const { return m_name.c_str(); } -}; - -// No parameters -template <class TRet> -class lazy_loaded_function_ret : public lazy_loaded_function -{ -public: - lazy_loaded_function_ret(const char * name, const wchar_t* dll_name) - : lazy_loaded_function(name, &dll_name, 1) - { - } - - lazy_loaded_function_ret(const char * name, const wchar_t** dll_names, int dll_count) - : lazy_loaded_function(name, dll_names, dll_count) - { - } - - TRet operator ()() - { - check_init(); - return ((TRet(__stdcall *) ())m_pfn)(); - } -}; - -// One parameter -template <class TRet, class P1> -class lazy_loaded_function_p1 : public lazy_loaded_function -{ -public: - lazy_loaded_function_p1(const char * name, const wchar_t* dll_name) - : lazy_loaded_function(name, &dll_name, 1) - { - } - - lazy_loaded_function_p1(const char * name, const wchar_t** dll_names, int dll_count) - : lazy_loaded_function(name, dll_names, dll_count) - { - } - - TRet operator ()(P1 p1) - { - check_init(); - return ((TRet(__stdcall *) (P1))m_pfn)(p1); - } -}; - -// Two parameters -template <class TRet, class P1, class P2> -class lazy_loaded_function_p2 : public lazy_loaded_function -{ -public: - lazy_loaded_function_p2(const char * name, const wchar_t* dll_name) - : lazy_loaded_function(name, &dll_name, 1) - { - } - - lazy_loaded_function_p2(const char * name, const wchar_t** dll_names, int dll_count) - : lazy_loaded_function(name, dll_names, dll_count) - { - } - - TRet operator ()(P1 p1, P2 p2) - { - check_init(); - return ((TRet(__stdcall *) (P1, P2))m_pfn)(p1, p2); - } -}; - -// Three parameters -template <class TRet, class P1, class P2, class P3> -class lazy_loaded_function_p3 : public lazy_loaded_function -{ -public: - lazy_loaded_function_p3(const char * name, const wchar_t* dll_name) - : lazy_loaded_function(name, &dll_name, 1) - { - } - - lazy_loaded_function_p3(const char * name, const wchar_t** dll_names, int dll_count) - : lazy_loaded_function(name, dll_names, dll_count) - { - } - - TRet operator ()(P1 p1, P2 p2, P3 p3) - { - check_init(); - return ((TRet(__stdcall *) (P1, P2, P3))m_pfn)(p1, p2, p3); - } -}; - -// Four parameters -template <class TRet, class P1, class P2, class P3, class P4> -class lazy_loaded_function_p4 : public lazy_loaded_function -{ -public: - lazy_loaded_function_p4(const char * name, const wchar_t* dll_name) - : lazy_loaded_function(name, &dll_name, 1) - { - } - - lazy_loaded_function_p4(const char * name, const wchar_t** dll_names, int dll_count) - : lazy_loaded_function(name, dll_names, dll_count) - { - } - - TRet operator ()(P1 p1, P2 p2, P3 p3, P4 p4) - { - check_init(); - return ((TRet(__stdcall *) (P1, P2, P3, P4))m_pfn)(p1, p2, p3, p4); - } -}; - -// Five parameters -template <class TRet, class P1, class P2, class P3, class P4, class P5> -class lazy_loaded_function_p5 : public lazy_loaded_function -{ -public: - lazy_loaded_function_p5(const char * name, const wchar_t* dll_name) - : lazy_loaded_function(name, &dll_name, 1) - { - } - - lazy_loaded_function_p5(const char * name, const wchar_t** dll_names, int dll_count) - : lazy_loaded_function(name, dll_names, dll_count) - { - } - - TRet operator ()(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) - { - check_init(); - return ((TRet(__stdcall *) (P1, P2, P3, P4, P5))m_pfn)(p1, p2, p3, p4, p5); - } -}; - #endif // __WINUTIL__ diff --git a/src/tools/chdman.cpp b/src/tools/chdman.cpp index e54d69b0c3e..a2f154bcfc6 100644 --- a/src/tools/chdman.cpp +++ b/src/tools/chdman.cpp @@ -17,7 +17,6 @@ #include "md5.h" #include "sha1.h" #include "vbiparse.h" -#include "tagmap.h" #include <stdarg.h> #include <stdlib.h> #include <stdio.h> diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp index e70f1fc13ac..ee125761ee6 100644 --- a/src/tools/unidasm.cpp +++ b/src/tools/unidasm.cpp @@ -662,9 +662,9 @@ int main(int argc, char *argv[]) fprintf(stderr, "Caught unhandled emulator exception\n"); result = 1; } - catch (add_exception &aex) + catch (tag_add_exception &aex) { - fprintf(stderr, "Tag '%s' already exists in tagged_list\n", aex.tag()); + fprintf(stderr, "Tag '%s' already exists in tagged map\n", aex.tag()); result = 1; } catch (std::exception &ex) diff --git a/src/version.cpp b/src/version.cpp deleted file mode 100644 index b7f73e4618a..00000000000 --- a/src/version.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - version.c - - Version string source file for MAME. - -***************************************************************************/ - -#define BARE_BUILD_VERSION "0.174" - -extern const char bare_build_version[]; -extern const char build_version[]; -const char bare_build_version[] = BARE_BUILD_VERSION; -#if defined(GIT_VERSION) -#define VERSION_TO_STRING(s) XVERSION_TO_STRING(s) -#define XVERSION_TO_STRING(ver) #ver -const char build_version[] = BARE_BUILD_VERSION " (" VERSION_TO_STRING(GIT_VERSION) ")"; -#else -const char build_version[] = BARE_BUILD_VERSION; -#endif diff --git a/src/zexall/main.cpp b/src/zexall/main.cpp index b3bcf101b9e..6b7e2c11e1a 100644 --- a/src/zexall/main.cpp +++ b/src/zexall/main.cpp @@ -99,7 +99,7 @@ void emulator_info::layout_file_cb(xml_data_node &layout) { } const char * emulator_info::get_appname() { return nullptr; } -const char * emulator_info::get_appname_lower() { return nullptr; } +const char * emulator_info::get_appname_lower() { return "zexall"; } const char * emulator_info::get_configname() { return nullptr; } |
