This commit is contained in:
RobertoFresca 2015-06-01 02:42:34 -03:00
commit 5fce1597df
92 changed files with 2063 additions and 1198 deletions

View File

@ -3697,7 +3697,7 @@ static PaError PaAlsaStream_GetAvailableFrames( PaAlsaStream *self, int queryCap
*available, int *xrunOccurred )
{
PaError result = paNoError;
unsigned long captureFrames, playbackFrames;
unsigned long captureFrames = 0, playbackFrames = 0;
*xrunOccurred = 0;
assert( queryCapture || queryPlayback );
@ -4579,7 +4579,7 @@ error:
PaError PaAlsa_GetStreamInputCard( PaStream* s, int* card )
{
PaAlsaStream *stream;
PaAlsaStream *stream = NULL;
PaError result = paNoError;
snd_pcm_info_t* pcmInfo;
@ -4598,7 +4598,7 @@ error:
PaError PaAlsa_GetStreamOutputCard( PaStream* s, int* card )
{
PaAlsaStream *stream;
PaAlsaStream *stream = NULL;
PaError result = paNoError;
snd_pcm_info_t* pcmInfo;

View File

@ -4,9 +4,6 @@
#
# Core makefile for building MAME and derivatives
#
# Copyright (c) Nicola Salmoria and the MAME Team.
# Visit http://mamedev.org for licensing and usage restrictions.
#
###########################################################################
@ -396,6 +393,10 @@ ifdef OPTIMIZE
PARAMS += --OPTIMIZE=$(OPTIMIZE)
endif
ifdef SHLIB
PARAMS += --SHLIB=$(SHLIB)
endif
ifdef ARCHOPTS
PARAMS += --ARCHOPTS='$(ARCHOPTS)'
endif

View File

@ -311,6 +311,21 @@ newoption {
}
newoption {
trigger = "SHLIB",
description = "Generate shared libs.",
allowed = {
{ "0", "Static libs" },
{ "1", "Shared libs" },
}
}
if _OPTIONS["SHLIB"]=="1" then
LIBTYPE = "SharedLib"
else
LIBTYPE = "StaticLib"
end
PYTHON = "python"
if _OPTIONS["PYTHON_EXECUTABLE"]~=nil then
@ -743,6 +758,12 @@ if _OPTIONS["OPTIMIZE"] then
end
end
if _OPTIONS["SHLIB"] then
buildoptions {
"-fPIC"
}
end
if _OPTIONS["SSE2"]=="1" then
buildoptions {
"-msse2",

View File

@ -554,6 +554,7 @@ project "bgfx"
configuration { "gmake" }
buildoptions {
"-Wno-uninitialized",
"-Wno-unused-function",
}
configuration { }
@ -619,24 +620,32 @@ project "portaudio"
"-Wno-bad-function-cast",
"-Wno-undef",
"-Wno-missing-braces",
"-Wno-unused-but-set-variable",
"-Wno-maybe-uninitialized",
"-Wno-unused-variable",
"-Wno-unused-value",
"-Wno-unused-function",
"-Wno-unknown-pragmas",
"-Wno-sometimes-uninitialized",
}
local version = str_to_version(_OPTIONS["gcc_version"])
if (_OPTIONS["gcc"]~=nil) and string.find(_OPTIONS["gcc"], "clang") then
buildoptions_c {
"-Wno-unknown-warning-option",
"-Wno-absolute-value",
"-Wno-unused-variable",
}
local version = str_to_version(_OPTIONS["gcc_version"])
if (_OPTIONS["gcc"]~=nil) then
if string.find(_OPTIONS["gcc"], "clang") then
buildoptions_c {
"-Wno-unknown-warning-option",
"-Wno-absolute-value",
"-Wno-unused-but-set-variable",
"-Wno-maybe-uninitialized",
"-Wno-sometimes-uninitialized",
}
else
if (version >= 40600) then
buildoptions_c {
"-Wno-unused-but-set-variable",
"-Wno-maybe-uninitialized",
"-Wno-sometimes-uninitialized",
}
end
end
end
configuration { "vs*" }
buildoptions {
"/wd4204", -- warning C4204: nonstandard extension used : non-constant aggregate initializer

View File

@ -2,8 +2,9 @@
-- copyright-holders:MAMEdev Team
project ("emu")
targetsubdir(_OPTIONS["target"] .."_" .. _OPTIONS["subtarget"])
uuid ("e6fa15e4-a354-4526-acef-13c8e80fcacf")
kind "StaticLib"
kind (LIBTYPE)
options {
"ForceCPP",
}
@ -265,8 +266,6 @@ files {
MAME_DIR .. "src/emu/machine/laserdsc.h",
MAME_DIR .. "src/emu/machine/latch.c",
MAME_DIR .. "src/emu/machine/latch.h",
MAME_DIR .. "src/emu/machine/netlist.c",
MAME_DIR .. "src/emu/machine/netlist.h",
MAME_DIR .. "src/emu/machine/nvram.c",
MAME_DIR .. "src/emu/machine/nvram.h",
MAME_DIR .. "src/emu/machine/ram.c",
@ -358,7 +357,7 @@ function emuProject(_target, _subtarget)
project ("optional")
uuid (os.uuid("optional-" .. _target .."_" .. _subtarget))
kind "StaticLib"
kind (LIBTYPE)
targetsubdir(_target .."_" .. _subtarget)
options {
"ForceCPP",
@ -388,16 +387,17 @@ function emuProject(_target, _subtarget)
dofile(path.join("src", "sound.lua"))
dofile(path.join("src", "netlist.lua"))
dofile(path.join("src", "video.lua"))
dofile(path.join("src", "machine.lua"))
-- netlist now defines a project
dofile(path.join("src", "netlist.lua"))
project ("bus")
uuid ("5d782c89-cf7e-4cfe-8f9f-0d4bfc16c91d")
kind "StaticLib"
kind (LIBTYPE)
targetsubdir(_target .."_" .. _subtarget)
options {
"ForceCPP",
@ -428,7 +428,7 @@ function emuProject(_target, _subtarget)
project ("dasm")
uuid ("f2d28b0a-6da5-4f78-b629-d834aa00429d")
kind "StaticLib"
kind (LIBTYPE)
targetsubdir(_target .."_" .. _subtarget)
options {
"ForceCPP",

View File

@ -2,8 +2,9 @@
-- copyright-holders:MAMEdev Team
project "utils"
targetsubdir(_OPTIONS["target"] .."_" .. _OPTIONS["subtarget"])
uuid "22489ad0-4cb2-4d91-ad81-24b0d80ca30a"
kind "StaticLib"
kind (LIBTYPE)
options {
"ForceCPP",
@ -94,8 +95,9 @@ project "utils"
project "formats"
targetsubdir(_OPTIONS["target"] .."_" .. _OPTIONS["subtarget"])
uuid "f69636b1-fcce-45ce-b09a-113e371a2d7a"
kind "StaticLib"
kind (LIBTYPE)
options {
"ForceCPP",
@ -311,6 +313,8 @@ project "formats"
MAME_DIR .. "src/lib/formats/pc98fdi_dsk.h",
MAME_DIR .. "src/lib/formats/phc25_cas.c",
MAME_DIR .. "src/lib/formats/phc25_cas.h",
MAME_DIR .. "src/lib/formats/pk8020_dsk.c",
MAME_DIR .. "src/lib/formats/pk8020_dsk.h",
MAME_DIR .. "src/lib/formats/pmd_cas.c",
MAME_DIR .. "src/lib/formats/pmd_cas.h",
MAME_DIR .. "src/lib/formats/primoptp.c",
@ -391,6 +395,8 @@ project "formats"
MAME_DIR .. "src/lib/formats/wd177x_dsk.h",
MAME_DIR .. "src/lib/formats/x07_cas.c",
MAME_DIR .. "src/lib/formats/x07_cas.h",
MAME_DIR .. "src/lib/formats/x1_dsk.c",
MAME_DIR .. "src/lib/formats/x1_dsk.h",
MAME_DIR .. "src/lib/formats/x1_tap.c",
MAME_DIR .. "src/lib/formats/x1_tap.h",
MAME_DIR .. "src/lib/formats/xdf_dsk.c",

View File

@ -2662,3 +2662,14 @@ if (MACHINES["PCI9050"]~=null) then
}
end
---------------------------------------------------
--
--@src/emu/machine/netlist.h,MACHINES += NETLIST
---------------------------------------------------
if (MACHINES["NETLIST"]~=null) then
files {
MAME_DIR .. "src/emu/machine/netlist.c",
MAME_DIR .. "src/emu/machine/netlist.h",
}
end

View File

@ -87,6 +87,7 @@ function mainProject(_target, _subtarget)
links {
"osd_" .. _OPTIONS["osd"],
"bus",
"netlist",
"optional",
"emu",
"dasm",

View File

@ -1,127 +1,152 @@
-- license:BSD-3-Clause
-- copyright-holders:MAMEdev Team
files {
MAME_DIR .. "src/emu/netlist/nl_config.h",
MAME_DIR .. "src/emu/netlist/nl_dice_compat.h",
MAME_DIR .. "src/emu/netlist/nl_lists.h",
MAME_DIR .. "src/emu/netlist/nl_time.h",
MAME_DIR .. "src/emu/netlist/nl_util.h",
MAME_DIR .. "src/emu/netlist/nl_base.c",
MAME_DIR .. "src/emu/netlist/nl_base.h",
MAME_DIR .. "src/emu/netlist/nl_parser.c",
MAME_DIR .. "src/emu/netlist/nl_parser.h",
MAME_DIR .. "src/emu/netlist/nl_setup.c",
MAME_DIR .. "src/emu/netlist/nl_setup.h",
MAME_DIR .. "src/emu/netlist/nl_factory.c",
MAME_DIR .. "src/emu/netlist/nl_factory.h",
MAME_DIR .. "src/emu/netlist/plib/pconfig.h",
MAME_DIR .. "src/emu/netlist/plib/palloc.c",
MAME_DIR .. "src/emu/netlist/plib/palloc.h",
MAME_DIR .. "src/emu/netlist/plib/plists.h",
MAME_DIR .. "src/emu/netlist/plib/poptions.h",
MAME_DIR .. "src/emu/netlist/plib/pparser.c",
MAME_DIR .. "src/emu/netlist/plib/pparser.h",
MAME_DIR .. "src/emu/netlist/plib/pstate.c",
MAME_DIR .. "src/emu/netlist/plib/pstate.h",
MAME_DIR .. "src/emu/netlist/plib/pstring.c",
MAME_DIR .. "src/emu/netlist/plib/pstring.h",
MAME_DIR .. "src/emu/netlist/analog/nld_bjt.c",
MAME_DIR .. "src/emu/netlist/analog/nld_bjt.h",
MAME_DIR .. "src/emu/netlist/analog/nld_fourterm.c",
MAME_DIR .. "src/emu/netlist/analog/nld_fourterm.h",
MAME_DIR .. "src/emu/netlist/analog/nld_solver.c",
MAME_DIR .. "src/emu/netlist/analog/nld_solver.h",
MAME_DIR .. "src/emu/netlist/analog/nld_switches.c",
MAME_DIR .. "src/emu/netlist/analog/nld_switches.h",
MAME_DIR .. "src/emu/netlist/analog/nld_twoterm.c",
MAME_DIR .. "src/emu/netlist/analog/nld_twoterm.h",
MAME_DIR .. "src/emu/netlist/analog/nld_opamps.c",
MAME_DIR .. "src/emu/netlist/analog/nld_opamps.h",
MAME_DIR .. "src/emu/netlist/analog/nld_ms_direct.h",
MAME_DIR .. "src/emu/netlist/analog/nld_ms_direct1.h",
MAME_DIR .. "src/emu/netlist/analog/nld_ms_direct2.h",
MAME_DIR .. "src/emu/netlist/analog/nld_ms_gauss_seidel.h",
MAME_DIR .. "src/emu/netlist/devices/nld_4020.c",
MAME_DIR .. "src/emu/netlist/devices/nld_4020.h",
MAME_DIR .. "src/emu/netlist/devices/nld_4066.c",
MAME_DIR .. "src/emu/netlist/devices/nld_4066.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7400.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7400.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7402.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7402.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7404.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7404.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7408.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7408.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7410.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7410.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7411.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7411.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7420.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7420.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7425.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7425.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7427.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7427.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7430.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7430.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7432.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7432.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7437.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7437.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7448.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7448.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7450.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7450.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7474.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7474.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7483.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7483.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7486.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7486.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7490.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7490.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7493.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7493.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74107.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74107.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74123.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74123.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74153.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74153.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74175.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74175.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74192.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74192.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74193.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74193.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74279.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74279.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74ls629.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74ls629.h",
MAME_DIR .. "src/emu/netlist/devices/nld_82S16.c",
MAME_DIR .. "src/emu/netlist/devices/nld_82S16.h",
MAME_DIR .. "src/emu/netlist/devices/nld_9310.c",
MAME_DIR .. "src/emu/netlist/devices/nld_9310.h",
MAME_DIR .. "src/emu/netlist/devices/nld_9312.c",
MAME_DIR .. "src/emu/netlist/devices/nld_9312.h",
MAME_DIR .. "src/emu/netlist/devices/nld_9316.c",
MAME_DIR .. "src/emu/netlist/devices/nld_9316.h",
MAME_DIR .. "src/emu/netlist/devices/nld_ne555.c",
MAME_DIR .. "src/emu/netlist/devices/nld_ne555.h",
MAME_DIR .. "src/emu/netlist/devices/nld_r2r_dac.c",
MAME_DIR .. "src/emu/netlist/devices/nld_r2r_dac.h",
MAME_DIR .. "src/emu/netlist/devices/nld_legacy.c",
MAME_DIR .. "src/emu/netlist/devices/nld_legacy.h",
MAME_DIR .. "src/emu/netlist/devices/net_lib.c",
MAME_DIR .. "src/emu/netlist/devices/net_lib.h",
MAME_DIR .. "src/emu/netlist/devices/nld_log.c",
MAME_DIR .. "src/emu/netlist/devices/nld_log.h",
MAME_DIR .. "src/emu/netlist/devices/nld_system.c",
MAME_DIR .. "src/emu/netlist/devices/nld_system.h",
MAME_DIR .. "src/emu/netlist/devices/nld_cmos.h",
MAME_DIR .. "src/emu/netlist/devices/nld_signal.h",
MAME_DIR .. "src/emu/netlist/devices/nld_truthtable.c",
MAME_DIR .. "src/emu/netlist/devices/nld_truthtable.h",
project "netlist"
targetsubdir(_OPTIONS["target"] .."_" .. _OPTIONS["subtarget"])
uuid "665ef8ac-2a4c-4c3e-a05f-fd1e5db11de9"
kind (LIBTYPE)
options {
"ForceCPP",
}
includedirs {
MAME_DIR .. "src/emu/netlist",
MAME_DIR .. "src/osd",
MAME_DIR .. "src/lib/util",
}
-- if _OPTIONS["with-bundled-expat"] then
-- includedirs {
-- MAME_DIR .. "3rdparty/expat/lib",
-- }
--end
files {
MAME_DIR .. "src/emu/netlist/nl_config.h",
MAME_DIR .. "src/emu/netlist/nl_dice_compat.h",
MAME_DIR .. "src/emu/netlist/nl_lists.h",
MAME_DIR .. "src/emu/netlist/nl_time.h",
MAME_DIR .. "src/emu/netlist/nl_util.h",
MAME_DIR .. "src/emu/netlist/nl_base.c",
MAME_DIR .. "src/emu/netlist/nl_base.h",
MAME_DIR .. "src/emu/netlist/nl_parser.c",
MAME_DIR .. "src/emu/netlist/nl_parser.h",
MAME_DIR .. "src/emu/netlist/nl_setup.c",
MAME_DIR .. "src/emu/netlist/nl_setup.h",
MAME_DIR .. "src/emu/netlist/nl_factory.c",
MAME_DIR .. "src/emu/netlist/nl_factory.h",
MAME_DIR .. "src/emu/netlist/plib/pconfig.h",
MAME_DIR .. "src/emu/netlist/plib/palloc.c",
MAME_DIR .. "src/emu/netlist/plib/palloc.h",
MAME_DIR .. "src/emu/netlist/plib/plists.h",
MAME_DIR .. "src/emu/netlist/plib/poptions.h",
MAME_DIR .. "src/emu/netlist/plib/pparser.c",
MAME_DIR .. "src/emu/netlist/plib/pparser.h",
MAME_DIR .. "src/emu/netlist/plib/pstate.c",
MAME_DIR .. "src/emu/netlist/plib/pstate.h",
MAME_DIR .. "src/emu/netlist/plib/pstring.c",
MAME_DIR .. "src/emu/netlist/plib/pstring.h",
MAME_DIR .. "src/emu/netlist/plib/pstring.c",
MAME_DIR .. "src/emu/netlist/plib/pstring.h",
MAME_DIR .. "src/emu/netlist/tools/nl_convert.c",
MAME_DIR .. "src/emu/netlist/tools/nl_convert.h",
MAME_DIR .. "src/emu/netlist/analog/nld_bjt.c",
MAME_DIR .. "src/emu/netlist/analog/nld_bjt.h",
MAME_DIR .. "src/emu/netlist/analog/nld_fourterm.c",
MAME_DIR .. "src/emu/netlist/analog/nld_fourterm.h",
MAME_DIR .. "src/emu/netlist/analog/nld_solver.c",
MAME_DIR .. "src/emu/netlist/analog/nld_solver.h",
MAME_DIR .. "src/emu/netlist/analog/nld_switches.c",
MAME_DIR .. "src/emu/netlist/analog/nld_switches.h",
MAME_DIR .. "src/emu/netlist/analog/nld_twoterm.c",
MAME_DIR .. "src/emu/netlist/analog/nld_twoterm.h",
MAME_DIR .. "src/emu/netlist/analog/nld_opamps.c",
MAME_DIR .. "src/emu/netlist/analog/nld_opamps.h",
MAME_DIR .. "src/emu/netlist/analog/nld_ms_direct.h",
MAME_DIR .. "src/emu/netlist/analog/nld_ms_direct1.h",
MAME_DIR .. "src/emu/netlist/analog/nld_ms_direct2.h",
MAME_DIR .. "src/emu/netlist/analog/nld_ms_gauss_seidel.h",
MAME_DIR .. "src/emu/netlist/devices/nld_4020.c",
MAME_DIR .. "src/emu/netlist/devices/nld_4020.h",
MAME_DIR .. "src/emu/netlist/devices/nld_4066.c",
MAME_DIR .. "src/emu/netlist/devices/nld_4066.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7400.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7400.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7402.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7402.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7404.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7404.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7408.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7408.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7410.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7410.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7411.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7411.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7420.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7420.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7425.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7425.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7427.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7427.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7430.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7430.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7432.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7432.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7437.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7437.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7448.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7448.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7450.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7450.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7474.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7474.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7483.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7483.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7486.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7486.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7490.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7490.h",
MAME_DIR .. "src/emu/netlist/devices/nld_7493.c",
MAME_DIR .. "src/emu/netlist/devices/nld_7493.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74107.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74107.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74123.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74123.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74153.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74153.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74175.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74175.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74192.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74192.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74193.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74193.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74279.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74279.h",
MAME_DIR .. "src/emu/netlist/devices/nld_74ls629.c",
MAME_DIR .. "src/emu/netlist/devices/nld_74ls629.h",
MAME_DIR .. "src/emu/netlist/devices/nld_82S16.c",
MAME_DIR .. "src/emu/netlist/devices/nld_82S16.h",
MAME_DIR .. "src/emu/netlist/devices/nld_9310.c",
MAME_DIR .. "src/emu/netlist/devices/nld_9310.h",
MAME_DIR .. "src/emu/netlist/devices/nld_9312.c",
MAME_DIR .. "src/emu/netlist/devices/nld_9312.h",
MAME_DIR .. "src/emu/netlist/devices/nld_9316.c",
MAME_DIR .. "src/emu/netlist/devices/nld_9316.h",
MAME_DIR .. "src/emu/netlist/devices/nld_ne555.c",
MAME_DIR .. "src/emu/netlist/devices/nld_ne555.h",
MAME_DIR .. "src/emu/netlist/devices/nld_r2r_dac.c",
MAME_DIR .. "src/emu/netlist/devices/nld_r2r_dac.h",
MAME_DIR .. "src/emu/netlist/devices/nld_legacy.c",
MAME_DIR .. "src/emu/netlist/devices/nld_legacy.h",
MAME_DIR .. "src/emu/netlist/devices/net_lib.c",
MAME_DIR .. "src/emu/netlist/devices/net_lib.h",
MAME_DIR .. "src/emu/netlist/devices/nld_log.c",
MAME_DIR .. "src/emu/netlist/devices/nld_log.h",
MAME_DIR .. "src/emu/netlist/devices/nld_system.c",
MAME_DIR .. "src/emu/netlist/devices/nld_system.h",
MAME_DIR .. "src/emu/netlist/devices/nld_cmos.h",
MAME_DIR .. "src/emu/netlist/devices/nld_signal.h",
MAME_DIR .. "src/emu/netlist/devices/nld_truthtable.c",
MAME_DIR .. "src/emu/netlist/devices/nld_truthtable.h",
}

View File

@ -7,7 +7,7 @@ end
project ("osd_" .. _OPTIONS["osd"])
uuid (os.uuid("osd_" .. _OPTIONS["osd"]))
kind "StaticLib"
kind (LIBTYPE)
removeflags {
"SingleOutputDir",
@ -54,7 +54,7 @@ project ("osd_" .. _OPTIONS["osd"])
project ("ocore_" .. _OPTIONS["osd"])
uuid (os.uuid("ocore_" .. _OPTIONS["osd"]))
kind "StaticLib"
kind (LIBTYPE)
options {
"ForceCPP",

View File

@ -293,8 +293,9 @@ end
project ("osd_" .. _OPTIONS["osd"])
targetsubdir(_OPTIONS["target"] .."_" .._OPTIONS["subtarget"])
uuid (os.uuid("osd_" .. _OPTIONS["osd"]))
kind "StaticLib"
kind (LIBTYPE)
dofile("sdl_cfg.lua")
osdmodulesbuild()
@ -361,8 +362,9 @@ project ("osd_" .. _OPTIONS["osd"])
project ("ocore_" .. _OPTIONS["osd"])
targetsubdir(_OPTIONS["target"] .."_" .. _OPTIONS["subtarget"])
uuid (os.uuid("ocore_" .. _OPTIONS["osd"]))
kind "StaticLib"
kind (LIBTYPE)
options {
"ForceCPP",

View File

@ -90,7 +90,7 @@ end
project ("osd_" .. _OPTIONS["osd"])
uuid (os.uuid("osd_" .. _OPTIONS["osd"]))
kind "StaticLib"
kind (LIBTYPE)
dofile("windows_cfg.lua")
osdmodulesbuild()
@ -153,7 +153,7 @@ project ("osd_" .. _OPTIONS["osd"])
project ("ocore_" .. _OPTIONS["osd"])
uuid (os.uuid("ocore_" .. _OPTIONS["osd"]))
kind "StaticLib"
kind (LIBTYPE)
options {
"ForceCPP",

View File

@ -443,6 +443,7 @@ links {
"flac",
"7z",
"ocore_" .. _OPTIONS["osd"],
"netlist",
}
includedirs {
@ -455,8 +456,6 @@ files {
MAME_DIR .. "src/tools/nltool.c",
}
dofile("netlist.lua")
--------------------------------------------------
-- castool
--------------------------------------------------

View File

@ -54,7 +54,7 @@ BUSES["MIDI"] = true
function createProjects_ldplayer_ldplayer(_target, _subtarget)
project ("drvldplayer")
targetsubdir(_target .."_" .. _subtarget)
kind "StaticLib"
kind (LIBTYPE)
uuid (os.uuid("drvldplayer"))
options {

View File

@ -470,6 +470,7 @@ MACHINES["MSM6242"] = true
--MACHINES["NCR5380N"] = true
--MACHINES["NCR5390"] = true
MACHINES["NCR539x"] = true
MACHINES["NETLIST"] = true
--MACHINES["NCR53C7XX"] = true
MACHINES["NMC9306"] = true
--MACHINES["NSC810"] = true
@ -760,7 +761,7 @@ end
function createMAMEProjects(_target, _subtarget, _name)
project (_name)
targetsubdir(_target .."_" .. _subtarget)
kind "StaticLib"
kind (LIBTYPE)
uuid (os.uuid("drv-" .. _target .."_" .. _subtarget .. "_" .._name))
options {

View File

@ -15,7 +15,7 @@ dofile("mess.lua")
function createProjects_mame_dummy(_target, _subtarget)
project ("mame_dummy")
targetsubdir(_target .."_" .. _subtarget)
kind "StaticLib"
kind (LIBTYPE)
uuid (os.uuid("drv-mame_dummy"))
options {

View File

@ -471,6 +471,7 @@ MACHINES["NCR5380N"] = true
MACHINES["NCR5390"] = true
MACHINES["NCR539x"] = true
MACHINES["NCR53C7XX"] = true
MACHINES["NETLIST"] = true
MACHINES["NMC9306"] = true
MACHINES["NSC810"] = true
MACHINES["NSCSI"] = true
@ -859,7 +860,7 @@ end
function createMESSProjects(_target, _subtarget, _name)
project (_name)
targetsubdir(_target .."_" .. _subtarget)
kind "StaticLib"
kind (LIBTYPE)
uuid (os.uuid("drv-" .. _target .."_" .. _subtarget .. "_" .._name))
options {

121
scripts/target/mame/nl.lua Normal file
View File

@ -0,0 +1,121 @@
-- license:BSD-3-Clause
-- copyright-holders:MAMEdev Team
---------------------------------------------------------------------------
--
-- nl.lua
--
-- Compiles all drivers using netlist code
-- Use make SUBTARGET=nl to build
--
---------------------------------------------------------------------------
--------------------------------------------------
-- Specify all the CPU cores necessary for the
-- drivers referenced in nl.lst.
--------------------------------------------------
CPUS["Z80"] = true
--CPUS["M6502"] = true
--CPUS["MCS48"] = true
--CPUS["MCS51"] = true
--CPUS["M6800"] = true
--CPUS["M6809"] = true
--CPUS["M680X0"] = true
--CPUS["TMS9900"] = true
--CPUS["COP400"] = true
--------------------------------------------------
-- Specify all the sound cores necessary for the
-- drivers referenced in nl.lst.
--------------------------------------------------
--SOUNDS["SAMPLES"] = true
SOUNDS["DAC"] = true
--SOUNDS["DISCRETE"] = true
SOUNDS["AY8910"] = true
--SOUNDS["YM2151"] = true
--SOUNDS["ASTROCADE"] = true
--SOUNDS["TMS5220"] = true
--SOUNDS["OKIM6295"] = true
--SOUNDS["HC55516"] = true
--SOUNDS["YM3812"] = true
--SOUNDS["CEM3394"] = true
--SOUNDS["VOTRAX"] = true
--------------------------------------------------
-- specify available video cores
--------------------------------------------------
VIDEOS["FIXFREQ"] = true
--------------------------------------------------
-- specify available machine cores
--------------------------------------------------
MACHINES["NETLIST"] = true
--MACHINES["6821PIA"] = true
--MACHINES["TTL74148"] = true
--MACHINES["TTL74153"] = true
--MACHINES["TTL7474"] = true
--MACHINES["RIOT6532"] = true
--MACHINES["PIT8253"] = true
--MACHINES["Z80CTC"] = true
--MACHINES["68681"] = true
--MACHINES["BANKDEV"] = true
--------------------------------------------------
-- specify available bus cores
--------------------------------------------------
-- not needed by nl.lua but build system wants at least one bus
BUSES["CENTRONICS"] = true
--------------------------------------------------
-- This is the list of files that are necessary
-- for building all of the drivers referenced
-- in tiny.lst
--------------------------------------------------
function createProjects_mame_nl(_target, _subtarget)
project ("mame_netlist")
targetsubdir(_target .."_" .. _subtarget)
kind (LIBTYPE)
uuid (os.uuid("drv-mame-nl"))
options {
"ForceCPP",
}
includedirs {
MAME_DIR .. "src/osd",
MAME_DIR .. "src/emu",
MAME_DIR .. "src/mame",
MAME_DIR .. "src/lib",
MAME_DIR .. "src/lib/util",
MAME_DIR .. "3rdparty",
MAME_DIR .. "3rdparty/zlib",
GEN_DIR .. "mame/layout",
}
files{
MAME_DIR .. "src/mame/drivers/pong.c",
MAME_DIR .. "src/mame/drivers/nl_pong.c",
MAME_DIR .. "src/mame/drivers/nl_pongd.c",
MAME_DIR .. "src/mame/drivers/nl_breakout.c",
MAME_DIR .. "src/mame/drivers/1942.c",
MAME_DIR .. "src/mame/video/1942.c",
MAME_DIR .. "src/mame/drivers/popeye.c",
MAME_DIR .. "src/mame/video/popeye.c",
}
end
function linkProjects_mame_nl(_target, _subtarget)
links {
"mame_netlist",
}
end

View File

@ -78,7 +78,7 @@ BUSES["CENTRONICS"] = true
function createProjects_mame_tiny(_target, _subtarget)
project ("mame_tiny")
targetsubdir(_target .."_" .. _subtarget)
kind "StaticLib"
kind (LIBTYPE)
uuid (os.uuid("drv-mame-tiny"))
options {

View File

@ -5,8 +5,6 @@
EACA Colour Genie Floppy Disc Controller
TODO:
- Plain sector files are not working (some sectors are marked DDM),
maybe support the .cgd format?
- What's the exact FD1793 model?
- How does it turn off the motor?
- What's the source of the timer and the exact timings?

View File

@ -35,8 +35,8 @@ WRITE8_MEMBER( isa8_gblaster_device::saa1099_1_16_w )
{
switch(offset)
{
case 0 : m_saa1099_1->control_w( space, offset, data ); break;
case 1 : m_saa1099_1->data_w( space, offset, data ); break;
case 0 : m_saa1099_1->data_w( space, offset, data ); break;
case 1 : m_saa1099_1->control_w( space, offset, data ); break;
}
}
@ -44,8 +44,29 @@ WRITE8_MEMBER( isa8_gblaster_device::saa1099_2_16_w )
{
switch(offset)
{
case 0 : m_saa1099_2->control_w( space, offset, data ); break;
case 1 : m_saa1099_2->data_w( space, offset, data ); break;
case 0 : m_saa1099_2->data_w( space, offset, data ); break;
case 1 : m_saa1099_2->control_w( space, offset, data ); break;
}
}
READ8_MEMBER( isa8_gblaster_device::detect_r )
{
switch(offset)
{
case 0:
case 1: return 0x7f; break; // this register reportedly returns 0x3f on a Tandy 1000 TL, and 0x7f on a generic 486 PC.
case 6:
case 7: return detect_reg; break;
default: return 0xff;
}
}
WRITE8_MEMBER( isa8_gblaster_device::detect_w )
{
switch(offset)
{
case 2:
case 3: detect_reg = (data & 0xff); break;
}
}
@ -77,7 +98,8 @@ isa8_gblaster_device::isa8_gblaster_device(const machine_config &mconfig, const
device_t(mconfig, ISA8_GAME_BLASTER, "Game Blaster Sound Card", tag, owner, clock, "isa_gblaster", __FILE__),
device_isa8_card_interface(mconfig, *this),
m_saa1099_1(*this, "saa1099.1"),
m_saa1099_2(*this, "saa1099.2")
m_saa1099_2(*this, "saa1099.2"),
detect_reg(0xFF)
{
}
@ -90,6 +112,7 @@ void isa8_gblaster_device::device_start()
set_isa_device();
m_isa->install_device(0x0220, 0x0221, 0, 0, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_1_16_w), this ) );
m_isa->install_device(0x0222, 0x0223, 0, 0, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_2_16_w), this ) );
m_isa->install_device(0x0224, 0x022F, 0, 0, read8_delegate( FUNC(isa8_gblaster_device::detect_r), this ), write8_delegate( FUNC(isa8_gblaster_device::detect_w), this ) );
}
//-------------------------------------------------

View File

@ -29,6 +29,8 @@ public:
DECLARE_READ8_MEMBER(saa1099_16_r);
DECLARE_WRITE8_MEMBER(saa1099_1_16_w);
DECLARE_WRITE8_MEMBER(saa1099_2_16_w);
DECLARE_READ8_MEMBER(detect_r);
DECLARE_WRITE8_MEMBER(detect_w);
protected:
// device-level overrides
virtual void device_start();
@ -37,6 +39,7 @@ private:
// internal state
required_device<saa1099_device> m_saa1099_1;
required_device<saa1099_device> m_saa1099_2;
UINT8 detect_reg;
};

View File

@ -29,6 +29,7 @@
pro audio spectrum 16: 1 OPL3
2 x saa1099 chips
inherited from game blaster
also on sound blaster 1.0
option on sound blaster 1.5
@ -150,8 +151,8 @@ WRITE8_MEMBER( isa8_sblaster1_0_device::saa1099_1_16_w )
{
switch(offset)
{
case 0 : m_saa1099_1->control_w( space, offset, data ); break;
case 1 : m_saa1099_1->data_w( space, offset, data ); break;
case 0 : m_saa1099_1->data_w( space, offset, data ); break;
case 1 : m_saa1099_1->control_w( space, offset, data ); break;
}
}
@ -159,8 +160,8 @@ WRITE8_MEMBER( isa8_sblaster1_0_device::saa1099_2_16_w )
{
switch(offset)
{
case 0 : m_saa1099_2->control_w( space, offset, data ); break;
case 1 : m_saa1099_2->data_w( space, offset, data ); break;
case 0 : m_saa1099_2->data_w( space, offset, data ); break;
case 1 : m_saa1099_2->control_w( space, offset, data ); break;
}
}

View File

@ -215,6 +215,8 @@ void nubus_image_device::device_start()
filectx.curdir[0] = '.';
filectx.curdir[1] = '\0';
filectx.dirp = NULL;
filectx.fd = NULL;
}
//-------------------------------------------------
@ -280,7 +282,7 @@ WRITE32_MEMBER( nubus_image_device::file_cmd_w )
strcpy((char*)filectx.filename, (char*)filectx.curdir);
break;
case kFileCmdSetDir:
if(filectx.filename[0] == '/') {
if ((filectx.filename[0] == '/') || (filectx.filename[0] == '$')) {
strcpy((char*)filectx.curdir, (char*)filectx.filename);
} else {
strcat((char*)filectx.curdir, "/");
@ -291,10 +293,15 @@ WRITE32_MEMBER( nubus_image_device::file_cmd_w )
if(filectx.dirp) osd_closedir(filectx.dirp);
filectx.dirp = osd_opendir((const char *)filectx.curdir);
case kFileCmdGetNextListing:
dp = osd_readdir(filectx.dirp);
if(dp) {
strncpy((char*)filectx.filename, dp->name, sizeof(filectx.filename));
} else {
if (filectx.dirp) {
dp = osd_readdir(filectx.dirp);
if(dp) {
strncpy((char*)filectx.filename, dp->name, sizeof(filectx.filename));
} else {
memset(filectx.filename, 0, sizeof(filectx.filename));
}
}
else {
memset(filectx.filename, 0, sizeof(filectx.filename));
}
break;

View File

@ -313,7 +313,7 @@ offs_t hd6309_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *o
// read_operand
//-------------------------------------------------
ATTR_FORCE_INLINE UINT8 hd6309_device::read_operand()
inline UINT8 hd6309_device::read_operand()
{
switch(m_addressing_mode)
{
@ -332,7 +332,7 @@ ATTR_FORCE_INLINE UINT8 hd6309_device::read_operand()
// read_operand
//-------------------------------------------------
ATTR_FORCE_INLINE UINT8 hd6309_device::read_operand(int ordinal)
inline UINT8 hd6309_device::read_operand(int ordinal)
{
switch(m_addressing_mode)
{
@ -356,7 +356,7 @@ ATTR_FORCE_INLINE UINT8 hd6309_device::read_operand(int ordinal)
// write_operand
//-------------------------------------------------
ATTR_FORCE_INLINE void hd6309_device::write_operand(UINT8 data)
inline void hd6309_device::write_operand(UINT8 data)
{
switch(m_addressing_mode)
{
@ -375,7 +375,7 @@ ATTR_FORCE_INLINE void hd6309_device::write_operand(UINT8 data)
// write_operand
//-------------------------------------------------
ATTR_FORCE_INLINE void hd6309_device::write_operand(int ordinal, UINT8 data)
inline void hd6309_device::write_operand(int ordinal, UINT8 data)
{
switch(m_addressing_mode)
{
@ -398,7 +398,7 @@ ATTR_FORCE_INLINE void hd6309_device::write_operand(int ordinal, UINT8 data)
// bittest_register
//-------------------------------------------------
ATTR_FORCE_INLINE UINT8 &hd6309_device::bittest_register()
inline UINT8 &hd6309_device::bittest_register()
{
switch(m_temp_im & 0xC0)
{
@ -414,7 +414,7 @@ ATTR_FORCE_INLINE UINT8 &hd6309_device::bittest_register()
// bittest_source
//-------------------------------------------------
ATTR_FORCE_INLINE bool hd6309_device::bittest_source()
inline bool hd6309_device::bittest_source()
{
return (m_temp.b.l & (1 << ((m_temp_im >> 3) & 0x07))) ? true : false;
}
@ -424,7 +424,7 @@ ATTR_FORCE_INLINE bool hd6309_device::bittest_source()
// bittest_dest
//-------------------------------------------------
ATTR_FORCE_INLINE bool hd6309_device::bittest_dest()
inline bool hd6309_device::bittest_dest()
{
return (bittest_register() & (1 << ((m_temp_im >> 0) & 0x07))) ? true : false;
}
@ -434,7 +434,7 @@ ATTR_FORCE_INLINE bool hd6309_device::bittest_dest()
// bittest_set
//-------------------------------------------------
ATTR_FORCE_INLINE void hd6309_device::bittest_set(bool result)
inline void hd6309_device::bittest_set(bool result)
{
if (result)
bittest_register() |= (1 << ((m_temp_im >> 0) & 0x07));
@ -448,7 +448,7 @@ ATTR_FORCE_INLINE void hd6309_device::bittest_set(bool result)
// read_exgtfr_register
//-------------------------------------------------
ATTR_FORCE_INLINE m6809_base_device::exgtfr_register hd6309_device::read_exgtfr_register(UINT8 reg)
inline m6809_base_device::exgtfr_register hd6309_device::read_exgtfr_register(UINT8 reg)
{
UINT16 value = 0;
@ -486,7 +486,7 @@ ATTR_FORCE_INLINE m6809_base_device::exgtfr_register hd6309_device::read_exgtfr_
// write_exgtfr_register
//-------------------------------------------------
ATTR_FORCE_INLINE void hd6309_device::write_exgtfr_register(UINT8 reg, m6809_base_device::exgtfr_register value)
inline void hd6309_device::write_exgtfr_register(UINT8 reg, m6809_base_device::exgtfr_register value)
{
switch(reg & 0x0F)
{
@ -517,7 +517,7 @@ ATTR_FORCE_INLINE void hd6309_device::write_exgtfr_register(UINT8 reg, m6809_bas
// tfr_read
//-------------------------------------------------
ATTR_FORCE_INLINE bool hd6309_device::tfr_read(UINT8 opcode, UINT8 arg, UINT8 &data)
inline bool hd6309_device::tfr_read(UINT8 opcode, UINT8 arg, UINT8 &data)
{
PAIR16 *reg;
@ -550,7 +550,7 @@ ATTR_FORCE_INLINE bool hd6309_device::tfr_read(UINT8 opcode, UINT8 arg, UINT8 &d
// tfr_write
//-------------------------------------------------
ATTR_FORCE_INLINE bool hd6309_device::tfr_write(UINT8 opcode, UINT8 arg, UINT8 data)
inline bool hd6309_device::tfr_write(UINT8 opcode, UINT8 arg, UINT8 data)
{
PAIR16 *reg;
@ -789,7 +789,7 @@ bool hd6309_device::divd()
// execute_one - try to execute a single instruction
//-------------------------------------------------
ATTR_FORCE_INLINE void hd6309_device::execute_one()
inline void hd6309_device::execute_one()
{
switch(pop_state())
{

View File

@ -120,7 +120,7 @@ offs_t konami_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT
// read_operand
//-------------------------------------------------
inline ATTR_FORCE_INLINE UINT8 konami_cpu_device::read_operand()
inline UINT8 konami_cpu_device::read_operand()
{
return super::read_operand();
}
@ -130,7 +130,7 @@ inline ATTR_FORCE_INLINE UINT8 konami_cpu_device::read_operand()
// read_operand
//-------------------------------------------------
inline ATTR_FORCE_INLINE UINT8 konami_cpu_device::read_operand(int ordinal)
inline UINT8 konami_cpu_device::read_operand(int ordinal)
{
switch(m_addressing_mode)
{
@ -146,7 +146,7 @@ inline ATTR_FORCE_INLINE UINT8 konami_cpu_device::read_operand(int ordinal)
// write_operand
//-------------------------------------------------
ATTR_FORCE_INLINE void konami_cpu_device::write_operand(UINT8 data)
inline void konami_cpu_device::write_operand(UINT8 data)
{
super::write_operand(data);
}
@ -157,7 +157,7 @@ ATTR_FORCE_INLINE void konami_cpu_device::write_operand(UINT8 data)
// write_operand
//-------------------------------------------------
ATTR_FORCE_INLINE void konami_cpu_device::write_operand(int ordinal, UINT8 data)
inline void konami_cpu_device::write_operand(int ordinal, UINT8 data)
{
switch(m_addressing_mode)
{
@ -173,7 +173,7 @@ ATTR_FORCE_INLINE void konami_cpu_device::write_operand(int ordinal, UINT8 data)
// ireg
//-------------------------------------------------
ATTR_FORCE_INLINE UINT16 &konami_cpu_device::ireg()
inline UINT16 &konami_cpu_device::ireg()
{
switch(m_opcode & 0x70)
{
@ -194,7 +194,7 @@ ATTR_FORCE_INLINE UINT16 &konami_cpu_device::ireg()
// read_exgtfr_register
//-------------------------------------------------
ATTR_FORCE_INLINE m6809_base_device::exgtfr_register konami_cpu_device::read_exgtfr_register(UINT8 reg)
inline m6809_base_device::exgtfr_register konami_cpu_device::read_exgtfr_register(UINT8 reg)
{
exgtfr_register result;
result.word_value = 0x00FF;
@ -217,7 +217,7 @@ ATTR_FORCE_INLINE m6809_base_device::exgtfr_register konami_cpu_device::read_exg
// write_exgtfr_register
//-------------------------------------------------
ATTR_FORCE_INLINE void konami_cpu_device::write_exgtfr_register(UINT8 reg, m6809_base_device::exgtfr_register value)
inline void konami_cpu_device::write_exgtfr_register(UINT8 reg, m6809_base_device::exgtfr_register value)
{
switch(reg & 0x07)
{
@ -287,7 +287,7 @@ template<class T> T konami_cpu_device::safe_shift_left(T value, UINT32 shift)
// lmul
//-------------------------------------------------
ATTR_FORCE_INLINE void konami_cpu_device::lmul()
inline void konami_cpu_device::lmul()
{
PAIR result;
@ -313,7 +313,7 @@ ATTR_FORCE_INLINE void konami_cpu_device::lmul()
// divx
//-------------------------------------------------
ATTR_FORCE_INLINE void konami_cpu_device::divx()
inline void konami_cpu_device::divx()
{
UINT16 result;
UINT8 remainder;
@ -357,7 +357,7 @@ void konami_cpu_device::set_lines(UINT8 data)
// execute_one - try to execute a single instruction
//-------------------------------------------------
ATTR_FORCE_INLINE void konami_cpu_device::execute_one()
inline void konami_cpu_device::execute_one()
{
switch(pop_state())
{

View File

@ -456,7 +456,7 @@ const char *m6809_base_device::inputnum_string(int inputnum)
// read_exgtfr_register
//-------------------------------------------------
ATTR_FORCE_INLINE m6809_base_device::exgtfr_register m6809_base_device::read_exgtfr_register(UINT8 reg)
m6809_base_device::exgtfr_register m6809_base_device::read_exgtfr_register(UINT8 reg)
{
exgtfr_register result;
result.byte_value = 0xFF;
@ -483,7 +483,7 @@ ATTR_FORCE_INLINE m6809_base_device::exgtfr_register m6809_base_device::read_exg
// write_exgtfr_register
//-------------------------------------------------
ATTR_FORCE_INLINE void m6809_base_device::write_exgtfr_register(UINT8 reg, m6809_base_device::exgtfr_register value)
void m6809_base_device::write_exgtfr_register(UINT8 reg, m6809_base_device::exgtfr_register value)
{
switch(reg & 0x0F)
{
@ -516,7 +516,7 @@ void m6809_base_device::log_illegal()
// execute_one - try to execute a single instruction
//-------------------------------------------------
ATTR_FORCE_INLINE void m6809_base_device::execute_one()
void m6809_base_device::execute_one()
{
switch(pop_state())
{

View File

@ -147,27 +147,27 @@ protected:
devcb_write_line m_lic_func; // LIC pin on the 6809E
// eat cycles
ATTR_FORCE_INLINE void eat(int cycles) { m_icount -= cycles; }
inline void eat(int cycles) { m_icount -= cycles; }
void eat_remaining();
// read a byte from given memory location
ATTR_FORCE_INLINE UINT8 read_memory(UINT16 address) { eat(1); return m_addrspace[AS_PROGRAM]->read_byte(address); }
inline UINT8 read_memory(UINT16 address) { eat(1); return m_addrspace[AS_PROGRAM]->read_byte(address); }
// write a byte to given memory location
ATTR_FORCE_INLINE void write_memory(UINT16 address, UINT8 data) { eat(1); m_addrspace[AS_PROGRAM]->write_byte(address, data); }
inline void write_memory(UINT16 address, UINT8 data) { eat(1); m_addrspace[AS_PROGRAM]->write_byte(address, data); }
// read_opcode() is like read_memory() except it is used for reading opcodes. In the case of a system
// with memory mapped I/O, this function can be used to greatly speed up emulation.
ATTR_FORCE_INLINE UINT8 read_opcode(UINT16 address) { eat(1); return m_direct->read_decrypted_byte(address); }
inline UINT8 read_opcode(UINT16 address) { eat(1); return m_direct->read_decrypted_byte(address); }
// read_opcode_arg() is identical to read_opcode() except it is used for reading opcode arguments. This
// difference can be used to support systems that use different encoding mechanisms for opcodes
// and opcode arguments.
ATTR_FORCE_INLINE UINT8 read_opcode_arg(UINT16 address) { eat(1); return m_direct->read_raw_byte(address); }
inline UINT8 read_opcode_arg(UINT16 address) { eat(1); return m_direct->read_raw_byte(address); }
// read_opcode() and bump the program counter
ATTR_FORCE_INLINE UINT8 read_opcode() { return read_opcode(m_pc.w++); }
ATTR_FORCE_INLINE UINT8 read_opcode_arg() { return read_opcode_arg(m_pc.w++); }
inline UINT8 read_opcode() { return read_opcode(m_pc.w++); }
inline UINT8 read_opcode_arg() { return read_opcode_arg(m_pc.w++); }
// state stack - implemented as a UINT32
void push_state(UINT8 state) { m_state = (m_state << 8) | state; }
@ -219,15 +219,15 @@ protected:
template<class T> T set_flags(UINT8 mask, T r);
// branch conditions
ATTR_FORCE_INLINE bool cond_hi() { return !(m_cc & CC_ZC); } // BHI/BLS
ATTR_FORCE_INLINE bool cond_cc() { return !(m_cc & CC_C); } // BCC/BCS
ATTR_FORCE_INLINE bool cond_ne() { return !(m_cc & CC_Z); } // BNE/BEQ
ATTR_FORCE_INLINE bool cond_vc() { return !(m_cc & CC_V); } // BVC/BVS
ATTR_FORCE_INLINE bool cond_pl() { return !(m_cc & CC_N); } // BPL/BMI
ATTR_FORCE_INLINE bool cond_ge() { return (m_cc & CC_N ? true : false) == (m_cc & CC_V ? true : false); } // BGE/BLT
ATTR_FORCE_INLINE bool cond_gt() { return cond_ge() && !(m_cc & CC_Z); } // BGT/BLE
ATTR_FORCE_INLINE void set_cond(bool cond) { m_cond = cond; }
ATTR_FORCE_INLINE bool branch_taken() { return m_cond; }
inline bool cond_hi() { return !(m_cc & CC_ZC); } // BHI/BLS
inline bool cond_cc() { return !(m_cc & CC_C); } // BCC/BCS
inline bool cond_ne() { return !(m_cc & CC_Z); } // BNE/BEQ
inline bool cond_vc() { return !(m_cc & CC_V); } // BVC/BVS
inline bool cond_pl() { return !(m_cc & CC_N); } // BPL/BMI
inline bool cond_ge() { return (m_cc & CC_N ? true : false) == (m_cc & CC_V ? true : false); } // BGE/BLT
inline bool cond_gt() { return cond_ge() && !(m_cc & CC_Z); } // BGT/BLE
inline void set_cond(bool cond) { m_cond = cond; }
inline bool branch_taken() { return m_cond; }
// interrupt registers
bool firq_saves_entire_state() { return false; }
@ -235,8 +235,8 @@ protected:
UINT16 entire_state_registers() { return 0xFF; }
// miscellaneous
exgtfr_register read_exgtfr_register(UINT8 reg);
void write_exgtfr_register(UINT8 reg, exgtfr_register value);
inline exgtfr_register read_exgtfr_register(UINT8 reg);
inline void write_exgtfr_register(UINT8 reg, exgtfr_register value);
bool is_register_addressing_mode();
bool is_ea_addressing_mode() { return m_addressing_mode == ADDRESSING_MODE_EA; }
UINT16 get_pending_interrupt();
@ -255,7 +255,7 @@ private:
int m_clock_divider;
// functions
void execute_one();
inline void execute_one();
const char *inputnum_string(int inputnum);
};

View File

@ -69,4 +69,8 @@ UINT16 i8xc196_device::io_r16(UINT8 adr)
return data;
}
void i8xc196_device::do_exec_partial()
{
}
#include "cpu/mcs96/i8xc196.inc"

View File

@ -23,7 +23,6 @@ public:
virtual void do_exec_full();
virtual void do_exec_partial();
virtual void next(int cycles);
virtual void io_w8(UINT8 adr, UINT8 data);
virtual void io_w16(UINT8 adr, UINT16 data);
virtual UINT8 io_r8(UINT8 adr);

View File

@ -30,7 +30,7 @@ ADDRESS_MAP_END
// device definitions
m58846_device::m58846_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: melps4_cpu_device(mconfig, M58846, "M58846", tag, owner, clock, 11, ADDRESS_MAP_NAME(program_2kx9), 7, ADDRESS_MAP_NAME(data_128x4), "m58846", __FILE__)
: melps4_cpu_device(mconfig, M58846, "M58846", tag, owner, clock, 11, ADDRESS_MAP_NAME(program_2kx9), 7, ADDRESS_MAP_NAME(data_128x4), 12 /* number of D pins */, 2 /* subroutine page */, 1 /* interrupt page */, "m58846", __FILE__)
{ }
@ -50,10 +50,6 @@ offs_t m58846_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *o
void m58846_device::device_start()
{
melps4_cpu_device::device_start();
// set fixed state
m_sm_page = 2;
m_int_page = 1;
}

View File

@ -75,6 +75,21 @@ void melps4_cpu_device::device_start()
m_data = &space(AS_DATA);
m_prgmask = (1 << m_prgwidth) - 1;
m_datamask = (1 << m_datawidth) - 1;
m_d_mask = (1 << m_d_pins) - 1;
// resolve callbacks
m_read_k.resolve_safe(0);
m_read_d.resolve_safe(0);
m_read_s.resolve_safe(0);
m_read_f.resolve_safe(0);
m_read_t.resolve_safe(0);
m_write_d.resolve_safe();
m_write_s.resolve_safe();
m_write_f.resolve_safe();
m_write_g.resolve_safe();
m_write_u.resolve_safe();
m_write_t.resolve_safe();
// zerofill
m_pc = 0;
@ -83,6 +98,10 @@ void melps4_cpu_device::device_start()
m_op = 0;
m_prev_op = 0;
m_bitmask = 0;
m_port_d = 0;
m_port_s = 0;
m_port_f = 0;
m_sm = m_sms = false;
m_ba_flag = false;
@ -115,6 +134,10 @@ void melps4_cpu_device::device_start()
save_item(NAME(m_prev_op));
save_item(NAME(m_bitmask));
save_item(NAME(m_port_d));
save_item(NAME(m_port_s));
save_item(NAME(m_port_f));
save_item(NAME(m_sm));
save_item(NAME(m_sms));
save_item(NAME(m_ba_flag));
@ -181,6 +204,88 @@ void melps4_cpu_device::device_reset()
m_v = 0;
m_w = 0;
// clear ports
write_d_pin(MELPS4_PORTD_CLR, 0);
write_gen_port(MELPS4_PORTS, 0);
write_gen_port(MELPS4_PORTF, 0);
write_gen_port(MELPS4_PORTG, 0);
write_gen_port(MELPS4_PORTU, 0);
m_write_t(0);
}
//-------------------------------------------------
// i/o handling
//-------------------------------------------------
UINT8 melps4_cpu_device::read_gen_port(int port)
{
// input generic port
switch (port)
{
case MELPS4_PORTS:
return m_port_s | m_read_s(port, 0xff);
case MELPS4_PORTF:
return m_port_f | (m_read_f(port, 0xff) & 0xf);
default:
break;
}
return 0;
}
void melps4_cpu_device::write_gen_port(int port, UINT8 data)
{
// output generic port
switch (port)
{
case MELPS4_PORTS:
m_port_s = data;
m_write_s(port, data, 0xff);
break;
case MELPS4_PORTF:
m_port_f = data & 0xf;
m_write_f(port, data & 0xf, 0xff);
break;
case MELPS4_PORTG:
m_write_g(port, data & 0xf, 0xff);
break;
case MELPS4_PORTU:
m_write_u(port, data & 1, 0xff);
break;
default:
break;
}
}
int melps4_cpu_device::read_d_pin(int bit)
{
// read port D, return state of selected pin
bit &= 0xf;
UINT16 d = (m_port_d | m_read_d(bit, 0xffff)) & m_d_mask;
return d >> bit & 1;
}
void melps4_cpu_device::write_d_pin(int bit, int state)
{
// clear all port D pins
if (bit == MELPS4_PORTD_CLR)
{
m_port_d = 0;
m_write_d(bit, 0, 0xffff);
}
// set/reset one port D pin
else
{
bit &= 0xf;
m_port_d = ((m_port_d & (~(1 << bit))) | (state << bit)) & m_d_mask;
m_write_d(bit, m_port_d, 0xffff);
}
}

View File

@ -12,6 +12,58 @@
#include "emu.h"
// I/O ports setup
// K input or A/D input port, up to 16 pins
#define MCFG_MELPS4_READ_K_CB(_devcb) \
melps4_cpu_device::set_read_k_callback(*device, DEVCB_##_devcb);
// D discrete I/O port, up to 16 pins - offset 0-15 for bit, 16 for all pins clear
#define MCFG_MELPS4_READ_D_CB(_devcb) \
melps4_cpu_device::set_read_d_callback(*device, DEVCB_##_devcb);
#define MCFG_MELPS4_WRITE_D_CB(_devcb) \
melps4_cpu_device::set_write_d_callback(*device, DEVCB_##_devcb);
// 8-bit S generic I/O port
#define MCFG_MELPS4_READ_S_CB(_devcb) \
melps4_cpu_device::set_read_s_callback(*device, DEVCB_##_devcb);
#define MCFG_MELPS4_WRITE_S_CB(_devcb) \
melps4_cpu_device::set_write_s_callback(*device, DEVCB_##_devcb);
// 4-bit F generic I/O port
#define MCFG_MELPS4_READ_F_CB(_devcb) \
melps4_cpu_device::set_read_f_callback(*device, DEVCB_##_devcb);
#define MCFG_MELPS4_WRITE_F_CB(_devcb) \
melps4_cpu_device::set_write_f_callback(*device, DEVCB_##_devcb);
// 4-bit G generic output port
#define MCFG_MELPS4_WRITE_G_CB(_devcb) \
melps4_cpu_device::set_write_g_callback(*device, DEVCB_##_devcb);
// 1-bit U generic output port
#define MCFG_MELPS4_WRITE_U_CB(_devcb) \
melps4_cpu_device::set_write_u_callback(*device, DEVCB_##_devcb);
// T timer I/O pin
#define MCFG_MELPS4_READ_T_CB(_devcb) \
melps4_cpu_device::set_read_t_callback(*device, DEVCB_##_devcb);
#define MCFG_MELPS4_WRITE_T_CB(_devcb) \
melps4_cpu_device::set_write_t_callback(*device, DEVCB_##_devcb);
#define MELPS4_PORTD_CLR 16
// only generic ports here (S is 8-bit)
enum
{
MELPS4_PORTS = 0,
MELPS4_PORTF = 2,
MELPS4_PORTG,
MELPS4_PORTU
};
// pinout reference
/*
@ -45,20 +97,46 @@ class melps4_cpu_device : public cpu_device
{
public:
// construction/destruction
melps4_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source)
melps4_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, int d_pins, UINT8 sm_page, UINT8 int_page, const char *shortname, const char *source)
: cpu_device(mconfig, type, name, tag, owner, clock, shortname, source)
, m_program_config("program", ENDIANNESS_LITTLE, 16, prgwidth, -1, program)
, m_data_config("data", ENDIANNESS_LITTLE, 8, datawidth, 0, data)
, m_prgwidth(prgwidth)
, m_datawidth(datawidth)
, m_stack_levels(3)
, m_sm_page(14)
, m_int_page(12)
, m_d_pins(d_pins)
, m_sm_page(sm_page)
, m_int_page(int_page)
, m_xami_mask(0xf)
, m_sp_mask(0x7<<4)
, m_ba_op(0x01)
, m_stack_levels(3)
, m_read_k(*this)
, m_read_d(*this)
, m_read_s(*this)
, m_read_f(*this)
, m_read_t(*this)
, m_write_d(*this)
, m_write_s(*this)
, m_write_f(*this)
, m_write_g(*this)
, m_write_u(*this)
, m_write_t(*this)
{ }
// static configuration helpers
template<class _Object> static devcb_base &set_read_k_callback(device_t &device, _Object object) { return downcast<melps4_cpu_device &>(device).m_read_k.set_callback(object); }
template<class _Object> static devcb_base &set_read_d_callback(device_t &device, _Object object) { return downcast<melps4_cpu_device &>(device).m_read_d.set_callback(object); }
template<class _Object> static devcb_base &set_read_s_callback(device_t &device, _Object object) { return downcast<melps4_cpu_device &>(device).m_read_s.set_callback(object); }
template<class _Object> static devcb_base &set_read_f_callback(device_t &device, _Object object) { return downcast<melps4_cpu_device &>(device).m_read_f.set_callback(object); }
template<class _Object> static devcb_base &set_read_t_callback(device_t &device, _Object object) { return downcast<melps4_cpu_device &>(device).m_read_t.set_callback(object); }
template<class _Object> static devcb_base &set_write_d_callback(device_t &device, _Object object) { return downcast<melps4_cpu_device &>(device).m_write_d.set_callback(object); }
template<class _Object> static devcb_base &set_write_s_callback(device_t &device, _Object object) { return downcast<melps4_cpu_device &>(device).m_write_s.set_callback(object); }
template<class _Object> static devcb_base &set_write_f_callback(device_t &device, _Object object) { return downcast<melps4_cpu_device &>(device).m_write_f.set_callback(object); }
template<class _Object> static devcb_base &set_write_g_callback(device_t &device, _Object object) { return downcast<melps4_cpu_device &>(device).m_write_g.set_callback(object); }
template<class _Object> static devcb_base &set_write_u_callback(device_t &device, _Object object) { return downcast<melps4_cpu_device &>(device).m_write_u.set_callback(object); }
template<class _Object> static devcb_base &set_write_t_callback(device_t &device, _Object object) { return downcast<melps4_cpu_device &>(device).m_write_t.set_callback(object); }
protected:
// device-level overrides
virtual void device_start();
@ -89,17 +167,19 @@ protected:
int m_icount;
// fixed settings or mask options that differ between MCU type
int m_prgwidth; // number of bits and bitmask for ROM/RAM size
int m_prgwidth; // number of bits and bitmask for ROM/RAM size: see melps4.c for info
int m_datawidth; // "
int m_prgmask; // "
int m_datamask; // "
int m_d_pins; // number of D port pins and bitmask: 11 on '40,'41,'42,'44, 8 on '43, 12 on '45,'46, 16 on '47
int m_d_mask; // "
UINT8 m_stack_levels; // 3 levels on MELPS 4, 12 levels on MELPS 41/42
UINT8 m_sm_page; // subroutine default page: 14 on '40 to '44, 2 on '45,'46, 0 on '47
UINT8 m_int_page; // interrupt routine page: 12 on '40 to '44, 1 on '45,'46, 2 on '47
UINT8 m_xami_mask; // mask option for XAMI opcode on '40,'41,'45 (0xf for others)
UINT16 m_sp_mask; // SP opcode location(middle 4 bits): 7 on '40 to '46, 3 on '47
UINT16 m_ba_op; // BA opcode location: 1 on '40 to '46, N/A on '47
UINT8 m_stack_levels; // 3 levels on MELPS 4, 12 levels on MELPS 41/42
// internal state, misc regs
UINT16 m_pc; // program counter (11 or 10-bit)
@ -108,6 +188,10 @@ protected:
UINT16 m_op;
UINT16 m_prev_op;
UINT8 m_bitmask; // opcode bit argument
UINT16 m_port_d; // last written port data
UINT8 m_port_s; // "
UINT8 m_port_f; // "
bool m_sm, m_sms; // subroutine mode flag + stack
bool m_ba_flag; // temp flag indicates BA opcode was executed
@ -133,6 +217,25 @@ protected:
UINT8 m_v; // timer control V
UINT8 m_w; // timer control W
// i/o handlers
devcb_read16 m_read_k;
devcb_read16 m_read_d;
devcb_read8 m_read_s;
devcb_read8 m_read_f;
devcb_read_line m_read_t;
devcb_write16 m_write_d;
devcb_write8 m_write_s;
devcb_write8 m_write_f;
devcb_write8 m_write_g;
devcb_write8 m_write_u;
devcb_write_line m_write_t;
UINT8 read_gen_port(int port);
void write_gen_port(int port, UINT8 data);
int read_d_pin(int bit);
void write_d_pin(int bit, int state);
// misc internal helpers
UINT8 ram_r();
void ram_w(UINT8 data);

View File

@ -529,43 +529,44 @@ void melps4_cpu_device::op_rti()
void melps4_cpu_device::op_cld()
{
// CLD: clear port D
op_illegal();
write_d_pin(MELPS4_PORTD_CLR, 0);
}
void melps4_cpu_device::op_cls()
{
// CLS: clear port S
op_illegal();
write_gen_port(MELPS4_PORTS, 0);
}
void melps4_cpu_device::op_clds()
{
// CLDS: CLD, CLS
op_illegal();
op_cld();
op_cls();
}
void melps4_cpu_device::op_sd()
{
// SD: set port D bit designated by Y
op_illegal();
write_d_pin(m_y, 1);
}
void melps4_cpu_device::op_rd()
{
// RD: reset port D bit designated by Y
op_illegal();
write_d_pin(m_y, 0);
}
void melps4_cpu_device::op_szd()
{
// SZD: skip next if port D bit designated by Y is 0
op_illegal();
m_skip = !read_d_pin(m_y);
}
void melps4_cpu_device::op_osab()
{
// OSAB: output A and B to port S
op_illegal();
write_gen_port(MELPS4_PORTS, m_b << 4 | m_a);
}
void melps4_cpu_device::op_ospa()
@ -577,49 +578,50 @@ void melps4_cpu_device::op_ospa()
void melps4_cpu_device::op_ose()
{
// OSE: output E to port S
op_illegal();
write_gen_port(MELPS4_PORTS, m_e);
}
void melps4_cpu_device::op_ias()
{
// IAS i: transfer port S(hi/lo) to A
op_illegal();
int shift = (m_op & 1) ? 0 : 4;
m_a = read_gen_port(MELPS4_PORTS) >> shift & 0xf;
}
void melps4_cpu_device::op_ofa()
{
// OFA: output A to port F
op_illegal();
write_gen_port(MELPS4_PORTF, m_a);
}
void melps4_cpu_device::op_iaf()
{
// IAF: input port F to A
op_illegal();
m_a = read_gen_port(MELPS4_PORTF);
}
void melps4_cpu_device::op_oga()
{
// OGA: output A to port G
op_illegal();
write_gen_port(MELPS4_PORTG, m_a);
}
void melps4_cpu_device::op_iak()
{
// IAK: input port K to A
op_illegal();
m_a = m_read_k(0, 0xffff) & 0xf;
}
void melps4_cpu_device::op_szk()
{
// SZK j: skip next if port K bit is reset
op_illegal();
m_skip = !(m_read_k(0, 0xffff) & m_bitmask);
}
void melps4_cpu_device::op_su()
{
// SU/RU: set/reset port U
op_illegal();
write_gen_port(MELPS4_PORTU, m_op & 1);
}
@ -628,15 +630,15 @@ void melps4_cpu_device::op_su()
void melps4_cpu_device::op_ei()
{
// EI: enable interrupt flag
m_inte = 1;
m_prohibit_irq = true;
m_inte = 1;
}
void melps4_cpu_device::op_di()
{
// DI: disable interrupt flag
m_inte = 0;
m_prohibit_irq = true;
m_inte = 0;
}
void melps4_cpu_device::op_inth()

View File

@ -57,6 +57,15 @@
#include "pic16c62x.h"
const device_type PIC16C620 = &device_creator<pic16c620_device>;
const device_type PIC16C620A = &device_creator<pic16c620a_device>;
const device_type PIC16C621 = &device_creator<pic16c621_device>;
const device_type PIC16C621A = &device_creator<pic16c621a_device>;
const device_type PIC16C622 = &device_creator<pic16c622_device>;
const device_type PIC16C622A = &device_creator<pic16c622a_device>;
/****************************************************************************
* Internal Memory Map
****************************************************************************/

View File

@ -54,17 +54,21 @@ public:
device_delegate(const basetype &src) : basetype(src), device_delegate_helper(src.m_device_name) { }
device_delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object), device_delegate_helper(src.m_device_name) { }
template<class _FunctionClass> device_delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object), device_delegate_helper(safe_tag(dynamic_cast<device_t *>(object))) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> device_delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object), device_delegate_helper(safe_tag(dynamic_cast<device_t *>(object))) { }
template<class _FunctionClass> device_delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object), device_delegate_helper(safe_tag(dynamic_cast<device_t *>(object))) { }
#endif
device_delegate &operator=(const thistype &src) { *static_cast<basetype *>(this) = src; m_device_name = src.m_device_name; return *this; }
// provide additional constructors that take a device name string
template<class _FunctionClass> device_delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, const char *devname) : basetype(funcptr, name, (_FunctionClass *)0), device_delegate_helper(devname) { }
template<class _FunctionClass> device_delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, const char *devname, _FunctionClass *object) : basetype(funcptr, name, (_FunctionClass *)0), device_delegate_helper(devname) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> device_delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, const char *devname, _FunctionClass *object) : basetype(funcptr, name, (_FunctionClass *)0), device_delegate_helper(devname) { }
template<class _FunctionClass> device_delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, const char *devname, _FunctionClass *object) : basetype(funcptr, name, (_FunctionClass *)0), device_delegate_helper(devname) { }
device_delegate(typename basetype::template traits<device_t>::static_func_type funcptr, const char *name) : basetype(funcptr, name, (device_t *)0), device_delegate_helper(NULL) { }
device_delegate(typename basetype::template traits<device_t>::static_ref_func_type funcptr, const char *name) : basetype(funcptr, name, (device_t *)0), device_delegate_helper(NULL) { }
#endif
// and constructors that provide a search root
device_delegate(const thistype &src, device_t &search_root) : basetype(src), device_delegate_helper(src.m_device_name) { bind_relative_to(search_root); }

View File

@ -23,8 +23,6 @@ const device_type MPCC68561 = &device_creator<mpcc68561_t>;
#define LOG_MPCC (1)
#if 0 // future
/***************************************************************************
IMPLEMENTATION
***************************************************************************/
@ -481,7 +479,3 @@ WRITE8_MEMBER( mpcc68561_t::reg_w )
break;
}
}
#else
#endif

View File

@ -9,6 +9,7 @@ const device_type FD1781x = &device_creator<fd1781_t>;
const device_type FD1791x = &device_creator<fd1791_t>;
const device_type FD1792x = &device_creator<fd1792_t>;
const device_type FD1793x = &device_creator<fd1793_t>;
const device_type KR1818VG93x = &device_creator<kr1818vg93_t>;
const device_type FD1794x = &device_creator<fd1794_t>;
const device_type FD1795x = &device_creator<fd1795_t>;
const device_type FD1797x = &device_creator<fd1797_t>;
@ -903,12 +904,17 @@ void wd_fdc_t::interrupt_start()
status_type_1 = true;
}
if(!(command & 0x0f)) {
intrq_cond = 0;
} else if ((command & 0x0f) > 8) { // assume I_IMM is set only if condition equal to 8 but not more than, Spectrum's BetaDisk require this
intrq_cond = 0;
int intcond = command & 0x0f;
if (!nonsticky_immint) {
if(intcond == 0)
intrq_cond = 0;
else
intrq_cond = (intrq_cond & I_IMM) | intcond;
} else {
intrq_cond = (intrq_cond & I_IMM) | (command & 0x0f);
if (intcond < 8)
intrq_cond = intcond;
else
intrq_cond = 0;
}
if(command & I_IMM) {
@ -2394,6 +2400,7 @@ fd1771_t::fd1771_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
int fd1771_t::calc_sector_size(UINT8 size, UINT8 command) const
@ -2418,6 +2425,7 @@ fd1781_t::fd1781_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
int fd1781_t::calc_sector_size(UINT8 size, UINT8 command) const
@ -2444,6 +2452,7 @@ fd1791_t::fd1791_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
fd1792_t::fd1792_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, FD1792x, "FD1792", tag, owner, clock, "fd1792", __FILE__)
@ -2459,6 +2468,7 @@ fd1792_t::fd1792_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
fd1793_t::fd1793_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, FD1793x, "FD1793", tag, owner, clock, "fd1793", __FILE__)
@ -2474,6 +2484,23 @@ fd1793_t::fd1793_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
kr1818vg93_t::kr1818vg93_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, KR1818VG93x, "KR1818VG93", tag, owner, clock, "kr1818vg93", __FILE__)
{
step_times = fd179x_step_times;
delay_register_commit = 4;
delay_command_commit = 12;
disable_mfm = false;
has_enmf = false;
inverted_bus = false;
side_control = false;
side_compare = true;
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = true;
}
fd1794_t::fd1794_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, FD1794x, "FD1794", tag, owner, clock, "fd1794", __FILE__)
@ -2489,6 +2516,7 @@ fd1794_t::fd1794_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
fd1795_t::fd1795_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, FD1795x, "FD1795", tag, owner, clock, "fd1795", __FILE__)
@ -2504,6 +2532,7 @@ fd1795_t::fd1795_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
int fd1795_t::calc_sector_size(UINT8 size, UINT8 command) const
@ -2527,6 +2556,7 @@ fd1797_t::fd1797_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
int fd1797_t::calc_sector_size(UINT8 size, UINT8 command) const
@ -2550,6 +2580,7 @@ mb8866_t::mb8866_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
mb8876_t::mb8876_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, MB8876x, "MB8876", tag, owner, clock, "mb8876", __FILE__)
@ -2565,6 +2596,7 @@ mb8876_t::mb8876_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
mb8877_t::mb8877_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, MB8877x, "MB8877", tag, owner, clock, "mb8877", __FILE__)
@ -2580,6 +2612,7 @@ mb8877_t::mb8877_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
fd1761_t::fd1761_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, FD1761x, "FD1761", tag, owner, clock, "fd1761", __FILE__)
@ -2595,6 +2628,7 @@ fd1761_t::fd1761_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
fd1763_t::fd1763_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, FD1763x, "FD1763", tag, owner, clock, "fd1763", __FILE__)
@ -2610,6 +2644,7 @@ fd1763_t::fd1763_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
fd1765_t::fd1765_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, FD1765x, "FD1765", tag, owner, clock, "fd1765", __FILE__)
@ -2625,6 +2660,7 @@ fd1765_t::fd1765_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
int fd1765_t::calc_sector_size(UINT8 size, UINT8 command) const
@ -2648,6 +2684,7 @@ fd1767_t::fd1767_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
int fd1767_t::calc_sector_size(UINT8 size, UINT8 command) const
@ -2671,6 +2708,7 @@ wd2791_t::wd2791_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
wd2793_t::wd2793_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, WD2793x, "WD2793", tag, owner, clock, "wd2793", __FILE__)
@ -2686,6 +2724,7 @@ wd2793_t::wd2793_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
wd2795_t::wd2795_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_analog_t(mconfig, WD2795x, "WD2795", tag, owner, clock, "wd2795", __FILE__)
@ -2701,6 +2740,7 @@ wd2795_t::wd2795_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
int wd2795_t::calc_sector_size(UINT8 size, UINT8 command) const
@ -2724,6 +2764,7 @@ wd2797_t::wd2797_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = true;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}
int wd2797_t::calc_sector_size(UINT8 size, UINT8 command) const
@ -2747,6 +2788,7 @@ wd1770_t::wd1770_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = false;
motor_control = true;
ready_hooked = false;
nonsticky_immint = false;
}
wd1772_t::wd1772_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : wd_fdc_digital_t(mconfig, WD1772x, "WD1772", tag, owner, clock, "wd1772", __FILE__)
@ -2764,6 +2806,7 @@ wd1772_t::wd1772_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = false;
motor_control = true;
ready_hooked = false;
nonsticky_immint = false;
}
int wd1772_t::settle_time() const
@ -2784,4 +2827,5 @@ wd1773_t::wd1773_t(const machine_config &mconfig, const char *tag, device_t *own
head_control = false;
motor_control = false;
ready_hooked = true;
nonsticky_immint = false;
}

View File

@ -59,6 +59,9 @@
#define MCFG_FD1793x_ADD(_tag, _clock) \
MCFG_DEVICE_ADD(_tag, FD1793x, _clock)
#define MCFG_KR1818VG93x_ADD(_tag, _clock) \
MCFG_DEVICE_ADD(_tag, KR1818VG93x, _clock)
#define MCFG_FD1794x_ADD(_tag, _clock) \
MCFG_DEVICE_ADD(_tag, FD1794x, _clock)
@ -188,6 +191,7 @@ protected:
bool head_control;
bool motor_control;
bool ready_hooked;
bool nonsticky_immint;
int clock_ratio;
const int *step_times;
int delay_register_commit;
@ -532,6 +536,11 @@ public:
fd1793_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
};
class kr1818vg93_t : public wd_fdc_analog_t {
public:
kr1818vg93_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
};
class fd1794_t : public wd_fdc_analog_t {
public:
fd1794_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
@ -647,6 +656,7 @@ extern const device_type FD1781x;
extern const device_type FD1791x;
extern const device_type FD1792x;
extern const device_type FD1793x;
extern const device_type KR1818VG93x;
extern const device_type FD1795x;
extern const device_type FD1797x;

View File

@ -42,6 +42,15 @@ private:
// nld_Q
// ----------------------------------------------------------------------------------------
NETLIB_NAME(Q)::NETLIB_NAME(Q)(const family_t afamily)
: netlist_device_t(afamily)
, m_qtype(BJT_NPN) { }
NETLIB_NAME(Q)::~NETLIB_NAME(Q)()
{
}
NETLIB_START(Q)
{
register_param("model", m_model, "");

View File

@ -38,16 +38,15 @@ public:
BJT_PNP
};
ATTR_COLD NETLIB_NAME(Q)(const family_t afamily)
: netlist_device_t(afamily)
, m_qtype(BJT_NPN) { }
NETLIB_NAME(Q)(const family_t afamily);
virtual ~NETLIB_NAME(Q)();
inline q_type qtype() const { return m_qtype; }
inline bool is_qtype(q_type atype) const { return m_qtype == atype; }
inline void set_qtype(q_type atype) { m_qtype = atype; }
protected:
/* ATTR_COLD */ virtual void start();
/* ATTR_COLD */ virtual void reset();
virtual void start();
virtual void reset();
ATTR_HOT void update();
netlist_param_model_t m_model;
@ -59,9 +58,11 @@ class NETLIB_NAME(QBJT) : public NETLIB_NAME(Q)
{
public:
ATTR_COLD NETLIB_NAME(QBJT)(const family_t afamily)
NETLIB_NAME(QBJT)(const family_t afamily)
: NETLIB_NAME(Q)(afamily) { }
virtual ~NETLIB_NAME(QBJT)() { }
protected:
private:
@ -110,9 +111,9 @@ public:
protected:
/* ATTR_COLD */ virtual void start();
virtual void start();
ATTR_HOT virtual void update_param();
/* ATTR_COLD */ virtual void reset();
virtual void reset();
NETLIB_UPDATE_TERMINALSI();
nl_double m_gB; // base conductance / switch on
@ -142,8 +143,8 @@ public:
protected:
/* ATTR_COLD */ virtual void start();
/* ATTR_COLD */ virtual void reset();
virtual void start();
virtual void reset();
ATTR_HOT void update_param();
ATTR_HOT void virtual update();
NETLIB_UPDATE_TERMINALSI();

View File

@ -56,9 +56,9 @@ public:
: netlist_device_t(afamily), m_gfac(1.0) { }
protected:
/* ATTR_COLD */ virtual void start();
/* ATTR_COLD */ virtual void reset();
/* ATTR_COLD */ virtual void update_param();
virtual void start();
virtual void reset();
virtual void update_param();
ATTR_HOT void update();
ATTR_COLD void start_internal(const nl_double def_RI);
@ -112,9 +112,9 @@ public:
//: netlist_device_t(afamily), m_gfac(1.0) { }
protected:
/* ATTR_COLD */ virtual void start();
/* ATTR_COLD */ virtual void reset();
/* ATTR_COLD */ virtual void update_param();
virtual void start();
virtual void reset();
virtual void update_param();
ATTR_HOT void update();
nl_double m_gfac;
@ -156,9 +156,9 @@ public:
: NETLIB_NAME(VCCS)(VCVS) { }
protected:
/* ATTR_COLD */ virtual void start();
/* ATTR_COLD */ virtual void reset();
/* ATTR_COLD */ virtual void update_param();
virtual void start();
virtual void reset();
virtual void update_param();
//ATTR_HOT void update();
netlist_terminal_t m_OP2;

View File

@ -20,15 +20,15 @@ public:
virtual ~netlist_matrix_solver_direct_t();
/* ATTR_COLD */ virtual void vsetup(netlist_analog_net_t::list_t &nets);
/* ATTR_COLD */ virtual void reset() { netlist_matrix_solver_t::reset(); }
virtual void vsetup(netlist_analog_net_t::list_t &nets);
virtual void reset() { netlist_matrix_solver_t::reset(); }
ATTR_HOT inline unsigned N() const { if (m_N == 0) return m_dim; else return m_N; }
ATTR_HOT inline int vsolve_non_dynamic(const bool newton_raphson);
protected:
/* ATTR_COLD */ virtual void add_term(int net_idx, netlist_terminal_t *term);
virtual void add_term(int net_idx, netlist_terminal_t *term);
ATTR_HOT virtual nl_double vsolve();

View File

@ -31,7 +31,7 @@ public:
virtual ~netlist_matrix_solver_SOR_t() {}
/* ATTR_COLD */ virtual void log_stats();
virtual void log_stats();
ATTR_HOT inline int vsolve_non_dynamic();
protected:

View File

@ -30,7 +30,7 @@ public:
virtual ~netlist_matrix_solver_SOR_t() {}
/* ATTR_COLD */ virtual void log_stats();
virtual void log_stats();
ATTR_HOT virtual int vsolve_non_dynamic(const bool newton_raphson);
protected:

View File

@ -36,7 +36,7 @@ public:
virtual ~netlist_matrix_solver_SOR_mat_t() {}
/* ATTR_COLD */ virtual void log_stats();
virtual void log_stats();
ATTR_HOT inline int vsolve_non_dynamic(const bool newton_raphson);
protected:

View File

@ -100,9 +100,9 @@ public:
};
ATTR_COLD netlist_matrix_solver_t(const eSolverType type, const netlist_solver_parameters_t *params);
/* ATTR_COLD */ virtual ~netlist_matrix_solver_t();
virtual ~netlist_matrix_solver_t();
/* ATTR_COLD */ virtual void vsetup(netlist_analog_net_t::list_t &nets) = 0;
virtual void vsetup(netlist_analog_net_t::list_t &nets) = 0;
template<class C>
void solve_base(C *p);
@ -120,11 +120,11 @@ public:
/* netdevice functions */
ATTR_HOT virtual void update();
/* ATTR_COLD */ virtual void start();
/* ATTR_COLD */ virtual void reset();
virtual void start();
virtual void reset();
ATTR_COLD int get_net_idx(netlist_net_t *net);
/* ATTR_COLD */ virtual void log_stats() {};
virtual void log_stats() {};
inline eSolverType type() const { return m_type; }
@ -136,7 +136,7 @@ protected:
// should return next time step
ATTR_HOT virtual nl_double vsolve() = 0;
/* ATTR_COLD */ virtual void add_term(int net_idx, netlist_terminal_t *term) = 0;
virtual void add_term(int net_idx, netlist_terminal_t *term) = 0;
plist_t<netlist_analog_net_t *> m_nets;
plist_t<netlist_analog_output_t *> m_inps;
@ -173,7 +173,7 @@ public:
NETLIB_NAME(solver)()
: netlist_device_t() { }
/* ATTR_COLD */ virtual ~NETLIB_NAME(solver)();
virtual ~NETLIB_NAME(solver)();
ATTR_COLD void post_start();
ATTR_COLD void stop();

View File

@ -122,8 +122,8 @@ public:
}
protected:
/* ATTR_COLD */ virtual void start();
/* ATTR_COLD */ virtual void reset();
virtual void start();
virtual void reset();
ATTR_HOT void update();
private:
@ -144,8 +144,8 @@ public:
}
protected:
/* ATTR_COLD */ virtual void start();
/* ATTR_COLD */ virtual void reset();
virtual void start();
virtual void reset();
ATTR_HOT void update();
};
@ -193,9 +193,9 @@ public:
}
protected:
/* ATTR_COLD */ virtual void start();
/* ATTR_COLD */ virtual void reset();
/* ATTR_COLD */ virtual void update_param();
virtual void start();
virtual void reset();
virtual void update_param();
ATTR_HOT void update();
netlist_param_double_t m_C;
@ -282,8 +282,8 @@ public:
NETLIB_UPDATE_TERMINALSI();
protected:
/* ATTR_COLD */ virtual void start();
/* ATTR_COLD */ virtual void update_param();
virtual void start();
virtual void update_param();
ATTR_HOT void update();
netlist_param_model_t m_model;

View File

@ -18,7 +18,7 @@
class NETLIB_NAME(_name) : public net_signal_t<_num_input, _check, _invert> \
{ \
public: \
ATTR_COLD NETLIB_NAME(_name) () \
NETLIB_NAME(_name) () \
: net_signal_t<_num_input, _check, _invert>() { } \
}
@ -35,7 +35,7 @@ public:
{
}
ATTR_COLD void start()
void start()
{
const char *sIN[8] = { "A", "B", "C", "D", "E", "F", "G", "H" };
@ -47,7 +47,7 @@ public:
save(NLNAME(m_active));
}
ATTR_COLD void reset()
void reset()
{
m_Q[0].initial(0);
m_active = 1;

View File

@ -177,7 +177,7 @@ NETLIB_UPDATE_PARAM(analog_input)
// nld_d_to_a_proxy
// ----------------------------------------------------------------------------------------
ATTR_COLD void nld_d_to_a_proxy::start()
void nld_d_to_a_proxy::start()
{
nld_base_d_to_a_proxy::start();
@ -192,7 +192,7 @@ ATTR_COLD void nld_d_to_a_proxy::start()
m_Q.initial(0.0);
}
ATTR_COLD void nld_d_to_a_proxy::reset()
void nld_d_to_a_proxy::reset()
{
m_RV.do_reset();
m_is_timestep = m_RV.m_P.net().as_analog().solver()->is_timestep();

View File

@ -97,7 +97,7 @@ UINT32 truthtable_desc_t::get_ignored_extended(UINT32 i)
// desc
// ----------------------------------------------------------------------------------------
ATTR_COLD void truthtable_desc_t::help(unsigned cur, pstring_list_t list,
void truthtable_desc_t::help(unsigned cur, pstring_list_t list,
UINT64 state,UINT16 val, UINT8 *timing_index)
{
pstring elem = list[cur].trim();
@ -142,7 +142,7 @@ ATTR_COLD void truthtable_desc_t::help(unsigned cur, pstring_list_t list,
}
}
ATTR_COLD void truthtable_desc_t::setup(const pstring_list_t &truthtable, UINT32 disabled_ignore)
void truthtable_desc_t::setup(const pstring_list_t &truthtable, UINT32 disabled_ignore)
{
unsigned line = 0;

View File

@ -45,10 +45,10 @@ struct truthtable_desc_t
{
}
ATTR_COLD void setup(const pstring_list_t &desc, UINT32 disabled_ignore);
void setup(const pstring_list_t &desc, UINT32 disabled_ignore);
private:
ATTR_COLD void help(unsigned cur, pstring_list_t list,
void help(unsigned cur, pstring_list_t list,
UINT64 state,UINT16 val, UINT8 *timing_index);
static unsigned count_bits(UINT32 v);
static UINT32 set_bits(UINT32 v, UINT32 b);
@ -106,7 +106,7 @@ public:
m_desc = desc;
}
/* ATTR_COLD */ virtual void start()
virtual void start()
{
pstring header = m_desc[0];
@ -164,7 +164,7 @@ public:
}
ATTR_COLD void reset()
void reset()
{
m_active = 0;
for (unsigned i=0; i<m_NO;i++)
@ -174,7 +174,7 @@ public:
}
template<bool doOUT>
ATTR_HOT inline void process()
inline void process()
{
netlist_time mt = netlist_time::zero;
@ -262,7 +262,7 @@ class netlist_base_factory_truthtable_t : public netlist_base_factory_t
{
NETLIST_PREVENT_COPYING(netlist_base_factory_truthtable_t)
public:
ATTR_COLD netlist_base_factory_truthtable_t(const pstring &name, const pstring &classname,
netlist_base_factory_truthtable_t(const pstring &name, const pstring &classname,
const pstring &def_param)
: netlist_base_factory_t(name, classname, def_param)
{}
@ -275,11 +275,11 @@ class netlist_factory_truthtable_t : public netlist_base_factory_truthtable_t
{
NETLIST_PREVENT_COPYING(netlist_factory_truthtable_t)
public:
ATTR_COLD netlist_factory_truthtable_t(const pstring &name, const pstring &classname,
netlist_factory_truthtable_t(const pstring &name, const pstring &classname,
const pstring &def_param)
: netlist_base_factory_truthtable_t(name, classname, def_param) { }
ATTR_COLD netlist_device_t *Create()
netlist_device_t *Create()
{
typedef nld_truthtable_t<m_NI, m_NO, has_state> tt_type;
netlist_device_t *r = palloc(tt_type, &m_ttbl, m_desc);

View File

@ -173,7 +173,7 @@ class netlist_core_device_t;
#if (NL_PMF_TYPE == NL_PMF_TYPE_GNUC_PMF)
typedef void (netlist_core_device_t::*net_update_delegate)();
#elif ((NL_PMF_TYPE == NL_PMF_TYPE_GNUC_PMF_CONV) || (NL_PMF_TYPE == NL_PMF_TYPE_INTERNAL))
typedef void (*net_update_delegate)(netlist_core_device_t *);
typedef MEMBER_ABI void (*net_update_delegate)(netlist_core_device_t *);
#endif
//============================================================
@ -248,7 +248,7 @@ typedef void (*net_update_delegate)(netlist_core_device_t *);
, _priv)
#define NETLIB_LOGIC_FAMILY(_fam) \
/* ATTR_COLD */ virtual const netlist_logic_family_desc_t *default_logic_family() \
virtual const netlist_logic_family_desc_t *default_logic_family() \
{ \
return &netlist_family_ ## _fam; \
}
@ -409,9 +409,9 @@ public:
protected:
/* ATTR_COLD */ virtual void reset() = 0;
virtual void reset() = 0;
// must call parent save_register !
/* ATTR_COLD */ virtual void save_register() { };
virtual void save_register() { };
private:
pstring m_name;
@ -483,7 +483,7 @@ public:
ATTR_HOT /* inline */ void update_dev(const UINT32 mask);
protected:
/* ATTR_COLD */ virtual void save_register()
virtual void save_register()
{
save(NLNAME(m_state));
netlist_owned_object_t::save_register();
@ -537,9 +537,9 @@ public:
netlist_terminal_t *m_otherterm;
protected:
/* ATTR_COLD */ virtual void save_register();
virtual void save_register();
/* ATTR_COLD */ virtual void reset();
virtual void reset();
private:
ATTR_HOT void set_ptr(nl_double *ptr, const nl_double val)
{
@ -613,7 +613,7 @@ public:
ATTR_HOT void activate_lh();
protected:
/* ATTR_COLD */ virtual void reset()
virtual void reset()
{
//netlist_core_terminal_t::reset();
set_state(STATE_INP_ACTIVE);
@ -637,7 +637,7 @@ public:
ATTR_HOT nl_double Q_Analog() const;
protected:
/* ATTR_COLD */ virtual void reset()
virtual void reset()
{
//netlist_core_terminal_t::reset();
set_state(STATE_INP_ACTIVE);
@ -656,7 +656,7 @@ public:
typedef plist_t<netlist_net_t *> list_t;
ATTR_COLD netlist_net_t(const family_t afamily);
/* ATTR_COLD */ virtual ~netlist_net_t();
virtual ~netlist_net_t();
ATTR_COLD void init_object(netlist_base_t &nl, const pstring &aname);
@ -705,8 +705,8 @@ public:
protected: //FIXME: needed by current solver code
/* ATTR_COLD */ virtual void save_register();
/* ATTR_COLD */ virtual void reset();
virtual void save_register();
virtual void reset();
netlist_sig_t m_new_Q;
netlist_sig_t m_cur_Q;
@ -736,7 +736,7 @@ public:
typedef plist_t<netlist_logic_net_t *> list_t;
ATTR_COLD netlist_logic_net_t();
/* ATTR_COLD */ virtual ~netlist_logic_net_t() { };
virtual ~netlist_logic_net_t() { };
ATTR_HOT netlist_sig_t Q() const
{
@ -778,8 +778,8 @@ public:
protected: //FIXME: needed by current solver code
/* ATTR_COLD */ virtual void save_register();
/* ATTR_COLD */ virtual void reset();
virtual void save_register();
virtual void reset();
private:
@ -796,7 +796,7 @@ public:
typedef plist_t<netlist_analog_net_t *> list_t;
ATTR_COLD netlist_analog_net_t();
/* ATTR_COLD */ virtual ~netlist_analog_net_t() { };
virtual ~netlist_analog_net_t() { };
ATTR_HOT nl_double Q_Analog() const
{
@ -815,8 +815,8 @@ public:
protected:
/* ATTR_COLD */ virtual void save_register();
/* ATTR_COLD */ virtual void reset();
virtual void save_register();
virtual void reset();
private:
@ -841,7 +841,7 @@ public:
ATTR_COLD netlist_logic_output_t();
ATTR_COLD void init_object(netlist_core_device_t &dev, const pstring &aname);
/* ATTR_COLD */ virtual void reset()
virtual void reset()
{
set_state(STATE_OUT);
}
@ -865,7 +865,7 @@ public:
ATTR_COLD netlist_analog_output_t();
ATTR_COLD void init_object(netlist_core_device_t &dev, const pstring &aname);
/* ATTR_COLD */ virtual void reset()
virtual void reset()
{
set_state(STATE_OUT);
}
@ -903,7 +903,7 @@ public:
protected:
/* ATTR_COLD */ virtual void reset() { }
virtual void reset() { }
private:
const param_type_t m_param_type;
@ -920,7 +920,7 @@ public:
ATTR_HOT nl_double Value() const { return m_param; }
protected:
/* ATTR_COLD */ virtual void save_register()
virtual void save_register()
{
save(NLNAME(m_param));
netlist_param_t::save_register();
@ -942,7 +942,7 @@ public:
ATTR_HOT int Value() const { return m_param; }
protected:
/* ATTR_COLD */ virtual void save_register()
virtual void save_register()
{
save(NLNAME(m_param));
netlist_param_t::save_register();
@ -1005,9 +1005,9 @@ public:
ATTR_COLD netlist_core_device_t(const family_t afamily);
/* ATTR_COLD */ virtual ~netlist_core_device_t();
virtual ~netlist_core_device_t();
/* ATTR_COLD */ virtual void init(netlist_base_t &anetlist, const pstring &name);
virtual void init(netlist_base_t &anetlist, const pstring &name);
ATTR_HOT virtual void update_param() {}
ATTR_HOT void update_dev()
@ -1066,9 +1066,9 @@ public:
protected:
ATTR_HOT virtual void update() { }
/* ATTR_COLD */ virtual void start() { }
/* ATTR_COLD */ virtual void stop() { } \
/* ATTR_COLD */ virtual const netlist_logic_family_desc_t *default_logic_family()
virtual void start() { }
virtual void stop() { } \
virtual const netlist_logic_family_desc_t *default_logic_family()
{
return &netlist_family_TTL;
}
@ -1088,9 +1088,9 @@ public:
ATTR_COLD netlist_device_t();
ATTR_COLD netlist_device_t(const family_t afamily);
/* ATTR_COLD */ virtual ~netlist_device_t();
virtual ~netlist_device_t();
/* ATTR_COLD */ virtual void init(netlist_base_t &anetlist, const pstring &name);
virtual void init(netlist_base_t &anetlist, const pstring &name);
ATTR_COLD netlist_setup_t &setup();
@ -1245,12 +1245,12 @@ protected:
};
// any derived netlist must override this ...
/* ATTR_COLD */ virtual void verror(const loglevel_e level,
virtual void verror(const loglevel_e level,
const char *format, va_list ap) const = 0;
/* from netlist_object */
/* ATTR_COLD */ virtual void reset();
/* ATTR_COLD */ virtual void save_register();
virtual void reset();
virtual void save_register();
#if (NL_KEEP_STATISTICS)
// performance

View File

@ -47,7 +47,7 @@
*/
// This will be autodetected
// #define NL_PMF_TYPE 3
#define NL_PMF_TYPE 3
#define NL_PMF_TYPE_VIRTUAL 0
#define NL_PMF_TYPE_GNUC_PMF 1

View File

@ -27,9 +27,9 @@ public:
: m_name(name), m_classname(classname), m_def_param(def_param)
{}
/* ATTR_COLD */ virtual ~netlist_base_factory_t() {}
virtual ~netlist_base_factory_t() {}
/* ATTR_COLD */ virtual netlist_device_t *Create() = 0;
virtual netlist_device_t *Create() = 0;
ATTR_COLD const pstring &name() const { return m_name; }
ATTR_COLD const pstring &classname() const { return m_classname; }

View File

@ -128,9 +128,9 @@ public:
// save state support & mame disasm
ATTR_COLD const entry_t *listptr() const { return &m_list[0]; }
ATTR_HOT int count() const { return m_end - m_list; }
ATTR_HOT const entry_t & operator[](const int & index) const { return m_list[index]; }
ATTR_COLD const entry_t *listptr() const { return &m_list[1]; }
ATTR_HOT int count() const { return m_end - &m_list[1]; }
ATTR_HOT const entry_t & operator[](const int & index) const { return m_list[1+index]; }
#if (NL_KEEP_STATISTICS)
// profiling

View File

@ -50,7 +50,8 @@
#if defined(__GNUC__)
/* does not work in versions over 4.7.x of 32bit MINGW */
#if defined(__MINGW32__) && !defined(__x86_64) && defined(__i386__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
#define PHAS_PMF_INTERNAL 0
#define PHAS_PMF_INTERNAL 1
#define MEMBER_ABI __thiscall
#elif defined(EMSCRIPTEN)
#define PHAS_PMF_INTERNAL 0
#elif defined(__arm__) || defined(__ARMEL__)
@ -62,6 +63,9 @@
#define USE_DELEGATE_TYPE PHAS_PMF_INTERNAL 0
#endif
#ifndef MEMBER_ABI
#define MEMBER_ABI
#endif
/* not supported in GCC prior to 4.4.x */
/* ATTR_HOT and ATTR_COLD cause performance degration in 5.1 */

View File

@ -0,0 +1,413 @@
// license:GPL-2.0+
// copyright-holders:Couriersud
/*
* nl_convert.c
*
*/
#include "nl_convert.h"
#if 0
#include <cstddef>
#include <cstdarg>
#include "plib/pstring.h"
#include "plib/plists.h"
#endif
/*-------------------------------------------------
convert - convert a spice netlist
-------------------------------------------------*/
void nl_convert_base_t::out(const char *format, ...)
{
va_list ap;
va_start(ap, format);
m_buf += pstring(format).vprintf(ap);
va_end(ap);
}
void nl_convert_base_t::add_pin_alias(const pstring &devname, const pstring &name, const pstring &alias)
{
m_pins.add(palloc(sp_pin_alias_t, devname + "." + name, devname + "." + alias), false);
}
void nl_convert_base_t::add_ext_alias(const pstring &alias)
{
m_ext_alias.add(alias);
}
void nl_convert_base_t::add_device(const pstring &atype, const pstring &aname, const pstring &amodel)
{
devs.add(palloc(sp_dev_t, atype, aname, amodel), false);
}
void nl_convert_base_t::add_device(const pstring &atype, const pstring &aname, double aval)
{
devs.add(palloc(sp_dev_t, atype, aname, aval), false);
}
void nl_convert_base_t::add_device(const pstring &atype, const pstring &aname)
{
devs.add(palloc(sp_dev_t, atype, aname), false);
}
void nl_convert_base_t::add_term(pstring netname, pstring termname)
{
sp_net_t * net = m_nets.find_by_name(netname);
if (net == NULL)
{
net = palloc(sp_net_t, netname);
m_nets.add(net, false);
}
/* if there is a pin alias, translate ... */
sp_pin_alias_t *alias = m_pins.find_by_name(termname);
if (alias != NULL)
net->terminals().add(alias->alias());
else
net->terminals().add(termname);
}
void nl_convert_base_t::dump_nl()
{
for (int i=0; i<m_ext_alias.size(); i++)
{
sp_net_t *net = m_nets.find_by_name(m_ext_alias[i]);
// use the first terminal ...
out("ALIAS(%s, %s)\n", m_ext_alias[i].cstr(), net->terminals()[0].cstr());
// if the aliased net only has this one terminal connected ==> don't dump
if (net->terminals().size() == 1)
net->set_no_export();
}
for (int i=0; i<devs.size(); i++)
{
if (devs[i]->has_value())
out("%s(%s, %s)\n", devs[i]->type().cstr(),
devs[i]->name().cstr(), get_nl_val(devs[i]->value()).cstr());
else if (devs[i]->has_model())
out("%s(%s, \"%s\")\n", devs[i]->type().cstr(),
devs[i]->name().cstr(), devs[i]->model().cstr());
else
out("%s(%s)\n", devs[i]->type().cstr(),
devs[i]->name().cstr());
}
// print nets
for (int i=0; i<m_nets.size(); i++)
{
sp_net_t * net = m_nets[i];
if (!net->is_no_export())
{
//printf("Net %s\n", net->name().cstr());
out("NET_C(%s", net->terminals()[0].cstr() );
for (int j=1; j<net->terminals().size(); j++)
{
out(", %s", net->terminals()[j].cstr() );
}
out(")\n");
}
}
devs.clear_and_free();
m_nets.clear_and_free();
m_pins.clear_and_free();
m_ext_alias.clear();
}
const pstring nl_convert_base_t::get_nl_val(const double val)
{
{
int i = 0;
while (m_sp_units[i].sp_unit != "-" )
{
if (m_sp_units[i].mult <= nl_math::abs(val))
break;
i++;
}
return pstring::sprintf(m_sp_units[i].nl_func.cstr(), val / m_sp_units[i].mult);
}
}
double nl_convert_base_t::get_sp_unit(const pstring &unit)
{
int i = 0;
while (m_sp_units[i].sp_unit != "-")
{
if (m_sp_units[i].sp_unit == unit)
return m_sp_units[i].mult;
i++;
}
fprintf(stderr, "Unit %s unknown\n", unit.cstr());
return 0.0;
}
double nl_convert_base_t::get_sp_val(const pstring &sin)
{
int p = sin.len() - 1;
while (p>=0 && (sin.substr(p,1) < "0" || sin.substr(p,1) > "9"))
p--;
pstring val = sin.substr(0,p + 1);
pstring unit = sin.substr(p + 1);
double ret = get_sp_unit(unit) * val.as_double();
//printf("<%s> %s %d ==> %f\n", sin.cstr(), unit.cstr(), p, ret);
return ret;
}
nl_convert_base_t::sp_unit nl_convert_base_t::m_sp_units[] = {
{"T", "", 1.0e12 },
{"G", "", 1.0e9 },
{"MEG", "RES_M(%g)", 1.0e6 },
{"k", "RES_K(%g)", 1.0e3 }, /* eagle */
{"K", "RES_K(%g)", 1.0e3 },
{"", "%g", 1.0e0 },
{"M", "CAP_M(%g)", 1.0e-3 },
{"u", "CAP_U(%g)", 1.0e-6 }, /* eagle */
{"U", "CAP_U(%g)", 1.0e-6 },
{"µ", "CAP_U(%g)", 1.0e-6 },
{"N", "CAP_N(%g)", 1.0e-9 },
{"P", "CAP_P(%g)", 1.0e-12},
{"F", "%ge-15", 1.0e-15},
{"MIL", "%e", 25.4e-6},
{"-", "%g", 1.0 }
};
void nl_convert_spice_t::convert(const pstring &contents)
{
pstring_list_t spnl(contents, "\n");
// Add gnd net
// FIXME: Parameter
out("NETLIST_START(dummy)\n");
add_term("0", "GND");
pstring line = "";
for (std::size_t i=0; i < spnl.size(); i++)
{
// Basic preprocessing
pstring inl = spnl[i].trim().ucase();
if (inl.startsWith("+"))
line = line + inl.substr(1);
else
{
process_line(line);
line = inl;
}
}
process_line(line);
dump_nl();
// FIXME: Parameter
out("NETLIST_END()\n");
}
void nl_convert_spice_t::process_line(const pstring &line)
{
if (line != "")
{
pstring_list_t tt(line, " ", true);
double val = 0.0;
switch (tt[0].cstr()[0])
{
case ';':
out("// %s\n", line.substr(1).cstr());
break;
case '*':
out("// %s\n", line.substr(1).cstr());
break;
case '.':
if (tt[0].equals(".SUBCKT"))
{
out("NETLIST_START(%s)\n", tt[1].cstr());
for (int i=2; i<tt.size(); i++)
add_ext_alias(tt[i]);
}
else if (tt[0].equals(".ENDS"))
{
dump_nl();
out("NETLIST_END()\n");
}
else
out("// %s\n", line.cstr());
break;
case 'Q':
{
bool cerr = false;
/* check for fourth terminal ... should be numeric net
* including "0" or start with "N" (ltspice)
*/
// FIXME: we need a is_long method ..
ATTR_UNUSED int nval =tt[4].as_long(&cerr);
if ((!cerr || tt[4].startsWith("N")) && tt.size() > 5)
add_device("QBJT", tt[0], tt[5]);
else
add_device("QBJT", tt[0], tt[4]);
add_term(tt[1], tt[0] + ".C");
add_term(tt[2], tt[0] + ".B");
add_term(tt[3], tt[0] + ".E");
}
break;
case 'R':
val = get_sp_val(tt[3]);
add_device("RES", tt[0], val);
add_term(tt[1], tt[0] + ".1");
add_term(tt[2], tt[0] + ".2");
break;
case 'C':
val = get_sp_val(tt[3]);
add_device("CAP", tt[0], val);
add_term(tt[1], tt[0] + ".1");
add_term(tt[2], tt[0] + ".2");
break;
case 'V':
// just simple Voltage sources ....
if (tt[2].equals("0"))
{
val = get_sp_val(tt[3]);
add_device("ANALOG_INPUT", tt[0], val);
add_term(tt[1], tt[0] + ".Q");
//add_term(tt[2], tt[0] + ".2");
}
else
fprintf(stderr, "Voltage Source %s not connected to GND\n", tt[0].cstr());
break;
case 'D':
// FIXME: Rewrite resistor value
add_device("DIODE", tt[0], tt[3]);
add_term(tt[1], tt[0] + ".A");
add_term(tt[2], tt[0] + ".K");
break;
case 'U':
case 'X':
{
// FIXME: specific code for KICAD exports
// last element is component type
// FIXME: Parameter
pstring xname = tt[0].replace(".", "_");
pstring tname = "TTL_" + tt[tt.size()-1] + "_DIP";
add_device(tname, xname);
for (int i=1; i < tt.size() - 1; i++)
{
pstring term = pstring::sprintf("%s.%d", xname.cstr(), i);
add_term(tt[i], term);
}
break;
}
default:
out("// IGNORED %s: %s\n", tt[0].cstr(), line.cstr());
}
}
}
void nl_convert_eagle_t::convert(const pstring &contents)
{
eagle_tokenizer tok(*this);
tok.reset(contents.cstr());
out("NETLIST_START(dummy)\n");
add_term("GND", "GND");
add_term("VCC", "VCC");
eagle_tokenizer::token_t token = tok.get_token();
while (true)
{
if (token.is_type(eagle_tokenizer::ENDOFFILE))
{
dump_nl();
// FIXME: Parameter
out("NETLIST_END()\n");
return;
}
else if (token.is(tok.m_tok_SEMICOLON))
{
/* ignore empty statements */
token = tok.get_token();
}
else if (token.is(tok.m_tok_ADD))
{
pstring name = tok.get_string();
/* skip to semicolon */
do
{
token = tok.get_token();
} while (!token.is(tok.m_tok_SEMICOLON));
token = tok.get_token();
pstring sval = "";
if (token.is(tok.m_tok_VALUE))
{
pstring vname = tok.get_string();
sval = tok.get_string();
tok.require_token(tok.m_tok_SEMICOLON);
token = tok.get_token();
}
switch (name.cstr()[0])
{
case 'Q':
{
add_device("QBJT", name, sval);
}
break;
case 'R':
{
double val = get_sp_val(sval);
add_device("RES", name, val);
}
break;
case 'C':
{
double val = get_sp_val(sval);
add_device("CAP", name, val);
}
break;
case 'P':
if (sval.ucase() == "HIGH")
add_device("TTL_INPUT", name, 1);
else if (sval.ucase() == "LOW")
add_device("TTL_INPUT", name, 0);
else
add_device("ANALOG_INPUT", name, sval.as_double());
add_pin_alias(name, "1", "Q");
break;
case 'D':
/* Pin 1 = Anode, Pin 2 = Cathode */
add_device("DIODE", name, sval);
add_pin_alias(name, "1", "A");
add_pin_alias(name, "2", "K");
break;
case 'U':
case 'X':
{
pstring tname = "TTL_" + sval + "_DIP";
add_device(tname, name);
break;
}
default:
tok.error("// IGNORED %s\n", name.cstr());
}
}
else if (token.is(tok.m_tok_SIGNAL))
{
pstring netname = tok.get_string();
token = tok.get_token();
while (!token.is(tok.m_tok_SEMICOLON))
{
/* fixme: should check for string */
pstring devname = token.str();
pstring pin = tok.get_string();
add_term(netname, devname + "." + pin);
token = tok.get_token(); }
}
else
{
out("Unexpected %s\n", token.str().cstr());
return;
}
}
}

View File

@ -15,6 +15,7 @@
#include "plib/pstring.h"
#include "plib/plists.h"
#include "plib/pparser.h"
/*-------------------------------------------------
convert - convert a spice netlist
@ -37,137 +38,23 @@ public:
protected:
void out(const char *format, ...) ATTR_PRINTF(2,3)
{
va_list ap;
va_start(ap, format);
m_buf += pstring(format).vprintf(ap);
va_end(ap);
}
void out(const char *format, ...) ATTR_PRINTF(2,3);
void add_pin_alias(const pstring &devname, const pstring &name, const pstring &alias);
void add_pin_alias(const pstring &devname, const pstring &name, const pstring &alias)
{
m_pins.add(palloc(sp_pin_alias_t, devname + "." + name, devname + "." + alias), false);
}
void add_ext_alias(const pstring &alias);
void add_ext_alias(const pstring &alias)
{
m_ext_alias.add(alias);
}
void add_device(const pstring &atype, const pstring &aname, const pstring &amodel);
void add_device(const pstring &atype, const pstring &aname, double aval);
void add_device(const pstring &atype, const pstring &aname);
void add_device(const pstring &atype, const pstring &aname, const pstring &amodel)
{
devs.add(palloc(sp_dev_t, atype, aname, amodel), false);
}
void add_device(const pstring &atype, const pstring &aname, double aval)
{
devs.add(palloc(sp_dev_t, atype, aname, aval), false);
}
void add_device(const pstring &atype, const pstring &aname)
{
devs.add(palloc(sp_dev_t, atype, aname), false);
}
void add_term(pstring netname, pstring termname);
void add_term(pstring netname, pstring termname)
{
sp_net_t * net = m_nets.find_by_name(netname);
if (net == NULL)
{
net = palloc(sp_net_t, netname);
m_nets.add(net, false);
}
void dump_nl();
/* if there is a pin alias, translate ... */
sp_pin_alias_t *alias = m_pins.find_by_name(termname);
const pstring get_nl_val(const double val);
double get_sp_unit(const pstring &unit);
if (alias != NULL)
net->terminals().add(alias->alias());
else
net->terminals().add(termname);
}
void dump_nl()
{
for (int i=0; i<m_ext_alias.size(); i++)
{
sp_net_t *net = m_nets.find_by_name(m_ext_alias[i]);
// use the first terminal ...
out("ALIAS(%s, %s)\n", m_ext_alias[i].cstr(), net->terminals()[0].cstr());
// if the aliased net only has this one terminal connected ==> don't dump
if (net->terminals().size() == 1)
net->set_no_export();
}
for (int i=0; i<devs.size(); i++)
{
if (devs[i]->has_value())
out("%s(%s, %s)\n", devs[i]->type().cstr(),
devs[i]->name().cstr(), get_nl_val(devs[i]->value()).cstr());
else if (devs[i]->has_model())
out("%s(%s, \"%s\")\n", devs[i]->type().cstr(),
devs[i]->name().cstr(), devs[i]->model().cstr());
else
out("%s(%s)\n", devs[i]->type().cstr(),
devs[i]->name().cstr());
}
// print nets
for (int i=0; i<m_nets.size(); i++)
{
sp_net_t * net = m_nets[i];
if (!net->is_no_export())
{
//printf("Net %s\n", net->name().cstr());
out("NET_C(%s", net->terminals()[0].cstr() );
for (int j=1; j<net->terminals().size(); j++)
{
out(", %s", net->terminals()[j].cstr() );
}
out(")\n");
}
}
devs.clear_and_free();
m_nets.clear_and_free();
m_pins.clear_and_free();
m_ext_alias.clear();
}
const pstring get_nl_val(const double val)
{
{
int i = 0;
while (m_sp_units[i].sp_unit != "-" )
{
if (m_sp_units[i].mult <= nl_math::abs(val))
break;
i++;
}
return pstring::sprintf(m_sp_units[i].nl_func.cstr(), val / m_sp_units[i].mult);
}
}
double get_sp_unit(const pstring &unit)
{
int i = 0;
while (m_sp_units[i].sp_unit != "-")
{
if (m_sp_units[i].sp_unit == unit)
return m_sp_units[i].mult;
i++;
}
fprintf(stderr, "Unit %s unknown\n", unit.cstr());
return 0.0;
}
double get_sp_val(const pstring &sin)
{
int p = sin.len() - 1;
while (p>=0 && (sin.substr(p,1) < "0" || sin.substr(p,1) > "9"))
p--;
pstring val = sin.substr(0,p + 1);
pstring unit = sin.substr(p + 1);
double ret = get_sp_unit(unit) * val.as_double();
//printf("<%s> %s %d ==> %f\n", sin.cstr(), unit.cstr(), p, ret);
return ret;
}
double get_sp_val(const pstring &sin);
private:
struct sp_net_t
@ -253,26 +140,6 @@ private:
};
nl_convert_base_t::sp_unit nl_convert_base_t::m_sp_units[] = {
{"T", "", 1.0e12 },
{"G", "", 1.0e9 },
{"MEG", "RES_M(%g)", 1.0e6 },
{"k", "RES_K(%g)", 1.0e3 }, /* eagle */
{"K", "RES_K(%g)", 1.0e3 },
{"", "%g", 1.0e0 },
{"M", "CAP_M(%g)", 1.0e-3 },
{"u", "CAP_U(%g)", 1.0e-6 }, /* eagle */
{"U", "CAP_U(%g)", 1.0e-6 },
{"µ", "CAP_U(%g)", 1.0e-6 },
{"N", "CAP_N(%g)", 1.0e-9 },
{"P", "CAP_P(%g)", 1.0e-12},
{"F", "%ge-15", 1.0e-15},
{"MIL", "%e", 25.4e-6},
{"-", "%g", 1.0 }
};
class nl_convert_spice_t : public nl_convert_base_t
{
public:
@ -282,136 +149,11 @@ public:
{
}
void convert(const pstring &contents)
{
pstring_list_t spnl(contents, "\n");
// Add gnd net
// FIXME: Parameter
out("NETLIST_START(dummy)\n");
add_term("0", "GND");
pstring line = "";
for (std::size_t i=0; i < spnl.size(); i++)
{
// Basic preprocessing
pstring inl = spnl[i].trim().ucase();
if (inl.startsWith("+"))
line = line + inl.substr(1);
else
{
process_line(line);
line = inl;
}
}
process_line(line);
dump_nl();
// FIXME: Parameter
out("NETLIST_END()\n");
}
void convert(const pstring &contents);
protected:
void process_line(const pstring &line)
{
if (line != "")
{
pstring_list_t tt(line, " ", true);
double val = 0.0;
switch (tt[0].cstr()[0])
{
case ';':
out("// %s\n", line.substr(1).cstr());
break;
case '*':
out("// %s\n", line.substr(1).cstr());
break;
case '.':
if (tt[0].equals(".SUBCKT"))
{
out("NETLIST_START(%s)\n", tt[1].cstr());
for (int i=2; i<tt.size(); i++)
add_ext_alias(tt[i]);
}
else if (tt[0].equals(".ENDS"))
{
dump_nl();
out("NETLIST_END()\n");
}
else
out("// %s\n", line.cstr());
break;
case 'Q':
{
bool cerr = false;
/* check for fourth terminal ... should be numeric net
* including "0" or start with "N" (ltspice)
*/
// FIXME: we need a is_long method ..
ATTR_UNUSED int nval =tt[4].as_long(&cerr);
if ((!cerr || tt[4].startsWith("N")) && tt.size() > 5)
add_device("QBJT", tt[0], tt[5]);
else
add_device("QBJT", tt[0], tt[4]);
add_term(tt[1], tt[0] + ".C");
add_term(tt[2], tt[0] + ".B");
add_term(tt[3], tt[0] + ".E");
}
break;
case 'R':
val = get_sp_val(tt[3]);
add_device("RES", tt[0], val);
add_term(tt[1], tt[0] + ".1");
add_term(tt[2], tt[0] + ".2");
break;
case 'C':
val = get_sp_val(tt[3]);
add_device("CAP", tt[0], val);
add_term(tt[1], tt[0] + ".1");
add_term(tt[2], tt[0] + ".2");
break;
case 'V':
// just simple Voltage sources ....
if (tt[2].equals("0"))
{
val = get_sp_val(tt[3]);
add_device("ANALOG_INPUT", tt[0], val);
add_term(tt[1], tt[0] + ".Q");
//add_term(tt[2], tt[0] + ".2");
}
else
fprintf(stderr, "Voltage Source %s not connected to GND\n", tt[0].cstr());
break;
case 'D':
// FIXME: Rewrite resistor value
add_device("DIODE", tt[0], tt[3]);
add_term(tt[1], tt[0] + ".A");
add_term(tt[2], tt[0] + ".K");
break;
case 'U':
case 'X':
{
// FIXME: specific code for KICAD exports
// last element is component type
// FIXME: Parameter
pstring xname = tt[0].replace(".", "_");
pstring tname = "TTL_" + tt[tt.size()-1] + "_DIP";
add_device(tname, xname);
for (int i=1; i < tt.size() - 1; i++)
{
pstring term = pstring::sprintf("%s.%d", xname.cstr(), i);
add_term(tt[i], term);
}
break;
}
default:
out("// IGNORED %s: %s\n", tt[0].cstr(), line.cstr());
}
}
}
void process_line(const pstring &line);
private:
@ -471,112 +213,7 @@ public:
nl_convert_eagle_t &m_convert;
};
void convert(const pstring &contents)
{
eagle_tokenizer tok(*this);
tok.reset(contents.cstr());
out("NETLIST_START(dummy)\n");
add_term("GND", "GND");
add_term("VCC", "VCC");
eagle_tokenizer::token_t token = tok.get_token();
while (true)
{
if (token.is_type(eagle_tokenizer::ENDOFFILE))
{
dump_nl();
// FIXME: Parameter
out("NETLIST_END()\n");
return;
}
else if (token.is(tok.m_tok_SEMICOLON))
{
/* ignore empty statements */
token = tok.get_token();
}
else if (token.is(tok.m_tok_ADD))
{
pstring name = tok.get_string();
/* skip to semicolon */
do
{
token = tok.get_token();
} while (!token.is(tok.m_tok_SEMICOLON));
token = tok.get_token();
pstring sval = "";
if (token.is(tok.m_tok_VALUE))
{
pstring vname = tok.get_string();
sval = tok.get_string();
tok.require_token(tok.m_tok_SEMICOLON);
token = tok.get_token();
}
switch (name.cstr()[0])
{
case 'Q':
{
add_device("QBJT", name, sval);
}
break;
case 'R':
{
double val = get_sp_val(sval);
add_device("RES", name, val);
}
break;
case 'C':
{
double val = get_sp_val(sval);
add_device("CAP", name, val);
}
break;
case 'P':
if (sval.ucase() == "HIGH")
add_device("TTL_INPUT", name, 1);
else if (sval.ucase() == "LOW")
add_device("TTL_INPUT", name, 0);
else
add_device("ANALOG_INPUT", name, sval.as_double());
add_pin_alias(name, "1", "Q");
break;
case 'D':
/* Pin 1 = Anode, Pin 2 = Cathode */
add_device("DIODE", name, sval);
add_pin_alias(name, "1", "A");
add_pin_alias(name, "2", "K");
break;
case 'U':
case 'X':
{
pstring tname = "TTL_" + sval + "_DIP";
add_device(tname, name);
break;
}
default:
tok.error("// IGNORED %s\n", name.cstr());
}
}
else if (token.is(tok.m_tok_SIGNAL))
{
pstring netname = tok.get_string();
token = tok.get_token();
while (!token.is(tok.m_tok_SEMICOLON))
{
/* fixme: should check for string */
pstring devname = token.str();
pstring pin = tok.get_string();
add_term(netname, devname + "." + pin);
token = tok.get_token(); }
}
else
{
out("Unexpected %s\n", token.str().cstr());
return;
}
}
}
void convert(const pstring &contents);
protected:

View File

@ -144,10 +144,12 @@ public:
void synchronize(timer_expired_delegate callback = timer_expired_delegate(), int param = 0, void *ptr = NULL) { timer_set(attotime::zero, callback, param, ptr); }
// timers with old-skool callbacks
#ifdef USE_STATIC_DELEGATE
emu_timer *timer_alloc(timer_expired_func callback, const char *name, void *ptr = NULL) { return timer_alloc(timer_expired_delegate(callback, name, &machine()), ptr); }
void timer_set(const attotime &duration, timer_expired_func callback, const char *name, int param = 0, void *ptr = NULL) { timer_set(duration, timer_expired_delegate(callback, name, &machine()), param, ptr); }
void timer_pulse(const attotime &period, timer_expired_func callback, const char *name, int param = 0, void *ptr = NULL) { timer_pulse(period, timer_expired_delegate(callback, name, &machine()), param, ptr); }
void synchronize(timer_expired_func callback, const char *name = NULL, int param = 0, void *ptr = NULL) { timer_set(attotime::zero, callback, name, param, ptr); }
#endif
// timers, specified by device/id; generally devices should use the device_t methods instead
emu_timer *timer_alloc(device_t &device, device_timer_id id = 0, void *ptr = NULL);

View File

@ -92,6 +92,7 @@ static const input_item_id non_char_keys[] =
// messagebox buffer
static std::string messagebox_text;
static std::string messagebox_poptext;
static rgb_t messagebox_backcolor;
// slider info
@ -441,7 +442,7 @@ void ui_manager::update_and_render(render_container *container)
// display any popup messages
if (osd_ticks() < m_popup_text_end)
draw_text_box(container, messagebox_text.c_str(), JUSTIFY_CENTER, 0.5f, 0.9f, messagebox_backcolor);
draw_text_box(container, messagebox_poptext.c_str(), JUSTIFY_CENTER, 0.5f, 0.9f, messagebox_backcolor);
else
m_popup_text_end = 0;
@ -868,7 +869,7 @@ void CLIB_DECL ui_manager::popup_time(int seconds, const char *text, ...)
// extract the text
va_start(arg,text);
strvprintf(messagebox_text, text, arg);
strvprintf(messagebox_poptext, text, arg);
messagebox_backcolor = UI_BACKGROUND_COLOR;
va_end(arg);

View File

@ -150,7 +150,7 @@ mc6847_friend_device::mc6847_friend_device(const machine_config &mconfig, device
// to the clock
//-------------------------------------------------
ATTR_FORCE_INLINE emu_timer *mc6847_friend_device::setup_timer(device_timer_id id, double offset, double period)
inline emu_timer *mc6847_friend_device::setup_timer(device_timer_id id, double offset, double period)
{
emu_timer *timer = timer_alloc(id);
timer->adjust(
@ -228,7 +228,7 @@ void mc6847_friend_device::device_post_load(void)
// update_field_sync_timer
//-------------------------------------------------
ATTR_FORCE_INLINE void mc6847_friend_device::update_field_sync_timer(void)
void mc6847_friend_device::update_field_sync_timer(void)
{
// are we expecting field sync?
bool expected_field_sync = (m_physical_scanline < m_field_sync_falling_edge_scanline)
@ -268,7 +268,7 @@ void mc6847_friend_device::device_timer(emu_timer &timer, device_timer_id id, in
// new_frame
//-------------------------------------------------
ATTR_FORCE_INLINE void mc6847_friend_device::new_frame(void)
inline void mc6847_friend_device::new_frame(void)
{
m_physical_scanline = 0;
m_logical_scanline = 0;
@ -304,7 +304,7 @@ const char *mc6847_friend_device::scanline_zone_string(scanline_zone zone)
// change_horizontal_sync
//-------------------------------------------------
ATTR_FORCE_INLINE void mc6847_friend_device::change_horizontal_sync(bool line)
inline void mc6847_friend_device::change_horizontal_sync(bool line)
{
g_profiler.start(PROFILER_USER1);
@ -372,7 +372,7 @@ ATTR_FORCE_INLINE void mc6847_friend_device::change_horizontal_sync(bool line)
// change_field_sync
//-------------------------------------------------
ATTR_FORCE_INLINE void mc6847_friend_device::change_field_sync(bool line)
inline void mc6847_friend_device::change_field_sync(bool line)
{
/* output field sync */
if (line != m_field_sync)
@ -397,7 +397,7 @@ ATTR_FORCE_INLINE void mc6847_friend_device::change_field_sync(bool line)
// next_scanline
//-------------------------------------------------
ATTR_FORCE_INLINE void mc6847_friend_device::next_scanline(void)
inline void mc6847_friend_device::next_scanline(void)
{
/* advance to next scanline */
m_physical_scanline++;
@ -678,7 +678,7 @@ void mc6847_base_device::record_scanline_res(int scanline, INT32 start_pos, INT3
// record_body_scanline
//-------------------------------------------------
ATTR_FORCE_INLINE void mc6847_base_device::record_body_scanline(UINT16 physical_scanline, UINT16 scanline, INT32 start_pos, INT32 end_pos)
inline void mc6847_base_device::record_body_scanline(UINT16 physical_scanline, UINT16 scanline, INT32 start_pos, INT32 end_pos)
{
// sanity checks
assert(scanline < 192);
@ -780,7 +780,7 @@ void mc6847_base_device::field_sync_changed(bool line)
// border_value
//-------------------------------------------------
ATTR_FORCE_INLINE mc6847_base_device::pixel_t mc6847_base_device::border_value(UINT8 mode, const pixel_t *palette, bool is_mc6847t1)
inline mc6847_base_device::pixel_t mc6847_base_device::border_value(UINT8 mode, const pixel_t *palette, bool is_mc6847t1)
{
pixel_t result;
switch(mc6847_friend_device::border_value(mode, is_mc6847t1))

View File

@ -101,19 +101,19 @@ static int camplynx_handle_cassette(INT16 *buffer, const UINT8 *bytes)
if (i < camplynx_image_size)
{
sample_count += camplynx_output_byte(buffer, sample_count, bytes[i]);
pgmname.append<int>(1, bytes[i]);
pgmname.append(1, (char)bytes[i]);
}
else
return sample_count;
byte_count++;
}
pgmname.append<int>(1, 0x22);
pgmname.append(1, (char)0x22);
sample_count += camplynx_output_byte(buffer, sample_count, bytes[byte_count++]); // should be 0x22
// if a machine-language program, say to use MLOAD
if (bytes[byte_count] == 0x4D)
pgmname[0] = 0x4D;
pgmname[0] = (char)0x4D;
// Tell user how to load the tape
popmessage("%s",pgmname.c_str());

View File

@ -29,6 +29,16 @@ const char *cgenie_format::extensions() const
return "dsk";
}
int cgenie_format::get_track_dam_fm(const format &f, int head, int track)
{
return (track == f.track_count/2) ? FM_DDAM : FM_DAM;
}
int cgenie_format::get_track_dam_mfm(const format &f, int head, int track)
{
return (track == f.track_count/2) ? MFM_DDAM : MFM_DAM;
}
const cgenie_format::format cgenie_format::formats[] =
{
{ // 102k 5 1/4 inch single density single sided (Type A)

View File

@ -24,6 +24,10 @@ public:
virtual const char *description() const;
virtual const char *extensions() const;
protected:
virtual int get_track_dam_fm(const format &f, int head, int track);
virtual int get_track_dam_mfm(const format &f, int head, int track);
private:
static const format formats[];
};

View File

@ -2563,8 +2563,9 @@ void floppy_image_format_t::extract_sectors_from_bitstream_fm_pc(const UINT8 *bi
if(idblk_count < 100)
idblk[idblk_count++] = i+1;
}
// fb
if(shift_reg == 0xf56f) { // data mark
// f8, f9, fa, fb
if(shift_reg == 0xf56a || shift_reg == 0xf56b ||
shift_reg == 0xf56e || shift_reg == 0xf56f) { // data mark
if(dblk_count < 100)
dblk[dblk_count++] = i+1;
}

View File

@ -0,0 +1,44 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
PK-8020
Disk image format
TODO:
- Verify gap sizes
***************************************************************************/
#include "pk8020_dsk.h"
pk8020_format::pk8020_format() : wd177x_format(formats)
{
}
const char *pk8020_format::name() const
{
return "pk8020";
}
const char *pk8020_format::description() const
{
return "PK-8020 disk image";
}
const char *pk8020_format::extensions() const
{
return "kdi";
}
const pk8020_format::format pk8020_format::formats[] =
{
{
floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM,
2000, 5, 80, 2, 1024, {}, 1, {}, 60, 22, 24
},
{}
};
const floppy_format_type FLOPPY_PK8020_FORMAT = &floppy_image_format_creator<pk8020_format>;

View File

@ -0,0 +1,33 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
PK-8020
Disk image format
***************************************************************************/
#pragma once
#ifndef __PK8020_DSK_H__
#define __PK8020_DSK_H__
#include "wd177x_dsk.h"
class pk8020_format : public wd177x_format
{
public:
pk8020_format();
virtual const char *name() const;
virtual const char *description() const;
virtual const char *extensions() const;
private:
static const format formats[];
};
extern const floppy_format_type FLOPPY_PK8020_FORMAT;
#endif // __PK8020_DSK_H__

View File

@ -204,6 +204,12 @@ bool wd177x_format::load(io_generic *io, UINT32 form_factor, floppy_image *image
for(int track=0; track < f.track_count; track++)
for(int head=0; head < f.head_count; head++) {
if (f.encoding == floppy_image::FM)
desc[14].p1 = get_track_dam_fm(f, head, track);
else
desc[16].p1 = get_track_dam_mfm(f, head, track);
io_generic_read(io, sectdata, get_image_offset(f, head, track), track_size);
generate_track(desc, track, head, sectors, f.sector_count, total_size, image);
}
@ -345,6 +351,18 @@ int wd177x_format::get_image_offset(const format &f, int head, int track)
return (track * f.head_count + head) * compute_track_size(f);
}
int wd177x_format::get_track_dam_fm(const format &f, int head, int track)
{
// everything marked as data by default
return FM_DAM;
}
int wd177x_format::get_track_dam_mfm(const format &f, int head, int track)
{
// everything marked as data by default
return MFM_DAM;
}
void wd177x_format::check_compatibility(floppy_image *image, std::vector<int> &candidates)
{
UINT8 bitstream[500000/8];

View File

@ -43,11 +43,16 @@ public:
virtual bool supports_save() const;
protected:
enum { FM_DAM = 0xf56f, FM_DDAM = 0xf56a, MFM_DAM = 0xfb, MFM_DDAM = 0xf8 };
const format *formats;
virtual floppy_image_format_t::desc_e* get_desc_fm(const format &f, int &current_size, int &end_gap_index);
virtual floppy_image_format_t::desc_e* get_desc_mfm(const format &f, int &current_size, int &end_gap_index);
virtual int find_size(io_generic *io, UINT32 form_factor);
virtual int get_image_offset(const format &f, int head, int track);
virtual int get_track_dam_fm(const format &f, int head, int track);
virtual int get_track_dam_mfm(const format &f, int head, int track);
int compute_track_size(const format &f) const;
void build_sector_description(const format &d, UINT8 *sectdata, desc_s *sectors) const;

41
src/lib/formats/x1_dsk.c Normal file
View File

@ -0,0 +1,41 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
Sharp X1
Disk image format
***************************************************************************/
#include "x1_dsk.h"
x1_format::x1_format() : wd177x_format(formats)
{
}
const char *x1_format::name() const
{
return "x1";
}
const char *x1_format::description() const
{
return "Sharp X1 disk image";
}
const char *x1_format::extensions() const
{
return "2d";
}
const x1_format::format x1_format::formats[] =
{
{
floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
2000, 16, 40, 2, 256, {}, 1, {}, 32, 22, 54
},
{}
};
const floppy_format_type FLOPPY_X1_FORMAT = &floppy_image_format_creator<x1_format>;

33
src/lib/formats/x1_dsk.h Normal file
View File

@ -0,0 +1,33 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
Sharp X1
Disk image format
***************************************************************************/
#pragma once
#ifndef __X1_DSK_H__
#define __X1_DSK_H__
#include "wd177x_dsk.h"
class x1_format : public wd177x_format
{
public:
x1_format();
virtual const char *name() const;
virtual const char *description() const;
virtual const char *extensions() const;
private:
static const format formats[];
};
extern const floppy_format_type FLOPPY_X1_FORMAT;
#endif // __X1_DSK_H__

View File

@ -95,20 +95,29 @@
#if defined(__GNUC__)
/* does not work in versions over 4.7.x of 32bit MINGW */
#if defined(__MINGW32__) && !defined(__x86_64) && defined(__i386__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
#define USE_DELEGATE_TYPE DELEGATE_TYPE_COMPATIBLE
//#define USE_DELEGATE_TYPE DELEGATE_TYPE_COMPATIBLE
#define USE_DELEGATE_TYPE DELEGATE_TYPE_INTERNAL
#define MEMBER_ABI __thiscall
#define HAS_DIFFERENT_ABI 1
#elif defined(EMSCRIPTEN)
#define USE_DELEGATE_TYPE DELEGATE_TYPE_COMPATIBLE
#elif defined(__arm__) || defined(__ARMEL__)
#define USE_DELEGATE_TYPE DELEGATE_TYPE_COMPATIBLE
#else
#define USE_DELEGATE_TYPE DELEGATE_TYPE_INTERNAL
#define MEMBER_ABI
#define HAS_DIFFERENT_ABI 0
#endif
#else
#define USE_DELEGATE_TYPE DELEGATE_TYPE_COMPATIBLE
#endif
#define USE_STATIC_DELEGATE 1
#if (USE_DELEGATE_TYPE == DELEGATE_TYPE_COMPATIBLE)
#define MEMBER_ABI
#define HAS_DIFFERENT_ABI 0
#endif
//**************************************************************************
// HELPER CLASSES
//**************************************************************************
@ -554,7 +563,7 @@ public:
typedef typename delegate_traits<_FunctionClass, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type, _P11Type, _P12Type>::static_ref_func_type static_ref_func_type;
};
typedef typename traits<delegate_generic_class>::static_func_type generic_static_func;
typedef MEMBER_ABI generic_static_func generic_member_func;
// generic constructor
delegate_base()
: m_function(NULL),
@ -646,20 +655,29 @@ public:
return (m_raw_function == rhs.m_raw_function && object() == rhs.object() && m_raw_mfp == rhs.m_raw_mfp);
}
#define DELEGATE_CALL(x) \
if (is_mfp() && (HAS_DIFFERENT_ABI)) \
return (*reinterpret_cast<generic_member_func>(m_function)) x; \
else \
return (*m_function) x; \
//return MEMBER_ABI (*reinpertret_cast<generic_member_func>(m_function)) x;
// call the function
_ReturnType operator()() const { return (*m_function)(m_object); }
_ReturnType operator()(_P1Type p1) const { return (*m_function)(m_object, p1); }
_ReturnType operator()(_P1Type p1, _P2Type p2) const { return (*m_function)(m_object, p1, p2); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3) const { return (*m_function)(m_object, p1, p2, p3); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4) const { return (*m_function)(m_object, p1, p2, p3, p4); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5) const { return (*m_function)(m_object, p1, p2, p3, p4, p5); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6, p7); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6, p7, p8); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6, p7, p8, p9); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10, _P11Type p11) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10, _P11Type p11, _P12Type p12) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); }
_ReturnType operator()() const { DELEGATE_CALL((m_object)); }
//_ReturnType operator()() const { return (*m_function)(m_object); }
_ReturnType operator()(_P1Type p1) const { DELEGATE_CALL((m_object, p1)); }
_ReturnType operator()(_P1Type p1, _P2Type p2) const { DELEGATE_CALL((m_object, p1, p2)); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3) const { DELEGATE_CALL((m_object, p1, p2, p3)); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4) const { DELEGATE_CALL((m_object, p1, p2, p3, p4)); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5) const { DELEGATE_CALL((m_object, p1, p2, p3, p4, p5)); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6) const { DELEGATE_CALL((m_object, p1, p2, p3, p4, p5, p6)); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7) const { DELEGATE_CALL((m_object, p1, p2, p3, p4, p5, p6, p7)); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8) const { DELEGATE_CALL((m_object, p1, p2, p3, p4, p5, p6, p7, p8)); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9) const { DELEGATE_CALL((m_object, p1, p2, p3, p4, p5, p6, p7, p8, p9)); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10) const { DELEGATE_CALL((m_object, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10, _P11Type p11) const { DELEGATE_CALL((m_object, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)); }
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10, _P11Type p11, _P12Type p12) const { DELEGATE_CALL((m_object, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12)); }
// getters
bool has_object() const { return (object() != NULL); }
@ -732,8 +750,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -749,8 +769,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -766,8 +788,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -783,8 +807,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -800,8 +826,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -817,8 +845,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -834,8 +864,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -851,8 +883,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -868,8 +902,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -885,8 +921,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -902,8 +940,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -919,8 +959,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};
@ -936,8 +978,10 @@ public:
delegate(const basetype &src) : basetype(src) { }
delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#ifdef USE_STATIC_DELEGATE
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { }
#endif
delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; }
};

View File

@ -4794,7 +4794,8 @@ pdrift // 1988.?? Power Drift (World)
pdrifta // 1988.?? Power Drift (World)
pdrifte // 1988.?? Power Drift (World)
pdriftl
gloc // 1990.04 G-LOC Air Battle (US)
gloc // 1990.?? G-LOC Air Battle (World)
glocu // 1990.04 G-LOC Air Battle (US)
// 1990.05 G-LOC Air Battle (Japan)
glocr360 // 1990.?? G-LOC (R360, World?)
strkfgtr // 1991.06 Strike Fighter (World)
@ -10908,6 +10909,7 @@ mosaicf2 // (c) 1999 F2 System
royalpk2 //
finalgdr // (c) 2001 Semicom
mrkicker // (c) 2001 Semicom
mrkickera // (c) 2001 Semicom
wivernwg // (c) 2001 Semicom
wyvernwg // (c) 2001 Semicom / Game Vision
wyvernwga // (c) 2001 Semicom / Game Vision

View File

@ -1431,7 +1431,7 @@ MACHINE_CONFIG_END
//*************************************************************************************************************************
//*************************************************************************************************************************
// Galaxy Force, Sega Y-board
// Sega Game ID: 831-6614 (two PCB board stack
// Sega Game ID: 831-6614 (two PCB board stack)
//
// NOTE: An original PCB is very hard to locate intact. Most of these boards were upgraded to Galaxy Force 2 through a
// chip swap upgrade.
@ -1441,7 +1441,7 @@ MACHINE_CONFIG_END
//*************************************************************************************************************************
//*************************************************************************************************************************
//*************************************************************************************************************************
// Galaxy Force 2, Sega Y-board
// Galaxy Force 2 (World), Sega Y-board
// CPU: 68000 (317-????)
//
ROM_START( gforce2 )
@ -1519,7 +1519,7 @@ ROM_START( gforce2 )
ROM_END
//*************************************************************************************************************************
// Galaxy Force 2, Sega Y-board
// Galaxy Force 2 (Japan, Rev A), Sega Y-board
// CPU: 68000 (317-????)
//
ROM_START( gforce2ja )
@ -1594,7 +1594,7 @@ ROM_START( gforce2ja )
ROM_END
//*************************************************************************************************************************
// Galaxy Force 2, Sega Y-board
// Galaxy Force 2 (Japan), Sega Y-board
// CPU: 68000 (317-????)
//
ROM_START( gforce2j )
@ -1672,12 +1672,88 @@ ROM_END
//*************************************************************************************************************************
//*************************************************************************************************************************
//*************************************************************************************************************************
// G-Loc, Sega Y-board
// G-Loc (World), Sega Y-board
// CPU: 68000 (317-????)
// CPU BD 837-7403
// VIDEO BD 837-7301-02
// GAME BD 834-7300-07 G-LOC
//
ROM_START( gloc )
ROM_REGION( 0x080000, "maincpu", 0 ) // M
ROM_LOAD16_BYTE( "epr-13172.25", 0x000000, 0x20000, CRC(75e7174c) SHA1(ef052a6973cf49267463a0c14e8c392a083c62fb) )
ROM_LOAD16_BYTE( "epr-13171.24", 0x000001, 0x20000, CRC(90733468) SHA1(1c540c447321e323473462e8c26c59163e0e3b6d) )
ROM_LOAD16_BYTE( "epr-13028.27", 0x040000, 0x20000, CRC(b6aa2edf) SHA1(07259fc48cd0f63fbd0a8dadf2294575cd790c85) )
ROM_LOAD16_BYTE( "epr-13027.26", 0x040001, 0x20000, CRC(6463c87a) SHA1(882d980a1568ca777364822295e173224509f842) )
ROM_REGION( 0x040000, "subx", 0 ) // X
ROM_LOAD16_BYTE( "epr-13032.81", 0x000000, 0x20000, CRC(7da09c4e) SHA1(09ec269c07f07549aa9851585eac0a5195e25bf9) )
ROM_LOAD16_BYTE( "epr-13031.80", 0x000001, 0x20000, CRC(f3c7e3f4) SHA1(927c0cf05e7a72d79fdf19bbe7b18bf167feccd6) )
ROM_REGION( 0x040000, "suby", 0 ) // Y
ROM_LOAD16_BYTE( "epr-13030.54", 0x000000, 0x20000, CRC(81abcabf) SHA1(cb4e817d66a7f384aa9757758c51cd1bf7347dd0) )
ROM_LOAD16_BYTE( "epr-13029.53", 0x000001, 0x20000, CRC(f3638efb) SHA1(f82a46fc8616cbe0235746161c587e54adecfe50) )
ROM_REGION16_BE( 0x200000, "bsprites", 0)
ROM_LOAD16_BYTE( "epr-13039.16", 0x000000, 0x80000, CRC(d7e1266d) SHA1(b0fc4cc60a7e876ae2af343bba6da3fb926ea9c5) )
ROM_LOAD16_BYTE( "epr-13037.14", 0x000001, 0x80000, CRC(b801a250) SHA1(7d1f6a1f2022a4f302f22d11fa79057cf8134ad2) )
ROM_LOAD16_BYTE( "epr-13040.17", 0x100000, 0x80000, CRC(4aeb3a85) SHA1(5521fd2d3956839bdbe7b70a9e60cd9fb72a42f1) )
ROM_LOAD16_BYTE( "epr-13038.15", 0x100001, 0x80000, CRC(0b2edb6d) SHA1(04944d6e6f020cd6d33641110847706516630227) )
ROM_REGION64_BE( 0x1000000, "ysprites", 0 )
ROMX_LOAD( "epr-13048.67", 0x000000, 0x80000, CRC(fe1eb0dd) SHA1(5e292fc0b83505eb289e026d4be24c9038ef1418), ROM_SKIP(7) )
ROMX_LOAD( "epr-13056.75", 0x000001, 0x80000, CRC(5904f8e6) SHA1(fbb01dadc796624c360d44b7631e3f1f285abf2e), ROM_SKIP(7) )
ROMX_LOAD( "epr-13044.63", 0x000002, 0x80000, CRC(4d931f89) SHA1(ff603f4347e4728a2849d9f480893ad0af7abc5c), ROM_SKIP(7) )
ROMX_LOAD( "epr-13052.71", 0x000003, 0x80000, CRC(0291f040) SHA1(610dee2a31445f4a054111b7005278560a9c0702), ROM_SKIP(7) )
ROMX_LOAD( "epr-13064.86", 0x000004, 0x80000, CRC(5f8e651b) SHA1(f1a957e68dea40c23f6a5a208358ec6d6515fe60), ROM_SKIP(7) )
ROMX_LOAD( "epr-13072.114", 0x000005, 0x80000, CRC(6b85641a) SHA1(143a4684d5f303cd30880a2d5728dccbdd168da4), ROM_SKIP(7) )
ROMX_LOAD( "epr-13060.82", 0x000006, 0x80000, CRC(ee16ad97) SHA1(6af38cfaf694f686f8e4223fb0b13cd350a8b9e5), ROM_SKIP(7) )
ROMX_LOAD( "epr-13068.110", 0x000007, 0x80000, CRC(64d52bbb) SHA1(b6eab546edb2443e5da6c94ec811ec5084212e60), ROM_SKIP(7) )
ROMX_LOAD( "epr-13047.66", 0x400000, 0x80000, CRC(53340832) SHA1(8ece8a71ea8ed80458121622307a137fb13931f6), ROM_SKIP(7) )
ROMX_LOAD( "epr-13055.74", 0x400001, 0x80000, CRC(39b6b665) SHA1(d915db1d9bfe0c6ad3f7b447ce0cfdb42ec66ffe), ROM_SKIP(7) )
ROMX_LOAD( "epr-13043.62", 0x400002, 0x80000, CRC(208f16fd) SHA1(ce96708ea9886af4aba8730cbb98c0ca72b96f57), ROM_SKIP(7) )
ROMX_LOAD( "epr-13051.70", 0x400003, 0x80000, CRC(ad62cbd4) SHA1(09c008ce5cb97575a4312d2f22566bda72ecc4e2), ROM_SKIP(7) )
ROMX_LOAD( "epr-13063.85", 0x400004, 0x80000, CRC(c580bf6d) SHA1(cb72970377ad2acce499059aa8155711b8da8a11), ROM_SKIP(7) )
ROMX_LOAD( "epr-13071.113", 0x400005, 0x80000, CRC(df99ef99) SHA1(12648844c6e78dbd573b7bf0c981edb4d3012b58), ROM_SKIP(7) )
ROMX_LOAD( "epr-13059.81", 0x400006, 0x80000, CRC(4c982558) SHA1(e04902af2740ca098cd6bbf1f57cb25562754a76), ROM_SKIP(7) )
ROMX_LOAD( "epr-13067.109", 0x400007, 0x80000, CRC(f97f6119) SHA1(6f91fc28a1260ca4f1c695863717b27d1e45dc32), ROM_SKIP(7) )
ROMX_LOAD( "epr-13046.65", 0x800000, 0x80000, CRC(c75a86e9) SHA1(8a180e1e2dd06eb81e2aa4ef73b83879cf6afc1b), ROM_SKIP(7) )
ROMX_LOAD( "epr-13054.73", 0x800001, 0x80000, CRC(2934549a) SHA1(058b2966141d0db6bb8557d65c77b3458aca9358), ROM_SKIP(7) )
ROMX_LOAD( "epr-13042.61", 0x800002, 0x80000, CRC(53ed97af) SHA1(22dffa434eb98e5bca1e429b69553a3540dc54a7), ROM_SKIP(7) )
ROMX_LOAD( "epr-13050.69", 0x800003, 0x80000, CRC(04429068) SHA1(d7d8738809fd959ed428796b2bd1b589b74522c6), ROM_SKIP(7) )
ROMX_LOAD( "epr-13062.84", 0x800004, 0x80000, CRC(4fdb4ee3) SHA1(d76065b9abe5c3cf692567d3a8746a231748340d), ROM_SKIP(7) )
ROMX_LOAD( "epr-13070.112", 0x800005, 0x80000, CRC(52ea130e) SHA1(860cb3a1701066e595518c49b696b7b7a3994ada), ROM_SKIP(7) )
ROMX_LOAD( "epr-13058.80", 0x800006, 0x80000, CRC(19ff1626) SHA1(029e231c3322467b5e2e52eea11df4f645460468), ROM_SKIP(7) )
ROMX_LOAD( "epr-13066.108", 0x800007, 0x80000, CRC(bc70a250) SHA1(25189854cc01855b6e3589b85490f30dda029f86), ROM_SKIP(7) )
ROMX_LOAD( "epr-13045.64", 0xc00000, 0x80000, CRC(54d5bc6d) SHA1(18a301c9e6c4a352f300a438d85c6e6952bf0738), ROM_SKIP(7) )
ROMX_LOAD( "epr-13053.72", 0xc00001, 0x80000, CRC(9502af13) SHA1(1a8c0fcd10f4c86af69c0107f486ca2eb8863f93), ROM_SKIP(7) )
ROMX_LOAD( "epr-13041.60", 0xc00002, 0x80000, CRC(d0a7402c) SHA1(8932503c570ec49fdb4706f4015608bd060bafa0), ROM_SKIP(7) )
ROMX_LOAD( "epr-13049.68", 0xc00003, 0x80000, CRC(5b9c0b6c) SHA1(17f2460b7dc0bd34dca3f90f2b553df4a7149147), ROM_SKIP(7) )
ROMX_LOAD( "epr-13061.83", 0xc00004, 0x80000, CRC(7b95ec3b) SHA1(284aba4effd9d376a7a8f510a6f675fcb3393d09), ROM_SKIP(7) )
ROMX_LOAD( "epr-13069.111", 0xc00005, 0x80000, CRC(e1f538f0) SHA1(55dc85faed1d5a7f2d586bac7e524c3fef3c53b4), ROM_SKIP(7) )
ROMX_LOAD( "epr-13057.79", 0xc00006, 0x80000, CRC(73baefee) SHA1(6e86edc8229dd6112034a7df79f7341a4120dc6b), ROM_SKIP(7) )
ROMX_LOAD( "epr-13065.107", 0xc00007, 0x80000, CRC(8937a655) SHA1(d38726a8a6fe68a002ac8d17f70ab83c2f814aa2), ROM_SKIP(7) )
ROM_REGION( 0x10000, "soundcpu", 0 ) // Z80 sound CPU
ROM_LOAD( "epr-13033.102", 0x000000, 0x10000, CRC(6df5e827) SHA1(ec260886a27ba00690490500fcf4ebf07fb35205) )
ROM_REGION( 0x200000, "pcm", ROMREGION_ERASEFF ) // SegaPCM samples
ROM_LOAD( "epr-13036.107", 0x000000, 0x80000, CRC(7890c26c) SHA1(97e0678bb571de5cf732804f8909e5cbd24980f1) )
ROM_LOAD( "epr-13035.106", 0x080000, 0x80000, CRC(009fa13e) SHA1(c7b224b471696b12332fc7c403c127b19c297df7) )
ROM_LOAD( "epr-13034.105", 0x100000, 0x80000, CRC(cd22d95d) SHA1(857aa320df0b3fb44fc8a5526ba5ee82cc74fe63) )
ROM_END
//*************************************************************************************************************************
// G-Loc (US), Sega Y-board
// CPU: 68000 (317-????)
// VIDEO BD 837-7301-01
// GAME BD 834-7300-04 G-LOC
//
ROM_START( gloc )
// No "For use in..." region notice, but displays the FBI "Winners Don't Use Drugs" splash screen during attract sequence
//
ROM_START( glocu )
ROM_REGION( 0x080000, "maincpu", 0 ) // M
ROM_LOAD16_BYTE( "epr-13170.25", 0x000000, 0x20000, CRC(45189229) SHA1(01d18f6e4887633475baf610f455fad4ed7981e4) )
ROM_LOAD16_BYTE( "epr-13169.24", 0x000001, 0x20000, CRC(1b47cd6e) SHA1(694f489766f25e4c1f1fef6db79de347688ad80a) )
@ -1749,7 +1825,7 @@ ROM_END
ROM_START( glocr360 )
ROM_REGION( 0x080000, "maincpu", 0 ) // M
ROM_LOAD16_BYTE( "epr-13623.25", 0x000000, 0x20000, CRC(58ad10e7) SHA1(3760ede1d1c089f6c8b2ec88b2f25bce67add467) )
ROM_LOAD16_BYTE( "epr-13622.24", 0x000001, 0x20000, CRC(c4e68dbf) SHA1(f85e6fdf159e19342e5a9278f004e95752af7d55) )
ROM_LOAD16_BYTE( "epr-13622.24", 0x000001, 0x20000, CRC(c4e68dbf) SHA1(f85e6fdf159e19342e5a9278f004e95752af7d55) )
ROM_LOAD16_BYTE( "epr-13323a.27", 0x040000, 0x20000, CRC(02e24a33) SHA1(4955b13e5e90945dfb9066597b16df63c2a09552) )
ROM_LOAD16_BYTE( "epr-13322a.26", 0x040001, 0x20000, CRC(94f67740) SHA1(3d1be8dc9c370cd024fae19bb0b2663995d13d0e) )
@ -1817,7 +1893,7 @@ ROM_END
//*************************************************************************************************************************
//*************************************************************************************************************************
//*************************************************************************************************************************
// Power Drift, Sega Y-board
// Power Drift (World, Rev A), Sega Y-board
// CPU: 68000 (317-????)
// CPU BD POWER DRIFT 837-6695-08 (or 837-6695-09)
// VIDEO BD POWER DRIFT 837-6696-01 (or 837-6696-02)
@ -1903,6 +1979,7 @@ ROM_START( pdrift )
ROM_END
//*************************************************************************************************************************
// Power Drift (World)
//
ROM_START( pdrifta )
ROM_REGION( 0x080000, "maincpu", 0 ) // M
@ -1985,6 +2062,7 @@ ROM_START( pdrifta )
ROM_END
//*************************************************************************************************************************
// Power Drift (World)
// Earlier set based on eprom numbers & Sega Eprom/Mask Rom Locations sheet 421-7708
//
ROM_START( pdrifte )
@ -2068,7 +2146,7 @@ ROM_START( pdrifte )
ROM_END
//*************************************************************************************************************************
// Power Drift, Sega Y-board
// Power Drift (Japan), Sega Y-board
// CPU: 68000 (317-????)
// CPU BD POWER DRIFT 837-6695-08 (or 837-6695-09)
// VIDEO BD POWER DRIFT 837-6696-01 (or 837-6696-02)
@ -2154,88 +2232,88 @@ ROM_START( pdriftj )
ROM_END
//*************************************************************************************************************************
// Power Drift, Sega Y-board Link version
// Power Drift (Japan), Sega Y-board Link version
// Sega Game ID: 833-6697
//
// This was just 6 loose program roms + 4 sprite roms + the link PCBs, other roms could be incorrect
//
ROM_START(pdriftl)
ROM_REGION(0x080000, "maincpu", 0) // M
ROM_LOAD16_BYTE("epr-12107a.25", 0x000000, 0x20000, CRC(0acaed3c) SHA1(0a3d86346b7a75a53b07311c095a879a22048590))
ROM_LOAD16_BYTE("epr-12106a.24", 0x000001, 0x20000, CRC(d222f7a6) SHA1(ce73b9a155c0ebd4b1c0c71c80fd3dce6043dcf6))
ROM_LOAD16_BYTE("epr-12107a.25", 0x000000, 0x20000, CRC(0acaed3c) SHA1(0a3d86346b7a75a53b07311c095a879a22048590) )
ROM_LOAD16_BYTE("epr-12106a.24", 0x000001, 0x20000, CRC(d222f7a6) SHA1(ce73b9a155c0ebd4b1c0c71c80fd3dce6043dcf6) )
// 26+27 not tested, probably not used
ROM_REGION(0x040000, "subx", 0) // X
ROM_LOAD16_BYTE("epr-12111.81", 0x000000, 0x20000, CRC(41b0622c) SHA1(9751c88f4c0df2e0852cee071683c8e6156da8cb))
ROM_LOAD16_BYTE("epr-12110.80", 0x000001, 0x20000, CRC(26db4865) SHA1(963c10156cddf44abc86dbe66349bc83656eda15))
ROM_LOAD16_BYTE("epr-12111.81", 0x000000, 0x20000, CRC(41b0622c) SHA1(9751c88f4c0df2e0852cee071683c8e6156da8cb) )
ROM_LOAD16_BYTE("epr-12110.80", 0x000001, 0x20000, CRC(26db4865) SHA1(963c10156cddf44abc86dbe66349bc83656eda15) )
ROM_REGION(0x040000, "suby", 0) // Y
ROM_LOAD16_BYTE("epr-12109.54", 0x000000, 0x20000, CRC(256350b8) SHA1(72b05d3583d63766690fed4827ec586e832168d1))
ROM_LOAD16_BYTE("epr-12108.53", 0x000001, 0x20000, CRC(a3a56771) SHA1(f41d466f31a1b833d21a7011314c48d5056409eb))
ROM_LOAD16_BYTE("epr-12109.54", 0x000000, 0x20000, CRC(256350b8) SHA1(72b05d3583d63766690fed4827ec586e832168d1) )
ROM_LOAD16_BYTE("epr-12108.53", 0x000001, 0x20000, CRC(a3a56771) SHA1(f41d466f31a1b833d21a7011314c48d5056409eb) )
ROM_REGION16_BE(0x080000, "bsprites", 0)
ROM_LOAD16_BYTE("epr-12114.16", 0x000000, 0x20000, CRC(8b07e8eb) SHA1(22a4aff968d6de52372b7b2b5322d353f7b835ef))
ROM_LOAD16_BYTE("epr-12115.14", 0x000001, 0x20000, CRC(045b2912) SHA1(697c8eff69bf1a23745d24171f0b50635cf8513e))
ROM_LOAD16_BYTE("epr-12112.17", 0x040000, 0x20000, CRC(5dd13e81) SHA1(74ced668a36480a2ce9e3667e4915bfee2391534))
ROM_LOAD16_BYTE("epr-12113.15", 0x040001, 0x20000, CRC(69b8bd5a) SHA1(e312b60fff672363326b6169be7aff6b943d27c9))
ROM_LOAD16_BYTE("epr-12114.16", 0x000000, 0x20000, CRC(8b07e8eb) SHA1(22a4aff968d6de52372b7b2b5322d353f7b835ef) )
ROM_LOAD16_BYTE("epr-12115.14", 0x000001, 0x20000, CRC(045b2912) SHA1(697c8eff69bf1a23745d24171f0b50635cf8513e) )
ROM_LOAD16_BYTE("epr-12112.17", 0x040000, 0x20000, CRC(5dd13e81) SHA1(74ced668a36480a2ce9e3667e4915bfee2391534) )
ROM_LOAD16_BYTE("epr-12113.15", 0x040001, 0x20000, CRC(69b8bd5a) SHA1(e312b60fff672363326b6169be7aff6b943d27c9) )
ROM_REGION64_BE(0x400000, "ysprites", 0)
ROMX_LOAD("epr-11757.67", 0x000000, 0x20000, CRC(e46dc478) SHA1(baf79e230aef3d63fb50373b2b1626f7c56ee94f), ROM_SKIP(7))
ROMX_LOAD("epr-11758.75", 0x000001, 0x20000, CRC(5b435c87) SHA1(6b42b08e73957c36cd8faa896ca14461d00afd29), ROM_SKIP(7))
ROMX_LOAD("epr-11773.63", 0x000002, 0x20000, CRC(1b5d5758) SHA1(54f58a274740a0566e0553d145c0c284ffd1d36b), ROM_SKIP(7))
ROMX_LOAD("epr-11774.71", 0x000003, 0x20000, CRC(2ca0c170) SHA1(7de74c045bf084659ba70da9458d720125ff25ae), ROM_SKIP(7))
ROMX_LOAD("epr-11759.86", 0x000004, 0x20000, CRC(ac8111f6) SHA1(6412716dc97ae697b438d9c9cd554d1087416bc2), ROM_SKIP(7))
ROMX_LOAD("epr-11760.114", 0x000005, 0x20000, CRC(91282af9) SHA1(fddee7982949b7da724c7830e7bd139aeb84672d), ROM_SKIP(7))
ROMX_LOAD("epr-11775.82", 0x000006, 0x20000, CRC(48225793) SHA1(ee003c2ea24c14e0968da94bac139735660932fe), ROM_SKIP(7))
ROMX_LOAD("epr-11776.110", 0x000007, 0x20000, CRC(78c46198) SHA1(d299e631843da47cb7a46103d52a3dabfab71746), ROM_SKIP(7))
ROMX_LOAD("epr-11757.67", 0x000000, 0x20000, CRC(e46dc478) SHA1(baf79e230aef3d63fb50373b2b1626f7c56ee94f), ROM_SKIP(7) )
ROMX_LOAD("epr-11758.75", 0x000001, 0x20000, CRC(5b435c87) SHA1(6b42b08e73957c36cd8faa896ca14461d00afd29), ROM_SKIP(7) )
ROMX_LOAD("epr-11773.63", 0x000002, 0x20000, CRC(1b5d5758) SHA1(54f58a274740a0566e0553d145c0c284ffd1d36b), ROM_SKIP(7) )
ROMX_LOAD("epr-11774.71", 0x000003, 0x20000, CRC(2ca0c170) SHA1(7de74c045bf084659ba70da9458d720125ff25ae), ROM_SKIP(7) )
ROMX_LOAD("epr-11759.86", 0x000004, 0x20000, CRC(ac8111f6) SHA1(6412716dc97ae697b438d9c9cd554d1087416bc2), ROM_SKIP(7) )
ROMX_LOAD("epr-11760.114", 0x000005, 0x20000, CRC(91282af9) SHA1(fddee7982949b7da724c7830e7bd139aeb84672d), ROM_SKIP(7) )
ROMX_LOAD("epr-11775.82", 0x000006, 0x20000, CRC(48225793) SHA1(ee003c2ea24c14e0968da94bac139735660932fe), ROM_SKIP(7) )
ROMX_LOAD("epr-11776.110", 0x000007, 0x20000, CRC(78c46198) SHA1(d299e631843da47cb7a46103d52a3dabfab71746), ROM_SKIP(7) )
ROMX_LOAD("epr-11761.66", 0x100000, 0x20000, CRC(baa5d065) SHA1(56dc71814e3f0f327781b0c1587038351c60f7b7), ROM_SKIP(7))
ROMX_LOAD("epr-11762.74", 0x100001, 0x20000, CRC(1d1af7a5) SHA1(86c02565b5aca201588c98678fb0c54faa8d4d6b), ROM_SKIP(7))
ROMX_LOAD("epr-11777.62", 0x100002, 0x20000, CRC(9662dd32) SHA1(454ec914b6c936f692bf90d2232c8169acec470a), ROM_SKIP(7))
ROMX_LOAD("epr-11778.70", 0x100003, 0x20000, CRC(2dfb7494) SHA1(4b9f1609e425c5e634e95dbc2d0ca820dd9212bc), ROM_SKIP(7))
ROMX_LOAD("epr-11763.85", 0x100004, 0x20000, CRC(1ee23407) SHA1(776c868e0e4e601fd6d0a83561b064b4be0560e2), ROM_SKIP(7))
ROMX_LOAD("epr-11764.113", 0x100005, 0x20000, CRC(e859305e) SHA1(aafcc3209a4fb6e0e8169ae6cce386b370b824f7), ROM_SKIP(7))
ROMX_LOAD("epr-11779.81", 0x100006, 0x20000, CRC(a49cd793) SHA1(efe77949be39a2ff88b50bfb2b4664b9267d9a09), ROM_SKIP(7))
ROMX_LOAD("epr-11780.109", 0x100007, 0x20000, CRC(d514ed81) SHA1(fbac3ad085363972a79e77aebb7fdae2200e7cda), ROM_SKIP(7))
ROMX_LOAD("epr-11761.66", 0x100000, 0x20000, CRC(baa5d065) SHA1(56dc71814e3f0f327781b0c1587038351c60f7b7), ROM_SKIP(7) )
ROMX_LOAD("epr-11762.74", 0x100001, 0x20000, CRC(1d1af7a5) SHA1(86c02565b5aca201588c98678fb0c54faa8d4d6b), ROM_SKIP(7) )
ROMX_LOAD("epr-11777.62", 0x100002, 0x20000, CRC(9662dd32) SHA1(454ec914b6c936f692bf90d2232c8169acec470a), ROM_SKIP(7) )
ROMX_LOAD("epr-11778.70", 0x100003, 0x20000, CRC(2dfb7494) SHA1(4b9f1609e425c5e634e95dbc2d0ca820dd9212bc), ROM_SKIP(7) )
ROMX_LOAD("epr-11763.85", 0x100004, 0x20000, CRC(1ee23407) SHA1(776c868e0e4e601fd6d0a83561b064b4be0560e2), ROM_SKIP(7) )
ROMX_LOAD("epr-11764.113", 0x100005, 0x20000, CRC(e859305e) SHA1(aafcc3209a4fb6e0e8169ae6cce386b370b824f7), ROM_SKIP(7) )
ROMX_LOAD("epr-11779.81", 0x100006, 0x20000, CRC(a49cd793) SHA1(efe77949be39a2ff88b50bfb2b4664b9267d9a09), ROM_SKIP(7) )
ROMX_LOAD("epr-11780.109", 0x100007, 0x20000, CRC(d514ed81) SHA1(fbac3ad085363972a79e77aebb7fdae2200e7cda), ROM_SKIP(7) )
ROMX_LOAD("epr-11765.65", 0x200000, 0x20000, CRC(649e2dff) SHA1(a6c61b71d08b31a0ca175ab0404e2eaf1d09ccc2), ROM_SKIP(7))
ROMX_LOAD("epr-11766.73", 0x200001, 0x20000, CRC(d92fb7fc) SHA1(2f5c2d88ae0766351b9efe8ffcbebc88fc3a6c59), ROM_SKIP(7))
ROMX_LOAD("epr-11781.61", 0x200002, 0x20000, CRC(9692d4cd) SHA1(967351ba2c781ca865e3c1ee9eeef1aad2247c27), ROM_SKIP(7))
ROMX_LOAD("epr-11782.69", 0x200003, 0x20000, CRC(c913bb43) SHA1(9bc15a3180cf4c3134bb55e99e6092f0faf95c56), ROM_SKIP(7))
ROMX_LOAD("epr-11767.84", 0x200004, 0x20000, CRC(1f8ad054) SHA1(289f5795116ee29540f28e35c3b4f72adeca7891), ROM_SKIP(7))
ROMX_LOAD("epr-11768.112", 0x200005, 0x20000, CRC(db2c4053) SHA1(a5b6daa6deb7afb0019e289acb81c82d507ec93a), ROM_SKIP(7))
ROMX_LOAD("epr-11783.80", 0x200006, 0x20000, CRC(6d189007) SHA1(dd871ea3166fdcb59d49707d35dde8b6c7fdc76b), ROM_SKIP(7))
ROMX_LOAD("epr-11784.108", 0x200007, 0x20000, CRC(57f5fd64) SHA1(6aff54d3f3f76ce0f1a93485d1a35a3987d456d9), ROM_SKIP(7))
ROMX_LOAD("epr-11765.65", 0x200000, 0x20000, CRC(649e2dff) SHA1(a6c61b71d08b31a0ca175ab0404e2eaf1d09ccc2), ROM_SKIP(7) )
ROMX_LOAD("epr-11766.73", 0x200001, 0x20000, CRC(d92fb7fc) SHA1(2f5c2d88ae0766351b9efe8ffcbebc88fc3a6c59), ROM_SKIP(7) )
ROMX_LOAD("epr-11781.61", 0x200002, 0x20000, CRC(9692d4cd) SHA1(967351ba2c781ca865e3c1ee9eeef1aad2247c27), ROM_SKIP(7) )
ROMX_LOAD("epr-11782.69", 0x200003, 0x20000, CRC(c913bb43) SHA1(9bc15a3180cf4c3134bb55e99e6092f0faf95c56), ROM_SKIP(7) )
ROMX_LOAD("epr-11767.84", 0x200004, 0x20000, CRC(1f8ad054) SHA1(289f5795116ee29540f28e35c3b4f72adeca7891), ROM_SKIP(7) )
ROMX_LOAD("epr-11768.112", 0x200005, 0x20000, CRC(db2c4053) SHA1(a5b6daa6deb7afb0019e289acb81c82d507ec93a), ROM_SKIP(7) )
ROMX_LOAD("epr-11783.80", 0x200006, 0x20000, CRC(6d189007) SHA1(dd871ea3166fdcb59d49707d35dde8b6c7fdc76b), ROM_SKIP(7) )
ROMX_LOAD("epr-11784.108", 0x200007, 0x20000, CRC(57f5fd64) SHA1(6aff54d3f3f76ce0f1a93485d1a35a3987d456d9), ROM_SKIP(7) )
ROMX_LOAD("epr-11769.64", 0x300000, 0x20000, CRC(28f0ab51) SHA1(d7cb7b83e5d85eb59d34cfd5c0d8e6c7ff81e24c), ROM_SKIP(7))
ROMX_LOAD("epr-11770.72", 0x300001, 0x20000, CRC(d7557ea9) SHA1(62430505d399ee2cc0f94e03144860056345573c), ROM_SKIP(7))
ROMX_LOAD("epr-11785.60", 0x300002, 0x20000, CRC(e6ef32c4) SHA1(869ba3816f5e3125f613f3b284fec74cd19db79e), ROM_SKIP(7))
ROMX_LOAD("epr-11786.68", 0x300003, 0x20000, CRC(2066b49d) SHA1(905ce70c921043d07591422a87fedd6e897ff38e), ROM_SKIP(7))
ROMX_LOAD("epr-11771.83", 0x300004, 0x20000, CRC(67635618) SHA1(f690ace026130ecb95532c92f2ad3741d0d167c1), ROM_SKIP(7))
ROMX_LOAD("epr-11772.111", 0x300005, 0x20000, CRC(0f798d3a) SHA1(71565ce28b93ae50d64af8c965fba6408a07f031), ROM_SKIP(7))
ROMX_LOAD("epr-11787.79", 0x300006, 0x20000, CRC(e631dc12) SHA1(3fd6db2eb297890b35dec566b6a90fc2d96bd085), ROM_SKIP(7))
ROMX_LOAD("epr-11788.107", 0x300007, 0x20000, CRC(8464c66e) SHA1(af93cbcc50acbd929d0298fb9a75da0369e13ff7), ROM_SKIP(7))
ROMX_LOAD("epr-11769.64", 0x300000, 0x20000, CRC(28f0ab51) SHA1(d7cb7b83e5d85eb59d34cfd5c0d8e6c7ff81e24c), ROM_SKIP(7) )
ROMX_LOAD("epr-11770.72", 0x300001, 0x20000, CRC(d7557ea9) SHA1(62430505d399ee2cc0f94e03144860056345573c), ROM_SKIP(7) )
ROMX_LOAD("epr-11785.60", 0x300002, 0x20000, CRC(e6ef32c4) SHA1(869ba3816f5e3125f613f3b284fec74cd19db79e), ROM_SKIP(7) )
ROMX_LOAD("epr-11786.68", 0x300003, 0x20000, CRC(2066b49d) SHA1(905ce70c921043d07591422a87fedd6e897ff38e), ROM_SKIP(7) )
ROMX_LOAD("epr-11771.83", 0x300004, 0x20000, CRC(67635618) SHA1(f690ace026130ecb95532c92f2ad3741d0d167c1), ROM_SKIP(7) )
ROMX_LOAD("epr-11772.111", 0x300005, 0x20000, CRC(0f798d3a) SHA1(71565ce28b93ae50d64af8c965fba6408a07f031), ROM_SKIP(7) )
ROMX_LOAD("epr-11787.79", 0x300006, 0x20000, CRC(e631dc12) SHA1(3fd6db2eb297890b35dec566b6a90fc2d96bd085), ROM_SKIP(7) )
ROMX_LOAD("epr-11788.107", 0x300007, 0x20000, CRC(8464c66e) SHA1(af93cbcc50acbd929d0298fb9a75da0369e13ff7), ROM_SKIP(7) )
ROM_REGION(0x10000, "soundcpu", 0) // Z80 sound CPU
ROM_LOAD("epr-11899.102", 0x000000, 0x10000, CRC(ed9fa889) SHA1(25d1a069254b34c31d8ee82d301ada895e8dc391))
ROM_LOAD("epr-11899.102", 0x000000, 0x10000, CRC(ed9fa889) SHA1(25d1a069254b34c31d8ee82d301ada895e8dc391) )
ROM_REGION(0x200000, "pcm", ROMREGION_ERASEFF) // SegaPCM samples
ROM_LOAD("mpr-11754.107", 0x000000, 0x80000, CRC(ebeb8484) SHA1(269f33cb1a9be126bada858e25291385d48686a2))
ROM_LOAD("epr-11756.105", 0x080000, 0x20000, CRC(12e43f8a) SHA1(0f9a11ba6b7c1a352daa1146a01ce147945e91e4))
ROM_LOAD("mpr-11754.107", 0x000000, 0x80000, CRC(ebeb8484) SHA1(269f33cb1a9be126bada858e25291385d48686a2) )
ROM_LOAD("epr-11756.105", 0x080000, 0x20000, CRC(12e43f8a) SHA1(0f9a11ba6b7c1a352daa1146a01ce147945e91e4) )
ROM_RELOAD( 0x0a0000, 0x20000)
ROM_RELOAD( 0x0c0000, 0x20000)
ROM_RELOAD( 0x0e0000, 0x20000)
ROM_LOAD("epr-11755.106", 0x100000, 0x20000, CRC(c2db1244) SHA1(c98fe17c9f04a639a862cc2a86fab17d1f5d025c))
ROM_LOAD("epr-11755.106", 0x100000, 0x20000, CRC(c2db1244) SHA1(c98fe17c9f04a639a862cc2a86fab17d1f5d025c) )
ROM_RELOAD( 0x120000, 0x20000)
ROM_RELOAD( 0x140000, 0x20000)
ROM_RELOAD( 0x160000, 0x20000)
ROM_REGION(0x100000, "user1", 0)
// These are mpr-11754.107 split into 4 roms. They would be located on a Sega 839-0221 daughter card.
ROM_LOAD("epr-11895.ic1", 0x000000, 0x20000, CRC(ee99a6fd) SHA1(4444826e751d9186e6d46b081e47cd99ee3cf853))
ROM_LOAD("epr-11896.ic2", 0x000000, 0x20000, CRC(4bebc015) SHA1(307022ea1c1ee87c9ef3782526888c48c3c69fd2))
ROM_LOAD("epr-11897.ic3", 0x000000, 0x20000, CRC(4463cb95) SHA1(e86fd4611cf83fe72d59950a60fc8c3a7381a1c7))
ROM_LOAD("epr-11898.ic4", 0x000000, 0x20000, CRC(5d19d767) SHA1(d335cd3ef57c75e388df04b04fc3e2881a3902cf))
ROM_LOAD("epr-11895.ic1", 0x000000, 0x20000, CRC(ee99a6fd) SHA1(4444826e751d9186e6d46b081e47cd99ee3cf853) )
ROM_LOAD("epr-11896.ic2", 0x000000, 0x20000, CRC(4bebc015) SHA1(307022ea1c1ee87c9ef3782526888c48c3c69fd2) )
ROM_LOAD("epr-11897.ic3", 0x000000, 0x20000, CRC(4463cb95) SHA1(e86fd4611cf83fe72d59950a60fc8c3a7381a1c7) )
ROM_LOAD("epr-11898.ic4", 0x000000, 0x20000, CRC(5d19d767) SHA1(d335cd3ef57c75e388df04b04fc3e2881a3902cf) )
ROM_REGION(0x10000, "linkcpu", 0) // Z80 link board CPU
ROM_LOAD("epr-12028", 0x000000, 0x08000, CRC(bb682a92) SHA1(0445bdbca0db9edecd826da37cd2d3afc57c5cf6) )
@ -2245,7 +2323,7 @@ ROM_END
//*************************************************************************************************************************
//*************************************************************************************************************************
//*************************************************************************************************************************
// Rail Chase World, Sega Y-board
// Rail Chase (World), Sega Y-board
// CPU: 68000 (317-????)
// CPU BD 837-8073-05
// VIDEO BD 837-8074-01
@ -2263,8 +2341,8 @@ ROM_START( rchase )
ROM_LOAD16_BYTE( "epr-13991a.80", 0x000001, 0x20000, CRC(299e3c7c) SHA1(e4903816ec364e9352abd1180e8a609fed75e1a7) )
ROM_REGION( 0x040000, "suby", 0 ) // Y
ROM_LOAD16_BYTE( "epr-14092.54", 0x000000, 0x20000, CRC(18eb23c5) SHA1(53e5681c7450a3879ed80c1680168d6295caa887) )
ROM_LOAD16_BYTE( "epr-14091.53", 0x000001, 0x20000, CRC(72a56f71) SHA1(d45d3072ea92b5dde5c70138e56e7f0ca248880e) )
ROM_LOAD16_BYTE( "epr-14092.54", 0x000000, 0x20000, CRC(18eb23c5) SHA1(53e5681c7450a3879ed80c1680168d6295caa887) ) // same as epr-13990.54 below
ROM_LOAD16_BYTE( "epr-14091.53", 0x000001, 0x20000, CRC(72a56f71) SHA1(d45d3072ea92b5dde5c70138e56e7f0ca248880e) ) // 1 byte difference between regions
ROM_REGION16_BE( 0x080000, "bsprites", 0 )
ROM_LOAD16_BYTE( "mpr-13999.16", 0x000000, 0x40000, CRC(9a1dd53c) SHA1(cb01f2c64554914ea693879dfcb498181a1e7a9a) )
@ -2308,7 +2386,7 @@ ROM_START( rchase )
ROM_END
//*************************************************************************************************************************
// Rail Chase Japan, Sega Y-board
// Rail Chase (Japan), Sega Y-board
// CPU: 68000 (317-????)
//
ROM_START( rchasej )
@ -2323,8 +2401,8 @@ ROM_START( rchasej )
ROM_LOAD16_BYTE( "epr-13991a.80", 0x000001, 0x20000, CRC(299e3c7c) SHA1(e4903816ec364e9352abd1180e8a609fed75e1a7) )
ROM_REGION( 0x040000, "suby", 0 ) // Y
ROM_LOAD16_BYTE( "epr-13990.54.verify", 0x000000, 0x20000, CRC(18eb23c5) SHA1(53e5681c7450a3879ed80c1680168d6295caa887) ) // Need to verify EPR #, same as epr-14092.54 above
ROM_LOAD16_BYTE( "epr-13989.53.verify", 0x000001, 0x20000, CRC(8f4f824e) SHA1(d470f23ce2dca4e75b7b714175d47338c41bb721) ) // Need to verify EPR #
ROM_LOAD16_BYTE( "epr-13990.54", 0x000000, 0x20000, CRC(18eb23c5) SHA1(53e5681c7450a3879ed80c1680168d6295caa887) )
ROM_LOAD16_BYTE( "epr-13989.53", 0x000001, 0x20000, CRC(8f4f824e) SHA1(d470f23ce2dca4e75b7b714175d47338c41bb721) )
ROM_REGION16_BE( 0x080000, "bsprites", 0 )
ROM_LOAD16_BYTE( "mpr-13999.16", 0x000000, 0x40000, CRC(9a1dd53c) SHA1(cb01f2c64554914ea693879dfcb498181a1e7a9a) )
@ -2590,10 +2668,11 @@ DRIVER_INIT_MEMBER(segaybd_state,rchase)
// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS, LAYOUT
GAME( 1988, gforce2, 0, yboard, gforce2, segaybd_state, gforce2, ROT0, "Sega", "Galaxy Force 2", GAME_SUPPORTS_SAVE )
GAME( 1988, gforce2j, gforce2, yboard, gforce2, segaybd_state, gforce2, ROT0, "Sega", "Galaxy Force 2 (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1988, gforce2ja, gforce2, yboard, gforce2, segaybd_state, gforce2, ROT0, "Sega", "Galaxy Force 2 (Japan, Rev A)", GAME_SUPPORTS_SAVE )
GAME( 1988, gforce2j, gforce2, yboard, gforce2, segaybd_state, gforce2, ROT0, "Sega", "Galaxy Force 2 (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1990, gloc, 0, yboard, gloc, segaybd_state, gloc, ROT0, "Sega", "G-LOC Air Battle (US)", GAME_SUPPORTS_SAVE )
GAME( 1990, gloc, 0, yboard, gloc, segaybd_state, gloc, ROT0, "Sega", "G-LOC Air Battle (World)", GAME_SUPPORTS_SAVE )
GAME( 1990, glocu, gloc, yboard, gloc, segaybd_state, gloc, ROT0, "Sega", "G-LOC Air Battle (US)", GAME_SUPPORTS_SAVE )
GAME( 1990, glocr360, gloc, yboard, glocr360, segaybd_state, r360, ROT0, "Sega", "G-LOC R360", GAME_SUPPORTS_SAVE )
GAMEL(1988, pdrift, 0, yboard, pdrift, segaybd_state, pdrift, ROT0, "Sega", "Power Drift (World, Rev A)", GAME_SUPPORTS_SAVE, layout_pdrift )

View File

@ -1654,11 +1654,11 @@ MACHINE_RESET_MEMBER(snowbros_state,finalttr)
static MACHINE_CONFIG_START( snowbros, snowbros_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, 8000000) /* 8 Mhz - confirmed */
MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz/2) /* 8 Mhz - confirmed */
MCFG_CPU_PROGRAM_MAP(snowbros_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", snowbros_state, snowbros_irq, "screen", 0, 1)
MCFG_CPU_ADD("soundcpu", Z80, 6000000) /* 6 MHz - confirmed */
MCFG_CPU_ADD("soundcpu", Z80, XTAL_12MHz/2) /* 6 MHz - confirmed */
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_IO_MAP(sound_io_map)
@ -1683,7 +1683,7 @@ static MACHINE_CONFIG_START( snowbros, snowbros_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM3812, 3000000)
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_12MHz/4) /* 3 MHz - confirmed */
MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", 0))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@ -1731,12 +1731,11 @@ static MACHINE_CONFIG_DERIVED( semicom, snowbros )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( semicom_mcu, semicom )
/* basic machine hardware */
MCFG_CPU_ADD("protection", I8052, 16000000) // AT89C52
MCFG_CPU_ADD("protection", I8052, XTAL_16MHz) // AT89C52
MCFG_CPU_PROGRAM_MAP(protection_map)
MCFG_CPU_IO_MAP(protection_iomap)
MACHINE_CONFIG_END
@ -1746,34 +1745,15 @@ static MACHINE_CONFIG_DERIVED( semiprot, semicom )
MCFG_MACHINE_RESET_OVERRIDE (snowbros_state, semiprot )
MACHINE_CONFIG_END
/*
Honey Doll - Barko Corp 1995
Rom Board include a Cypress cy7C382-0JC chip
Main Board :
CPU : 1 X MC68000P12
1 X Z80B
1 X Oki M6295
2 X Cypress CY7C384A-XJC
2 x quartz - 12Mhz and 16Mhz
See included pics
*/
static MACHINE_CONFIG_START( honeydol, snowbros_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, 16000000)
MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz) /* MC68000P12 @ 12MHz */
MCFG_CPU_PROGRAM_MAP(honeydol_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", snowbros_state, snowbros_irq, "screen", 0, 1)
MCFG_CPU_ADD("soundcpu", Z80, 4000000)
MCFG_CPU_ADD("soundcpu", Z80, XTAL_16MHz/4) /* 4Mhz (16MHz/4) like SemiCom or 6MHz (12MHz/2) like snowbros??? */
MCFG_CPU_PROGRAM_MAP(honeydol_sound_map)
MCFG_CPU_IO_MAP(honeydol_sound_io_map)
@ -1795,23 +1775,23 @@ static MACHINE_CONFIG_START( honeydol, snowbros_state )
/* sound hardware */
MCFG_SOUND_ADD("ymsnd", YM3812, 3000000)
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_12MHz/4) /* 3Mhz */
MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", 0))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_OKIM6295_ADD("oki", 999900, OKIM6295_PIN7_HIGH) /* freq? */
MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_HIGH) /* freq? */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( twinadv, snowbros_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, 16000000) // or 12
MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz) /* 12MHz like Honey Dolls ? */
MCFG_CPU_PROGRAM_MAP(twinadv_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", snowbros_state, snowbros_irq, "screen", 0, 1)
MCFG_CPU_ADD("soundcpu", Z80, 4000000)
MCFG_CPU_ADD("soundcpu", Z80, XTAL_16MHz/4) /* 4Mhz (16MHz/4) like SemiCom or 6MHz (12MHz/2) like snowbros??? */
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_IO_MAP(twinadv_sound_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", snowbros_state, irq0_line_hold)
@ -1833,7 +1813,7 @@ static MACHINE_CONFIG_START( twinadv, snowbros_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
/* sound hardware */
MCFG_OKIM6295_ADD("oki", 12000000/12, OKIM6295_PIN7_HIGH) /* freq? */
MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_HIGH) /* freq? */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@ -1859,15 +1839,15 @@ Intel P8752 (mcu)
static MACHINE_CONFIG_DERIVED( finalttr, semicom )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_CLOCK(12000000)
MCFG_CPU_CLOCK(XTAL_12MHz)
MCFG_CPU_PROGRAM_MAP(finalttr_map)
MCFG_CPU_MODIFY("soundcpu")
MCFG_CPU_CLOCK(3578545)
MCFG_CPU_CLOCK(XTAL_3_579545MHz)
MCFG_MACHINE_RESET_OVERRIDE (snowbros_state, finalttr )
MCFG_SOUND_REPLACE("ymsnd", YM2151, 4000000)
MCFG_SOUND_REPLACE("ymsnd", YM2151, XTAL_3_579545MHz) /* possible but less likely 4MHz (12MHz/3) */
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0))
MCFG_SOUND_ROUTE(0, "mono", 0.08)
MCFG_SOUND_ROUTE(1, "mono", 0.08)
@ -1883,10 +1863,10 @@ static MACHINE_CONFIG_DERIVED( _4in1, semicom )
MCFG_GFXDECODE_MODIFY("gfxdecode", snowbros)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( snowbro3, snowbros_state )
static MACHINE_CONFIG_START( snowbro3, snowbros_state ) /* PCB has 16MHz & 12MHz OSCs */
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, 16000000) /* 16mhz or 12mhz ? */
MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz) /* MC68000P10 CPU @ 12mhz or 8MHz (16MHz/2) ? */
MCFG_CPU_PROGRAM_MAP(snowbros3_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", snowbros_state, snowbros3_irq, "screen", 0, 1)
@ -1906,7 +1886,7 @@ static MACHINE_CONFIG_START( snowbro3, snowbros_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki", 999900, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@ -2064,6 +2044,24 @@ ROM_END
/* Barko */
/*
Honey Doll - Barko Corp 1995
Rom Board include a Cypress cy7C382-0JC chip
Main Board :
CPU : 1 X MC68000P12
1 X Z80B
1 X Oki M6295
2 X Cypress CY7C384A-XJC
2 x quartz - 12Mhz and 16Mhz
*/
ROM_START( honeydol )
ROM_REGION( 0x40000, "maincpu", 0 )
ROM_LOAD16_BYTE( "d-16.uh12", 0x00001, 0x20000, CRC(cee1a2e3) SHA1(6d1ff5358ec704616b724eea2ab9b60b84709eb1) )

View File

@ -162,6 +162,7 @@ public:
DECLARE_WRITE32_MEMBER(finalgdr_oki_bank_w);
DECLARE_WRITE32_MEMBER(aoh_oki_bank_w);
DECLARE_WRITE16_MEMBER(boonggab_oki_bank_w);
DECLARE_WRITE16_MEMBER(mrkickera_oki_bank_w);
DECLARE_WRITE32_MEMBER(wyvernwg_snd_w);
DECLARE_WRITE16_MEMBER(misncrft_snd_w);
DECLARE_READ8_MEMBER(qs1000_p1_r);
@ -187,6 +188,7 @@ public:
DECLARE_DRIVER_INIT(boonggab);
DECLARE_DRIVER_INIT(wyvernwg);
DECLARE_DRIVER_INIT(yorijori);
DECLARE_DRIVER_INIT(mrkickera);
UINT32 screen_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_aoh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@ -339,6 +341,12 @@ WRITE16_MEMBER(vamphalf_state::boonggab_oki_bank_w)
m_oki->set_bank_base(0x40000 * (data & 0x7));
}
WRITE16_MEMBER(vamphalf_state::mrkickera_oki_bank_w)
{
m_oki->set_bank_base(0x40000 * (data & 0x3));
}
WRITE16_MEMBER(vamphalf_state::boonggab_prize_w)
{
if(offset)
@ -450,6 +458,7 @@ static ADDRESS_MAP_START( misncrft_io, AS_IO, 16, vamphalf_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( coolmini_io, AS_IO, 16, vamphalf_state )
// AM_RANGE(0x002, 0x003) AM_WRITE(mrkickera_oki_bank_w) // not coolmini?, installed on init
AM_RANGE(0x200, 0x203) AM_WRITE(flipscreen_w)
AM_RANGE(0x300, 0x303) AM_READ_PORT("SYSTEM")
AM_RANGE(0x304, 0x307) AM_READ_PORT("P1_P2")
@ -513,6 +522,8 @@ static ADDRESS_MAP_START( mrkicker_io, AS_IO, 32, vamphalf_state )
AM_RANGE(0x7c00, 0x7c03) AM_READ_PORT("SYSTEM")
ADDRESS_MAP_END
static ADDRESS_MAP_START( jmpbreak_io, AS_IO, 16, vamphalf_state )
AM_RANGE(0x0c0, 0x0c3) AM_NOP // ?
AM_RANGE(0x100, 0x103) AM_WRITENOP // ?
@ -1106,6 +1117,8 @@ static MACHINE_CONFIG_DERIVED( mrkicker, common )
MCFG_FRAGMENT_ADD(sound_ym_oki)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( aoh, vamphalf_state )
MCFG_CPU_ADD("maincpu", E132XN, XTAL_20MHz*4) /* 4x internal multiplier */
MCFG_CPU_PROGRAM_MAP(aoh_map)
@ -2237,6 +2250,36 @@ ROM_START( mrkicker )
ROM_LOAD( "eeprom-mrkicker.bin", 0x0000, 0x0080, CRC(87afb8f7) SHA1(444203b793c1d7929fc5916f18b510198719cd38) )
ROM_END
ROM_START( mrkickera )
ROM_REGION16_BE( 0x100000, "user1", ROMREGION_ERASE00 ) /* Hyperstone CPU Code */
/* rom0 empty */
ROM_LOAD( "3.rom2", 0x080000, 0x080000, CRC(3f7fa08b) SHA1(dbffd44d8387e6ed1a4b5ec85ccf64d69a108d88) )
ROM_REGION( 0x800000, "gfx1", 0 ) /* gfx data */
ROM_LOAD32_WORD( "roml00", 0x000000, 0x200000, CRC(c677aac3) SHA1(356073a29260e8e6c29dd12b2113b30140c6108c) )
ROM_LOAD32_WORD( "romh00", 0x000002, 0x200000, CRC(b6337d4a) SHA1(2f46e2933af7fd0f71083900d5e6e4f602ab4c66) )
/* roml01 empty */
/* romh01 empty */
ROM_REGION( 0x080000, "user2", 0 ) /* Oki Samples */
ROM_LOAD( "at27c040.u7", 0x000000, 0x080000, CRC(e8141fcd) SHA1(256fd1987030e0a1df0a66a228c1fea996cda686) ) /* Mask ROM */
/* $00000-$20000 stays the same in all sound banks, */
/* the second half of the bank is what gets switched */
ROM_REGION( 0x100000, "oki", 0 ) /* Samples */
ROM_COPY( "user2", 0x000000, 0x000000, 0x020000)
ROM_COPY( "user2", 0x000000, 0x020000, 0x020000)
ROM_COPY( "user2", 0x000000, 0x040000, 0x020000)
ROM_COPY( "user2", 0x020000, 0x060000, 0x020000)
ROM_COPY( "user2", 0x000000, 0x080000, 0x020000)
ROM_COPY( "user2", 0x040000, 0x0a0000, 0x020000)
ROM_COPY( "user2", 0x000000, 0x0c0000, 0x020000)
ROM_COPY( "user2", 0x060000, 0x0e0000, 0x020000)
ROM_REGION16_BE( 0x80, "eeprom", 0 ) /* Default EEPROM (it doesn't boot without and the game code crashes) */
ROM_LOAD( "eeprom-mrkicker.bin", 0x0000, 0x0080, CRC(87afb8f7) SHA1(444203b793c1d7929fc5916f18b510198719cd38) )
ROM_END
/*
Age Of Heroes - Silkroad 2
Unico, 2001
@ -2704,6 +2747,15 @@ DRIVER_INIT_MEMBER(vamphalf_state,coolmini)
m_flip_bit = 1;
}
DRIVER_INIT_MEMBER(vamphalf_state,mrkickera)
{
// m_maincpu->space(AS_PROGRAM).install_read_handler(0x000d2e80, 0x000d2e83, read16_delegate(FUNC(vamphalf_state::mrkickera_speedup_r), this));
m_maincpu->space(AS_IO).install_write_handler(0x002, 0x003, write16_delegate(FUNC(vamphalf_state::mrkickera_oki_bank_w), this));
m_palshift = 0;
m_flip_bit = 1;
}
DRIVER_INIT_MEMBER(vamphalf_state,suplup)
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0x0011605c, 0x0011605f, read16_delegate(FUNC(vamphalf_state::suplup_speedup_r), this));
@ -2895,6 +2947,7 @@ GAME( 2000, mrdig, 0, mrdig, common, vamphalf_state, mrdig, R
GAME( 2001, dtfamily, 0, coolmini, common, vamphalf_state, dtfamily, ROT0, "SemiCom", "Diet Family", GAME_SUPPORTS_SAVE )
GAME( 2001, finalgdr, 0, finalgdr, finalgdr, vamphalf_state, finalgdr, ROT0, "SemiCom", "Final Godori (Korea, version 2.20.5915)", GAME_SUPPORTS_SAVE )
GAME( 2001, mrkicker, 0, mrkicker, finalgdr, vamphalf_state, mrkicker, ROT0, "SemiCom", "Mr. Kicker", GAME_SUPPORTS_SAVE )
GAME( 2001, mrkickera, mrkicker, coolmini, common, vamphalf_state, mrkickera,ROT0, "SemiCom", "Mr. Kicker (F-E1-16-010 PCB)", GAME_SUPPORTS_SAVE )
GAME( 2001, toyland, 0, coolmini, common, vamphalf_state, toyland, ROT0, "SemiCom", "Toy Land Adventure", GAME_SUPPORTS_SAVE )
GAME( 2001, wivernwg, 0, wyvernwg, common, vamphalf_state, wyvernwg, ROT270, "SemiCom", "Wivern Wings", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 2001, wyvernwg, wivernwg, wyvernwg, common, vamphalf_state, wyvernwg, ROT270, "SemiCom (Game Vision license)", "Wyvern Wings (set 1)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )

32
src/mame/nl.lst Normal file
View File

@ -0,0 +1,32 @@
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
/******************************************************************************
nl.lst
List of all drivers using netlist code. This file is parsed by then
genie build system.
******************************************************************************/
1942 // 12/1984 (c) 1984
1942a // 12/1984 (c) 1984
1942abl // bootleg
1942b // 12/1984 (c) 1984
1942w // 12/1984 (c) 1984 + Williams Electronics license (c) 1985
1942p // prototype
1942h // hack (Two Bit Score?)
popeye // (c) 1982
popeyeu // (c) 1982
popeyef // (c) 1982
popeyebl // bootleg
// mario
// Atari 100% TTL
pong // (c) 1972 Atari
pongd // (c) 1975 Atari
pongf // (c) 1972 Atari
breakout // (c) 1976 Atari

View File

@ -45,7 +45,8 @@ documentation still exists.
#include "machine/6821pia.h"
#include "includes/dgn_beta.h"
#include "machine/mos6551.h"
#include "formats/coco_dsk.h"
#include "formats/vdk_dsk.h"
#include "formats/dmk_dsk.h"
#include "imagedev/flopdrv.h"
#include "machine/ram.h"
#include "video/mc6845.h"
@ -288,13 +289,6 @@ PALETTE_INIT_MEMBER(dgn_beta_state, dgn)
}
}
static const floppy_interface dgnbeta_floppy_interface =
{
FLOPPY_STANDARD_5_25_DSHD,
LEGACY_FLOPPY_OPTIONS_NAME(coco),
NULL
};
/* F4 Character Displayer */
static const gfx_layout dgnbeta_charlayout =
{
@ -313,6 +307,14 @@ static GFXDECODE_START( dgnbeta )
GFXDECODE_ENTRY( "gfx1", 0x0000, dgnbeta_charlayout, 0, 8 )
GFXDECODE_END
FLOPPY_FORMATS_MEMBER( dgn_beta_state::floppy_formats )
FLOPPY_VDK_FORMAT,
FLOPPY_DMK_FORMAT
FLOPPY_FORMATS_END
static SLOT_INTERFACE_START( dgn_beta_floppies )
SLOT_INTERFACE("qd", FLOPPY_525_QD)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( dgnbeta, dgn_beta_state )
/* basic machine hardware */
@ -366,12 +368,14 @@ static MACHINE_CONFIG_START( dgnbeta, dgn_beta_state )
MCFG_PIA_IRQA_HANDLER(WRITELINE(dgn_beta_state,d_pia2_irq_a))
MCFG_PIA_IRQB_HANDLER(WRITELINE(dgn_beta_state,d_pia2_irq_b))
MCFG_DEVICE_ADD(FDC_TAG, WD2797, 0)
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(dgn_beta_state,dgnbeta_fdc_intrq_w))
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(dgn_beta_state,dgnbeta_fdc_drq_w))
MCFG_WD2797x_ADD(FDC_TAG, XTAL_1MHz)
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(dgn_beta_state, dgnbeta_fdc_intrq_w))
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(dgn_beta_state, dgnbeta_fdc_drq_w))
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(dgnbeta_floppy_interface)
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", dgn_beta_floppies, "qd", dgn_beta_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", dgn_beta_floppies, "qd", dgn_beta_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":2", dgn_beta_floppies, "qd", dgn_beta_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":3", dgn_beta_floppies, "qd", dgn_beta_state::floppy_formats)
MCFG_MC6845_ADD("crtc", HD6845, "screen", XTAL_12_288MHz / 16) //XTAL is guessed
MCFG_MC6845_SHOW_BORDER_AREA(false)

View File

@ -28,8 +28,6 @@ ToDo:
****************************************************************************/
#define NEWFDC 1
#include "emu.h"
#include "cpu/z80/z80.h"
@ -46,14 +44,8 @@ ToDo:
#include "machine/z80dma.h"
#include "machine/rescap.h"
#include "machine/74123.h"
#if NEWFDC
#include "machine/wd_fdc.h"
#include "formats/excali64_dsk.h"
#else
#include "machine/wd17xx.h"
#include "imagedev/flopdrv.h"
#include "formats/basicdsk.h"
#endif
class excali64_state : public driver_device
{
@ -69,10 +61,8 @@ public:
, m_u12(*this, "u12")
, m_centronics(*this, "centronics")
, m_fdc(*this, "fdc")
#if NEWFDC
, m_floppy0(*this, "fdc:0")
, m_floppy1(*this, "fdc:1")
#endif
{ }
DECLARE_PALETTE_INIT(excali64);
@ -85,9 +75,7 @@ public:
DECLARE_WRITE8_MEMBER(porte4_w);
DECLARE_READ8_MEMBER(porte8_r);
DECLARE_WRITE8_MEMBER(portec_w);
#if NEWFDC
DECLARE_FLOPPY_FORMATS(floppy_formats);
#endif
DECLARE_WRITE_LINE_MEMBER(cent_busy_w);
DECLARE_WRITE_LINE_MEMBER(busreq_w);
DECLARE_READ8_MEMBER(memory_read_byte);
@ -118,13 +106,9 @@ private:
required_device<z80dma_device> m_dma;
required_device<ttl74123_device> m_u12;
required_device<centronics_device> m_centronics;
#if NEWFDC
required_device<wd2793_t> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
#else
required_device<wd2793_device> m_fdc;
#endif
};
static ADDRESS_MAP_START(excali64_mem, AS_PROGRAM, 8, excali64_state)
@ -150,11 +134,7 @@ static ADDRESS_MAP_START(excali64_io, AS_IO, 8, excali64_state)
AM_RANGE(0xe4, 0xe7) AM_WRITE(porte4_w)
AM_RANGE(0xe8, 0xeb) AM_READ(porte8_r)
AM_RANGE(0xec, 0xef) AM_WRITE(portec_w)
#if NEWFDC
AM_RANGE(0xf0, 0xf3) AM_DEVREADWRITE("fdc", wd2793_t, read, write)
#else
AM_RANGE(0xf0, 0xf3) AM_DEVREADWRITE("fdc", wd2793_device, read, write)
#endif
ADDRESS_MAP_END
@ -245,7 +225,6 @@ WRITE_LINE_MEMBER( excali64_state::cent_busy_w )
m_centronics_busy = state;
}
#if NEWFDC
FLOPPY_FORMATS_MEMBER( excali64_state::floppy_formats )
FLOPPY_EXCALI64_FORMAT
FLOPPY_FORMATS_END
@ -254,37 +233,13 @@ static SLOT_INTERFACE_START( excali64_floppies )
SLOT_INTERFACE( "drive0", FLOPPY_525_QD )
SLOT_INTERFACE( "drive1", FLOPPY_525_QD )
SLOT_INTERFACE_END
#else
static LEGACY_FLOPPY_OPTIONS_START(excali64)
LEGACY_FLOPPY_OPTION(excali64_ds, "raw", "Excalibur 64 DS disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([2])
TRACKS([80])
SECTORS([5])
SECTOR_LENGTH([1024])
FIRST_SECTOR_ID([1]))
LEGACY_FLOPPY_OPTIONS_END
static const floppy_interface excali64_floppy_interface =
{
FLOPPY_STANDARD_5_25_DSDD,
LEGACY_FLOPPY_OPTIONS_NAME(excali64),
NULL
};
#endif
// pulses from port E4 bit 5 restart the 74123. After 3.6 secs without a pulse, the motor gets turned off.
WRITE8_MEMBER( excali64_state::motor_w )
{
m_motor = BIT(data, 0);
#if NEWFDC
m_floppy1->get_device()->mon_w(!m_motor);
m_floppy0->get_device()->mon_w(!m_motor);
#else
legacy_floppy_image_device *flop = subdevice<legacy_floppy_image_device>(FLOPPY_0);
flop->floppy_mon_w(!m_motor); // motor on
flop = subdevice<legacy_floppy_image_device>(FLOPPY_1);
flop->floppy_mon_w(!m_motor); // motor on
#endif
}
READ8_MEMBER( excali64_state::porte8_r )
@ -294,7 +249,6 @@ READ8_MEMBER( excali64_state::porte8_r )
WRITE8_MEMBER( excali64_state::porte4_w )
{
#if NEWFDC
floppy_image_device *floppy = NULL;
if (BIT(data, 0))
floppy = m_floppy0->get_device();
@ -306,16 +260,6 @@ WRITE8_MEMBER( excali64_state::porte4_w )
if (floppy)
floppy->ss_w(BIT(data, 4));
#else
if BIT(data, 0)
m_fdc->set_drive(0);
if BIT(data, 1)
m_fdc->set_drive(1);
m_fdc->set_side(BIT(data, 4));
#endif
m_u12->b_w(space,offset, BIT(data, 5)); // motor pulse
}
@ -326,11 +270,7 @@ d2 = density select (0 = double)
*/
WRITE8_MEMBER( excali64_state::portec_w )
{
#if NEWFDC
m_fdc->dden_w(BIT(data, 2));
#else
m_fdc->dden_w(!BIT(data, 2));
#endif
}
WRITE_LINE_MEMBER( excali64_state::busreq_w )
@ -651,17 +591,12 @@ static MACHINE_CONFIG_START( excali64, excali64_state )
/* Devices */
MCFG_CASSETTE_ADD( "cassette" )
#if NEWFDC
MCFG_WD2793x_ADD("fdc", XTAL_16MHz / 16)
MCFG_WD_FDC_DRQ_CALLBACK(DEVWRITELINE("dma", z80dma_device, rdy_w))
MCFG_FLOPPY_DRIVE_ADD("fdc:0", excali64_floppies, "drive0", excali64_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", excali64_floppies, "drive1", excali64_state::floppy_formats)
#else
MCFG_DEVICE_ADD("fdc", WD2793, 0)
MCFG_WD17XX_DEFAULT_DRIVE2_TAGS
MCFG_WD17XX_DRQ_CALLBACK(DEVWRITELINE("dma", z80dma_device, rdy_w))
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(excali64_floppy_interface)
#endif
MCFG_DEVICE_ADD("dma", Z80DMA, XTAL_16MHz/4)
MCFG_Z80DMA_OUT_BUSREQ_CB(WRITELINE(excali64_state, busreq_w))
MCFG_Z80DMA_IN_MREQ_CB(READ8(excali64_state, memory_read_byte))

View File

@ -41,8 +41,7 @@
#include "machine/i8255.h"
#include "machine/i8251.h"
#include "video/mc6845.h"
//#include "machine/wd_fdc.h"
#include "machine/wd17xx.h"
#include "machine/wd_fdc.h"
class mbc200_state : public driver_device
@ -56,14 +55,13 @@ public:
, m_vram(*this, "vram")
, m_maincpu(*this, "maincpu")
, m_fdc(*this, "fdc")
//, m_floppy0(*this, "fdc:0")
//, m_floppy1(*this, "fdc:1")
, m_floppy0(*this, FLOPPY_0)
, m_floppy1(*this, FLOPPY_1)
, m_floppy0(*this, "fdc:0")
, m_floppy1(*this, "fdc:1")
{ }
DECLARE_READ8_MEMBER(p2_porta_r);
DECLARE_WRITE8_MEMBER(pm_porta_w);
DECLARE_WRITE8_MEMBER(pm_portb_w);
MC6845_UPDATE_ROW(update_row);
required_device<palette_device> m_palette;
@ -75,12 +73,9 @@ private:
required_device<i8255_device> m_ppi_m;
required_shared_ptr<UINT8> m_vram;
required_device<cpu_device> m_maincpu;
//required_device<mb8876_t> m_fdc;
//required_device<floppy_connector> m_floppy0;
//required_device<floppy_connector> m_floppy1;
required_device<mb8876_device> m_fdc;
required_device<legacy_floppy_image_device> m_floppy0;
required_device<legacy_floppy_image_device> m_floppy1;
required_device<mb8876_t> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
};
@ -97,13 +92,32 @@ WRITE8_MEMBER( mbc200_state::pm_porta_w )
m_comm_latch = data; // to slave CPU
}
WRITE8_MEMBER( mbc200_state::pm_portb_w )
{
floppy_image_device *floppy = NULL;
// to be verified
switch (data & 0x01)
{
case 0: floppy = m_floppy0->get_device(); break;
case 1: floppy = m_floppy1->get_device(); break;
}
m_fdc->set_floppy(floppy);
if (floppy)
{
floppy->mon_w(0);
floppy->ss_w(BIT(data, 7));
}
}
static ADDRESS_MAP_START( mbc200_io , AS_IO, 8, mbc200_state)
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0xe0, 0xe0) AM_DEVREADWRITE("i8251_1", i8251_device, data_r, data_w)
AM_RANGE(0xe1, 0xe1) AM_DEVREADWRITE("i8251_1", i8251_device, status_r, control_w)
//AM_RANGE(0xe4, 0xe7) AM_DEVREADWRITE("fdc", mb8876_t, read, write)
AM_RANGE(0xe4, 0xe7) AM_DEVREADWRITE("fdc", mb8876_device, read, write)
AM_RANGE(0xe4, 0xe7) AM_DEVREADWRITE("fdc", mb8876_t, read, write)
AM_RANGE(0xe8, 0xeb) AM_DEVREADWRITE("ppi_m", i8255_device, read, write)
AM_RANGE(0xec, 0xec) AM_DEVREADWRITE("i8251_2", i8251_device, data_r, data_w)
AM_RANGE(0xed, 0xed) AM_DEVREADWRITE("i8251_2", i8251_device, status_r, control_w)
@ -142,18 +156,6 @@ INPUT_PORTS_END
void mbc200_state::machine_start()
{
// floppy_image_device *floppy = NULL;
// floppy = m_floppy0->get_device();
// floppy1 not supported currently
// m_fdc->set_floppy(floppy);
// if (floppy)
// floppy->mon_w(0);
m_floppy0->floppy_mon_w(0);
m_floppy1->floppy_mon_w(0);
m_floppy0->floppy_drive_set_ready_state(1, 1);
m_floppy1->floppy_drive_set_ready_state(1, 1);
}
void mbc200_state::machine_reset()
@ -163,16 +165,9 @@ void mbc200_state::machine_reset()
memcpy(main, roms, 0x1000);
}
static const floppy_interface mbc200_floppy_interface =
{
FLOPPY_STANDARD_5_25_SSDD_40,
LEGACY_FLOPPY_OPTIONS_NAME(default),
"floppy_5_25"
};
//static SLOT_INTERFACE_START( mbc200_floppies )
// SLOT_INTERFACE( "525dd", FLOPPY_525_SSDD )
//SLOT_INTERFACE_END
static SLOT_INTERFACE_START( mbc200_floppies )
SLOT_INTERFACE("qd", FLOPPY_525_QD )
SLOT_INTERFACE_END
MC6845_UPDATE_ROW( mbc200_state::update_row )
{
@ -244,16 +239,14 @@ static MACHINE_CONFIG_START( mbc200, mbc200_state )
MCFG_DEVICE_ADD("ppi_m", I8255, 0)
MCFG_I8255_OUT_PORTA_CB(WRITE8(mbc200_state, pm_porta_w))
MCFG_I8255_OUT_PORTB_CB(WRITE8(mbc200_state, pm_portb_w))
MCFG_DEVICE_ADD("i8251_1", I8251, 0) // INS8251N
MCFG_DEVICE_ADD("i8251_2", I8251, 0) // INS8251A
//MCFG_MB8876x_ADD("fdc", 1000000) // guess
//MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbc200_floppies, "525dd", floppy_image_device::default_floppy_formats)
//MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbc200_floppies, "525dd", floppy_image_device::default_floppy_formats)
MCFG_DEVICE_ADD("fdc", MB8876, 0) // MB8876A
MCFG_WD17XX_DEFAULT_DRIVE2_TAGS
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(mbc200_floppy_interface)
MCFG_MB8876x_ADD("fdc", XTAL_8MHz / 8) // guess
MCFG_FLOPPY_DRIVE_ADD("fdc:0", mbc200_floppies, "qd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbc200_floppies, "qd", floppy_image_device::default_floppy_formats)
/* software lists */
MCFG_SOFTWARE_LIST_ADD("flop_list", "mbc200")

View File

@ -14,7 +14,7 @@
#include "cpu/i8085/i8085.h"
#include "machine/i8255.h"
#include "imagedev/flopdrv.h"
#include "formats/basicdsk.h"
#include "formats/pk8020_dsk.h"
#include "includes/pk8020.h"
#include "machine/ram.h"
@ -141,21 +141,6 @@ static INPUT_PORTS_START( pk8020 )
PORT_BIT(0xFF, IP_ACTIVE_HIGH, IPT_UNUSED)
INPUT_PORTS_END
static LEGACY_FLOPPY_OPTIONS_START(pk8020)
LEGACY_FLOPPY_OPTION(pk8020, "kdi", "PK8020 disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([2])
TRACKS([80])
SECTORS([5])
SECTOR_LENGTH([1024])
FIRST_SECTOR_ID([1]))
LEGACY_FLOPPY_OPTIONS_END
static const floppy_interface pk8020_floppy_interface =
{
FLOPPY_STANDARD_5_25_DSHD,
LEGACY_FLOPPY_OPTIONS_NAME(pk8020),
"floppy_5_25"
};
/* F4 Character Displayer */
static const gfx_layout pk8020_charlayout =
@ -176,6 +161,15 @@ static GFXDECODE_START( pk8020 )
GFXDECODE_END
FLOPPY_FORMATS_MEMBER( pk8020_state::floppy_formats )
FLOPPY_PK8020_FORMAT
FLOPPY_FORMATS_END
static SLOT_INTERFACE_START( pk8020_floppies )
SLOT_INTERFACE("qd", FLOPPY_525_QD)
SLOT_INTERFACE_END
/* Machine driver */
static MACHINE_CONFIG_START( pk8020, pk8020_state )
/* basic machine hardware */
@ -221,9 +215,14 @@ static MACHINE_CONFIG_START( pk8020, pk8020_state )
MCFG_DEVICE_ADD("rs232", I8251, 0)
MCFG_DEVICE_ADD("lan", I8251, 0)
MCFG_DEVICE_ADD("wd1793", FD1793, 0)
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
MCFG_WD17XX_DDEN_CALLBACK(VCC)
MCFG_FD1793x_ADD("wd1793", XTAL_20MHz / 20)
MCFG_FLOPPY_DRIVE_ADD("wd1793:0", pk8020_floppies, "qd", pk8020_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("wd1793:1", pk8020_floppies, "qd", pk8020_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("wd1793:2", pk8020_floppies, "qd", pk8020_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("wd1793:3", pk8020_floppies, "qd", pk8020_state::floppy_formats)
MCFG_SOFTWARE_LIST_ADD("flop_list", "korvet_flop")
/* audio hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@ -235,9 +234,6 @@ static MACHINE_CONFIG_START( pk8020, pk8020_state )
MCFG_CASSETTE_ADD( "cassette" )
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY)
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(pk8020_floppy_interface)
MCFG_SOFTWARE_LIST_ADD("flop_list","korvet_flop")
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("258K") //64 + 4*48 + 2

View File

@ -206,6 +206,7 @@
************************************************************************************************/
#include "includes/x1.h"
#include "formats/x1_dsk.h"
#define MAIN_CLOCK XTAL_16MHz
#define VDP_CLOCK XTAL_42_9545MHz
@ -1021,10 +1022,12 @@ READ8_MEMBER( x1_state::x1_fdc_r )
WRITE8_MEMBER( x1_state::x1_fdc_w )
{
floppy_image_device *floppy = NULL;
switch(offset+0xff8)
{
case 0x0ff8:
m_fdc->command_w(space, offset,data);
m_fdc->cmd_w(space, offset,data);
break;
case 0x0ff9:
m_fdc->track_w(space, offset,data);
@ -1035,12 +1038,25 @@ WRITE8_MEMBER( x1_state::x1_fdc_w )
case 0x0ffb:
m_fdc->data_w(space, offset,data);
break;
case 0x0ffc:
m_fdc->set_drive(data & 3);
floppy_get_device(machine(), data & 3)->floppy_mon_w(!BIT(data, 7));
floppy_get_device(machine(), data & 3)->floppy_drive_set_ready_state(data & 0x80,0);
m_fdc->set_side(BIT(data, 4));
switch (data & 0x03)
{
case 0: floppy = m_floppy0->get_device(); break;
case 1: floppy = m_floppy1->get_device(); break;
case 2: floppy = m_floppy2->get_device(); break;
case 3: floppy = m_floppy3->get_device(); break;
}
m_fdc->set_floppy(floppy);
if (floppy)
{
floppy->ss_w(BIT(data, 4));
floppy->mon_w(!BIT(data, 7));
}
break;
case 0x0ffd:
case 0x0ffe:
case 0x0fff:
@ -2414,21 +2430,13 @@ PALETTE_INIT_MEMBER(x1_state,x1)
palette.set_pen_color(i,rgb_t(0x00,0x00,0x00));
}
static LEGACY_FLOPPY_OPTIONS_START( x1 )
LEGACY_FLOPPY_OPTION( img2d, "2d", "2D disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([2])
TRACKS([40])
SECTORS([16])
SECTOR_LENGTH([256])
FIRST_SECTOR_ID([1]))
LEGACY_FLOPPY_OPTIONS_END
FLOPPY_FORMATS_MEMBER( x1_state::floppy_formats )
FLOPPY_X1_FORMAT
FLOPPY_FORMATS_END
static const floppy_interface x1_floppy_interface =
{
FLOPPY_STANDARD_5_25_DSDD_40,
LEGACY_FLOPPY_OPTIONS_NAME(x1),
"floppy_5_25"
};
static SLOT_INTERFACE_START( x1_floppies )
SLOT_INTERFACE("dd", FLOPPY_525_DD)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( x1, x1_state )
/* basic machine hardware */
@ -2475,8 +2483,14 @@ static MACHINE_CONFIG_START( x1, x1_state )
MCFG_VIDEO_START_OVERRIDE(x1_state,x1)
MCFG_DEVICE_ADD("fdc", MB8877, 0)
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
MCFG_MB8877x_ADD("fdc", MAIN_CLOCK / 16)
MCFG_FLOPPY_DRIVE_ADD("fdc:0", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:2", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:3", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_SOFTWARE_LIST_ADD("flop_list","x1_flop")
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "x1_cart")
MCFG_GENERIC_EXTENSIONS("bin,rom")
@ -2502,9 +2516,6 @@ static MACHINE_CONFIG_START( x1, x1_state )
MCFG_SOFTWARE_LIST_ADD("cass_list","x1_cass")
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(x1_floppy_interface)
MCFG_SOFTWARE_LIST_ADD("flop_list","x1_flop")
MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard_timer", x1_state, x1_keyboard_callback, attotime::from_hz(250))
MCFG_TIMER_DRIVER_ADD_PERIODIC("cmt_wind_timer", x1_state, x1_cmt_wind_timer, attotime::from_hz(16))
MACHINE_CONFIG_END
@ -2527,10 +2538,8 @@ static MACHINE_CONFIG_DERIVED( x1turbo, x1 )
MCFG_Z80DMA_IN_IORQ_CB(READ8(x1_state, io_read_byte))
MCFG_Z80DMA_OUT_IORQ_CB(WRITE8(x1_state, io_write_byte))
MCFG_DEVICE_REMOVE("fdc")
MCFG_DEVICE_ADD("fdc", MB8877, 0)
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(x1_state,fdc_drq_w))
MCFG_DEVICE_MODIFY("fdc")
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(x1_state, fdc_drq_w))
MCFG_YM2151_ADD("ym", MAIN_CLOCK/8) //option board
MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)

View File

@ -15,6 +15,7 @@
************************************************************************************************/
#include "includes/x1.h"
#include "formats/x1_dsk.h"
#include "includes/pce.h"
//#include "cpu/h6280/h6280.h"
@ -394,23 +395,9 @@ static const z80_daisy_config x1_daisy[] =
{ NULL }
};
static LEGACY_FLOPPY_OPTIONS_START( x1 )
LEGACY_FLOPPY_OPTION( img2d, "2d", "2D disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([2])
TRACKS([40])
SECTORS([16])
SECTOR_LENGTH([256])
FIRST_SECTOR_ID([1]))
LEGACY_FLOPPY_OPTIONS_END
static const floppy_interface x1_floppy_interface =
{
FLOPPY_STANDARD_5_25_DSDD_40,
LEGACY_FLOPPY_OPTIONS_NAME(x1),
"floppy_5_25"
};
static SLOT_INTERFACE_START( x1_floppies )
SLOT_INTERFACE("dd", FLOPPY_525_DD)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( x1twin, x1twin_state )
/* basic machine hardware */
@ -471,8 +458,14 @@ static MACHINE_CONFIG_START( x1twin, x1twin_state )
MCFG_VIDEO_START_OVERRIDE(x1twin_state,x1)
MCFG_DEVICE_ADD("fdc", MB8877, 0)
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
MCFG_MB8877x_ADD("fdc", MAIN_CLOCK / 16)
MCFG_FLOPPY_DRIVE_ADD("fdc:0", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:2", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:3", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_SOFTWARE_LIST_ADD("flop_list","x1_flop")
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "x1_cart")
MCFG_GENERIC_EXTENSIONS("bin,rom")
@ -503,9 +496,6 @@ static MACHINE_CONFIG_START( x1twin, x1twin_state )
MCFG_SOFTWARE_LIST_ADD("cass_list","x1_cass")
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(x1_floppy_interface)
MCFG_SOFTWARE_LIST_ADD("flop_list","x1_flop")
#if 0
MCFG_SOUND_ADD("c6280", C6280, PCE_MAIN_CLOCK/6)
MCFG_C6280_CPU("pce_cpu")

View File

@ -10,7 +10,7 @@
#define DGN_BETA_H_
#include "video/mc6845.h"
#include "machine/wd17xx.h"
#include "machine/wd_fdc.h"
#include "machine/6821pia.h"
#include "machine/ram.h"
@ -58,12 +58,6 @@
#define KOutDat KInClk /* Also used for data into output shifter */
#define KInDat 0x20 /* Keyboard data in from keyboard (serial stream) */
/***** WD2797 pins *****/
#define DSMask 0x03 /* PA0 & PA1 are binary encoded drive */
#define ENPCtrl 0x20 /* PA5 on PIA */
#define DDenCtrl 0x40 /* PA6 on PIA */
/***** Video Modes *****/
enum BETA_VID_MODES
@ -93,8 +87,15 @@ public:
m_videoram(*this, "videoram"),
m_maincpu(*this, "maincpu"),
m_ram(*this, RAM_TAG),
m_fdc(*this, FDC_TAG),
m_floppy0(*this, FDC_TAG ":0"),
m_floppy1(*this, FDC_TAG ":1"),
m_floppy2(*this, FDC_TAG ":2"),
m_floppy3(*this, FDC_TAG ":3"),
m_palette(*this, "palette") { }
DECLARE_FLOPPY_FORMATS(floppy_formats);
required_device<mc6845_device> m_mc6845;
required_shared_ptr<UINT8> m_videoram;
@ -214,6 +215,11 @@ public:
void dgn_beta_frame_interrupt (int data);
void dgn_beta_line_interrupt (int data);
required_device<ram_device> m_ram;
required_device<wd2797_t> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_device<floppy_connector> m_floppy2;
required_device<floppy_connector> m_floppy3;
required_device<palette_device> m_palette;
};

View File

@ -13,7 +13,7 @@
#include "machine/pit8253.h"
#include "machine/pic8259.h"
#include "machine/i8251.h"
#include "machine/wd17xx.h"
#include "machine/wd_fdc.h"
#include "imagedev/cassette.h"
#include "sound/speaker.h"
#include "sound/wave.h"
@ -33,6 +33,10 @@ public:
m_lan(*this, "lan"),
m_ram(*this, RAM_TAG),
m_wd1793(*this, "wd1793"),
m_floppy0(*this, "wd1793:0"),
m_floppy1(*this, "wd1793:1"),
m_floppy2(*this, "wd1793:2"),
m_floppy3(*this, "wd1793:3"),
m_pit8253(*this, "pit8253"),
m_pic8259(*this, "pic8259"),
m_speaker(*this, "speaker"),
@ -40,6 +44,8 @@ public:
m_region_gfx1(*this, "gfx1"),
m_palette(*this, "palette") { }
DECLARE_FLOPPY_FORMATS(floppy_formats);
UINT8 m_color;
UINT8 m_video_page;
UINT8 m_wide;
@ -84,7 +90,11 @@ protected:
required_device<i8251_device> m_rs232;
required_device<i8251_device> m_lan;
required_device<ram_device> m_ram;
required_device<fd1793_device> m_wd1793;
required_device<fd1793_t> m_wd1793;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_device<floppy_connector> m_floppy2;
required_device<floppy_connector> m_floppy3;
required_device<pit8253_device> m_pit8253;
required_device<pic8259_device> m_pic8259;
required_device<speaker_sound_device> m_speaker;

View File

@ -15,7 +15,7 @@
#include "machine/z80ctc.h"
#include "machine/z80dart.h"
#include "machine/i8255.h"
#include "machine/wd17xx.h"
#include "machine/wd_fdc.h"
#include "machine/z80dma.h"
#include "video/mc6845.h"
#include "sound/2151intf.h"
@ -81,6 +81,10 @@ public:
m_cassette(*this, "cassette"),
m_cart(*this, "cartslot"),
m_fdc(*this, "fdc"),
m_floppy0(*this, "fdc:0"),
m_floppy1(*this, "fdc:1"),
m_floppy2(*this, "fdc:2"),
m_floppy3(*this, "fdc:3"),
m_crtc(*this, "crtc"),
m_ctc(*this, "ctc"),
m_gfxdecode(*this, "gfxdecode"),
@ -88,10 +92,16 @@ public:
m_dma(*this, "dma")
{ }
DECLARE_FLOPPY_FORMATS(floppy_formats);
required_device<cpu_device> m_maincpu;
required_device<cassette_image_device> m_cassette;
required_device<generic_slot_device> m_cart;
required_device<mb8877_device> m_fdc;
required_device<mb8877_t> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_device<floppy_connector> m_floppy2;
required_device<floppy_connector> m_floppy3;
required_device<mc6845_device> m_crtc;
required_device<z80ctc_device> m_ctc;

View File

@ -182,7 +182,7 @@ static SLOT_INTERFACE_START( beta_disk_floppies )
SLOT_INTERFACE_END
static MACHINE_CONFIG_FRAGMENT( beta_disk )
MCFG_WD2793x_ADD("wd179x", XTAL_8MHz / 8) // KR1818VG93 clone of WD1793
MCFG_KR1818VG93x_ADD("wd179x", XTAL_8MHz / 8)
MCFG_FLOPPY_DRIVE_ADD("wd179x:0", beta_disk_floppies, "drive0", beta_disk_device::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("wd179x:1", beta_disk_floppies, "drive1", beta_disk_device::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("wd179x:2", beta_disk_floppies, "drive2", beta_disk_device::floppy_formats)

View File

@ -50,7 +50,7 @@ protected:
virtual machine_config_constructor device_mconfig_additions() const;
private:
required_device<wd2793_t> m_wd179x;
required_device<kr1818vg93_t> m_wd179x;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_device<floppy_connector> m_floppy2;

View File

@ -64,7 +64,6 @@
#include "machine/6821pia.h"
#include "includes/dgn_beta.h"
#include "machine/mos6551.h"
#include "machine/wd17xx.h"
#include "imagedev/flopdrv.h"
#include "debug/debugcpu.h"
@ -567,7 +566,6 @@ READ8_MEMBER(dgn_beta_state::d_pia1_pa_r)
WRITE8_MEMBER(dgn_beta_state::d_pia1_pa_w)
{
int HALT_DMA;
wd2797_device *fdc = machine().device<wd2797_device>(FDC_TAG);
/* Only play with halt line if halt bit changed since last write */
if((data & 0x80) != m_d_pia1_pa_last)
@ -589,10 +587,20 @@ WRITE8_MEMBER(dgn_beta_state::d_pia1_pa_w)
}
/* Drive selects are binary encoded on PA0 & PA1 */
fdc->set_drive(~data & DSMask);
floppy_image_device *floppy = NULL;
/* Set density of WD2797 */
fdc->dden_w(BIT(data, 6));
switch (~data & 0x03)
{
case 0: floppy = m_floppy0->get_device(); break;
case 1: floppy = m_floppy1->get_device(); break;
case 2: floppy = m_floppy2->get_device(); break;
case 3: floppy = m_floppy3->get_device(); break;
}
m_fdc->set_floppy(floppy);
// not connected: bit 5 = ENP
m_fdc->dden_w(BIT(data, 6));
LOG_DISK(("Set density %s\n", BIT(data, 6) ? "low" : "high"));
}
@ -787,7 +795,7 @@ void dgn_beta_state::cpu1_recalc_firq(int state)
/********************************************************************************************/
/* The INTRQ line goes through pia2 ca1, in exactly the same way as DRQ from DragonDos does */
WRITE_LINE_MEMBER(dgn_beta_state::dgnbeta_fdc_intrq_w)
WRITE_LINE_MEMBER( dgn_beta_state::dgnbeta_fdc_intrq_w )
{
device_t *device = machine().device(PIA_2_TAG);
LOG_DISK(("dgnbeta_fdc_intrq_w(%d)\n", state));
@ -796,64 +804,21 @@ WRITE_LINE_MEMBER(dgn_beta_state::dgnbeta_fdc_intrq_w)
}
/* DRQ is routed through various logic to the FIRQ inturrupt line on *BOTH* CPUs */
WRITE_LINE_MEMBER(dgn_beta_state::dgnbeta_fdc_drq_w)
WRITE_LINE_MEMBER( dgn_beta_state::dgnbeta_fdc_drq_w )
{
LOG_DISK(("dgnbeta_fdc_drq_w(%d)\n", state));
cpu1_recalc_firq(state);
}
READ8_MEMBER(dgn_beta_state::dgnbeta_wd2797_r)
READ8_MEMBER( dgn_beta_state::dgnbeta_wd2797_r )
{
int result = 0;
wd2797_device *fdc = machine().device<wd2797_device>(FDC_TAG);
switch(offset & 0x03)
{
case 0:
result = fdc->status_r(space, 0);
LOG_DISK(("Disk status=%2.2X\n",result));
break;
case 1:
result = fdc->track_r(space, 0);
break;
case 2:
result = fdc->sector_r(space, 0);
break;
case 3:
result = fdc->data_r(space, 0);
break;
default:
break;
}
return result;
return m_fdc->read(space, offset & 0x03);
}
WRITE8_MEMBER(dgn_beta_state::dgnbeta_wd2797_w)
WRITE8_MEMBER( dgn_beta_state::dgnbeta_wd2797_w )
{
wd2797_device *fdc = machine().device<wd2797_device>(FDC_TAG);
m_wd2797_written=1;
switch(offset & 0x3)
{
case 0:
/* disk head is encoded in the command byte */
/* But only for Type 3/4 commands */
if(data & 0x80)
fdc->set_side((data & 0x02) ? 1 : 0);
fdc->command_w(space, 0, data);
break;
case 1:
fdc->track_w(space, 0, data);
break;
case 2:
fdc->sector_w(space, 0, data);
break;
case 3:
fdc->data_w(space, 0, data);
break;
};
m_wd2797_written = 1;
m_fdc->write(space, offset & 0x03, data);
}
/* Scan physical keyboard into Keyboard array */
@ -924,7 +889,6 @@ void dgn_beta_state::dgn_beta_line_interrupt (int data)
/********************************* Machine/Driver Initialization ****************************************/
void dgn_beta_state::machine_reset()
{
wd2797_device *fdc = machine().device<wd2797_device>(FDC_TAG);
pia6821_device *pia_0 = machine().device<pia6821_device>( PIA_0_TAG );
pia6821_device *pia_1 = machine().device<pia6821_device>( PIA_1_TAG );
pia6821_device *pia_2 = machine().device<pia6821_device>( PIA_2_TAG );
@ -963,12 +927,8 @@ void dgn_beta_state::machine_reset()
m_DMA_NMI_LAST = 0x80; /* start with DMA NMI inactive, as pulled up */
// DMA_NMI = CLEAR_LINE; /* start with DMA NMI inactive */
fdc->dden_w(CLEAR_LINE);
fdc->set_drive(0);
m_videoram.set_target(m_ram->pointer(),m_videoram.bytes()); /* Point video ram at the start of physical ram */
fdc->reset();
m_wd2797_written=0;
m_maincpu->reset();

View File

@ -13,7 +13,6 @@
#include "emu.h"
#include "includes/pk8020.h"
#include "cpu/i8085/i8085.h"
#include "machine/wd17xx.h"
#include "imagedev/flopdrv.h"
@ -157,13 +156,7 @@ READ8_MEMBER(pk8020_state::devices_r)
case 1 : return m_rs232->status_r(space,0);
}
break;
case 0x18: switch(offset & 3) {
case 0 : return m_wd1793->status_r(space, 0);
case 1 : return m_wd1793->track_r(space, 0);
case 2 : return m_wd1793->sector_r(space, 0);
case 3 : return m_wd1793->data_r(space, 0);
}
break;
case 0x18: return m_wd1793->read(space, offset & 0x03);
case 0x20: switch(offset & 1) {
case 0 : return m_lan->data_r(space,0);
case 1 : return m_lan->status_r(space,0);
@ -187,13 +180,9 @@ WRITE8_MEMBER(pk8020_state::devices_w)
case 1 : m_rs232->control_w(space,0,data); break;
}
break;
case 0x18: switch(offset & 3) {
case 0 : m_wd1793->command_w(space, 0,data);break;
case 1 : m_wd1793->track_w(space, 0,data);break;
case 2 : m_wd1793->sector_w(space, 0,data);break;
case 3 : m_wd1793->data_w(space, 0,data);break;
}
break;
case 0x18:
m_wd1793->write(space, offset & 0x03, data);
break;
case 0x20: switch(offset & 1) {
case 0 : m_lan->data_w(space,0,data); break;
case 1 : m_lan->control_w(space,0,data); break;
@ -841,29 +830,28 @@ WRITE8_MEMBER(pk8020_state::pk8020_portc_w)
WRITE8_MEMBER(pk8020_state::pk8020_portb_w)
{
floppy_image_device *floppy = NULL;
// Turn all motors off
floppy_get_device(machine(), 0)->floppy_mon_w(1);
floppy_get_device(machine(), 1)->floppy_mon_w(1);
floppy_get_device(machine(), 2)->floppy_mon_w(1);
floppy_get_device(machine(), 3)->floppy_mon_w(1);
m_wd1793->set_side(BIT(data,4));
if (BIT(data,0)) {
m_wd1793->set_drive(0);
floppy_get_device(machine(), 0)->floppy_mon_w(0);
floppy_get_device(machine(), 0)->floppy_drive_set_ready_state(1, 1);
} else if (BIT(data,1)) {
m_wd1793->set_drive(1);
floppy_get_device(machine(), 1)->floppy_mon_w(0);
floppy_get_device(machine(), 1)->floppy_drive_set_ready_state(1, 1);
} else if (BIT(data,2)) {
m_wd1793->set_drive(2);
floppy_get_device(machine(), 2)->floppy_mon_w(0);
floppy_get_device(machine(), 2)->floppy_drive_set_ready_state(1, 1);
} else if (BIT(data,3)) {
m_wd1793->set_drive(3);
floppy_get_device(machine(), 3)->floppy_mon_w(0);
floppy_get_device(machine(), 3)->floppy_drive_set_ready_state(1, 1);
if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(1);
if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(1);
if (m_floppy2->get_device()) m_floppy2->get_device()->mon_w(1);
if (m_floppy3->get_device()) m_floppy3->get_device()->mon_w(1);
if (BIT(data, 0)) floppy = m_floppy0->get_device();
if (BIT(data, 1)) floppy = m_floppy1->get_device();
if (BIT(data, 2)) floppy = m_floppy2->get_device();
if (BIT(data, 3)) floppy = m_floppy3->get_device();
m_wd1793->set_floppy(floppy);
if (floppy)
{
floppy->mon_w(0);
floppy->ss_w(BIT(data, 4));
}
// todo: at least bit 5 and bit 7 is connected to something too...
}
READ8_MEMBER(pk8020_state::pk8020_portc_r)

View File

@ -201,7 +201,7 @@ void gime_base_device::device_start(void)
// get_composite_color
//-------------------------------------------------
ATTR_FORCE_INLINE gime_base_device::pixel_t gime_base_device::get_composite_color(int color)
inline gime_base_device::pixel_t gime_base_device::get_composite_color(int color)
{
/* CMP colors
*
@ -313,7 +313,7 @@ ATTR_FORCE_INLINE gime_base_device::pixel_t gime_base_device::get_composite_colo
// get_rgb_color
//-------------------------------------------------
ATTR_FORCE_INLINE gime_base_device::pixel_t gime_base_device::get_rgb_color(int color)
inline gime_base_device::pixel_t gime_base_device::get_rgb_color(int color)
{
return (((color >> 4) & 2) | ((color >> 2) & 1)) * 0x550000
| (((color >> 3) & 2) | ((color >> 1) & 1)) * 0x005500
@ -543,7 +543,7 @@ void gime_base_device::reset_timer(void)
// update_memory
//-------------------------------------------------
ATTR_FORCE_INLINE void gime_base_device::update_memory(void)
inline void gime_base_device::update_memory(void)
{
for (int bank = 0; bank <= 8; bank++)
{
@ -701,7 +701,7 @@ UINT8 gime_base_device::read(offs_t offset)
// read_gime_register
//-------------------------------------------------
ATTR_FORCE_INLINE UINT8 gime_base_device::read_gime_register(offs_t offset)
inline UINT8 gime_base_device::read_gime_register(offs_t offset)
{
offset &= 0x0F;
@ -746,7 +746,7 @@ ATTR_FORCE_INLINE UINT8 gime_base_device::read_gime_register(offs_t offset)
// read_mmu_register
//-------------------------------------------------
ATTR_FORCE_INLINE UINT8 gime_base_device::read_mmu_register(offs_t offset)
inline UINT8 gime_base_device::read_mmu_register(offs_t offset)
{
return (m_mmu[offset & 0x0F] & 0x3F) | (read_floating_bus() & 0xC0);
}
@ -757,7 +757,7 @@ ATTR_FORCE_INLINE UINT8 gime_base_device::read_mmu_register(offs_t offset)
// read_palette_register
//-------------------------------------------------
ATTR_FORCE_INLINE UINT8 gime_base_device::read_palette_register(offs_t offset)
inline UINT8 gime_base_device::read_palette_register(offs_t offset)
{
// Bits 7/6 are floating, and behave oddly. On a real CoCo 3
//
@ -775,7 +775,7 @@ ATTR_FORCE_INLINE UINT8 gime_base_device::read_palette_register(offs_t offset)
// read_floating_bus
//-------------------------------------------------
ATTR_FORCE_INLINE UINT8 gime_base_device::read_floating_bus(void)
inline UINT8 gime_base_device::read_floating_bus(void)
{
return m_read_floating_bus(0);
}
@ -815,7 +815,7 @@ void gime_base_device::write(offs_t offset, UINT8 data)
// write_gime_register
//-------------------------------------------------
ATTR_FORCE_INLINE void gime_base_device::write_gime_register(offs_t offset, UINT8 data)
inline void gime_base_device::write_gime_register(offs_t offset, UINT8 data)
{
// this is needed for writes to FF95
bool timer_was_off = (m_gime_registers[0x04] == 0x00) && (m_gime_registers[0x05] == 0x00);
@ -1018,7 +1018,7 @@ ATTR_FORCE_INLINE void gime_base_device::write_gime_register(offs_t offset, UINT
// write_mmu_register
//-------------------------------------------------
ATTR_FORCE_INLINE void gime_base_device::write_mmu_register(offs_t offset, UINT8 data)
inline void gime_base_device::write_mmu_register(offs_t offset, UINT8 data)
{
offset &= 0x0F;
@ -1038,7 +1038,7 @@ ATTR_FORCE_INLINE void gime_base_device::write_mmu_register(offs_t offset, UINT8
// write_palette_register
//-------------------------------------------------
ATTR_FORCE_INLINE void gime_base_device::write_palette_register(offs_t offset, UINT8 data)
inline void gime_base_device::write_palette_register(offs_t offset, UINT8 data)
{
offset &= 0x0F;
@ -1071,7 +1071,7 @@ ATTR_FORCE_INLINE void gime_base_device::write_palette_register(offs_t offset, U
// write_sam_register
//-------------------------------------------------
ATTR_FORCE_INLINE void gime_base_device::write_sam_register(offs_t offset)
inline void gime_base_device::write_sam_register(offs_t offset)
{
/* change the SAM state */
UINT16 xorval = alter_sam_state(offset);
@ -1145,7 +1145,7 @@ void gime_base_device::recalculate_firq(void)
// John Kowalski confirms this behavior
//-------------------------------------------------
ATTR_FORCE_INLINE offs_t gime_base_device::get_video_base(void)
inline offs_t gime_base_device::get_video_base(void)
{
offs_t result;
UINT8 ff9d_mask, ff9e_mask;
@ -1282,7 +1282,7 @@ void gime_base_device::record_border_scanline(UINT16 physical_scanline)
// get_lines_per_row
//-------------------------------------------------
ATTR_FORCE_INLINE UINT16 gime_base_device::get_lines_per_row(void)
inline UINT16 gime_base_device::get_lines_per_row(void)
{
UINT16 lines_per_row;
if (m_legacy_video)
@ -1361,7 +1361,7 @@ ATTR_FORCE_INLINE UINT16 gime_base_device::get_lines_per_row(void)
//-------------------------------------------------
template<UINT8 xres, gime_base_device::get_data_func get_data, bool record_mode>
ATTR_FORCE_INLINE UINT32 gime_base_device::record_scanline_res(int scanline)
inline UINT32 gime_base_device::record_scanline_res(int scanline)
{
int column;
UINT32 base_offset = m_legacy_video ? 0 : (m_gime_registers[0x0F] & 0x7F) * 2;
@ -1639,7 +1639,7 @@ UINT32 gime_base_device::emit_dummy_samples(const scanline_record *scanline, int
// emit_mc6847_samples
//-------------------------------------------------
ATTR_FORCE_INLINE UINT32 gime_base_device::emit_mc6847_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
inline UINT32 gime_base_device::emit_mc6847_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
{
return super::emit_mc6847_samples<2>(
scanline->m_mode[sample_start],
@ -1659,7 +1659,7 @@ ATTR_FORCE_INLINE UINT32 gime_base_device::emit_mc6847_samples(const scanline_re
//-------------------------------------------------
template<int xscale, int bits_per_pixel>
ATTR_FORCE_INLINE UINT32 gime_base_device::emit_gime_graphics_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
inline UINT32 gime_base_device::emit_gime_graphics_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
{
const UINT8 *data = &scanline->m_data[sample_start];
mc6847_friend_device::emit_graphics<bits_per_pixel, xscale>(data, sample_count, pixels, 0, palette);
@ -1673,7 +1673,7 @@ ATTR_FORCE_INLINE UINT32 gime_base_device::emit_gime_graphics_samples(const scan
//-------------------------------------------------
template<int xscale>
ATTR_FORCE_INLINE UINT32 gime_base_device::emit_gime_text_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
inline UINT32 gime_base_device::emit_gime_text_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
{
UINT8 attribute = scanline->m_mode[sample_start];
const UINT8 *data = &scanline->m_data[sample_start];
@ -1733,7 +1733,7 @@ ATTR_FORCE_INLINE UINT32 gime_base_device::emit_gime_text_samples(const scanline
//-------------------------------------------------
template<int sample_count, gime_base_device::emit_samples_proc emit_samples>
ATTR_FORCE_INLINE void gime_base_device::render_scanline(const scanline_record *scanline, pixel_t *pixels, int min_x, int max_x, palette_resolver *resolver)
inline void gime_base_device::render_scanline(const scanline_record *scanline, pixel_t *pixels, int min_x, int max_x, palette_resolver *resolver)
{
int left_border, right_border;
int x, x2, pixel_position;
@ -1934,7 +1934,7 @@ bool gime_base_device::update_rgb(bitmap_rgb32 &bitmap, const rectangle &cliprec
// palette_resolver::palette_resolver
//-------------------------------------------------
ATTR_FORCE_INLINE gime_base_device::palette_resolver::palette_resolver(gime_base_device *gime, const pixel_t *palette)
inline gime_base_device::palette_resolver::palette_resolver(gime_base_device *gime, const pixel_t *palette)
{
m_gime = gime;
m_palette = palette;
@ -1948,7 +1948,7 @@ ATTR_FORCE_INLINE gime_base_device::palette_resolver::palette_resolver(gime_base
// palette_resolver::get_palette
//-------------------------------------------------
ATTR_FORCE_INLINE const gime_base_device::pixel_t *gime_base_device::palette_resolver::get_palette(UINT16 palette_rotation)
inline const gime_base_device::pixel_t *gime_base_device::palette_resolver::get_palette(UINT16 palette_rotation)
{
if (UNEXPECTED(m_current_resolved_palette != palette_rotation))
{
@ -1965,7 +1965,7 @@ ATTR_FORCE_INLINE const gime_base_device::pixel_t *gime_base_device::palette_res
// palette_resolver::lookup
//-------------------------------------------------
ATTR_FORCE_INLINE gime_base_device::pixel_t gime_base_device::palette_resolver::lookup(UINT8 color)
inline gime_base_device::pixel_t gime_base_device::palette_resolver::lookup(UINT8 color)
{
assert(color <= 63);
return m_palette[color];