Merge remote-tracking branch 'origin/master' into netlist_dev

This commit is contained in:
couriersud 2016-06-17 18:39:49 +02:00
commit e67b71e671
127 changed files with 8032 additions and 2747 deletions

View File

@ -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, "");

View File

@ -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

View File

@ -4,6 +4,7 @@
-- Copyright (c) 2002-2011 Jason Perkins and the Premake project
--
_WORKING_DIR = os.getcwd()
@ -151,19 +152,11 @@
ok, err = premake.checkprojects()
if (not ok) then error("Error: " .. err, 0) end
premake.stats = { }
premake.stats.num_generated = 0
premake.stats.num_skipped = 0
-- Hand over control to the action
printf("Running action '%s'...", action.trigger)
premake.action.call(action.trigger)
printf("Done. Generated %d/%d projects."
, premake.stats.num_generated
, premake.stats.num_generated+premake.stats.num_skipped
)
print("Done.")
return 0
end

View File

@ -22,46 +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()
premake.stats.num_generated = premake.stats.num_generated + 1
else
-- printf("Skipping %s as its contents would not change.", filename)
premake.stats.num_skipped = premake.stats.num_skipped + 1
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

View File

@ -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()\npremake.stats.num_generated = premake.stats.num_generated + 1\nelse\npremake.stats.num_skipped = premake.stats.num_skipped + 1\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",
@ -454,7 +453,7 @@ const char* builtin_scripts[] = {
/* _premake_main.lua */
"_WORKING_DIR = os.getcwd()\nlocal function injectplatform(platform)\nif not platform then return true end\nplatform = premake.checkvalue(platform, premake.fields.platforms.allowed)\nfor sln in premake.solution.each() do\nlocal platforms = sln.platforms or { }\nif #platforms == 0 then\ntable.insert(platforms, \"Native\")\nend\nif not table.contains(platforms, \"Native\") then\nreturn false, sln.name .. \" does not target native platform\\nNative platform settings are required for the --platform feature.\"\nend\nif not table.contains(platforms, platform) then\ntable.insert(platforms, platform)\nend\nsln.platforms = platforms\nend\nreturn true\nend\nfunction _premake_main(scriptpath)\nif (scriptpath) then\nlocal scripts = dofile(scriptpath .. \"/_manifest.lua\")\nfor _,v in ipairs(scripts) do\ndofile(scriptpath .. \"/\" .. v)\nend\nend\n_PREMAKE_COMMAND = path.getabsolute(_PREMAKE_COMMAND)\npremake.action.set(_ACTION)\nmath.randomseed(os.time())\nif (nil ~= _OPTIONS[\"file\"]) then\nlocal fname = _OPTIONS"
"[\"file\"]\nif (os.isfile(fname)) then\ndofile(fname)\nelse\nerror(\"No genie script '\" .. fname .. \"' found!\", 2)\nend\nelse\nlocal dir, name = premake.findDefaultScript(path.getabsolute(\"./\"))\nif dir ~= nil then\nos.chdir(dir)\ndofile(name)\nend\nend\nif (_OPTIONS[\"version\"] or _OPTIONS[\"help\"] or not _ACTION) then\nprintf(\"GENie - Project generator tool %s\", _GENIE_VERSION_STR)\nprintf(\"https://github.com/bkaradzic/GENie\")\nif (not _OPTIONS[\"version\"]) then\npremake.showhelp()\nend\nreturn 1\nend\naction = premake.action.current()\nif (not action) then\nerror(\"Error: no such action '\" .. _ACTION .. \"'\", 0)\nend\nok, err = premake.option.validate(_OPTIONS)\nif (not ok) then error(\"Error: \" .. err, 0) end\nok, err = premake.checktools()\nif (not ok) then error(\"Error: \" .. err, 0) end\nok, err = injectplatform(_OPTIONS[\"platform\"])\nif (not ok) then error(\"Error: \" .. err, 0) end\nlocal profiler = newProfiler()\nif (nil ~= _OPTIONS[\"debug-profiler\"]) then\nprofiler:start()\nend\n"
"print(\"Building configurations...\")\npremake.bake.buildconfigs()\nif (nil ~= _OPTIONS[\"debug-profiler\"]) then\nprofiler:stop()\nlocal filePath = path.getabsolute(\"GENie-profiler-bake.txt\")\nprint(\"Writing debug-profiler report \" .. filePath .. \".\")\nlocal outfile = io.open(filePath, \"w+\")\nprofiler:report(outfile)\noutfile:close()\nend\nok, err = premake.checkprojects()\nif (not ok) then error(\"Error: \" .. err, 0) end\npremake.stats = { }\npremake.stats.num_generated = 0\npremake.stats.num_skipped = 0\nprintf(\"Running action '%s'...\", action.trigger)\npremake.action.call(action.trigger)\nprintf(\"Done. Generated %d/%d projects.\"\n, premake.stats.num_generated\n, premake.stats.num_generated+premake.stats.num_skipped\n)\nreturn 0\nend\n",
"print(\"Building configurations...\")\npremake.bake.buildconfigs()\nif (nil ~= _OPTIONS[\"debug-profiler\"]) then\nprofiler:stop()\nlocal filePath = path.getabsolute(\"GENie-profiler-bake.txt\")\nprint(\"Writing debug-profiler report \" .. filePath .. \".\")\nlocal outfile = io.open(filePath, \"w+\")\nprofiler:report(outfile)\noutfile:close()\nend\nok, err = premake.checkprojects()\nif (not ok) then error(\"Error: \" .. err, 0) end\nprintf(\"Running action '%s'...\", action.trigger)\npremake.action.call(action.trigger)\nprint(\"Done.\")\nreturn 0\nend\n",
0
};

File diff suppressed because it is too large Load Diff

View File

