Merge pull request #3 from mamedev/master

Sync to base master
This commit is contained in:
ImJezze 2015-05-22 18:39:34 +02:00
commit 578f8b5bbe
2399 changed files with 15524 additions and 9863 deletions

View File

@ -3,6 +3,7 @@
[![Join the chat at https://gitter.im/mamedev/mame](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mamedev/mame?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
What is MAME?
=============
@ -10,6 +11,7 @@ MAME stands for Multiple Arcade Machine Emulator.
MAME's purpose is to preserve decades of video-game history. As gaming technology continues to rush forward, MAME prevents these important "vintage" games from being lost and forgotten. This is achieved by documenting the hardware and how it functions. The source code to MAME serves as this documentation. The fact that the games are playable serves primarily to validate the accuracy of the documentation (how else can you prove that you have recreated the hardware faithfully?).
What is MESS?
=============
@ -17,6 +19,7 @@ MESS (Multi Emulator Super System) is the sister project of MAME. MESS documents
The MESS and MAME projects live in the same source repository and share much of the same code, but are different build targets.
How to compile?
=============
@ -26,19 +29,38 @@ If you're on a *nix system, it could be as easy as typing
make
```
for a MAME build, or
for a MAME build,
```
make TARGET=mess
make SUBTARGET=arcade
```
for an arcade-only build, or
```
make SUBTARGET=mess
```
for a MESS build (provided you have all the [prerequisites](http://forums.bannister.org/ubbthreads.php?ubb=showflat&Number=35138)).
For Windows users, we provide a ready-made [build environment](http://mamedev.org/tools/) based on MinGW-w64. [Visual Studio builds](http://wiki.mamedev.org/index.php?title=Building_MAME_using_Microsoft_Visual_Studio_compilers) are also possible.
Where can I find out more?
=============
* [Official MAME Development Team Site](http://mamedev.org/) (includes binary downloads for MAME and MESS, wiki, forums, and more)
* [Official MESS Wiki](http://www.mess.org/)
* [MAME Testers](http://mametesters.org/) (official bug tracker for MAME and MESS)
Contributing
=============
## Coding standard
MAME source code should be viewed and edited with your editor set to use four spaces per tab. Tabs are used for initial indentation of lines, with one tab used per indentation level. Spaces are used for other alignment within a line.
Some parts of the code follow [GNU style](http://www.gnu.org/prep/standards/html_node/Formatting.html); some parts of the code follow [K&R style](https://en.wikipedia.org/wiki/Indent_style#K.26R_style) -- mostly depending on who wrote the original version. **Above all else, be consistent with what you modify, and keep whitespace changes to a minimum when modifying existing source.** For new code, the majority tends to prefer GNU style, so if you don't care much, use that.

View File

@ -4149,7 +4149,7 @@
</software>
<software name="aspargp">
<description>Aspar GTP Master</description>
<description>Aspar GP Master</description>
<year>1989</year>
<publisher>Dinamic Software</publisher>
<part name="cart" interface="c64_cart">

17
hash/c65_flop.xml Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="c65_flop" description="Commodore 65 diskettes">
<software name="demo">
<description>C65 Demo</description>
<year>2002</year>
<publisher>K2</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="819200">
<rom name="demo.d81" size="819200" crc="dabb3256" sha1="61a5d638f6166e09d3bbbb12b653f6bf3fb2393f" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -23524,6 +23524,18 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design
</part>
</software>
<software name="4in1_01c">
<description>4 in 1 (4B-001)</description>
<year>20??</year>
<publisher>Sachen</publisher>
<part name="cart" interface="gameboy_cart">
<feature name="slot" value="rom_sachen1" />
<dataarea name="rom" size="524288">
<rom name="4b-001.gbc" size="524288" crc="42a2fdf8" sha1="79a4faddfd1aca397e56d7895e45b1bc12900dab" offset="000000" />
</dataarea>
</part>
</software>
<software name="mc_8in1">
<description>8 in 1 (Tw)</description>
<year>19??</year>

113
hash/nascom_flop.xml Normal file
View File

@ -0,0 +1,113 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="nascom_flop" description="Nascom disk images">
<software name="asteroid">
<description>Asteroids</description>
<year>1985</year>
<publisher>Richard C. Espley</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="655360">
<rom name="asteroid.dsk" size="655360" crc="96d6b7b6" sha1="ecf667413ec6fdec7a421ececcf572a00354ff10" offset="0" />
</dataarea>
</part>
</software>
<software name="avc-demo">
<description>AVC Demo Disk</description>
<year>1982</year>
<publisher>Lucas Logic</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="655360">
<rom name="avc-demo.dsk" size="655360" crc="81877f78" sha1="11fadb5ea69a949fdeadac3938683b14728b18df" offset="0" />
</dataarea>
</part>
</software>
<software name="divtools">
<description>Tools &amp; Toolkits</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="655360">
<rom name="divtools.dsk" size="655360" crc="58751dc6" sha1="7078e928c2ef17fccd53e1d1eb2fd9bfe9371c2c" offset="0" />
</dataarea>
</part>
</software>
<software name="dosadv">
<description>Nascom Disk Adventure</description>
<year>1983</year>
<publisher>Richard C. Espley</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="655360">
<rom name="dosadv.dsk" size="655360" crc="bd37aa35" sha1="b9483567951830955c6fe944c934c5b3ddf2007c" offset="0" />
</dataarea>
</part>
</software>
<software name="nas-sem">
<description>NAS-Sembler 1.5</description>
<year>1982</year>
<publisher>Lucas Logic</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="655360">
<rom name="nas-sem.dsk" size="655360" crc="997e014a" sha1="ce86f41ebbb57322ff026b693dd49603e104f55c" offset="0" />
</dataarea>
</part>
</software>
<software name="utd1066">
<description>NAS-DOS Utility Disk</description>
<year>1982</year>
<publisher>M F Hessey</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="655360">
<rom name="utd1066.dsk" size="655360" crc="ad1bf5b1" sha1="99c15344cdf4bdfe628a237f6e1759dc5b023e32" offset="0" />
</dataarea>
</part>
</software>
<!-- The CP/M system disks are not original disks supplied by Lucas Logic, -->
<!-- but custom disks that have been created to use all available memory. -->
<!-- Note that single sided disks can't be read on double sided drives and -->
<!-- vice versa. Lucas Logic supplied an utility called SINGLE.COM to -->
<!-- allow reading of single sided disks on double sided drives. -->
<software name="cpmv22s">
<description>CP/M 2.2 rev 2.1 System Disk (Single Sided)</description>
<year>1982</year>
<publisher>Lucas Logic</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="394240">
<rom name="cpmv22s.dsk" size="394240" crc="dee5c9d2" sha1="00f187d9828d87fba14d8267cd020bd13d8cbdb9" offset="0" />
</dataarea>
</part>
</software>
<software name="cpmv22d">
<description>CP/M 2.2 rev 2.1 System Disk (Double Sided)</description>
<year>1982</year>
<publisher>Lucas Logic</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="788480">
<rom name="cpmv22d.dsk" size="788480" crc="16724ed8" sha1="3db077c46c2cb52794443fa853621538323c352f" offset="0" />
</dataarea>
</part>
</software>
<!-- The manual for CP/M 2.2 rev 3.2 is available, but no hardware/software. -->
<software name="cpmgames">
<description>CP/M Games for the AVC</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="394240">
<rom name="cpmgames.dsk" size="394240" crc="626c680a" sha1="9bd57fa8edce2017ad94a45d9721c86a37657d3b" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

45
hash/nascom_socket.xml Normal file
View File

@ -0,0 +1,45 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!-- Nascom internal sockets for ROM/RAM -->
<softwarelist name="nascom_socket" description="Nascom internal sockets">
<software name="nasdos">
<description>NAS-DOS</description>
<year>1982</year>
<publisher>Lucas Control Systems</publisher>
<info name="usage" value="Enter ED000 to start" />
<part name="socket" interface="nascom_socket">
<dataarea name="d000" size="0x1000">
<!-- Normally supplied as 4 1k ROMs -->
<rom name="nasdos.rom" size="0x1000" crc="54a36f6d" sha1="1d063d04be5024f128bd589e6edc066e9a63fc1b" offset="0" />
</dataarea>
</part>
</software>
<software name="odebdis">
<description>Super-Debug 3.1 &amp; Nas-Dis</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Enter EC000 to start Super-Debug or EC400 to start Nas-Dis" />
<part name="socket" interface="nascom_socket">
<dataarea name="c000" size="0x1000">
<rom name="odebdis.rom" size="0x1000" crc="b0dce113" sha1="545466ab12bcf2ab613d6aff90946efa319bd943" offset="0" />
</dataarea>
</part>
</software>
<software name="zeap">
<description>ZEAP Z80 Editor-Assembler 2.1</description>
<year>1980?</year>
<publisher>Sigma Accouting &amp; Management Services</publisher>
<info name="usage" value="Enter ED000 to start" />
<part name="socket" interface="nascom_socket">
<dataarea name="d000" size="0x1000">
<rom name="zeap.rom" size="0x1000" crc="87ce8f68" sha1="e6dff4c30eecc9a5557395088d1d83776b9b4514" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -369,6 +369,8 @@ flags {
configuration { "vs*" }
flags {
"ExtraWarnings",
"NoEditAndContinue",
"EnableMinimalRebuild",
}
if not _OPTIONS["NOWERROR"] then
flags{
@ -664,6 +666,13 @@ if _OPTIONS["VERBOSE"] then
}
end
-- only show shadow warnings when enabled
if (_OPTIONS["SHADOW_CHECK"]=="1") then
buildoptions {
"-Wshadow"
}
end
-- only show deprecation warnings when enabled
if _OPTIONS["DEPRECATED"]~="1" then
buildoptions {
@ -811,7 +820,6 @@ end
"-Wno-cast-align",
"-Wno-tautological-compare",
"-Wno-dynamic-class-memaccess",
"-Wno-self-assign-field",
}
if (version >= 30200) then
buildoptions {
@ -820,7 +828,6 @@ end
end
if (version >= 30400) then
buildoptions {
"-Wno-inline-new-delete",
"-Wno-constant-logical-operand",
}
end
@ -832,11 +839,6 @@ end
}
end
else
if (_OPTIONS["SHADOW_CHECK"]=="1") then
buildoptions {
"-Wshadow"
}
end
if (version == 40201) then
buildoptions {
"-Wno-cast-align"

View File

@ -272,6 +272,15 @@ project "lua"
uuid "d9e2eed1-f1ab-4737-a6ac-863700b1a5a9"
kind "StaticLib"
-- uncomment the options below to
-- compile using c++. Do the same
-- in lsqlite3.
-- In addition comment out the "extern "C""
-- in lua.hpp and do the same in luaengine.c line 47
--options {
-- "ForceCPP",
--}
configuration { }
defines {
"LUA_COMPAT_ALL",
@ -342,6 +351,10 @@ project "lsqlite3"
uuid "1d84edab-94cf-48fb-83ee-b75bc697660e"
kind "StaticLib"
-- options {
-- "ForceCPP",
-- }
configuration { }
defines {
"LUA_COMPAT_ALL",
@ -446,7 +459,7 @@ project "sqllite3"
--------------------------------------------------
-- portmidi library objects
--------------------------------------------------
if _OPTIONS["NO_USE_MIDI"]=="0" then
if _OPTIONS["NO_USE_MIDI"]~="1" then
project "portmidi"
uuid "587f2da6-3274-4a65-86a2-f13ea315bb98"
kind "StaticLib"

View File

@ -2414,3 +2414,37 @@ if (BUSES["PSX_CONTROLLER"]~=null) then
MAME_DIR .. "src/emu/bus/psx/memcard.h",
}
end
---------------------------------------------------
--
--@src/emu/bus/nasbus/nasbus.h,BUSES += NASBUS
---------------------------------------------------
if (BUSES["NASBUS"]~=null) then
files {
MAME_DIR .. "src/emu/bus/nasbus/nasbus.c",
MAME_DIR .. "src/emu/bus/nasbus/nasbus.h",
MAME_DIR .. "src/emu/bus/nasbus/cards.c",
MAME_DIR .. "src/emu/bus/nasbus/cards.h",
MAME_DIR .. "src/emu/bus/nasbus/avc.c",
MAME_DIR .. "src/emu/bus/nasbus/avc.h",
MAME_DIR .. "src/emu/bus/nasbus/floppy.c",
MAME_DIR .. "src/emu/bus/nasbus/floppy.h",
}
end
---------------------------------------------------
--
--@src/emu/bus/cgenie/expansion.h,BUSES += CGENIE_EXPANSION
---------------------------------------------------
if (BUSES["CGENIE_EXPANSION"]~=null) then
files {
MAME_DIR .. "src/emu/bus/cgenie/expansion.c",
MAME_DIR .. "src/emu/bus/cgenie/expansion.h",
MAME_DIR .. "src/emu/bus/cgenie/carts.c",
MAME_DIR .. "src/emu/bus/cgenie/carts.h",
MAME_DIR .. "src/emu/bus/cgenie/floppy.c",
MAME_DIR .. "src/emu/bus/cgenie/floppy.h",
}
end

View File

@ -1051,6 +1051,24 @@ if (CPUS["PSX"]~=null or _OPTIONS["with-tools"]) then
table.insert(disasm_files , MAME_DIR .. "src/emu/cpu/psx/psxdasm.c")
end
--------------------------------------------------
-- Mitsubishi MELPS 4 series
---@src/emu/cpu/melps4/melps4.h,CPUS += MELPS4
--------------------------------------------------
if (CPUS["MELPS4"]~=null) then
files {
MAME_DIR .. "src/emu/cpu/melps4/melps4.c",
MAME_DIR .. "src/emu/cpu/melps4/melps4.h",
MAME_DIR .. "src/emu/cpu/melps4/m58846.c",
MAME_DIR .. "src/emu/cpu/melps4/m58846.h",
}
end
if (CPUS["MELPS4"]~=null or _OPTIONS["with-tools"]) then
table.insert(disasm_files , MAME_DIR .. "src/emu/cpu/melps4/melps4d.c")
end
--------------------------------------------------
-- Mitsubishi M37702 and M37710 (based on 65C816)
---@src/emu/cpu/m37710/m37710.h,CPUS += M37710

View File

@ -176,6 +176,8 @@ project "formats"
MAME_DIR .. "src/lib/formats/ccvf_dsk.h",
MAME_DIR .. "src/lib/formats/cgen_cas.c",
MAME_DIR .. "src/lib/formats/cgen_cas.h",
MAME_DIR .. "src/lib/formats/cgenie_dsk.c",
MAME_DIR .. "src/lib/formats/cgenie_dsk.h",
MAME_DIR .. "src/lib/formats/coco_cas.c",
MAME_DIR .. "src/lib/formats/coco_cas.h",
MAME_DIR .. "src/lib/formats/coco_dsk.c",
@ -279,6 +281,8 @@ project "formats"
MAME_DIR .. "src/lib/formats/mz_cas.h",
MAME_DIR .. "src/lib/formats/nanos_dsk.c",
MAME_DIR .. "src/lib/formats/nanos_dsk.h",
MAME_DIR .. "src/lib/formats/nascom_dsk.c",
MAME_DIR .. "src/lib/formats/nascom_dsk.h",
MAME_DIR .. "src/lib/formats/naslite_dsk.c",
MAME_DIR .. "src/lib/formats/naslite_dsk.h",
MAME_DIR .. "src/lib/formats/nes_dsk.c",

View File

@ -104,7 +104,7 @@ function mainProject(_target, _subtarget)
"jsoncpp",
"mongoose",
}
if _OPTIONS["NO_USE_MIDI"]=="0" then
if _OPTIONS["NO_USE_MIDI"]~="1" then
links {
"portmidi",
}
@ -120,7 +120,7 @@ function mainProject(_target, _subtarget)
override_resources = false;
maintargetosdoptions(_target)
maintargetosdoptions(_target,_subtarget)
includedirs {
MAME_DIR .. "src/osd",
@ -146,25 +146,27 @@ function mainProject(_target, _subtarget)
}
end
local rctarget = _subtarget
if _OPTIONS["targetos"]=="windows" and (not override_resources) then
local rcfile = MAME_DIR .. "src/" .. _target .. "/osd/".._OPTIONS["osd"].."/" .. _subtarget .. "/" .. _subtarget ..".rc"
local rcfile = MAME_DIR .. "src/" .. _target .. "/osd/".._OPTIONS["osd"].."/" .. _subtarget .. "/" .. rctarget ..".rc"
if not os.isfile(rcfile) then
rcfile = MAME_DIR .. "src/" .. _target .. "/osd/windows/" .. _subtarget .. "/" .. _subtarget ..".rc"
rcfile = MAME_DIR .. "src/" .. _target .. "/osd/windows/" .. _subtarget .. "/" .. rctarget ..".rc"
end
if os.isfile(rcfile) then
files {
rcfile,
}
dependency {
{ "$(OBJDIR)/".._subtarget ..".res" , GEN_DIR .. "/resource/" .. _subtarget .. "vers.rc", true },
{ "$(OBJDIR)/".._subtarget ..".res" , GEN_DIR .. "/resource/" .. rctarget .. "vers.rc", true },
}
else
rctarget = "mame"
files {
MAME_DIR .. "src/mame/osd/windows/mame/mame.rc",
}
dependency {
{ "$(OBJDIR)/mame.res" , GEN_DIR .. "/resource/" .. _subtarget .. "vers.rc", true },
{ "$(OBJDIR)/mame.res" , GEN_DIR .. "/resource/" .. rctarget .. "vers.rc", true },
}
end
end
@ -185,14 +187,14 @@ function mainProject(_target, _subtarget)
configuration { "mingw*" }
custombuildtask {
{ MAME_DIR .. "src/version.c" , GEN_DIR .. "/resource/" .. _subtarget .. "vers.rc", { MAME_DIR .. "src/build/verinfo.py" }, {"@echo Emitting " .. _subtarget .. "vers.rc" .. "...", PYTHON .. " $(1) -r -b " .. _subtarget .. " $(<) > $(@)" }},
{ MAME_DIR .. "src/version.c" , GEN_DIR .. "/resource/" .. rctarget .. "vers.rc", { MAME_DIR .. "src/build/verinfo.py" }, {"@echo Emitting " .. rctarget .. "vers.rc" .. "...", PYTHON .. " $(1) -r -b " .. rctarget .. " $(<) > $(@)" }},
}
configuration { "vs*" }
prebuildcommands {
"mkdir " .. path.translate(GEN_DIR .. "/resource/","\\") .. " 2>NUL",
"@echo Emitting ".. _subtarget .. "vers.rc...",
PYTHON .. " " .. path.translate(MAME_DIR .. "src/build/verinfo.py","\\") .. " -r -b " .. _subtarget .. " " .. path.translate(MAME_DIR .. "src/version.c","\\") .. " > " .. path.translate(GEN_DIR .. "/resource/" .. _subtarget .. "vers.rc", "\\") ,
"@echo Emitting ".. rctarget .. "vers.rc...",
PYTHON .. " " .. path.translate(MAME_DIR .. "src/build/verinfo.py","\\") .. " -r -b " .. rctarget .. " " .. path.translate(MAME_DIR .. "src/version.c","\\") .. " > " .. path.translate(GEN_DIR .. "/resource/" .. rctarget .. "vers.rc", "\\") ,
}

View File

@ -116,5 +116,6 @@ files {
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

@ -1,7 +1,7 @@
-- license:BSD-3-Clause
-- copyright-holders:MAMEdev Team
function maintargetosdoptions(_target)
function maintargetosdoptions(_target,_subtarget)
end

View File

@ -4,7 +4,7 @@
dofile("modules.lua")
function maintargetosdoptions(_target)
function maintargetosdoptions(_target,_subtarget)
osdmodulestargetconf()
if _OPTIONS["USE_DISPATCH_GL"]~="1" and _OPTIONS["MESA_INSTALL_ROOT"] then

View File

@ -4,7 +4,7 @@
dofile("modules.lua")
function maintargetosdoptions(_target)
function maintargetosdoptions(_target,_subtarget)
osdmodulestargetconf()
configuration { "mingw*-gcc" }

View File

@ -127,6 +127,7 @@ CPUS["ARCOMPACT"] = true
--CPUS["UCOM4"] = true
CPUS["HMCS40"] = true
--CPUS["E0C6200"] = true
--CPUS["MELPS4"] = true
--------------------------------------------------
-- specify available sound cores
@ -602,7 +603,7 @@ BUSES["ISA"] = true
--BUSES["KC"] = true
--BUSES["LPCI"] = true
--BUSES["MACPDS"] = true
--BUSES["MIDI"] = true
BUSES["MIDI"] = true
--BUSES["MEGADRIVE"] = true
--BUSES["MSX_SLOT"] = true
BUSES["NEOGEO"] = true
@ -611,7 +612,7 @@ BUSES["NEOGEO"] = true
--BUSES["O2"] = true
--BUSES["ORICEXT"] = true
--BUSES["PCE"] = true
--BUSES["PC_JOY"] = true
BUSES["PC_JOY"] = true
--BUSES["PC_KBD"] = true
--BUSES["PET"] = true
--BUSES["PLUS4"] = true
@ -2140,9 +2141,7 @@ files {
MAME_DIR .. "src/mame/video/neogeo.c",
MAME_DIR .. "src/mame/drivers/neogeo_noslot.c",
MAME_DIR .. "src/mame/video/neogeo_spr.c",
MAME_DIR .. "src/mame/machine/neoboot.c",
MAME_DIR .. "src/mame/machine/neocrypt.c",
MAME_DIR .. "src/mame/machine/neoprot.c",
MAME_DIR .. "src/mame/machine/ng_memcard.c",
}

View File

@ -127,6 +127,7 @@ CPUS["AMIS2000"] = true
CPUS["UCOM4"] = true
CPUS["HMCS40"] = true
CPUS["E0C6200"] = true
CPUS["MELPS4"] = true
--------------------------------------------------
-- specify available sound cores; some of these are
@ -578,6 +579,7 @@ BUSES["C64"] = true
BUSES["CBM2"] = true
BUSES["CBMIEC"] = true
BUSES["CENTRONICS"] = true
BUSES["CGENIE_EXPANSION"] = true
BUSES["CHANNELF"] = true
BUSES["COCO"] = true
BUSES["COLECO"] = true
@ -606,6 +608,7 @@ BUSES["MACPDS"] = true
BUSES["MIDI"] = true
BUSES["MEGADRIVE"] = true
BUSES["MSX_SLOT"] = true
BUSES["NASBUS"] = true
BUSES["NEOGEO"] = true
BUSES["NES"] = true
BUSES["NES_CTRL"] = true
@ -948,9 +951,7 @@ files {
MAME_DIR .. "src/mame/machine/315-5881_crypt.c",
MAME_DIR .. "src/mame/video/powervr2.c",
MAME_DIR .. "src/mame/drivers/neogeo.c",
MAME_DIR .. "src/mame/machine/neoboot.c",
MAME_DIR .. "src/mame/machine/neocrypt.c",
MAME_DIR .. "src/mame/machine/neoprot.c",
MAME_DIR .. "src/mame/machine/ng_memcard.c",
MAME_DIR .. "src/mame/video/neogeo.c",
MAME_DIR .. "src/mame/video/neogeo_spr.c",
@ -1754,6 +1755,7 @@ files {
createMESSProjects(_target, _subtarget, "mitsubishi")
files {
MAME_DIR .. "src/mess/drivers/hh_melps4.c",
MAME_DIR .. "src/mess/drivers/multi8.c",
MAME_DIR .. "src/mess/drivers/multi16.c",
}
@ -1790,8 +1792,6 @@ files {
createMESSProjects(_target, _subtarget, "nascom")
files {
MAME_DIR .. "src/mess/drivers/nascom1.c",
MAME_DIR .. "src/mess/machine/nascom1.c",
MAME_DIR .. "src/mess/video/nascom1.c",
}
createMESSProjects(_target, _subtarget, "ne")

View File

@ -13,7 +13,7 @@
--------------------------------------------------
-- Specify all the CPU cores necessary for the
-- drivers referenced in tiny.c.
-- drivers referenced in tiny.lst.
--------------------------------------------------
CPUS["Z80"] = true
@ -28,7 +28,7 @@ CPUS["COP400"] = true
--------------------------------------------------
-- Specify all the sound cores necessary for the
-- drivers referenced in tiny.c.
-- drivers referenced in tiny.lst.
--------------------------------------------------
SOUNDS["SAMPLES"] = true
@ -72,7 +72,7 @@ BUSES["CENTRONICS"] = true
--------------------------------------------------
-- This is the list of files that are necessary
-- for building all of the drivers referenced
-- in tiny.c
-- in tiny.lst
--------------------------------------------------
function createProjects_mame_tiny(_target, _subtarget)
@ -142,4 +142,4 @@ function linkProjects_mame_tiny(_target, _subtarget)
links {
"mame_tiny",
}
end
end

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __A78_CARTS_H
#define __A78_CARTS_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __A78_SLOT_H
#define __A78_SLOT_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
A7800 CPUWIZ's homebrew boards (MegaCart+ and VersaBoard)

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __A78_CPUWIZ_H
#define __A78_CPUWIZ_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
A7800 HighScore passthrough cart emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __A78_HISCORE_H
#define __A78_HISCORE_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
A7800 ROM cart emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __A78_ROM_H
#define __A78_ROM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
A7800 XBoarD & XM expansions emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __A78_XBOARD_H
#define __A78_XBOARD_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __A800_CARTS_H
#define __A800_CARTS_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __A800_SLOT_H
#define __A800_SLOT_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
A800 ROM cart emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __A800_OSS_H
#define __A800_OSS_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
A800/A5200/XEGS ROM cart emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __A800_ROM_H
#define __A800_ROM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
A800 SpartaDOS cart emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __A800_SPARTA_H
#define __A800_SPARTA_H

View File

@ -421,58 +421,58 @@ inline void abc77_device::key_down(int state)
// abc77_device - constructor
//-------------------------------------------------
abc77_device::abc77_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, ABC77, "Luxor ABC 77", tag, owner, clock, "abc77", __FILE__),
abc_keyboard_interface(mconfig, *this),
m_maincpu(*this, I8035_TAG),
m_discrete(*this, DISCRETE_TAG),
m_x0(*this, "X0"),
m_x1(*this, "X1"),
m_x2(*this, "X2"),
m_x3(*this, "X3"),
m_x4(*this, "X4"),
m_x5(*this, "X5"),
m_x6(*this, "X6"),
m_x7(*this, "X7"),
m_x8(*this, "X8"),
m_x9(*this, "X9"),
m_x10(*this, "X10"),
m_x11(*this, "X11"),
m_dsw(*this, "DSW"),
m_txd(1),
m_keydown(1),
m_clock(0),
m_stb(1)
abc77_device::abc77_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, ABC77, "Luxor ABC 77", tag, owner, clock, "abc77", __FILE__),
abc_keyboard_interface(mconfig, *this),
m_maincpu(*this, I8035_TAG),
m_discrete(*this, DISCRETE_TAG),
m_x0(*this, "X0"),
m_x1(*this, "X1"),
m_x2(*this, "X2"),
m_x3(*this, "X3"),
m_x4(*this, "X4"),
m_x5(*this, "X5"),
m_x6(*this, "X6"),
m_x7(*this, "X7"),
m_x8(*this, "X8"),
m_x9(*this, "X9"),
m_x10(*this, "X10"),
m_x11(*this, "X11"),
m_dsw(*this, "DSW"),
m_txd(1),
m_keydown(1),
m_clock(0),
m_stb(1)
{
}
abc77_device::abc77_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
: device_t(mconfig, type, name, tag, owner, clock, shortname, source),
abc_keyboard_interface(mconfig, *this),
m_maincpu(*this, I8035_TAG),
m_discrete(*this, DISCRETE_TAG),
m_x0(*this, "X0"),
m_x1(*this, "X1"),
m_x2(*this, "X2"),
m_x3(*this, "X3"),
m_x4(*this, "X4"),
m_x5(*this, "X5"),
m_x6(*this, "X6"),
m_x7(*this, "X7"),
m_x8(*this, "X8"),
m_x9(*this, "X9"),
m_x10(*this, "X10"),
m_x11(*this, "X11"),
m_dsw(*this, "DSW"),
m_txd(1),
m_keydown(1),
m_clock(0),
m_stb(1)
abc77_device::abc77_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) :
device_t(mconfig, type, name, tag, owner, clock, shortname, source),
abc_keyboard_interface(mconfig, *this),
m_maincpu(*this, I8035_TAG),
m_discrete(*this, DISCRETE_TAG),
m_x0(*this, "X0"),
m_x1(*this, "X1"),
m_x2(*this, "X2"),
m_x3(*this, "X3"),
m_x4(*this, "X4"),
m_x5(*this, "X5"),
m_x6(*this, "X6"),
m_x7(*this, "X7"),
m_x8(*this, "X8"),
m_x9(*this, "X9"),
m_x10(*this, "X10"),
m_x11(*this, "X11"),
m_dsw(*this, "DSW"),
m_txd(1),
m_keydown(1),
m_clock(0),
m_stb(1)
{
}
abc55_device::abc55_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: abc77_device(mconfig, ABC55, "Luxor ABC 55", tag, owner, clock, "abc55", __FILE__) { }
abc55_device::abc55_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
abc77_device(mconfig, ABC55, "Luxor ABC 55", tag, owner, clock, "abc55", __FILE__) { }
//-------------------------------------------------
@ -503,6 +503,8 @@ void abc77_device::device_reset()
m_reset_timer->adjust(attotime::from_msec(t));
m_maincpu->set_input_line(MCS48_INPUT_EA, ea ? CLEAR_LINE : ASSERT_LINE);
m_slot->write_rx(1);
}

View File

@ -542,6 +542,8 @@ void abc99_device::device_reset()
// set EA lines
m_maincpu->set_input_line(MCS48_INPUT_EA, ASSERT_LINE);
m_mousecpu->set_input_line(MCS48_INPUT_EA, ASSERT_LINE);
m_slot->write_rx(1);
}

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __APF_ROM_H
#define __APF_ROM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
APF Imagination / M-1000 cart emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __APF_SLOT_H
#define __APF_SLOT_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __ARCADIA_ROM_H
#define __ARCADIA_ROM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
Emerson Arcadia 2001 (and clones) cart emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __ARCADIA_SLOT_H
#define __ARCADIA_SLOT_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
Bally Astrocade Expansion port

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __ASTROCADE_EXP_H
#define __ASTROCADE_EXP_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __ASTROCADE_RAM_H
#define __ASTROCADE_RAM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __ASTROCADE_ROM_H
#define __ASTROCADE_ROM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
Bally Astrocade cart emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __ASTROCADE_SLOT_H
#define __ASTROCADE_SLOT_H

View File

@ -3,8 +3,6 @@
/*
* Epson LX-810L dot matrix printer emulation
* License: BSD-3-Clause
*
* IC list:
* uPD7810HG (cpu)
* E05A30 (gate array)

View File

@ -0,0 +1,13 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
EACA Colour Genie Expansion Carts
***************************************************************************/
#include "carts.h"
SLOT_INTERFACE_START( expansion_slot_carts )
SLOT_INTERFACE("floppy", CGENIE_FDC)
SLOT_INTERFACE_END

View File

@ -0,0 +1,20 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
EACA Colour Genie Expansion Carts
***************************************************************************/
#pragma once
#ifndef __CGENIE_CARTS_H__
#define __CGENIE_CARTS_H__
#include "emu.h"
#include "floppy.h"
SLOT_INTERFACE_EXTERN( expansion_slot_carts );
#endif // __CGENIE_CARTS_H__

View File

@ -0,0 +1,108 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
EACA Colour Genie Expansion Slot
50-pin slot
***************************************************************************/
#include "expansion.h"
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
const device_type EXPANSION_SLOT = &device_creator<expansion_slot_device>;
//**************************************************************************
// SLOT DEVICE
//**************************************************************************
//-------------------------------------------------
// expansion_slot_device - constructor
//-------------------------------------------------
expansion_slot_device::expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, EXPANSION_SLOT, "Expansion Slot", tag, owner, clock, "expansion_slot", __FILE__),
device_slot_interface(mconfig, *this),
m_program(NULL),
m_io(NULL),
m_cart(NULL),
m_int_handler(*this),
m_nmi_handler(*this),
m_reset_handler(*this)
{
}
//-------------------------------------------------
// expansion_slot_device - destructor
//-------------------------------------------------
expansion_slot_device::~expansion_slot_device()
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void expansion_slot_device::device_start()
{
// resolve callbacks
m_int_handler.resolve_safe();
m_nmi_handler.resolve_safe();
m_reset_handler.resolve_safe();
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void expansion_slot_device::device_reset()
{
}
//-------------------------------------------------
// set_program_space - set address space we are attached to
//-------------------------------------------------
void expansion_slot_device::set_program_space(address_space *program)
{
m_program = program;
}
//-------------------------------------------------
// set_io_space - set address space we are attached to
//-------------------------------------------------
void expansion_slot_device::set_io_space(address_space *io)
{
m_io = io;
}
//**************************************************************************
// CARTRIDGE INTERFACE
//**************************************************************************
//-------------------------------------------------
// device_expansion_interface - constructor
//-------------------------------------------------
device_expansion_interface::device_expansion_interface(const machine_config &mconfig, device_t &device) :
device_slot_card_interface(mconfig, device)
{
m_slot = dynamic_cast<expansion_slot_device *>(device.owner());
}
//-------------------------------------------------
// ~device_expansion_interface - destructor
//-------------------------------------------------
device_expansion_interface::~device_expansion_interface()
{
}

View File

@ -0,0 +1,128 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
EACA Colour Genie Expansion Slot
50-pin slot
1 GND 26 /MREQ
2 A8 27 /WR
3 A7 28 /C4
4 A6 29 (not used)
5 A9 30 /C1
6 A5 31 BD3
7 A4 32 /C3
8 A3 33 (not used)
9 A10 34 /C2
10 A2 35 DB6
11 A11 36 /RD
12 A1 37 BD4
13 A0 38 (not used)
14 A12 39 BD7
15 A14 40 (not used)
16 A13 41 BD5
17 /RFSH 42 (not useD)
18 A15 43 BD0
19 /INT 44 (not used)
20 /BUSRQ 45 BD2
21 /NMI 46 /RESET
22 /WAIT 47 /M1
23 /HALT 48 /IORQ
24 /BUSAK 49 BD1
25 /ROMDIS 50 +5V
***************************************************************************/
#pragma once
#ifndef __CGENIE_EXPANSION_H__
#define __CGENIE_EXPANSION_H__
#include "emu.h"
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_EXPANSION_SLOT_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, EXPANSION_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(expansion_slot_carts, NULL, false)
#define MCFG_EXPANSION_SLOT_INT_HANDLER(_devcb) \
devcb = &expansion_slot_device::set_int_handler(*device, DEVCB_##_devcb);
#define MCFG_EXPANSION_SLOT_NMI_HANDLER(_devcb) \
devcb = &expansion_slot_device::set_nmi_handler(*device, DEVCB_##_devcb);
#define MCFG_EXPANSION_SLOT_RESET_HANDLER(_devcb) \
devcb = &expansion_slot_device::set_reset_handler(*device, DEVCB_##_devcb);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class device_expansion_interface;
class expansion_slot_device : public device_t, public device_slot_interface
{
public:
// construction/destruction
expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual ~expansion_slot_device();
void set_program_space(address_space *program);
void set_io_space(address_space *io);
// callbacks
template<class _Object> static devcb_base &set_int_handler(device_t &device, _Object object)
{ return downcast<expansion_slot_device &>(device).m_int_handler.set_callback(object); }
template<class _Object> static devcb_base &set_nmi_handler(device_t &device, _Object object)
{ return downcast<expansion_slot_device &>(device).m_nmi_handler.set_callback(object); }
template<class _Object> static devcb_base &set_reset_handler(device_t &device, _Object object)
{ return downcast<expansion_slot_device &>(device).m_reset_handler.set_callback(object); }
// called from cart device
DECLARE_WRITE_LINE_MEMBER( int_w ) { m_int_handler(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_handler(state); }
DECLARE_WRITE_LINE_MEMBER( reset_w ) { m_reset_handler(state); }
address_space *m_program;
address_space *m_io;
protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
device_expansion_interface *m_cart;
private:
devcb_write_line m_int_handler;
devcb_write_line m_nmi_handler;
devcb_write_line m_reset_handler;
};
// class representing interface-specific live expansion device
class device_expansion_interface : public device_slot_card_interface
{
public:
// construction/destruction
device_expansion_interface(const machine_config &mconfig, device_t &device);
virtual ~device_expansion_interface();
protected:
expansion_slot_device *m_slot;
};
// device type definition
extern const device_type EXPANSION_SLOT;
// include here so drivers don't need to
#include "carts.h"
#endif // __CGENIE_EXPANSION_H__

193
src/emu/bus/cgenie/floppy.c Normal file
View File

@ -0,0 +1,193 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
EACA Colour Genie Floppy Disc Controller
TODO:
- What's the exact FD1793 model?
- How does it turn off the motor?
- How does it switch between FM/MFM?
***************************************************************************/
#include "floppy.h"
#include "formats/cgenie_dsk.h"
#include "bus/generic/carts.h"
//**************************************************************************
// CONSTANTS/MACROS
//**************************************************************************
#define VERBOSE 0
// set to 1 to test fm disk formats
#define FM_MODE 0
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
const device_type CGENIE_FDC = &device_creator<cgenie_fdc_device>;
FLOPPY_FORMATS_MEMBER( cgenie_fdc_device::floppy_formats )
FLOPPY_CGENIE_FORMAT
FLOPPY_FORMATS_END
static SLOT_INTERFACE_START( cgenie_floppies )
SLOT_INTERFACE("sssd", FLOPPY_525_SSSD)
SLOT_INTERFACE("sd", FLOPPY_525_SD)
SLOT_INTERFACE("ssdd", FLOPPY_525_SSDD)
SLOT_INTERFACE("dd", FLOPPY_525_DD)
SLOT_INTERFACE("ssqd", FLOPPY_525_SSQD)
SLOT_INTERFACE("qd", FLOPPY_525_QD)
SLOT_INTERFACE_END
//-------------------------------------------------
// rom_region - device-specific ROM region
//-------------------------------------------------
ROM_START( cgenie_fdc )
ROM_REGION(0x3000, "software", 0)
ROM_LOAD("cgdos.rom", 0x0000, 0x2000, CRC(2a96cf74) SHA1(6dcac110f87897e1ee7521aefbb3d77a14815893))
ROM_END
const rom_entry *cgenie_fdc_device::device_rom_region() const
{
return ROM_NAME( cgenie_fdc );
}
//-------------------------------------------------
// machine_config_additions - device-specific
// machine configurations
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( cgenie_fdc )
MCFG_FD1793x_ADD("fd1793", XTAL_16MHz / 4 / 4)
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(cgenie_fdc_device, intrq_w))
MCFG_FLOPPY_DRIVE_ADD("fd1793:0", cgenie_floppies, "ssdd", cgenie_fdc_device::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fd1793:1", cgenie_floppies, "ssdd", cgenie_fdc_device::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fd1793:2", cgenie_floppies, NULL, cgenie_fdc_device::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fd1793:3", cgenie_floppies, NULL, cgenie_fdc_device::floppy_formats)
// MCFG_SOFTWARE_LIST_ADD("floppy_list", "cgenie_flop")
MCFG_GENERIC_SOCKET_ADD("socket", generic_plain_slot, "cgenie_socket")
MCFG_GENERIC_EXTENSIONS("bin,rom")
MCFG_GENERIC_LOAD(cgenie_fdc_device, socket_load)
MCFG_SOFTWARE_LIST_ADD("cart_list", "cgenie_cart")
MACHINE_CONFIG_END
machine_config_constructor cgenie_fdc_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( cgenie_fdc );
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// cgenie_fdc_device - constructor
//-------------------------------------------------
cgenie_fdc_device::cgenie_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, CGENIE_FDC, "Colour Genie Floppy Disc Controller", tag, owner, clock, "cgenie_fdc", __FILE__),
device_expansion_interface(mconfig, *this),
m_fdc(*this, "fd1793"),
m_floppy0(*this, "fd1793:0"),
m_floppy1(*this, "fd1793:1"),
m_floppy2(*this, "fd1793:2"),
m_floppy3(*this, "fd1793:3"),
m_socket(*this, "socket"),
m_floppy(NULL)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void cgenie_fdc_device::device_start()
{
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void cgenie_fdc_device::device_reset()
{
// dos rom
m_slot->m_program->install_rom(0xc000, 0xdfff, memregion("software")->base());
// memory mapped i/o
m_slot->m_program->install_write_handler(0xffe0, 0xffe3, 0, 0x10, write8_delegate(FUNC(cgenie_fdc_device::select_w), this));
m_slot->m_program->install_read_handler( 0xffec, 0xffef, 0, 0x10, read8_delegate(FUNC(fd1793_t::read), m_fdc.target()));
m_slot->m_program->install_write_handler(0xffec, 0xffef, 0, 0x10, write8_delegate(FUNC(fd1793_t::write), m_fdc.target()));
// map extra socket
if (m_socket->exists())
{
m_slot->m_program->install_read_handler(0xe000, 0xefff, read8_delegate(FUNC(generic_slot_device::read_rom), (generic_slot_device *) m_socket));
}
}
//**************************************************************************
// IMPLEMENTATION
//**************************************************************************
DEVICE_IMAGE_LOAD_MEMBER( cgenie_fdc_device, socket_load )
{
UINT32 size = m_socket->common_get_size("rom");
if (size > 0x1000)
{
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported ROM size");
return IMAGE_INIT_FAIL;
}
m_socket->rom_alloc(0x1000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
m_socket->common_load_rom(m_socket->get_rom_base(), size, "rom");
return IMAGE_INIT_PASS;
}
WRITE_LINE_MEMBER( cgenie_fdc_device::intrq_w )
{
if (VERBOSE)
logerror("cgenie_fdc_device::intrq_w: %d\n", state);
// forward to host
m_slot->int_w(state);
}
WRITE8_MEMBER( cgenie_fdc_device::select_w )
{
if (VERBOSE)
logerror("cgenie_fdc_device::motor_w: 0x%02x\n", data);
if (FM_MODE)
m_fdc->dden_w(1);
m_floppy = NULL;
if (BIT(data, 0)) m_floppy = m_floppy0->get_device();
if (BIT(data, 1)) m_floppy = m_floppy1->get_device();
if (BIT(data, 2)) m_floppy = m_floppy2->get_device();
if (BIT(data, 3)) m_floppy = m_floppy3->get_device();
m_fdc->set_floppy(m_floppy);
if (m_floppy)
{
m_floppy->ss_w(BIT(data, 4));
m_floppy->mon_w(0);
}
}

View File

@ -0,0 +1,59 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
EACA Colour Genie Floppy Controller Cartridge
***************************************************************************/
#pragma once
#ifndef __CGENIE_EXPANSION_FLOPPY_H__
#define __CGENIE_EXPANSION_FLOPPY_H__
#include "emu.h"
#include "expansion.h"
#include "machine/wd_fdc.h"
#include "bus/generic/slot.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> floppy_controller_device
class cgenie_fdc_device : public device_t, public device_expansion_interface
{
public:
// construction/destruction
cgenie_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
DECLARE_WRITE_LINE_MEMBER(intrq_w);
DECLARE_WRITE8_MEMBER(select_w);
DECLARE_FLOPPY_FORMATS(floppy_formats);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(socket_load);
protected:
virtual const rom_entry *device_rom_region() const;
virtual machine_config_constructor device_mconfig_additions() const;
virtual void device_start();
virtual void device_reset();
private:
required_device<fd1793_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<generic_slot_device> m_socket;
floppy_image_device *m_floppy;
};
// device type definition
extern const device_type CGENIE_FDC;
#endif // __CGENIE_EXPANSION_FLOPPY_H__

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __CHANF_ROM_H
#define __CHANF_ROM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
Fairchild Channel F cart emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __CHANF_SLOT_H
#define __CHANF_SLOT_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __CRVISION_ROM_H
#define __CRVISION_ROM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
V-Tech CreatiVision cart emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __CRVISION_SLOT_H
#define __CRVISION_SLOT_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta, Wilbert Pol
// copyright-holders:Fabio Priuli, Wilbert Pol
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta, Wilbert Pol
// copyright-holders:Fabio Priuli, Wilbert Pol
#ifndef __GB_SLOT_H
#define __GB_SLOT_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta, Wilbert Pol
// copyright-holders:Fabio Priuli, Wilbert Pol
/***********************************************************************************************************
Game Boy carts with MBC (Memory Bank Controller)
@ -26,8 +26,8 @@ const device_type GB_ROM_MBC6 = &device_creator<gb_rom_mbc6_device>;
const device_type GB_ROM_MBC7 = &device_creator<gb_rom_mbc7_device>;
const device_type GB_ROM_M161_M12 = &device_creator<gb_rom_m161_device>;
const device_type GB_ROM_MMM01 = &device_creator<gb_rom_mmm01_device>;
const device_type GB_ROM_SACHEN1 = &device_creator<gb_rom_sachen1_device>;
const device_type GB_ROM_SACHEN2 = &device_creator<gb_rom_sachen1_device>; // Just a placeholder for the moment...
const device_type GB_ROM_SACHEN1 = &device_creator<gb_rom_sachen_mmc1_device>;
const device_type GB_ROM_SACHEN2 = &device_creator<gb_rom_sachen_mmc2_device>;
const device_type GB_ROM_188IN1 = &device_creator<gb_rom_188in1_device>;
const device_type GB_ROM_SINTAX = &device_creator<gb_rom_sintax_device>;
const device_type GB_ROM_CHONGWU = &device_creator<gb_rom_chongwu_device>;
@ -97,8 +97,18 @@ gb_rom_mmm01_device::gb_rom_mmm01_device(const machine_config &mconfig, const ch
{
}
gb_rom_sachen1_device::gb_rom_sachen1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: gb_rom_mbc1_device(mconfig, GB_ROM_SACHEN1, "GB Sachen MMC1 Carts", tag, owner, clock, "gb_rom_sachen1", __FILE__)
gb_rom_sachen_mmc1_device::gb_rom_sachen_mmc1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: gb_rom_mbc_device(mconfig, GB_ROM_SACHEN1, "GB Sachen MMC1 Carts", tag, owner, clock, "gb_rom_sachen1", __FILE__)
{
}
gb_rom_sachen_mmc1_device::gb_rom_sachen_mmc1_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
: gb_rom_mbc_device(mconfig, type, name, tag, owner, clock, shortname, source)
{
}
gb_rom_sachen_mmc2_device::gb_rom_sachen_mmc2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: gb_rom_sachen_mmc1_device(mconfig, GB_ROM_SACHEN2, "GB Sachen MMC2 Carts", tag, owner, clock, "gb_rom_sachen2", __FILE__)
{
}
@ -233,18 +243,40 @@ void gb_rom_mmm01_device::device_reset()
m_reg = 0;
}
void gb_rom_sachen1_device::device_start()
void gb_rom_sachen_mmc1_device::device_start()
{
shared_start();
save_item(NAME(m_base_bank));
save_item(NAME(m_mask));
save_item(NAME(m_mode));
save_item(NAME(m_unlock_cnt));
}
void gb_rom_sachen1_device::device_reset()
void gb_rom_sachen_mmc1_device::device_reset()
{
shared_reset();
m_base_bank = 0;
m_mask = 0;
m_base_bank = 0x00;
m_mask = 0x00;
m_mode = MODE_LOCKED;
m_unlock_cnt = 0x00;
}
void gb_rom_sachen_mmc2_device::device_start()
{
shared_start();
save_item(NAME(m_base_bank));
save_item(NAME(m_mask));
save_item(NAME(m_mode));
save_item(NAME(m_unlock_cnt));
}
void gb_rom_sachen_mmc2_device::device_reset()
{
shared_reset();
m_base_bank = 0x00;
m_mask = 0x00;
m_mode = MODE_LOCKED_DMG;
m_unlock_cnt = 0x00;
}
void gb_rom_sintax_device::device_start()
@ -310,18 +342,18 @@ WRITE8_MEMBER(gb_rom_mbc_device::write_ram)
READ8_MEMBER(gb_rom_mbc1_device::read_rom)
{
if (offset < 0x4000)
{
if (offset & 0x4000) /* RB1 */
return m_rom[rom_bank_map[(m_ram_bank << (5 + m_shift)) | m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
else
{ /* RB0 */
int bank = (m_mode == MODE_4M_256k) ? (m_ram_bank << (5 + m_shift)) : 0;
return m_rom[rom_bank_map[bank] * 0x4000 + (offset & 0x3fff)];
}
else
return m_rom[rom_bank_map[(m_ram_bank << (5 + m_shift)) | m_latch_bank2] * 0x4000 + (offset & 0x3fff)];
}
WRITE8_MEMBER(gb_rom_mbc1_device::write_bank)
{
// the mapper only uses inputs A13-A15
// the mapper only uses inputs A15..A13
switch (offset & 0xe000)
{
case 0x0000: // RAM Enable Register
@ -395,7 +427,7 @@ WRITE8_MEMBER(gb_rom_mbc2_device::write_bank)
READ8_MEMBER(gb_rom_mbc2_device::read_ram)
{
if (!m_ram.empty() && m_ram_enable)
return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x01ff)] | 0xF0;
else
return 0xff;
}
@ -403,7 +435,7 @@ READ8_MEMBER(gb_rom_mbc2_device::read_ram)
WRITE8_MEMBER(gb_rom_mbc2_device::write_ram)
{
if (!m_ram.empty() && m_ram_enable)
m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x01ff)] = data & 0x0F;
}
@ -661,6 +693,14 @@ WRITE8_MEMBER(gb_rom_m161_device::write_bank)
// MMM01
// This mmm01 implementation is mostly guess work, no clue how correct it all is
/* TODO: This implementation is wrong. Tauwasser
*
* Register 0: Map Latch, AA Mask, RAM Enable
* Register 1: EA1..EA0, RA18..RA14
* Register 2: ??, AA18..AA15, AA14..AA13
* Register 3: AA Multiplex, RA Mask, ???, MBC1 Mode
*
*/
READ8_MEMBER(gb_rom_mmm01_device::read_rom)
{
@ -704,37 +744,140 @@ WRITE8_MEMBER(gb_rom_mmm01_device::write_bank)
}
}
// Sachen MMC1
READ8_MEMBER(gb_rom_sachen1_device::read_rom)
READ8_MEMBER(gb_rom_sachen_mmc1_device::read_rom)
{
if (offset < 0x4000)
return m_rom[rom_bank_map[(m_base_bank & m_mask) | (m_latch_bank & ~m_mask)] * 0x4000 + (offset & 0x3fff)];
UINT16 off_edit = offset;
/* Wait for 0x31 transitions of A15 (hi -> lo), i.e. ROM accesses; A15 = HI while in bootstrap */
/* This is 0x31 transitions, because we increment counter _after_ checking it */
if (m_unlock_cnt == 0x30)
m_mode = MODE_UNLOCKED;
else
m_unlock_cnt++;
/* Logo Switch */
if (m_mode == MODE_LOCKED)
off_edit |= 0x80;
/* Header Un-Scramble */
if ((off_edit & 0xFF00) == 0x0100) {
off_edit &= 0xFFAC;
off_edit |= ((offset >> 6) & 0x01) << 0;
off_edit |= ((offset >> 4) & 0x01) << 1;
off_edit |= ((offset >> 1) & 0x01) << 4;
off_edit |= ((offset >> 0) & 0x01) << 6;
}
//logerror("read from %04X (%04X)\n", offset, off_edit);
if (offset & 0x4000) /* RB1 */
return m_rom[rom_bank_map[(m_base_bank & m_mask) | (m_latch_bank2 & ~m_mask)] * 0x4000 + (offset & 0x3fff)];
else /* RB0 */
return m_rom[rom_bank_map[(m_base_bank & m_mask) | (m_latch_bank & ~m_mask)] * 0x4000 + (off_edit & 0x3fff)];
}
WRITE8_MEMBER(gb_rom_sachen1_device::write_bank)
WRITE8_MEMBER(gb_rom_sachen_mmc1_device::write_bank)
{
if (offset < 0x2000) // Base ROM Bank register
/* Only A15..A6, A4, A1..A0 are connected */
/* We only decode upper three bits */
switch ((offset & 0xFFD3) & 0xE000)
{
if ((m_latch_bank2 & 0x30) == 0x30 && data)
m_base_bank = data & 0x0f;
//logerror("write to base bank %X - %X\n", data, (m_base_bank & m_mask) | (m_latch_bank2 & ~m_mask));
case 0x0000: /* Base ROM Bank Register */
if ((m_latch_bank2 & 0x30) == 0x30)
m_base_bank = data;
//logerror("write to base bank %X - %X\n", data, (m_base_bank & m_mask) | (m_latch_bank2 & ~m_mask));
break;
case 0x2000: /* ROM Bank Register */
m_latch_bank2 = data ? data : 0x01;
//logerror("write to latch %X - %X\n", data, (m_base_bank & m_mask) | (m_latch_bank2 & ~m_mask));
break;
case 0x4000: /* ROM Bank Mask Register */
if ((m_latch_bank2 & 0x30) == 0x30)
m_mask = data;
//logerror("write to mask %X - %X\n", data, (m_base_bank & m_mask) | (m_latch_bank2 & ~m_mask));
break;
case 0x6000:
/* nothing happens when writing to 0x6000-0x7fff, as verified by Tauwasser */
break;
default:
//logerror("write to unknown/unmapped area %04X <= %02X\n", offset, data);
/* did not extensively test other unlikely ranges */
break;
}
else if (offset < 0x4000) // ROM Bank Register
{
m_latch_bank2 = data ? data : 1;
//logerror("write to latch %X - %X\n", data, (m_base_bank & m_mask) | (m_latch_bank2 & ~m_mask));
}
// Sachen MMC2
READ8_MEMBER(gb_rom_sachen_mmc2_device::read_rom)
{
UINT16 off_edit = offset;
/* Wait for 0x30 transitions of A15 (lo -> hi), i.e. ROM accesses; A15 = HI while in bootstrap */
/* This is 0x30 transitions, because we increment counter _after_ checking it, but A15 lo -> hi*/
/* transition means first read (hi -> lo transition) must not count */
if (m_unlock_cnt == 0x30 && m_mode == MODE_LOCKED_DMG) {
m_mode = MODE_LOCKED_CGB;
m_unlock_cnt = 0x00;
} else if (m_unlock_cnt == 0x30 && m_mode == MODE_LOCKED_CGB) {
m_mode = MODE_UNLOCKED;
}
else if (offset < 0x6000) // ROM bank mask register
{
if ((m_latch_bank2 & 0x30) == 0x30)
m_mask = data;
//logerror("write to mask %X - %X\n", data, (m_base_bank & m_mask) | (m_latch_bank2 & ~m_mask));
if (m_unlock_cnt != 0x30)
m_unlock_cnt++;
/* Logo Switch */
if (m_mode == MODE_LOCKED_CGB)
off_edit |= 0x80;
/* Header Un-Scramble */
if ((off_edit & 0xFF00) == 0x0100) {
off_edit &= 0xFFAC;
off_edit |= ((offset >> 6) & 0x01) << 0;
off_edit |= ((offset >> 4) & 0x01) << 1;
off_edit |= ((offset >> 1) & 0x01) << 4;
off_edit |= ((offset >> 0) & 0x01) << 6;
}
// nothing happens when writing to 0x6000-0x7fff, as verified by Tauwasser
//logerror("read from %04X (%04X) cnt: %02X\n", offset, off_edit, m_unlock_cnt);
if (offset & 0x4000) /* RB1 */
return m_rom[rom_bank_map[(m_base_bank & m_mask) | (m_latch_bank2 & ~m_mask)] * 0x4000 + (offset & 0x3fff)];
else /* RB0 */
return m_rom[rom_bank_map[(m_base_bank & m_mask) | (m_latch_bank & ~m_mask)] * 0x4000 + (off_edit & 0x3fff)];
}
READ8_MEMBER(gb_rom_sachen_mmc2_device::read_ram)
{
if (m_mode == MODE_LOCKED_DMG) {
m_unlock_cnt = 0x00;
m_mode = MODE_LOCKED_CGB;
}
return 0xFF;
}
WRITE8_MEMBER(gb_rom_sachen_mmc2_device::write_ram)
{
if (m_mode == MODE_LOCKED_DMG) {
m_unlock_cnt = 0x00;
m_mode = MODE_LOCKED_CGB;
}
}

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta, Wilbert Pol
// copyright-holders:Fabio Priuli, Wilbert Pol
#ifndef __GB_MBC_H
#define __GB_MBC_H
@ -191,14 +191,20 @@ public:
UINT8 m_bank_mask, m_bank, m_reg;
};
// ======================> gb_rom_sachen1_device
// ======================> gb_rom_sachen_mmc1_device
class gb_rom_sachen1_device : public gb_rom_mbc1_device
class gb_rom_sachen_mmc1_device : public gb_rom_mbc_device
{
public:
enum {
MODE_LOCKED,
MODE_UNLOCKED
};
// construction/destruction
gb_rom_sachen1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
gb_rom_sachen_mmc1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
gb_rom_sachen_mmc1_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
// device-level overrides
virtual void device_start();
@ -209,7 +215,32 @@ public:
virtual DECLARE_READ8_MEMBER(read_ram) { return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write_ram) { }
UINT8 m_base_bank, m_mask;
UINT8 m_base_bank, m_mask, m_mode, m_unlock_cnt;
};
// ======================> gb_rom_sachen_mmc2_device
class gb_rom_sachen_mmc2_device : public gb_rom_sachen_mmc1_device
{
public:
enum {
MODE_LOCKED_DMG,
MODE_LOCKED_CGB,
MODE_UNLOCKED
};
// construction/destruction
gb_rom_sachen_mmc2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual DECLARE_READ8_MEMBER(read_rom);
virtual DECLARE_READ8_MEMBER(read_ram);
virtual DECLARE_WRITE8_MEMBER(write_ram);
};
// ======================> gb_rom_188in1_device

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta, Wilbert Pol
// copyright-holders:Fabio Priuli, Wilbert Pol
/***********************************************************************************************************
Game Boy cart emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta, Wilbert Pol
// copyright-holders:Fabio Priuli, Wilbert Pol
#ifndef __GB_ROM_H
#define __GB_ROM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/**********************************************************************
Sega Game Gear EXT port emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/**********************************************************************
Sega Game Gear EXT port emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/**********************************************************************
Sega Game Gear "SMS Controller Adaptor" emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/**********************************************************************
Sega Game Gear "SMS Controller Adaptor" emulation

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:R. Belmont,Ryan Holtz,etabeta
// copyright-holders:R. Belmont,Ryan Holtz,Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:R. Belmont,Ryan Holtz,etabeta
// copyright-holders:R. Belmont,Ryan Holtz,Fabio Priuli
#ifndef __GBA_SLOT_H
#define __GBA_SLOT_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:R. Belmont,Ryan Holtz,etabeta
// copyright-holders:R. Belmont,Ryan Holtz,Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:R. Belmont,Ryan Holtz,etabeta
// copyright-holders:R. Belmont,Ryan Holtz,Fabio Priuli
#ifndef __GBA_ROM_H
#define __GBA_ROM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/**********************************************************************
Generic ROM / RAM socket slots

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/**********************************************************************
Generic ROM/RAM socket slots

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __GENERIC_RAM_H
#define __GENERIC_RAM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __GENERIC_ROM_H
#define __GENERIC_ROM_H

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
/***********************************************************************************************************
Generic ROM / RAM Socket and Cartslot device

View File

@ -1,5 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:etabeta
// copyright-holders:Fabio Priuli
#ifndef __GENERIC_SLOT_H
#define __GENERIC_SLOT_H

View File

@ -170,10 +170,10 @@ const rom_entry *c4040_device::device_rom_region() const
static ADDRESS_MAP_START( c2040_main_mem, AS_PROGRAM, 8, c2040_device )
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x0100) AM_RAM // 6532 #1
AM_RANGE(0x0080, 0x00ff) AM_MIRROR(0x0100) AM_RAM // 6532 #2
AM_RANGE(0x0200, 0x021f) AM_MIRROR(0x0d60) AM_DEVREADWRITE(M6532_0_TAG, riot6532_device, read, write)
AM_RANGE(0x0280, 0x029f) AM_MIRROR(0x0d60) AM_DEVREADWRITE(M6532_1_TAG, riot6532_device, read, write)
AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x0100) AM_DEVICE(M6532_0_TAG, mos6532_t, ram_map)
AM_RANGE(0x0080, 0x00ff) AM_MIRROR(0x0100) AM_DEVICE(M6532_1_TAG, mos6532_t, ram_map)
AM_RANGE(0x0200, 0x021f) AM_MIRROR(0x0d60) AM_DEVICE(M6532_0_TAG, mos6532_t, io_map)
AM_RANGE(0x0280, 0x029f) AM_MIRROR(0x0d60) AM_DEVICE(M6532_1_TAG, mos6532_t, io_map)
AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0x0c00) AM_RAM AM_SHARE("share1")
AM_RANGE(0x2000, 0x23ff) AM_MIRROR(0x0c00) AM_RAM AM_SHARE("share2")
AM_RANGE(0x3000, 0x33ff) AM_MIRROR(0x0c00) AM_RAM AM_SHARE("share3")
@ -188,9 +188,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( c2040_fdc_mem, AS_PROGRAM, 8, c2040_device )
ADDRESS_MAP_GLOBAL_MASK(0x1fff)
AM_RANGE(0x0000, 0x003f) AM_MIRROR(0x0300) AM_RAM // 6530
AM_RANGE(0x0040, 0x004f) AM_MIRROR(0x0330) AM_DEVREADWRITE(M6522_TAG, via6522_device, read, write)
AM_RANGE(0x0080, 0x008f) AM_MIRROR(0x0330) AM_DEVREADWRITE(M6530_TAG, mos6530_device, read, write)
AM_RANGE(0x0000, 0x003f) AM_MIRROR(0x0300) AM_DEVICE(M6530_TAG, mos6530_t, ram_map)
AM_RANGE(0x0040, 0x004f) AM_MIRROR(0x0330) AM_DEVICE(M6522_TAG, via6522_device, map)
AM_RANGE(0x0080, 0x008f) AM_MIRROR(0x0330) AM_DEVICE(M6530_TAG, mos6530_t, io_map)
AM_RANGE(0x0400, 0x07ff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x0800, 0x0bff) AM_RAM AM_SHARE("share2")
AM_RANGE(0x0c00, 0x0fff) AM_RAM AM_SHARE("share3")
@ -404,69 +404,6 @@ WRITE8_MEMBER( c2040_device::via_pb_w )
}
//-------------------------------------------------
// mos6530 uk3
//-------------------------------------------------
READ8_MEMBER( c2040_device::miot_pb_r )
{
/*
bit description
PB0
PB1
PB2
PB3 WPS
PB4
PB5
PB6 SYNC
PB7
*/
UINT8 data = 0;
// write protect sense
data |= m_fdc->wps_r() << 3;
// SYNC detected
data |= m_fdc->sync_r() << 6;
return data;
}
WRITE8_MEMBER( c2040_device::miot_pb_w )
{
/*
bit description
PB0 DRV SEL
PB1 DS0
PB2 DS1
PB3
PB4
PB5
PB6
PB7 M6504 IRQ
*/
// drive select
m_fdc->drv_sel_w(BIT(data, 0));
// density select
m_fdc->ds_w((data >> 1) & 0x03);
// interrupt
if (m_miot_irq != BIT(data, 7))
{
m_fdccpu->set_input_line(M6502_IRQ_LINE, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE);
m_miot_irq = BIT(data, 7);
}
}
//-------------------------------------------------
// SLOT_INTERFACE( c2040_floppies )
//-------------------------------------------------
@ -515,16 +452,16 @@ static MACHINE_CONFIG_FRAGMENT( c2040 )
MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_16MHz/16)
MCFG_CPU_PROGRAM_MAP(c2040_main_mem)
MCFG_DEVICE_ADD(M6532_0_TAG, RIOT6532, XTAL_16MHz/16)
MCFG_RIOT6532_IN_PA_CB(READ8(c2040_device, dio_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c2040_device, dio_w))
MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532n, XTAL_16MHz/16)
MCFG_MOS6530n_IN_PA_CB(READ8(c2040_device, dio_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c2040_device, dio_w))
MCFG_DEVICE_ADD(M6532_1_TAG, RIOT6532, XTAL_16MHz/16)
MCFG_RIOT6532_IN_PA_CB(READ8(c2040_device, riot1_pa_r))
MCFG_RIOT6532_OUT_PA_CB(WRITE8(c2040_device, riot1_pa_w))
MCFG_RIOT6532_IN_PB_CB(READ8(c2040_device, riot1_pb_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c2040_device, riot1_pb_w))
MCFG_RIOT6532_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532n, XTAL_16MHz/16)
MCFG_MOS6530n_IN_PA_CB(READ8(c2040_device, riot1_pa_r))
MCFG_MOS6530n_OUT_PA_CB(WRITE8(c2040_device, riot1_pa_w))
MCFG_MOS6530n_IN_PB_CB(READ8(c2040_device, riot1_pb_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c2040_device, riot1_pb_w))
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
// controller
MCFG_CPU_ADD(M6504_TAG, M6504, XTAL_16MHz/16)
@ -536,12 +473,16 @@ static MACHINE_CONFIG_FRAGMENT( c2040 )
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, mode_sel_w))
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, rw_sel_w))
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_16MHz/16)
MCFG_MOS6530_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
MCFG_MOS6530_IN_PB_CB(READ8(c2040_device, miot_pb_r))
MCFG_MOS6530_OUT_PB_CB(WRITE8(c2040_device, miot_pb_w))
MCFG_DEVICE_ADD(M6530_TAG, MOS6530n, XTAL_16MHz/16)
MCFG_MOS6530n_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, drv_sel_w))
MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds0_w))
MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds1_w))
MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c2040_fdc_t, wps_r))
MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL_16MHz)
MCFG_C2040_SYNC_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_t, pb6_w))
MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1))
MCFG_C2040_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", c2040_floppies, "525ssqd", c2040_device::floppy_formats)
@ -569,16 +510,16 @@ static MACHINE_CONFIG_FRAGMENT( c3040 )
MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_16MHz/16)
MCFG_CPU_PROGRAM_MAP(c2040_main_mem)
MCFG_DEVICE_ADD(M6532_0_TAG, RIOT6532, XTAL_16MHz/16)
MCFG_RIOT6532_IN_PA_CB(READ8(c2040_device, dio_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c2040_device, dio_w))
MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532n, XTAL_16MHz/16)
MCFG_MOS6530n_IN_PA_CB(READ8(c2040_device, dio_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c2040_device, dio_w))
MCFG_DEVICE_ADD(M6532_1_TAG, RIOT6532, XTAL_16MHz/16)
MCFG_RIOT6532_IN_PA_CB(READ8(c2040_device, riot1_pa_r))
MCFG_RIOT6532_OUT_PA_CB(WRITE8(c2040_device, riot1_pa_w))
MCFG_RIOT6532_IN_PB_CB(READ8(c2040_device, riot1_pb_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c2040_device, riot1_pb_w))
MCFG_RIOT6532_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532n, XTAL_16MHz/16)
MCFG_MOS6530n_IN_PA_CB(READ8(c2040_device, riot1_pa_r))
MCFG_MOS6530n_OUT_PA_CB(WRITE8(c2040_device, riot1_pa_w))
MCFG_MOS6530n_IN_PB_CB(READ8(c2040_device, riot1_pb_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c2040_device, riot1_pb_w))
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
// controller
MCFG_CPU_ADD(M6504_TAG, M6504, XTAL_16MHz/16)
@ -590,12 +531,16 @@ static MACHINE_CONFIG_FRAGMENT( c3040 )
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, mode_sel_w))
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, rw_sel_w))
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_16MHz/16)
MCFG_MOS6530_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
MCFG_MOS6530_IN_PB_CB(READ8(c2040_device, miot_pb_r))
MCFG_MOS6530_OUT_PB_CB(WRITE8(c2040_device, miot_pb_w))
MCFG_DEVICE_ADD(M6530_TAG, MOS6530n, XTAL_16MHz/16)
MCFG_MOS6530n_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, drv_sel_w))
MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds0_w))
MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds1_w))
MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c2040_fdc_t, wps_r))
MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL_16MHz)
MCFG_C2040_SYNC_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_t, pb6_w))
MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1))
MCFG_C2040_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", c2040_floppies, "525ssqd", c3040_device::floppy_formats)
@ -623,16 +568,16 @@ static MACHINE_CONFIG_FRAGMENT( c4040 )
MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_16MHz/16)
MCFG_CPU_PROGRAM_MAP(c2040_main_mem)
MCFG_DEVICE_ADD(M6532_0_TAG, RIOT6532, XTAL_16MHz/16)
MCFG_RIOT6532_IN_PA_CB(READ8(c2040_device, dio_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c2040_device, dio_w))
MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532n, XTAL_16MHz/16)
MCFG_MOS6530n_IN_PA_CB(READ8(c2040_device, dio_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c2040_device, dio_w))
MCFG_DEVICE_ADD(M6532_1_TAG, RIOT6532, XTAL_16MHz/16)
MCFG_RIOT6532_IN_PA_CB(READ8(c2040_device, riot1_pa_r))
MCFG_RIOT6532_OUT_PA_CB(WRITE8(c2040_device, riot1_pa_w))
MCFG_RIOT6532_IN_PB_CB(READ8(c2040_device, riot1_pb_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c2040_device, riot1_pb_w))
MCFG_RIOT6532_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532n, XTAL_16MHz/16)
MCFG_MOS6530n_IN_PA_CB(READ8(c2040_device, riot1_pa_r))
MCFG_MOS6530n_OUT_PA_CB(WRITE8(c2040_device, riot1_pa_w))
MCFG_MOS6530n_IN_PB_CB(READ8(c2040_device, riot1_pb_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c2040_device, riot1_pb_w))
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
// controller
MCFG_CPU_ADD(M6504_TAG, M6504, XTAL_16MHz/16)
@ -644,12 +589,16 @@ static MACHINE_CONFIG_FRAGMENT( c4040 )
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, mode_sel_w))
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, rw_sel_w))
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_16MHz/16)
MCFG_MOS6530_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
MCFG_MOS6530_IN_PB_CB(READ8(c2040_device, miot_pb_r))
MCFG_MOS6530_OUT_PB_CB(WRITE8(c2040_device, miot_pb_w))
MCFG_DEVICE_ADD(M6530_TAG, MOS6530n, XTAL_16MHz/16)
MCFG_MOS6530n_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, drv_sel_w))
MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds0_w))
MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds1_w))
MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c2040_fdc_t, wps_r))
MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL_16MHz)
MCFG_C2040_SYNC_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_t, pb6_w))
MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1))
MCFG_C2040_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", c2040_floppies, "525ssqd", c4040_device::floppy_formats)
@ -741,8 +690,7 @@ c2040_device::c2040_device(const machine_config &mconfig, device_type type, cons
m_address(*this, "ADDRESS"),
m_rfdo(1),
m_daco(1),
m_atna(1),
m_miot_irq(CLEAR_LINE)
m_atna(1)
{
}
@ -762,8 +710,7 @@ c2040_device::c2040_device(const machine_config &mconfig, const char *tag, devic
m_address(*this, "ADDRESS"),
m_rfdo(1),
m_daco(1),
m_atna(1),
m_miot_irq(CLEAR_LINE)
m_atna(1)
{
}
@ -797,7 +744,7 @@ void c2040_device::device_start()
save_item(NAME(m_rfdo));
save_item(NAME(m_daco));
save_item(NAME(m_atna));
save_item(NAME(m_miot_irq));
save_item(NAME(m_ifc));
}
@ -820,6 +767,8 @@ void c2040_device::device_reset()
m_miot->reset();
m_via->reset();
m_riot1->pa7_w(0);
// turn off spindle motors
m_fdc->mtr0_w(1);
m_fdc->mtr1_w(1);
@ -834,8 +783,7 @@ void c2040_device::ieee488_atn(int state)
{
update_ieee_signals();
// set RIOT PA7
m_riot1->porta_in_set(!state << 7, 0x80);
m_riot1->pa7_w(!state);
}

View File

@ -17,8 +17,7 @@
#include "cpu/m6502/m6502.h"
#include "cpu/m6502/m6504.h"
#include "machine/6522via.h"
#include "machine/6532riot.h"
#include "machine/mos6530.h"
#include "machine/mos6530n.h"
@ -29,7 +28,7 @@
// ======================> c2040_device
class c2040_device : public device_t,
public device_ieee488_interface
public device_ieee488_interface
{
public:
// construction/destruction
@ -50,8 +49,6 @@ public:
DECLARE_WRITE8_MEMBER( via_pb_w );
DECLARE_WRITE_LINE_MEMBER( mode_sel_w );
DECLARE_WRITE_LINE_MEMBER( rw_sel_w );
DECLARE_READ8_MEMBER( miot_pb_r );
DECLARE_WRITE8_MEMBER( miot_pb_w );
DECLARE_FLOPPY_FORMATS( floppy_formats );
@ -76,9 +73,9 @@ protected:
required_device<m6502_device> m_maincpu;
required_device<m6504_device> m_fdccpu;
required_device<riot6532_device> m_riot0;
required_device<riot6532_device> m_riot1;
required_device<mos6530_device> m_miot;
required_device<mos6532_t> m_riot0;
required_device<mos6532_t> m_riot1;
required_device<mos6530_t> m_miot;
required_device<via6522_device> m_via;
required_device<floppy_image_device> m_floppy0;
optional_device<floppy_image_device> m_floppy1;
@ -91,9 +88,6 @@ protected:
int m_daco; // not data accepted output
int m_atna; // attention acknowledge
int m_ifc;
// signals
int m_miot_irq; // MIOT interrupt
};

View File

@ -82,6 +82,8 @@ c2040_fdc_t::c2040_fdc_t(const machine_config &mconfig, const char *tag, device_
m_stp0(0),
m_stp1(0),
m_ds(0),
m_ds0(0),
m_ds1(0),
m_drv_sel(0),
m_mode_sel(0),
m_rw_sel(0),
@ -116,6 +118,8 @@ void c2040_fdc_t::device_start()
save_item(NAME(m_stp0));
save_item(NAME(m_stp1));
save_item(NAME(m_ds));
save_item(NAME(m_ds0));
save_item(NAME(m_ds1));
save_item(NAME(m_drv_sel));
save_item(NAME(m_mode_sel));
save_item(NAME(m_rw_sel));
@ -451,6 +455,18 @@ WRITE8_MEMBER( c2040_fdc_t::write )
}
}
WRITE_LINE_MEMBER( c2040_fdc_t::ds0_w )
{
m_ds0 = state;
}
WRITE_LINE_MEMBER( c2040_fdc_t::ds1_w )
{
m_ds1 = state;
ds_w(m_ds1 << 1 | m_ds0);
}
WRITE_LINE_MEMBER( c2040_fdc_t::drv_sel_w )
{
if (m_drv_sel != state)

View File

@ -54,6 +54,8 @@ public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
DECLARE_WRITE_LINE_MEMBER( ds0_w );
DECLARE_WRITE_LINE_MEMBER( ds1_w );
DECLARE_WRITE_LINE_MEMBER( drv_sel_w );
DECLARE_WRITE_LINE_MEMBER( mode_sel_w );
DECLARE_WRITE_LINE_MEMBER( rw_sel_w );
@ -127,6 +129,8 @@ protected:
int m_stp0;
int m_stp1;
int m_ds;
int m_ds0;
int m_ds1;
int m_drv_sel;
int m_mode_sel;
int m_rw_sel;

View File

@ -184,10 +184,10 @@ const rom_entry *sfd1001_device::device_rom_region() const
//-------------------------------------------------
static ADDRESS_MAP_START( c8050_main_mem, AS_PROGRAM, 8, c8050_device )
AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x0100) AM_RAM // 6532 #1
AM_RANGE(0x0080, 0x00ff) AM_MIRROR(0x0100) AM_RAM // 6532 #2
AM_RANGE(0x0200, 0x021f) AM_MIRROR(0x0d60) AM_DEVREADWRITE(M6532_0_TAG, riot6532_device, read, write)
AM_RANGE(0x0280, 0x029f) AM_MIRROR(0x0d60) AM_DEVREADWRITE(M6532_1_TAG, riot6532_device, read, write)
AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x0100) AM_DEVICE(M6532_0_TAG, mos6532_t, ram_map)
AM_RANGE(0x0080, 0x00ff) AM_MIRROR(0x0100) AM_DEVICE(M6532_1_TAG, mos6532_t, ram_map)
AM_RANGE(0x0200, 0x021f) AM_MIRROR(0x0d60) AM_DEVICE(M6532_0_TAG, mos6532_t, io_map)
AM_RANGE(0x0280, 0x029f) AM_MIRROR(0x0d60) AM_DEVICE(M6532_1_TAG, mos6532_t, io_map)
AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0x0c00) AM_RAM AM_SHARE("share1")
AM_RANGE(0x2000, 0x23ff) AM_MIRROR(0x0c00) AM_RAM AM_SHARE("share2")
AM_RANGE(0x3000, 0x33ff) AM_MIRROR(0x0c00) AM_RAM AM_SHARE("share3")
@ -528,16 +528,16 @@ static MACHINE_CONFIG_FRAGMENT( c8050 )
MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_12MHz/12)
MCFG_CPU_PROGRAM_MAP(c8050_main_mem)
MCFG_DEVICE_ADD(M6532_0_TAG, RIOT6532, XTAL_12MHz/12)
MCFG_RIOT6532_IN_PA_CB(READ8(c8050_device, dio_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c8050_device, dio_w))
MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532n, XTAL_12MHz/12)
MCFG_MOS6530n_IN_PA_CB(READ8(c8050_device, dio_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c8050_device, dio_w))
MCFG_DEVICE_ADD(M6532_1_TAG, RIOT6532, XTAL_12MHz/12)
MCFG_RIOT6532_IN_PA_CB(READ8(c8050_device, riot1_pa_r))
MCFG_RIOT6532_OUT_PA_CB(WRITE8(c8050_device, riot1_pa_w))
MCFG_RIOT6532_IN_PB_CB(READ8(c8050_device, riot1_pb_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c8050_device, riot1_pb_w))
MCFG_RIOT6532_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532n, XTAL_12MHz/12)
MCFG_MOS6530n_IN_PA_CB(READ8(c8050_device, riot1_pa_r))
MCFG_MOS6530n_OUT_PA_CB(WRITE8(c8050_device, riot1_pa_w))
MCFG_MOS6530n_IN_PB_CB(READ8(c8050_device, riot1_pb_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c8050_device, riot1_pb_w))
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
// controller
MCFG_CPU_ADD(M6504_TAG, M6504, XTAL_12MHz/12)
@ -550,12 +550,13 @@ static MACHINE_CONFIG_FRAGMENT( c8050 )
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c8050_fdc_t, rw_sel_w))
MCFG_DEVICE_ADD(M6530_TAG, MOS6530n, XTAL_12MHz/12)
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
MCFG_MOS6530n_OUT_PA_CB(DEVWRITE8(FDC_TAG, c8050_fdc_t, write))
MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, drv_sel_w))
MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds0_w))
MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds1_w))
MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c8050_fdc_t, wps_r))
MCFG_MOS6530n_IN_PB6_CB(VCC) // SINGLE SIDED
MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
MCFG_DEVICE_ADD(FDC_TAG, C8050_FDC, XTAL_12MHz/2)
MCFG_C8050_SYNC_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_pb7))
@ -587,16 +588,16 @@ static MACHINE_CONFIG_FRAGMENT( c8250 )
MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_12MHz/12)
MCFG_CPU_PROGRAM_MAP(c8050_main_mem)
MCFG_DEVICE_ADD(M6532_0_TAG, RIOT6532, XTAL_12MHz/12)
MCFG_RIOT6532_IN_PA_CB(READ8(c8050_device, dio_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c8050_device, dio_w))
MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532n, XTAL_12MHz/12)
MCFG_MOS6530n_IN_PA_CB(READ8(c8050_device, dio_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c8050_device, dio_w))
MCFG_DEVICE_ADD(M6532_1_TAG, RIOT6532, XTAL_12MHz/12)
MCFG_RIOT6532_IN_PA_CB(READ8(c8050_device, riot1_pa_r))
MCFG_RIOT6532_OUT_PA_CB(WRITE8(c8050_device, riot1_pa_w))
MCFG_RIOT6532_IN_PB_CB(READ8(c8050_device, riot1_pb_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c8050_device, riot1_pb_w))
MCFG_RIOT6532_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532n, XTAL_12MHz/12)
MCFG_MOS6530n_IN_PA_CB(READ8(c8050_device, riot1_pa_r))
MCFG_MOS6530n_OUT_PA_CB(WRITE8(c8050_device, riot1_pa_w))
MCFG_MOS6530n_IN_PB_CB(READ8(c8050_device, riot1_pb_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c8050_device, riot1_pb_w))
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
// controller
MCFG_CPU_ADD(M6504_TAG, M6504, XTAL_12MHz/12)
@ -609,7 +610,6 @@ static MACHINE_CONFIG_FRAGMENT( c8250 )
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c8050_fdc_t, rw_sel_w))
MCFG_DEVICE_ADD(M6530_TAG, MOS6530n, XTAL_12MHz/12)
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
MCFG_MOS6530n_OUT_PA_CB(DEVWRITE8(FDC_TAG, c8050_fdc_t, write))
MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, drv_sel_w))
MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds0_w))
@ -617,6 +617,7 @@ static MACHINE_CONFIG_FRAGMENT( c8250 )
MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c8050_fdc_t, wps_r))
MCFG_MOS6530n_OUT_PB4_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, odd_hd_w))
MCFG_MOS6530n_IN_PB6_CB(GND) // DOUBLE SIDED
MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
MCFG_DEVICE_ADD(FDC_TAG, C8050_FDC, XTAL_12MHz/2)
MCFG_C8050_SYNC_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_pb7))
@ -648,16 +649,16 @@ static MACHINE_CONFIG_FRAGMENT( c8250lp )
MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_12MHz/12)
MCFG_CPU_PROGRAM_MAP(c8050_main_mem)
MCFG_DEVICE_ADD(M6532_0_TAG, RIOT6532, XTAL_12MHz/12)
MCFG_RIOT6532_IN_PA_CB(READ8(c8050_device, dio_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c8050_device, dio_w))
MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532n, XTAL_12MHz/12)
MCFG_MOS6530n_IN_PA_CB(READ8(c8050_device, dio_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c8050_device, dio_w))
MCFG_DEVICE_ADD(M6532_1_TAG, RIOT6532, XTAL_12MHz/12)
MCFG_RIOT6532_IN_PA_CB(READ8(c8050_device, riot1_pa_r))
MCFG_RIOT6532_OUT_PA_CB(WRITE8(c8050_device, riot1_pa_w))
MCFG_RIOT6532_IN_PB_CB(READ8(c8050_device, riot1_pb_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c8050_device, riot1_pb_w))
MCFG_RIOT6532_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532n, XTAL_12MHz/12)
MCFG_MOS6530n_IN_PA_CB(READ8(c8050_device, riot1_pa_r))
MCFG_MOS6530n_OUT_PA_CB(WRITE8(c8050_device, riot1_pa_w))
MCFG_MOS6530n_IN_PB_CB(READ8(c8050_device, riot1_pb_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c8050_device, riot1_pb_w))
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
// controller
MCFG_CPU_ADD(M6504_TAG, M6504, XTAL_12MHz/12)
@ -670,7 +671,6 @@ static MACHINE_CONFIG_FRAGMENT( c8250lp )
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c8050_fdc_t, rw_sel_w))
MCFG_DEVICE_ADD(M6530_TAG, MOS6530n, XTAL_12MHz/12)
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
MCFG_MOS6530n_OUT_PA_CB(DEVWRITE8(FDC_TAG, c8050_fdc_t, write))
MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, drv_sel_w))
MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds0_w))
@ -678,6 +678,7 @@ static MACHINE_CONFIG_FRAGMENT( c8250lp )
MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c8050_fdc_t, wps_r))
MCFG_MOS6530n_OUT_PB4_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, odd_hd_w))
MCFG_MOS6530n_IN_PB6_CB(GND) // DOUBLE SIDED
MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
MCFG_DEVICE_ADD(FDC_TAG, C8050_FDC, XTAL_12MHz/2)
MCFG_C8050_SYNC_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_pb7))
@ -709,16 +710,16 @@ static MACHINE_CONFIG_FRAGMENT( sfd1001 )
MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_12MHz/12)
MCFG_CPU_PROGRAM_MAP(c8050_main_mem)
MCFG_DEVICE_ADD(M6532_0_TAG, RIOT6532, XTAL_12MHz/12)
MCFG_RIOT6532_IN_PA_CB(READ8(c8050_device, dio_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c8050_device, dio_w))
MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532n, XTAL_12MHz/12)
MCFG_MOS6530n_IN_PA_CB(READ8(c8050_device, dio_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c8050_device, dio_w))
MCFG_DEVICE_ADD(M6532_1_TAG, RIOT6532, XTAL_12MHz/12)
MCFG_RIOT6532_IN_PA_CB(READ8(c8050_device, riot1_pa_r))
MCFG_RIOT6532_OUT_PA_CB(WRITE8(c8050_device, riot1_pa_w))
MCFG_RIOT6532_IN_PB_CB(READ8(c8050_device, riot1_pb_r))
MCFG_RIOT6532_OUT_PB_CB(WRITE8(c8050_device, riot1_pb_w))
MCFG_RIOT6532_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532n, XTAL_12MHz/12)
MCFG_MOS6530n_IN_PA_CB(READ8(c8050_device, riot1_pa_r))
MCFG_MOS6530n_OUT_PA_CB(WRITE8(c8050_device, riot1_pa_w))
MCFG_MOS6530n_IN_PB_CB(READ8(c8050_device, riot1_pb_r))
MCFG_MOS6530n_OUT_PB_CB(WRITE8(c8050_device, riot1_pb_w))
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
// controller
MCFG_CPU_ADD(M6504_TAG, M6504, XTAL_12MHz/12)
@ -731,13 +732,13 @@ static MACHINE_CONFIG_FRAGMENT( sfd1001 )
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c8050_fdc_t, rw_sel_w))
MCFG_DEVICE_ADD(M6530_TAG, MOS6530n, XTAL_12MHz/12)
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
MCFG_MOS6530n_OUT_PA_CB(DEVWRITE8(FDC_TAG, c8050_fdc_t, write))
MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds0_w))
MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, ds1_w))
MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c8050_fdc_t, wps_r))
MCFG_MOS6530n_OUT_PB4_CB(DEVWRITELINE(FDC_TAG, c8050_fdc_t, odd_hd_w))
MCFG_MOS6530n_IN_PB6_CB(GND) // DOUBLE SIDED
MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
MCFG_DEVICE_ADD(FDC_TAG, C8050_FDC, XTAL_12MHz/2)
MCFG_C8050_SYNC_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_pb7))
@ -914,6 +915,8 @@ void c8050_device::device_reset()
m_miot->reset();
m_via->reset();
m_riot1->pa7_w(1);
// turn off spindle motors
m_fdc->mtr0_w(1);
m_fdc->mtr1_w(1);
@ -928,8 +931,7 @@ void c8050_device::ieee488_atn(int state)
{
update_ieee_signals();
// set RIOT PA7
m_riot1->porta_in_set(!state << 7, 0x80);
m_riot1->pa7_w(state);
}

View File

@ -17,7 +17,6 @@
#include "cpu/m6502/m6502.h"
#include "cpu/m6502/m6504.h"
#include "machine/6522via.h"
#include "machine/6532riot.h"
#include "machine/mos6530n.h"
@ -66,8 +65,8 @@ protected:
required_device<m6502_device> m_maincpu;
required_device<m6504_device> m_fdccpu;
required_device<riot6532_device> m_riot0;
required_device<riot6532_device> m_riot1;
required_device<mos6532_t> m_riot0;
required_device<mos6532_t> m_riot1;
required_device<mos6530_t> m_miot;
required_device<via6522_device> m_via;
required_device<floppy_connector> m_floppy0;

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