@ -322,7 +322,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>3x3 Eyes - Sanjiyan Henjou</description>
<year>1993</year>
<publisher>日本クリエイト (Nihon Create)</publisher>
<info name="release" value="199310xx" />
@ -409,7 +409,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>The 4th Unit 1-2 Towns - Linkage</description>
<year>1989</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="198907xx" />
@ -428,7 +428,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>The 4th Unit 3 - Dual Targets</description>
<year>1989</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="198911xx" />
@ -447,7 +447,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>The 4th Unit 4 - Zero</description>
<year>1989</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="198912xx" />
@ -466,7 +466,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>The 4th Unit 5 - D-Again</description>
<year>1990</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199004xx" />
@ -485,7 +485,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>The 4th Unit 6 - Merry-Go-Round</description>
<year>1990</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199012xx" />
@ -504,7 +504,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>The 4th Unit 7 - Wyatt</description>
<year>1992</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199204xx" />
@ -629,7 +629,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Abel - Shin Mokushiroku Taisen</description>
<year>1995</year>
<publisher>ファミリーソフト (Family Soft)</publisher>
<info name="release" value="199511xx" />
@ -990,7 +990,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Aoki Ookami to Shiroki Mejika - Genchou Hishi</description>
<year>1993</year>
<publisher>光栄 (Koei)</publisher>
<info name="release" value="199302xx" />
@ -1332,7 +1332,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Blue - Will to Power</description>
<year>1992</year>
<publisher>Sofcom</publisher>
<info name="release" value="199204xx" />
@ -1349,7 +1349,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Bomberman - Panic Bomber</description>
<year>1995</year>
<publisher>アスキー (ASCII)</publisher>
<info name="release" value="199504xx" />
@ -1501,7 +1501,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Cal Gaiden - Tiny Steps Behind the Cal</description>
<year>1993</year>
<publisher>バーディーソフト (Birdy Soft)</publisher>
<info name="release" value="199307xx" />
@ -1718,7 +1718,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>D.O. Kanshuu Premium Box - Touch My Heart</description>
<year>1995</year>
<publisher>ディー・オー (D.O.)</publisher>
<info name="release" value="199505xx" />
@ -2040,7 +2040,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Desire - Haitoku no Rasen</description>
<year>1994</year>
<publisher>シーズウェア (C's Ware)</publisher>
<info name="release" value="199411xx" />
@ -2345,7 +2345,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Dungeon Master II - Skullkeep</description>
<year>1994</year>
<publisher>ビクター音楽産業 (Victor Musical Industries)</publisher>
<info name="release" value="199401xx" />
@ -2577,7 +2577,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Eye of the Beholder II - The Legend of Darkmoon</description>
<year>1993</year>
<publisher>サイベル (Cybelle)</publisher>
<info name="release" value="199311xx" />
@ -3125,7 +3125,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Gekirin - Ushinawareshi Houken</description>
<year>1994</year>
<publisher>日本アプリケーション (Nihon Application)</publisher>
<info name="release" value="199412xx" />
@ -3284,7 +3284,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Mobile Suit Gundam - Hyper Classic Operation</description>
<year>1992</year>
<publisher>ファミリーソフト (Family Soft)</publisher>
<info name="release" value="199208xx" />
@ -3303,7 +3303,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Mobile Suit Gundam - Hyper Desert Operation</description>
<year>1992</year>
<publisher>ファミリーソフト (Family Soft)</publisher>
<info name="release" value="199209xx" />
@ -3320,7 +3320,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Gunship - The Helicopter Simulation</description>
<year>1990</year>
<publisher>マイクロプローズジャパン (MicroProse Japan)</publisher>
<info name="release" value="199010xx" />
@ -3596,7 +3596,7 @@ User/save disks that can be created from the game itself are not included.
<!--
Origin: Neo Kobe Collection
-->
<description>Igo Doujou: Honkakuha Yose Tsumego Shinan</description>
<description>Igo Doujou - Honkakuha Yose Tsumego Shinan</description>
<year>1989</year>
<publisher>富士通 (Fujitsu)</publisher>
<info name="release" value="198903xx" />
@ -3707,7 +3707,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Infestation - Chinmoku no Wakusei</description>
<year>1992</year>
<publisher>ビクター音楽産業 (Victor Musical Industries)</publisher>
<info name="release" value="199203xx" />
@ -3726,7 +3726,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Injuu Gakuen - La Blue Girl</description>
<year>1994</year>
<publisher>DEZ</publisher>
<info name="release" value="199407xx" />
@ -3894,7 +3894,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Kigen - Kagayaki no Hasha</description>
<year>1992</year>
<publisher>リバーヒルソフト (Riverhill Soft)</publisher>
<info name="release" value="199205xx" />
@ -3953,7 +3953,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>King's Quest V - Absence Makes the Heart Go Yonder</description>
<year>1991</year>
<publisher>シエラオンラインジャパン (Sierra On-Line Japan)</publisher>
<info name="release" value="199108xx" />
@ -4088,7 +4088,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Kyrandia II - The Hand of Fate</description>
<year>1995</year>
<publisher>スタークラフト (Starcraft)</publisher>
<part name="cdrom" interface="fmt_cdrom">
@ -4098,12 +4098,11 @@ 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: Neo Kobe Collection
<rom name="Kyuukyoku Tiger.bin" size="757515696" crc="98453ddc" sha1="cf311208d424de01ef60a43c2f3422fc1f8ef288"/>
<rom name="Kyuukyoku Tiger.cue" size="1045" crc="6e3c9b99" sha1="4a70a94f2afb0c1b16e38099babdb3c53bd6ecda"/>
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>
@ -4111,7 +4110,7 @@ User/save disks that can be created from the game itself are not included.
<info name="release" value="199402xx" />
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="kyuukyoku tiger" sha1="187e052a9e699571bcd904a1e5cf18e3f0fcd9aa" status="baddump" />
<disk name="kyuukyoku tiger" sha1="7c0f1c42dba49fe71114d21ad2f604dabe729196" />
</diskarea>
</part>
</software>
@ -4126,7 +4125,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Lands of Lore - The Throne of Chaos</description>
<year>1993</year>
<publisher>スタークラフト (Starcraft)</publisher>
<info name="release" value="199501xx" />
@ -4249,7 +4248,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Lemmings 2 - The Tribes (English)</description>
<year>1994</year>
<publisher>富士通 (Fujitsu)</publisher>
<part name="cdrom" interface="fmt_cdrom">
@ -4267,7 +4266,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Lemmings 2 - The Tribes (Japanese)</description>
<year>1994</year>
<publisher>富士通 (Fujitsu)</publisher>
<info name="release" value="199406xx" />
@ -4367,7 +4366,7 @@ User/save disks that can be created from the game itself are not included.
<rom name="Life &amp; Death II.img" size="322282800" crc="41a68591" sha1="a0dc83c794fb66b8e5b4baebf46ad55dc43f102c"/>
<rom name="Life &amp; Death II.sub" size="13154400" crc="d94d1d54" sha1="080fc8e4a9867fa359dd72ef493b228b0eb98d0b"/>
-->
<description>Life &amp; Death II: The Brain</description>
<description>Life &amp; Death II - The Brain</description>
<year>1992</year>
<publisher>ビング (Ving)</publisher>
<info name="release" value="199211xx" />
@ -4462,7 +4461,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Record of Lodoss War - Haiiro no Majo</description>
<year>1994</year>
<publisher>ハミングバード (HummingBird)</publisher>
<info name="release" value="199404xx" />
@ -4561,7 +4560,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<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" />
@ -4836,7 +4835,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Muscle Bomber - The Body Explosion</description>
<year>1993</year>
<publisher>カプコン (Capcom)</publisher>
<info name="release" value="199311xx" />
@ -4934,7 +4933,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>My Fair Lady CAN II - Elementary</description>
<year>1990</year>
<publisher>CRI</publisher>
<part name="cdrom" interface="fmt_cdrom">
@ -5019,13 +5018,33 @@ 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">
<!--
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>
<description>Might and Magic - Clouds of Xeen</description>
<year>1993</year>
<publisher>スタークラフト (Starcraft)</publisher>
<info name="release" value="199309xx" />
@ -5042,7 +5061,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Might and Magic - Darkside of Xeen</description>
<year>1994</year>
<publisher>スタークラフト (Starcraft)</publisher>
<info name="release" value="199405xx" />
@ -5143,7 +5162,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Monkey Island 2 - LeChuck's Revenge</description>
<year>1994</year>
<publisher>ビクター音楽産業 (Victor Musical Industries)</publisher>
<info name="release" value="199402xx" />
@ -5205,7 +5224,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Ms. Detective File #1 - Iwami Ginzan Satsujin Jiken</description>
<year>1992</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199209xx" />
@ -5230,7 +5249,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Ms. Detective File #2 - Sugata-naki Irainin</description>
<year>1993</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199310xx" />
@ -5421,7 +5440,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Nihon no Rekishi - Kizoku-hen</description>
<year>1990</year>
<publisher>CRI</publisher>
<part name="cdrom" interface="fmt_cdrom">
@ -5439,7 +5458,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Nihon no Rekishi - Kodai-hen</description>
<year>1990</year>
<publisher>CRI</publisher>
<part name="cdrom" interface="fmt_cdrom">
@ -5496,7 +5515,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Nobunaga no Yabou - Haouden</description>
<year>1993</year>
<publisher>光栄 (Koei)</publisher>
<info name="release" value="199304xx" />
@ -5519,7 +5538,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Nobunaga no Yabou - Tenshouki</description>
<year>1995</year>
<publisher>光栄 (Koei)</publisher>
<info name="release" value="199503xx" />
@ -5891,7 +5910,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Prince of Persia 2 - The Shadow and the Flame</description>
<year>1994</year>
<publisher>インタープログ (Interprog)</publisher>
<info name="release" value="199407xx" />
@ -5935,7 +5954,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Provvidenza - Legenda la Spada di Alfa</description>
<year>1991</year>
<publisher>Sofcom</publisher>
<info name="release" value="199109xx" />
@ -5955,7 +5974,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Psychic Detective Series Vol. 1 - Invitation</description>
<year>1989</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="198903xx" />
@ -5989,7 +6008,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Psychic Detective Series Vol. 2 - Memories</description>
<year>1989</year>
<publisher>データウエスト (Data West)</publisher>
<part name="cdrom" interface="fmt_cdrom">
@ -6012,7 +6031,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Psychic Detective Series Vol. 3 - Aya</description>
<year>1990</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199006xx" />
@ -6036,7 +6055,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Psychic Detective Series Vol. 4 - Orgel</description>
<year>1991</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199104xx" />
@ -6060,7 +6079,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Psychic Detective Series Vol. 5 - Nightmare</description>
<year>1991</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199111xx" />
@ -6089,7 +6108,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Psychic Detective Series Final - Solitude Joukan</description>
<year>1992</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199212xx" />
@ -6115,7 +6134,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Psychic Detective Series Final - Solitude Gekan</description>
<year>1993</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199303xx" />
@ -6323,7 +6342,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Rance III - Leazas Kanraku</description>
<year>1992</year>
<publisher>アリスソフト (AliceSoft)</publisher>
<info name="release" value="199205xx" />
@ -6342,7 +6361,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Rance IV - Kyoudan no Isan</description>
<year>1994</year>
<publisher>アリスソフト (AliceSoft)</publisher>
<info name="release" value="199403xx" />
@ -6367,7 +6386,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Rance 4.1 - Okusuri Koujou wo Sukue!</description>
<year>1995</year>
<publisher>アリスソフト (AliceSoft)</publisher>
<info name="release" value="199512xx" />
@ -6387,7 +6406,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Rance 4.2 - Angel-gumi</description>
<year>1995</year>
<publisher>アリスソフト (AliceSoft)</publisher>
<info name="release" value="199512xx" />
@ -6491,7 +6510,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Rejection - Den-no Senshi</description>
<year>1992</year>
<publisher>シュールド・ウェーブ (Sur De Wave)</publisher>
<info name="release" value="199212xx" />
@ -6743,7 +6762,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Sherlock Holmes - Consulting Detective</description>
<year>1991</year>
<publisher>富士通 (Fujitsu)</publisher>
<info name="release" value="199106xx" />
@ -6913,7 +6932,7 @@ User/save disks that can be created from the game itself are not included.
<rom name="Sotsugyou &apos;93 - Graduation.img" size="153044640" crc="15b362eb" sha1="3390ca78f2dbadfd353081f41977b35d84fb7647"/>
<rom name="Sotsugyou &apos;93 - Graduation.sub" size="6246720" crc="3370d136" sha1="e06d6c05ab7a830015e147c6f0d3200ae4434988"/>
-->
<description>Sotsugyou '93: Graduation</description>
<description>Sotsugyou '93 - Graduation</description>
<year>1993</year>
<publisher>JHV</publisher>
<info name="release" value="199310xx" />
@ -6994,7 +7013,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Shadow of the Beast - Mashou no Okite</description>
<year>1991</year>
<publisher>ビクター音楽産業 (Victor Musical Industries)</publisher>
<info name="release" value="199109xx" />
@ -7005,7 +7024,6 @@ 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">
<!--
Origin: redump.org
@ -7025,7 +7043,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Shadow of the Beast II - Juushin no Jubaku</description>
<year>1993</year>
<publisher>ビクター音楽産業 (Victor Musical Industries)</publisher>
<info name="release" value="199306xx" />
@ -7120,7 +7138,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Super Street Fighter II - The New Challengers</description>
<year>1994</year>
<publisher>カプコン (Capcom)</publisher>
<info name="release" value="199410xx" />
@ -7137,7 +7155,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Super Street Fighter II - The New Challengers (Sample Disc)</description>
<year>1994</year>
<publisher>カプコン (Capcom)</publisher>
<part name="cdrom" interface="fmt_cdrom">
@ -7155,7 +7173,7 @@ User/save disks that can be created from the game itself are not included.
<rom name="Super Shanghai - Dragon&apos;s Eye.img" size="499917600" crc="1d6e5c1e" sha1="8d5056af7328d2e00ba9e9cb57bd880060c2c64f"/>
<rom name="Super Shanghai - Dragon&apos;s Eye.sub" size="20404800" crc="cc998f20" sha1="a55336efbd1ce9261a1efa159cf7d13b00b22c0b"/>
-->
<description>Super Shanghai: Dragon's Eye</description>
<description>Super Shanghai - Dragon's Eye</description>
<year>1991</year>
<publisher>HOT・B</publisher>
<info name="release" value="199111xx" />
@ -7220,7 +7238,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Star Cruiser II - The Odysseus Project</description>
<year>1994</year>
<publisher>JHV</publisher>
<info name="release" value="199404xx" />
@ -7360,7 +7378,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Takamizawa Kyosuke - Nekketsu!! Kyouiku Kenshuu</description>
<year>1995</year>
<publisher>ジックス (ZyX)</publisher>
<info name="release" value="199501xx" />
@ -7379,7 +7397,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Tanjou - Debut</description>
<year>1994</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199404xx" />
@ -7423,7 +7441,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>TDF - Terrestrial Defense Force</description>
<year>1990</year>
<publisher>データウエスト (Data West)</publisher>
<info name="release" value="199009xx" />
@ -7577,7 +7595,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Toushin Toshi II - Soshite, Sorekara...</description>
<year>1995</year>
<publisher>アリスソフト (AliceSoft)</publisher>
<info name="release" value="199512xx" />
@ -7843,7 +7861,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Ultima IV - Quest of the Avatar</description>
<year>1992</year>
<publisher>富士通 (Fujitsu)</publisher>
<info name="release" value="199204xx" />
@ -7862,7 +7880,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Ultima V - Warriors of Destiny</description>
<year>1992</year>
<publisher>富士通 (Fujitsu)</publisher>
<info name="release" value="199208xx" />
@ -7881,7 +7899,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Ultima VI - The False Prophet</description>
<year>1991</year>
<publisher>富士通 (Fujitsu)</publisher>
<info name="release" value="199112xx" />
@ -7919,7 +7937,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Ultima Underworld - The Stygian Abyss</description>
<year>1993</year>
<publisher>エレクトロニック・アーツ・ビクター (Electronic Arts Victor)</publisher>
<info name="release" value="199312xx" />
@ -7940,7 +7958,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Ultima Underworld II - Labyrinth of Worlds</description>
<year>1995</year>
<publisher>エレクトロニック・アーツ・ビクター (Electronic Arts Victor)</publisher>
<info name="release" value="199502xx" />
@ -8034,7 +8052,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Vastness - Kuukyo no Ikenie-tachi</description>
<year>1993</year>
<publisher>CD Bros.</publisher>
<info name="release" value="199309xx" />
@ -8066,12 +8084,13 @@ 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="viewpoin">
<!--
Origin: Neo Kobe Collection
<rom name="Viewpoint.bin" size="478711968" crc="76e247e4" sha1="5fdc1c4d99544b0b7ae9a78bfc9bd2c218f6bee9"/>
<rom name="Viewpoint.cue" size="629" crc="55900cea" sha1="fd17d8ca5820d319032136a162366265bd8929a4"/>
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>
@ -8079,7 +8098,7 @@ User/save disks that can be created from the game itself are not included.
<info name="release" value="199311xx" />
<part name="cdrom" interface="fmt_cdrom">
<diskarea name="cdrom">
<disk name="viewpoint" sha1="f5d017b08a34eaadfab6e4f4c272d574a09d1718" status="baddump" />
<disk name="viewpoint" sha1="c977abc3e3ab7d675b6be7aacac69a57bc6e52be" />
</diskarea>
</part>
</software>
@ -8272,7 +8291,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Wing Commander - Secret Missions</description>
<year>1994</year>
<publisher>富士通 (Fujitsu)</publisher>
<info name="release" value="199411xx" />
@ -8307,7 +8326,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Wizardry V - Heart of the Maelstrom</description>
<year>1990</year>
<publisher>アスキー (ASCII)</publisher>
<info name="release" value="199012xx" />
@ -8332,7 +8351,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Wizardry VI - Bane of the Cosmic Forge</description>
<year>1991</year>
<publisher>アスキー (ASCII)</publisher>
<info name="release" value="199112xx" />
@ -8355,7 +8374,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Wizardry VII - Crusaders of the Dark Savant</description>
<year>1994</year>
<publisher>アスキー (ASCII)</publisher>
<info name="release" value="199409xx" />
@ -8467,7 +8486,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Xak II - Rising of the Redmoon</description>
<year>1991</year>
<publisher>マイクロキャビン (Micro Cabin)</publisher>
<info name="release" value="199107xx" />
@ -8486,7 +8505,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Xak III - The Eternal Recurrence</description>
<year>1993</year>
<publisher>マイクロキャビン (Micro Cabin)</publisher>
<info name="release" value="199309xx" />
@ -8549,7 +8568,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Yojuu Senki - A.D. 2048</description>
<year>1993</year>
<publisher>ディー・オー (D.O.)</publisher>
<info name="release" value="199311xx" />
@ -8634,7 +8653,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Zan II - Towns Special</description>
<year>1992</year>
<publisher>ウルフチーム (WolfTeam)</publisher>
<info name="release" value="199204xx" />
@ -8696,7 +8715,7 @@ User/save disks that can be created from the game itself are not included.
<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>
<description>Zoku Dungeon Master - Chaos no Gyakushuu</description>
<year>1990</year>
<publisher>ビクター音楽産業 (Victor Musical Industries)</publisher>
<info name="release" value="199012xx" />

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -2117,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",

View File

@ -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();
}
/*-------------------------------------------------

View File

@ -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;

View File

@ -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:

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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 )
{

View File

@ -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);

View File

@ -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);
}
@ -247,17 +229,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;
}

View File

@ -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;

View File

@ -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) );
@ -153,17 +130,6 @@ 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
@ -171,20 +137,14 @@ const address_space_config *i2cmem_device::memory_space_config( address_spacenum
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++;
}

View File

@ -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;

View File

@ -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? */

View File

@ -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);
}
@ -525,17 +453,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 ) );
}

View File

@ -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; }
};

View File

@ -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)

View File

@ -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;

View File

@ -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) \

View File

@ -170,17 +170,19 @@ 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);
m_space_io->install_readwrite_handler(0x0020, 0x003f, read8_delegate(FUNC(pic8259_device::read), &(*m_pic1)), write8_delegate(FUNC(pic8259_device::write), &(*m_pic1)), 0x0000ffff);
m_space_io->install_readwrite_handler(0x0040, 0x0043, read8_delegate(FUNC(pit8254_device::read), &(*m_ctc)), write8_delegate(FUNC(pit8254_device::write), &(*m_ctc)), 0xffffffff);
m_space_io->install_readwrite_handler(0x0060, 0x0063, read8_delegate(FUNC(wd7600_device::keyb_data_r), this), write8_delegate(FUNC(wd7600_device::keyb_data_w), this), 0x000000ff);
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(0x0060, 0x0063, read8_delegate(FUNC(wd7600_device::keyb_data_r), this), write8_delegate(FUNC(wd7600_device::keyb_data_w), this), 0x0000ffff);
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);
@ -287,14 +289,20 @@ WRITE_LINE_MEMBER( wd7600_device::ctc_out2_w )
WRITE8_MEMBER( wd7600_device::keyb_data_w )
{
// if(LOG) logerror("WD7600 '%s': keyboard data write %02x\n", tag(), data);
m_keybc->data_w(space,0,data);
if(ACCESSING_BITS_0_7)
m_keybc->data_w(space,0,data);
else
portb_w(space,0,data);
}
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;
if(ACCESSING_BITS_0_7)
return ret;
else
return portb_r(space,0);
}
WRITE8_MEMBER( wd7600_device::keyb_cmd_w )

View File

@ -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;
}

View File

@ -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");

View File

@ -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;
}
}

View File

@ -316,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) \
@ -326,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 \

View File

@ -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();
}
@ -955,16 +954,6 @@ UINT64 debugger_cpu::read_opcode(address_space &space, offs_t address, int size)
INTERNAL HELPERS
***************************************************************************/
/*-------------------------------------------------
exit - free all memory
-------------------------------------------------*/
void debugger_cpu::exit()
{
global_free(m_symtable);
}
/*-------------------------------------------------
on_vblank - called when a VBLANK hits
-------------------------------------------------*/

View File

@ -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;

View File

@ -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)));

View File

@ -27,8 +27,6 @@ enum debug_view_type
DVT_DISASSEMBLY,
DVT_MEMORY,
DVT_LOG,
DVT_TIMERS,
DVT_ALLOCS,
DVT_BREAK_POINTS,
DVT_WATCH_POINTS
};

View File

@ -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; }

View File

@ -20,7 +20,7 @@
//**************************************************************************
// TYPE DEFINITIONS
// MACROS
//**************************************************************************
#define MCFG_OUTPUT_INDEX(_index) \

View File

@ -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;
}
}

View File

@ -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
};

View File

@ -28,6 +28,7 @@
// standard C++ includes
#include <exception>
#include <type_traits>
#include <typeinfo>
// core system includes
@ -312,48 +313,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 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 std::enable_if_t<std::is_base_of<device_t, Source>::value> report_bad_cast(Source *const 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));
}
#endif
return static_cast<_Dest>(src);
if (src) report_bad_device_cast(src, typeid(Source), typeid(Dest));
else report_bad_cast(typeid(Source), typeid(Dest));
}
template<class _Dest, class _Source>
inline _Dest downcast(_Source &src)
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 <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)
{
#if defined(MAME_DEBUG) && !defined(MAME_DEBUG_FAST)
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);
}

View File

@ -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 };

View File

@ -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;

View File

@ -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;
/*!
@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
//**************************************************************************
// SCREEN DEVICE CONFIGURATION MACROS
//**************************************************************************
@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) \

View File

@ -894,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());
}
@ -977,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
} // namespace ui

View File

@ -1245,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)

View File

@ -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;

View File

@ -301,6 +301,7 @@ dfruit.cpp
dgpix.cpp
dietgo.cpp
discoboy.cpp
divebomb.cpp
diverboy.cpp
djboy.cpp
djmain.cpp

View File

@ -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);
}

View File

@ -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)

View File

@ -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);

View File

@ -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()

View File

@ -431,7 +431,7 @@ static ADDRESS_MAP_START( karatblzbl_sound_map, AS_PROGRAM, 8, aerofgt_state )
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_PROGRAM, 8, aerofgt_state )
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)

View File

@ -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)

View File

@ -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 )

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -1721,7 +1721,7 @@ 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, 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, 0xff00, read8_delegate(FUNC(astrocde_state::gorf_io_2_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));
}

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -755,7 +755,7 @@ int ohci_hlean2131qc_device::handle_nonstandard_request(int endpoint, USBSetupPa
}
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;
@ -1091,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)
@ -1163,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) \

View File

@ -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

View File

@ -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;
}
}

View File

@ -335,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);

View File

@ -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;
}

View File

@ -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('?')

631
src/mame/drivers/divebomb.cpp Executable file
View File

@ -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 )

View File

@ -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 )

View File

@ -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

View File

@ -295,6 +295,7 @@ PALETTE_INIT_MEMBER(esh_state, esh)
g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
/* blue component */
// TODO: actually opaque flag
if((color_prom[i+0x100] >> 7) & 1)
b = 0xff;
else
@ -326,25 +327,10 @@ static GFXDECODE_START( esh )
GFXDECODE_ENTRY("gfx2", 0, esh_gfx_layout, 0x0, 0x20)
GFXDECODE_END
#if 0
void esh_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
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");
}
}
#endif
INTERRUPT_GEN_MEMBER(esh_state::vblank_callback_esh)
{
// IRQ
device.execute().set_input_line(0, HOLD_LINE);
//timer_set(attotime::from_usec(50), TIMER_IRQ_STOP);
}
// TODO: 0xfe NMI enabled after writing to LD command port, NMI reads LD port.

View File

@ -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
******************************************************************************
@ -169,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.
---------------------------------
@ -309,11 +332,14 @@ 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
@ -326,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); }
@ -350,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);
@ -502,6 +538,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
******************************************************************************/
@ -691,6 +779,21 @@ 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 )
@ -1027,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
@ -1092,6 +1288,39 @@ 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 */
@ -1236,6 +1465,38 @@ 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) )
@ -1317,13 +1578,16 @@ ROM_END
******************************************************************************/
/* 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 )
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( 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 )
@ -1333,4 +1597,4 @@ CONS( 1982, fscc9, 0, 0, sc9, sc12, driver_device, 0,
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, fexcelv, fexcel, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -486,7 +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, feagv9, 0, 0, eagv9, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6117-9)", 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 )

View File

@ -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)

View File

@ -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);
}

View File

@ -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

View File

@ -14256,21 +14256,14 @@ ROM_START( fl7_50 ) // Serial 00000069A1C9.
ROM_LOAD( "27c1001.u6", 0x00000, 0x20000, CRC(00eac3c1) SHA1(1a955f8bc044e17f0885b4b126a66d7ad191e410) )
ROM_REGION( 0x8000, "gfx2", 0 )
ROM_LOAD( "27c256.u3", 0x00000, 0x8000, CRC(cfc8f3e2) SHA1(7dd72e3ffb0904776f3c07635b953e72f4c63068) )
ROM_LOAD( "27c256.u3", 0x0000, 0x8000, CRC(cfc8f3e2) SHA1(7dd72e3ffb0904776f3c07635b953e72f4c63068) )
/* Bipolar PROMs from the W4 hardware version */
/* Proper bipolar PROM dump */
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD( "82s129.g13", 0x0000, 0x0100, CRC(3ed8a612) SHA1(4189f1abb0033aeb64b56f63bdbc29d980c43909) )
ROM_LOAD( "82s129.g14", 0x0100, 0x0100, CRC(aa068a22) SHA1(42c6d77e5aa360c529f8aca6b925010c15eedcd7) )
ROM_LOAD( "am27s29.u1", 0x0000, 0x0200, CRC(3fe7e369) SHA1(cf4ae287cb58581a4bf9e9ff1994426461fb38cc) )
ROM_REGION( 0x20, "proms2", 0 )
ROM_LOAD( "82s123.d13", 0x0000, 0x0020, CRC(c6b41352) SHA1(d7c3b5aa32e4e456c9432a13bede1db6d62eb270) )
ROM_REGION( 0x100, "unkprom", 0 )
ROM_LOAD( "82s129.f3", 0x0000, 0x0100, CRC(1d668d4a) SHA1(459117f78323ea264d3a29f1da2889bbabe9e4be) )
ROM_REGION( 0x20, "unkprom2", 0 )
ROM_LOAD( "82s123.d12", 0x0000, 0x0020, CRC(6df3f972) SHA1(0096a7f7452b70cac6c0752cb62e24b643015b5c) )
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
@ -14294,24 +14287,17 @@ ROM_START( fl7_500 ) // Serial 000000125873.
ROM_LOAD( "27c1001.u6", 0x00000, 0x20000, CRC(00eac3c1) SHA1(1a955f8bc044e17f0885b4b126a66d7ad191e410) )
ROM_REGION( 0x8000, "gfx2", 0 )
ROM_LOAD( "27c256.u3", 0x00000, 0x8000, CRC(4e3bd980) SHA1(202d3135da7ab435f487943079d88b170dc10955) )
ROM_LOAD( "27c256.u3", 0x0000, 0x8000, CRC(4e3bd980) SHA1(202d3135da7ab435f487943079d88b170dc10955) )
/* Bipolar PROMs from the W4 hardware version */
/* Proper bipolar PROM dump */
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD( "82s129.g13", 0x0000, 0x0100, CRC(3ed8a612) SHA1(4189f1abb0033aeb64b56f63bdbc29d980c43909) )
ROM_LOAD( "82s129.g14", 0x0100, 0x0100, CRC(aa068a22) SHA1(42c6d77e5aa360c529f8aca6b925010c15eedcd7) )
ROM_LOAD( "am27s29.u1", 0x0000, 0x0200, CRC(3fe7e369) SHA1(cf4ae287cb58581a4bf9e9ff1994426461fb38cc) )
ROM_REGION( 0x20, "proms2", 0 )
ROM_LOAD( "82s123.d13", 0x0000, 0x0020, CRC(c6b41352) SHA1(d7c3b5aa32e4e456c9432a13bede1db6d62eb270) )
ROM_REGION( 0x100, "unkprom", 0 )
ROM_LOAD( "82s129.f3", 0x0000, 0x0100, CRC(1d668d4a) SHA1(459117f78323ea264d3a29f1da2889bbabe9e4be) )
ROM_REGION( 0x20, "unkprom2", 0 )
ROM_LOAD( "82s123.d12", 0x0000, 0x0020, CRC(6df3f972) SHA1(0096a7f7452b70cac6c0752cb62e24b643015b5c) )
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_LOAD( "ds2401.bin", 0x0000, 0x0008, NO_DUMP ) // Hand built to match our ROM set
ROM_END
@ -14332,21 +14318,14 @@ ROM_START( fl7_2000 ) // Serial 00000063A47F.
ROM_LOAD( "m27c1001.u6", 0x00000, 0x20000, CRC(5a2157bb) SHA1(2b170102caf1224df7a6d33bb84d19114f453d89) )
ROM_REGION( 0x8000, "gfx2", 0 )
ROM_LOAD( "27c256.u3", 0x00000, 0x8000, CRC(cfc8f3e2) SHA1(7dd72e3ffb0904776f3c07635b953e72f4c63068) )
ROM_LOAD( "27c256.u3", 0x0000, 0x8000, CRC(cfc8f3e2) SHA1(7dd72e3ffb0904776f3c07635b953e72f4c63068) )
/* Bipolar PROMs from the W4 hardware version */
/* Proper bipolar PROM dump */
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD( "82s129.g13", 0x0000, 0x0100, CRC(3ed8a612) SHA1(4189f1abb0033aeb64b56f63bdbc29d980c43909) )
ROM_LOAD( "82s129.g14", 0x0100, 0x0100, CRC(aa068a22) SHA1(42c6d77e5aa360c529f8aca6b925010c15eedcd7) )
ROM_LOAD( "am27s29.u1", 0x0000, 0x0200, CRC(3fe7e369) SHA1(cf4ae287cb58581a4bf9e9ff1994426461fb38cc) )
ROM_REGION( 0x20, "proms2", 0 )
ROM_LOAD( "82s123.d13", 0x0000, 0x0020, CRC(c6b41352) SHA1(d7c3b5aa32e4e456c9432a13bede1db6d62eb270) )
ROM_REGION( 0x100, "unkprom", 0 )
ROM_LOAD( "82s129.f3", 0x0000, 0x0100, CRC(1d668d4a) SHA1(459117f78323ea264d3a29f1da2889bbabe9e4be) )
ROM_REGION( 0x20, "unkprom2", 0 )
ROM_LOAD( "82s123.d12", 0x0000, 0x0020, CRC(6df3f972) SHA1(0096a7f7452b70cac6c0752cb62e24b643015b5c) )
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
@ -15099,9 +15078,9 @@ GAMEL( 1993, bingownga, bingowng, bingownga,bingownga,driver_device, 0,
// --- Flaming 7's hardware (W-4 derivative) ---
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, fl7_3121, flaming7, flaming7, driver_device, 0, ROT0, "Cyberdyne Systems", "Flaming 7 (Custom Hardware, Main, 50)", MACHINE_NOT_WORKING )
GAME( 199?, fl7_500, fl7_3121, flaming7, flaming7, driver_device, 0, ROT0, "Cyberdyne Systems", "Flaming 7 (Custom Hardware, Main, 500)", MACHINE_NOT_WORKING )
GAME( 199?, fl7_2000, fl7_3121, flaming7, flaming7, driver_device, 0, ROT0, "Cyberdyne Systems", "Flaming 7 (Custom Hardware, Main, 2000)", MACHINE_NOT_WORKING )
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 ---

View File

@ -937,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);
@ -1404,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;
}
@ -1440,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);

View File

@ -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 )

View File

@ -333,75 +333,75 @@ void m20_state::install_memory()
/* install mainboard memory (aka DRAM0) */
/* <0>0000 */
pspace.install_readwrite_bank(0x0000, 0x3fff, 0x3fff, "dram0_4000");
dspace.install_readwrite_bank(0x0000, 0x3fff, 0x3fff, "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, "dram0_8000");
pspace.install_readwrite_bank(0x4000, 0x7fff, 0, "dram0_8000");
/* <0>8000 */
pspace.install_readwrite_bank(0x8000, 0xbfff, 0x3fff, "dram0_c000");
pspace.install_readwrite_bank(0x8000, 0xbfff, 0, "dram0_c000");
/* <0>C000 */
pspace.install_readwrite_bank(0xc000, 0xcfff, 0x3fff, "dram0_10000");
pspace.install_readwrite_bank(0xc000, 0xcfff, 0, "dram0_10000");
/* <1>0000 */
pspace.install_readwrite_bank(0x10000, 0x13fff, 0x3fff, "dram0_8000");
dspace.install_readwrite_bank(0x10000, 0x13fff, 0x3fff, "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, "dram0_c000");
dspace.install_readwrite_bank(0x14000, 0x17fff, 0x3fff, "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, "dram0_10000");
dspace.install_readwrite_bank(0x18000, 0x1bfff, 0x3fff, "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, "dram0_14000");
dspace.install_readwrite_bank(0x20000, 0x23fff, 0x3fff, "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, "dram0_18000");
dspace.install_readwrite_bank(0x24000, 0x27fff, 0x3fff, "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, "dram0_1c000");
dspace.install_readwrite_bank(0x28000, 0x2bfff, 0x3fff, "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, "dram0_0000");
dspace.install_readwrite_bank(0x30000, 0x33fff, 0x3fff, "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, "dram0_8000");
dspace.install_readwrite_bank(0x50000, 0x53fff, 0, "dram0_8000");
/* <5>4000 */
dspace.install_readwrite_bank(0x54000, 0x57fff, 0x3fff, "dram0_c000");
dspace.install_readwrite_bank(0x54000, 0x57fff, 0, "dram0_c000");
/* <5>8000 */
dspace.install_readwrite_bank(0x58000, 0x5bfff, 0x3fff, "dram0_10000");
dspace.install_readwrite_bank(0x58000, 0x5bfff, 0, "dram0_10000");
/* <5>c000 expansion bus */
/* <6>0000 */
pspace.install_readwrite_bank(0x60000, 0x63fff, 0x3fff, "dram0_8000");
dspace.install_readwrite_bank(0x60000, 0x63fff, 0x3fff, "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, "dram0_c000");
dspace.install_readwrite_bank(0x64000, 0x67fff, 0x3fff, "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, "dram0_10000");
dspace.install_readwrite_bank(0x68000, 0x6bfff, 0x3fff, "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, "dram0_8000");
dspace.install_readwrite_bank(0x80000, 0x83fff, 0x3fff, "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, "dram0_c000");
dspace.install_readwrite_bank(0x84000, 0x87fff, 0x3fff, "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, "dram0_18000");
dspace.install_readwrite_bank(0x90000, 0x93fff, 0x3fff, "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, "dram0_1c000");
dspace.install_readwrite_bank(0x94000, 0x97fff, 0x3fff, "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, "dram0_8000");
dspace.install_readwrite_bank(0xa0000, 0xa3fff, 0x3fff, "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, "dram0_c000");
dspace.install_readwrite_bank(0xa4000, 0xa7fff, 0x3fff, "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, "dram1_0000");
pspace.install_readwrite_bank(0x88000, 0x8bfff, 0x3fff, "dram1_4000");
pspace.install_readwrite_bank(0xa8000, 0xabfff, 0x3fff, "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, "dram1_4000");
dspace.install_readwrite_bank(0x1c000, 0x1ffff, 0x3fff, "dram1_0000");
dspace.install_readwrite_bank(0x2c000, 0x2ffff, 0x3fff, "dram1_0000");
dspace.install_readwrite_bank(0xa8000, 0xabfff, 0x3fff, "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, "dram2_0000");
pspace.install_readwrite_bank(0x98000, 0x9bfff, 0x3fff, "dram2_4000");
pspace.install_readwrite_bank(0xac000, 0xaffff, 0x3fff, "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, "dram2_0000");
dspace.install_readwrite_bank(0xc000, 0xffff, 0x3fff, "dram2_4000");
dspace.install_readwrite_bank(0x88000, 0x8bfff, 0x3fff, "dram2_4000");
dspace.install_readwrite_bank(0x98000, 0x9bfff, 0x3fff, "dram2_4000");
dspace.install_readwrite_bank(0xac000, 0xaffff, 0x3fff, "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, "dram3_0000");
pspace.install_readwrite_bank(0xb0000, 0xb3fff, 0x3fff, "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, "dram3_0000");
dspace.install_readwrite_bank(0x48000, 0x4bfff, 0x3fff, "dram3_4000");
dspace.install_readwrite_bank(0x8c000, 0x8ffff, 0x3fff, "dram3_0000");
dspace.install_readwrite_bank(0x9c000, 0x9ffff, 0x3fff, "dram3_0000");
dspace.install_readwrite_bank(0xb0000, 0xb3fff, 0x3fff, "dram3_4000");
dspace.install_readwrite_bank(0xc0000, 0xc3fff, 0x3fff, "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, "dram1_0000");
pspace.install_readwrite_bank(0x88000, 0x8bfff, 0x3fff, "dram1_4000");
pspace.install_readwrite_bank(0x8c000, 0x8ffff, 0x3fff, "dram1_8000");
pspace.install_readwrite_bank(0x98000, 0x9bfff, 0x3fff, "dram1_c000");
pspace.install_readwrite_bank(0x9c000, 0x9ffff, 0x3fff, "dram1_10000");
pspace.install_readwrite_bank(0xa8000, 0xabfff, 0x3fff, "dram1_4000");
pspace.install_readwrite_bank(0xac000, 0xaffff, 0x3fff, "dram1_8000");
pspace.install_readwrite_bank(0xb0000, 0xb3fff, 0x3fff, "dram1_14000");
pspace.install_readwrite_bank(0xb4000, 0xb7fff, 0x3fff, "dram1_18000");
pspace.install_readwrite_bank(0xb8000, 0xbbfff, 0x3fff, "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, "dram1_4000");
dspace.install_readwrite_bank(0x1c000, 0x1ffff, 0x3fff, "dram1_0000");
dspace.install_readwrite_bank(0x2c000, 0x2ffff, 0x3fff, "dram1_0000");
dspace.install_readwrite_bank(0x88000, 0x8bfff, 0x3fff, "dram1_c000");
dspace.install_readwrite_bank(0x8c000, 0x8ffff, 0x3fff, "dram1_10000");
dspace.install_readwrite_bank(0x98000, 0x9bfff, 0x3fff, "dram1_c000");
dspace.install_readwrite_bank(0x9c000, 0x9ffff, 0x3fff, "dram1_10000");
dspace.install_readwrite_bank(0xa8000, 0xabfff, 0x3fff, "dram1_4000");
dspace.install_readwrite_bank(0xac000, 0xaffff, 0x3fff, "dram1_8000");
dspace.install_readwrite_bank(0xb0000, 0xb3fff, 0x3fff, "dram1_14000");
dspace.install_readwrite_bank(0xb4000, 0xb7fff, 0x3fff, "dram1_18000");
dspace.install_readwrite_bank(0xb8000, 0xbbfff, 0x3fff, "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, "dram2_0000");
pspace.install_readwrite_bank(0xc0000, 0xc3fff, 0x3fff, "dram2_4000");
pspace.install_readwrite_bank(0xc4000, 0xc7fff, 0x3fff, "dram2_8000");
pspace.install_readwrite_bank(0xc8000, 0xcbfff, 0x3fff, "dram2_c000");
pspace.install_readwrite_bank(0xcc000, 0xcffff, 0x3fff, "dram2_10000");
pspace.install_readwrite_bank(0xd0000, 0xd3fff, 0x3fff, "dram2_14000");
pspace.install_readwrite_bank(0xd4000, 0xd7fff, 0x3fff, "dram2_18000");
pspace.install_readwrite_bank(0xd8000, 0xdbfff, 0x3fff, "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, "dram2_0000");
dspace.install_readwrite_bank(0xc000, 0xffff, 0x3fff, "dram2_4000");
dspace.install_readwrite_bank(0xbc000, 0xbffff, 0x3fff, "dram2_0000");
dspace.install_readwrite_bank(0xc0000, 0xc3fff, 0x3fff, "dram2_4000");
dspace.install_readwrite_bank(0xc4000, 0xc7fff, 0x3fff, "dram2_8000");
dspace.install_readwrite_bank(0xc8000, 0xcbfff, 0x3fff, "dram2_c000");
dspace.install_readwrite_bank(0xcc000, 0xcffff, 0x3fff, "dram2_10000");
dspace.install_readwrite_bank(0xd0000, 0xd3fff, 0x3fff, "dram2_14000");
dspace.install_readwrite_bank(0xd4000, 0xd7fff, 0x3fff, "dram2_18000");
dspace.install_readwrite_bank(0xd8000, 0xdbfff, 0x3fff, "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, "dram3_0000");
pspace.install_readwrite_bank(0xe0000, 0xe3fff, 0x3fff, "dram3_4000");
pspace.install_readwrite_bank(0xe4000, 0xe7fff, 0x3fff, "dram3_8000");
pspace.install_readwrite_bank(0xe8000, 0xebfff, 0x3fff, "dram3_c000");
pspace.install_readwrite_bank(0xec000, 0xeffff, 0x3fff, "dram3_10000");
pspace.install_readwrite_bank(0xf0000, 0xf3fff, 0x3fff, "dram3_14000");
pspace.install_readwrite_bank(0xf4000, 0xf7fff, 0x3fff, "dram3_18000");
pspace.install_readwrite_bank(0xf8000, 0xfbfff, 0x3fff, "dram3_1c000");
pspace.install_readwrite_bank(0xfc000, 0xfffff, 0x3fff, "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, "dram3_0000");
dspace.install_readwrite_bank(0x48000, 0x4bfff, 0x3fff, "dram3_4000");
dspace.install_readwrite_bank(0xdc000, 0xdffff, 0x3fff, "dram3_0000");
dspace.install_readwrite_bank(0xe0000, 0xe3fff, 0x3fff, "dram3_4000");
dspace.install_readwrite_bank(0xe4000, 0xe7fff, 0x3fff, "dram3_8000");
dspace.install_readwrite_bank(0xe8000, 0xebfff, 0x3fff, "dram3_c000");
dspace.install_readwrite_bank(0xec000, 0xeffff, 0x3fff, "dram3_10000");
dspace.install_readwrite_bank(0xf0000, 0xf3fff, 0x3fff, "dram3_14000");
dspace.install_readwrite_bank(0xf4000, 0xf7fff, 0x3fff, "dram3_18000");
dspace.install_readwrite_bank(0xf8000, 0xfbfff, 0x3fff, "dram3_1c000");
dspace.install_readwrite_bank(0xfc000, 0xfffff, 0x3fff, "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);

View File

@ -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)

View File

@ -1460,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? */

View File

@ -4,8 +4,9 @@
Metal Freezer (c) 1989 Seibu
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:

View File

@ -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 )

View File

@ -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)

View File

@ -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

View File

@ -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) )

View File

@ -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 )

View File

@ -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;
}

View File

@ -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

View File

@ -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);

View File

@ -817,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

View File

@ -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)

View File

@ -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

View File

@ -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 )

View File

@ -31,6 +31,7 @@
#include "machine/mc68681.h"
#include "machine/ms7004.h"
#include "machine/bankdev.h"
#include "machine/x2212.h"
#include "video/upd7220.h"
#define VERBOSE_DBG 1 /* general debug messages */
@ -55,7 +56,8 @@ public:
m_duart(*this, "duart"),
m_hgdc(*this, "upd7220"),
m_bank(*this, "bank"),
m_video_ram(*this, "video_ram"),
m_nvram(*this, "x2212"),
m_palette(*this, "palette"),
m_rom(*this, "maincpu"){ }
required_device<cpu_device> m_maincpu;
@ -64,11 +66,15 @@ public:
required_device<mc68681_device> m_duart;
required_device<upd7220_device> m_hgdc;
required_device<address_map_bank_device> m_bank;
required_shared_ptr<UINT16> m_video_ram;
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);
@ -78,6 +84,16 @@ public:
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);
@ -87,11 +103,14 @@ public:
DECLARE_DRIVER_INIT(vt240);
virtual void machine_reset() override;
UPD7220_DRAW_TEXT_LINE_MEMBER( hgdc_draw_text );
UPD7220_DISPLAY_PIXELS_MEMBER(hgdc_draw);
UINT8 m_i8085_out, m_t11_out;
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)
@ -103,53 +122,34 @@ WRITE_LINE_MEMBER(vt240_state::write_keyboard_clock)
WRITE_LINE_MEMBER(vt240_state::i8085_rdy_w)
{
//m_maincpu->set_input_line(T11_IRQ1, state ? ASSERT_LINE : CLEAR_LINE);
m_i8085_rdy = !state;
}
/* TODO */
UPD7220_DRAW_TEXT_LINE_MEMBER( vt240_state::hgdc_draw_text )
READ_LINE_MEMBER(vt240_state::i8085_sid_r)
{
//int x;
//int xi,yi;
//int tile,color;
//UINT8 tile_data;
#if 0
for( x = 0; x < pitch; x++ )
{
tile = (vram[(addr+x)*2] & 0xff);
color = (vram[(addr+x)*2+1] & 0x0f);
for( yi = 0; yi < lr; yi++)
{
tile_data = m_char_rom[(tile*8+yi) & 0x7ff];
if(cursor_on && cursor_addr == addr+x) //TODO
tile_data^=0xff;
for( xi = 0; xi < 8; xi++)
{
int res_x,res_y;
int pen = (tile_data >> xi) & 1 ? color : 0;
if(yi >= 8) { pen = 0; }
res_x = x * 8 + xi;
res_y = y + yi;
if(res_x > screen_max_x || res_y > screen_max_y)
continue;
bitmap.pix16(res_y, res_x) = pen;
}
}
}
#endif
return !m_t11;
}
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++)
{
pen = ((gfx >> xi) & 1) ? 1 : 0;
bitmap.pix32(y, x + xi) = palette[pen];
}
}
READ8_MEMBER(vt240_state::t11_comm_r)
{
m_t11 = 1;
m_i8085->set_input_line(I8085_RST65_LINE, CLEAR_LINE);
return m_t11_out;
}
@ -163,7 +163,6 @@ READ8_MEMBER(vt240_state::i8085_comm_r)
switch(offset)
{
case 0:
m_i8085->set_input_line(I8085_RST65_LINE, CLEAR_LINE);
return m_i8085_out;
}
return 0xff;
@ -175,10 +174,13 @@ WRITE8_MEMBER(vt240_state::i8085_comm_w)
{
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;
}
}
@ -194,7 +196,7 @@ WRITE8_MEMBER(vt240_state::mem_map_cs_w)
READ8_MEMBER(vt240_state::ctrl_r)
{
return m_mem_map_sel;
return m_mem_map_sel | (m_i8085_rdy << 6) | (m_t11 << 7);
}
WRITE8_MEMBER(vt240_state::mem_map_sel_w)
@ -222,9 +224,74 @@ WRITE16_MEMBER(vt240_state::mem_w)
}
}
READ8_MEMBER(vt240_state::char_buf_r)
{
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);
}
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, 0x0ffff) AM_ROM AM_REGION("maincpu", 0)
AM_RANGE(0x00000, 0x1ffff) AM_ROM AM_REGION("maincpu", 0)
AM_RANGE(0x80000, 0x87fff) AM_RAM
ADDRESS_MAP_END
@ -235,13 +302,21 @@ static ADDRESS_MAP_START( vt240_mem, AS_PROGRAM, 16, vt240_state )
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
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)
// 0176xxx NVR
AM_RANGE (0176000, 0176777) AM_DEVREADWRITE8("x2212", x2212_device, read, write, 0x00ff)
// 017700x System comm logic
ADDRESS_MAP_END
@ -257,18 +332,24 @@ 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(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(pcg_r,pcg_w) // 0x30 PCG
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
static ADDRESS_MAP_START( upd7220_map, AS_0, 16, vt240_state)
AM_RANGE(0x00000, 0x0ffff) AM_RAM AM_SHARE("video_ram")
AM_RANGE(0x00000, 0x3ffff) AM_READWRITE8(vram_r, vram_w, 0xffff)
ADDRESS_MAP_END
void vt240_state::machine_reset()
{
m_i8251->write_cts(0);
m_nvram->recall(ASSERT_LINE);
m_nvram->recall(CLEAR_LINE);
m_mem_map_sel = 0;
}
@ -296,6 +377,7 @@ static MACHINE_CONFIG_START( vt240, vt240_state )
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)
@ -308,14 +390,15 @@ static MACHINE_CONFIG_START( vt240, vt240_state )
MCFG_SCREEN_REFRESH_RATE(50)
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))
@ -341,6 +424,8 @@ static MACHINE_CONFIG_START( vt240, vt240_state )
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_DERIVED( mc7105, vt240 )
@ -365,7 +450,7 @@ ROM_START( mc7105 )
ROM_LOAD( "027.bin", 0x8000, 0x8000, CRC(a159b412) SHA1(956097ccc2652d494258b3682498cfd3096d7d4f))
ROM_LOAD( "028.bin", 0x0000, 0x8000, CRC(b253151f) SHA1(22ffeef8eb5df3c38bfe91266f26d1e7822cdb53))
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASEFF )
ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "029.bin", 0x00000, 0x8000, CRC(4a6db217) SHA1(47637325609ea19ffab61fe31e2700d72fa50729))
ROM_LOAD16_BYTE( "031.bin", 0x00001, 0x8000, CRC(47129579) SHA1(39de9e2e26f90c5da5e72a09ff361c1a94b9008a))
ROM_LOAD16_BYTE( "030.bin", 0x10000, 0x8000, CRC(05fd7b75) SHA1(2ad8c14e76accfa1b9b8748c58e9ebbc28844a47))
@ -375,9 +460,10 @@ 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( 0x40000, "maincpu", ROMREGION_ERASEFF )
ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF )
ROM_DEFAULT_BIOS( "vt240" )
// according to the schematics an even older set exists, variation 'E1' with roms:
// e100/8085: 23-003e6

Some files were not shown because too many files have changed in this diff Show More