diff --git a/.gitattributes b/.gitattributes
index 94768b3818f..05b303d1ddb 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -32,6 +32,7 @@
*.py svneol=native#text/plain
*.dtd svneol=native#application/xml-dtd
+*.cfg svneol=native#text/xml
*.hsi svneol=native#text/xml
*.lay svneol=native#text/xml
*.xml svneol=native#text/xml
diff --git a/.gitignore b/.gitignore
index bbd044d9293..bb1319fc9c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,6 +40,7 @@
!/*.bdf
!/LICENSE
/.idea
+docs/build
regtests/chdman/temp
regtests/jedutil/output
/CMakeLists.txt
diff --git a/artwork/aperture.png b/artwork/aperture.png
new file mode 100644
index 00000000000..2243dc52c6e
Binary files /dev/null and b/artwork/aperture.png differ
diff --git a/artwork/aperture1x2rb.png b/artwork/aperture1x2rb.png
new file mode 100644
index 00000000000..6509ca016d2
Binary files /dev/null and b/artwork/aperture1x2rb.png differ
diff --git a/artwork/aperture1x3rb.png b/artwork/aperture1x3rb.png
new file mode 100644
index 00000000000..73084bfb7e0
Binary files /dev/null and b/artwork/aperture1x3rb.png differ
diff --git a/artwork/aperture2x4bg.png b/artwork/aperture2x4bg.png
new file mode 100644
index 00000000000..dc47a127b04
Binary files /dev/null and b/artwork/aperture2x4bg.png differ
diff --git a/artwork/aperture2x4rb.png b/artwork/aperture2x4rb.png
new file mode 100644
index 00000000000..69d1efaac71
Binary files /dev/null and b/artwork/aperture2x4rb.png differ
diff --git a/artwork/aperture4x6.png b/artwork/aperture4x6.png
new file mode 100644
index 00000000000..f71f33c2d65
Binary files /dev/null and b/artwork/aperture4x6.png differ
diff --git a/artwork/dir.txt b/artwork/dir.txt
new file mode 100644
index 00000000000..be51197ae35
--- /dev/null
+++ b/artwork/dir.txt
@@ -0,0 +1 @@
+Place artwork files here
diff --git a/artwork/scanlines.png b/artwork/scanlines.png
new file mode 100644
index 00000000000..80443216110
Binary files /dev/null and b/artwork/scanlines.png differ
diff --git a/ctrlr/hotrod.cfg b/ctrlr/hotrod.cfg
new file mode 100644
index 00000000000..ccbbe0ac0dc
--- /dev/null
+++ b/ctrlr/hotrod.cfg
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ KEYCODE_UP OR KEYCODE_8PAD
+
+
+ KEYCODE_DOWN OR KEYCODE_2PAD
+
+
+ KEYCODE_LEFT OR KEYCODE_4PAD
+
+
+ KEYCODE_RIGHT OR KEYCODE_6PAD
+
+
+ KEYCODE_ENTER OR KEYCODE_LCONTROL
+
+
+
+ KEYCODE_TAB OR KEYCODE_1 KEYCODE_3
+
+
+ KEYCODE_ESC OR KEYCODE_2 KEYCODE_4
+
+
+
+ KEYCODE_1
+
+
+ KEYCODE_2
+
+
+ KEYCODE_3
+
+
+ KEYCODE_4
+
+
+ KEYCODE_5
+
+
+ KEYCODE_6
+
+
+
+ KEYCODE_8PAD
+
+
+ KEYCODE_2PAD
+
+
+ KEYCODE_4PAD
+
+
+ KEYCODE_6PAD
+
+
+ KEYCODE_R
+
+
+ KEYCODE_F
+
+
+ KEYCODE_D
+
+
+ KEYCODE_G
+
+
+ KEYCODE_8PAD
+
+
+ KEYCODE_2PAD
+
+
+ KEYCODE_4PAD
+
+
+ KEYCODE_6PAD
+
+
+
+ KEYCODE_LCONTROL OR JOYCODE_1_BUTTON1 OR MOUSECODE_1_BUTTON1
+
+
+ KEYCODE_LALT OR JOYCODE_1_BUTTON2 OR MOUSECODE_1_BUTTON3
+
+
+ KEYCODE_SPACE OR JOYCODE_1_BUTTON3 OR MOUSECODE_1_BUTTON2
+
+
+ KEYCODE_LSHIFT OR JOYCODE_1_BUTTON4
+
+
+ KEYCODE_Z OR JOYCODE_1_BUTTON5
+
+
+ KEYCODE_X OR JOYCODE_1_BUTTON6
+
+
+ KEYCODE_A OR JOYCODE_2_BUTTON1
+
+
+ KEYCODE_S OR JOYCODE_2_BUTTON2
+
+
+ KEYCODE_Q OR JOYCODE_2_BUTTON3
+
+
+ KEYCODE_W OR JOYCODE_2_BUTTON4
+
+
+ KEYCODE_E OR JOYCODE_2_BUTTON5
+
+
+ KEYCODE_OPENBRACE OR JOYCODE_2_BUTTON6
+
+
+
+
diff --git a/ctrlr/hotrodse.cfg b/ctrlr/hotrodse.cfg
new file mode 100644
index 00000000000..9a01517d10d
--- /dev/null
+++ b/ctrlr/hotrodse.cfg
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ KEYCODE_UP OR KEYCODE_8PAD
+
+
+ KEYCODE_DOWN OR KEYCODE_2PAD
+
+
+ KEYCODE_LEFT OR KEYCODE_4PAD
+
+
+ KEYCODE_RIGHT OR KEYCODE_6PAD
+
+
+ KEYCODE_ENTER OR KEYCODE_LCONTROL
+
+
+
+ KEYCODE_TAB OR KEYCODE_1 KEYCODE_3
+
+
+ KEYCODE_ESC OR KEYCODE_2 KEYCODE_4
+
+
+
+ KEYCODE_1
+
+
+ KEYCODE_2
+
+
+ KEYCODE_3
+
+
+ KEYCODE_4
+
+
+ KEYCODE_5
+
+
+ KEYCODE_6
+
+
+
+ KEYCODE_8PAD
+
+
+ KEYCODE_2PAD
+
+
+ KEYCODE_4PAD
+
+
+ KEYCODE_6PAD
+
+
+ KEYCODE_R
+
+
+ KEYCODE_F
+
+
+ KEYCODE_D
+
+
+ KEYCODE_G
+
+
+ KEYCODE_8PAD
+
+
+ KEYCODE_2PAD
+
+
+ KEYCODE_4PAD
+
+
+ KEYCODE_6PAD
+
+
+
+ KEYCODE_LCONTROL OR JOYCODE_1_BUTTON1 OR MOUSECODE_1_BUTTON1
+
+
+ KEYCODE_LALT OR JOYCODE_1_BUTTON2 OR MOUSECODE_1_BUTTON3
+
+
+ KEYCODE_SPACE OR JOYCODE_1_BUTTON3 OR MOUSECODE_1_BUTTON2
+
+
+ KEYCODE_LSHIFT OR JOYCODE_1_BUTTON4
+
+
+ KEYCODE_Z OR JOYCODE_1_BUTTON5
+
+
+ KEYCODE_X OR JOYCODE_1_BUTTON6
+
+
+ KEYCODE_A OR JOYCODE_2_BUTTON1
+
+
+ KEYCODE_S OR JOYCODE_2_BUTTON2
+
+
+ KEYCODE_Q OR JOYCODE_2_BUTTON3
+
+
+ KEYCODE_W OR JOYCODE_2_BUTTON4
+
+
+ KEYCODE_E OR JOYCODE_2_BUTTON5
+
+
+ KEYCODE_OPENBRACE OR JOYCODE_2_BUTTON6
+
+
+
+
+
+
+
+ KEYCODE_C OR JOYCODE_1_BUTTON1
+
+
+ KEYCODE_LSHIFT OR JOYCODE_1_BUTTON2
+
+
+ KEYCODE_Z OR JOYCODE_1_BUTTON3
+
+
+ KEYCODE_X OR JOYCODE_1_BUTTON4
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ KEYCODE_CLOSEBRACE OR JOYCODE_2_BUTTON1
+
+
+ KEYCODE_W OR JOYCODE_2_BUTTON2
+
+
+ KEYCODE_E OR JOYCODE_2_BUTTON3
+
+
+ KEYCODE_OPENBRACE OR JOYCODE_2_BUTTON4
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+
+
+
diff --git a/ctrlr/scorpionxg.cfg b/ctrlr/scorpionxg.cfg
new file mode 100644
index 00000000000..faa48c816e7
--- /dev/null
+++ b/ctrlr/scorpionxg.cfg
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEYCODE_UP OR KEYCODE_8PAD
+
+
+ KEYCODE_DOWN OR KEYCODE_2PAD
+
+
+ KEYCODE_LEFT OR KEYCODE_4PAD
+
+
+ KEYCODE_RIGHT OR KEYCODE_6PAD
+
+
+ KEYCODE_ENTER OR KEYCODE_LCONTROL
+
+
+
+ KEYCODE_TAB
+
+
+ KEYCODE_ESC
+
+
+
+ KEYCODE_1
+
+
+ KEYCODE_2
+
+
+ KEYCODE_3
+
+
+ KEYCODE_4
+
+
+ KEYCODE_5
+
+
+ KEYCODE_6
+
+
+
+ KEYCODE_8PAD
+
+
+ KEYCODE_2PAD
+
+
+ KEYCODE_4PAD
+
+
+ KEYCODE_6PAD
+
+
+ KEYCODE_R
+
+
+ KEYCODE_F
+
+
+ KEYCODE_D
+
+
+ KEYCODE_G
+
+
+ KEYCODE_8PAD
+
+
+ KEYCODE_2PAD
+
+
+ KEYCODE_4PAD
+
+
+ KEYCODE_6PAD
+
+
+
+ KEYCODE_LCONTROL OR JOYCODE_1_BUTTON1 OR MOUSECODE_1_BUTTON1
+
+
+ KEYCODE_LALT OR JOYCODE_1_BUTTON2 OR MOUSECODE_1_BUTTON3
+
+
+ KEYCODE_SPACE OR JOYCODE_1_BUTTON3 OR MOUSECODE_1_BUTTON2
+
+
+ KEYCODE_C OR JOYCODE_1_BUTTON4
+
+
+ KEYCODE_LSHIFT OR JOYCODE_1_BUTTON5
+
+
+ KEYCODE_Z OR JOYCODE_1_BUTTON6
+
+
+ KEYCODE_RCONTROL OR JOYCODE_2_BUTTON1
+
+
+ KEYCODE_RALT OR JOYCODE_2_BUTTON2
+
+
+ KEYCODE_Q OR JOYCODE_2_BUTTON3
+
+
+ KEYCODE_CLOSEBRACE OR JOYCODE_2_BUTTON4
+
+
+ KEYCODE_RSHIFT OR JOYCODE_2_BUTTON5
+
+
+ KEYCODE_E OR JOYCODE_2_BUTTON6
+
+
+
+
+
+
+
+ KEYCODE_LCONTROL OR JOYCODE_1_BUTTON1
+
+
+ KEYCODE_LALT OR JOYCODE_1_BUTTON2
+
+
+ KEYCODE_SPACE OR JOYCODE_1_BUTTON3
+
+
+ KEYCODE_C OR JOYCODE_1_BUTTON4
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ KEYCODE_RCONTROL OR JOYCODE_2_BUTTON1
+
+
+ KEYCODE_RALT OR JOYCODE_2_BUTTON2
+
+
+ KEYCODE_Q OR JOYCODE_2_BUTTON3
+
+
+ KEYCODE_CLOSEBRACE OR JOYCODE_2_BUTTON4
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+
+
+
diff --git a/ctrlr/slikstik.cfg b/ctrlr/slikstik.cfg
new file mode 100644
index 00000000000..42456f31d80
--- /dev/null
+++ b/ctrlr/slikstik.cfg
@@ -0,0 +1,304 @@
+
+
+
+
+
+
+
+ KEYCODE_P
+
+
+
+ KEYCODE_UP OR JOYCODE_1_YAXIS_UP_SWITCH
+
+
+ KEYCODE_DOWN OR JOYCODE_1_YAXIS_DOWN_SWITCH
+
+
+ KEYCODE_LEFT OR JOYCODE_1_XAXIS_LEFT_SWITCH
+
+
+ KEYCODE_RIGHT OR JOYCODE_1_XAXIS_RIGHT_SWITCH
+
+
+ KEYCODE_7 OR KEYCODE_ENTER OR JOYCODE_1_BUTTON1
+
+
+
+ KEYCODE_TAB OR KEYCODE_1 KEYCODE_5
+
+
+ KEYCODE_ESC OR KEYCODE_2 KEYCODE_6
+
+
+
+ KEYCODE_1 OR JOYCODE_1_START
+
+
+ KEYCODE_2 OR JOYCODE_2_START
+
+
+ KEYCODE_5 OR JOYCODE_1_SELECT
+
+
+ KEYCODE_6 OR JOYCODE_2_SELECT
+
+
+ JOYCODE_3_SELECT
+
+
+ JOYCODE_4_SELECT
+
+
+
+ KEYCODE_8
+
+
+
+ KEYCODE_UP OR JOYCODE_1_YAXIS_UP_SWITCH
+
+
+ KEYCODE_DOWN OR JOYCODE_1_YAXIS_DOWN_SWITCH
+
+
+ KEYCODE_LEFT OR JOYCODE_1_XAXIS_LEFT_SWITCH
+
+
+ KEYCODE_RIGHT OR JOYCODE_1_XAXIS_RIGHT_SWITCH
+
+
+ KEYCODE_7 OR JOYCODE_1_BUTTON1 OR MOUSECODE_1_BUTTON1
+
+
+ KEYCODE_H OR JOYCODE_1_BUTTON2 OR KEYCODE_L
+
+
+ KEYCODE_9 OR JOYCODE_1_BUTTON3 OR MOUSECODE_1_BUTTON2
+
+
+ KEYCODE_0 OR JOYCODE_1_BUTTON4
+
+
+ KEYCODE_Z OR JOYCODE_1_BUTTON5
+
+
+ KEYCODE_X OR JOYCODE_1_BUTTON6
+
+
+ KEYCODE_LSHIFT
+
+
+ KEYCODE_R OR JOYCODE_1_BUTTON2
+
+
+ KEYCODE_F OR JOYCODE_1_BUTTON3
+
+
+ KEYCODE_D OR JOYCODE_1_BUTTON1
+
+
+ KEYCODE_G OR JOYCODE_1_BUTTON4
+
+
+ KEYCODE_UP OR JOYCODE_1_YAXIS_UP_SWITCH
+
+
+ KEYCODE_DOWN OR JOYCODE_1_YAXIS_DOWN_SWITCH
+
+
+ KEYCODE_LEFT OR JOYCODE_1_XAXIS_LEFT_SWITCH
+
+
+ KEYCODE_RIGHT OR JOYCODE_1_XAXIS_RIGHT_SWITCH
+
+
+
+ KEYCODE_R OR JOYCODE_2_UP
+
+
+ KEYCODE_F OR JOYCODE_2_DOWN
+
+
+ KEYCODE_D OR JOYCODE_2_LEFT
+
+
+ KEYCODE_G OR JOYCODE_2_RIGHT
+
+
+ KEYCODE_A OR JOYCODE_2_BUTTON1
+
+
+ KEYCODE_S OR JOYCODE_2_BUTTON2
+
+
+ KEYCODE_Q OR JOYCODE_2_BUTTON3
+
+
+ KEYCODE_W OR JOYCODE_2_BUTTON4
+
+
+ KEYCODE_I OR JOYCODE_2_BUTTON5
+
+
+ KEYCODE_K OR JOYCODE_2_BUTTON6
+
+
+ KEYCODE_RSHIFT
+
+
+
+
+
+
+
+
+
+
+ KEYCODE_LEFT OR JOYCODE_1_XAXIS_LEFT_SWITCH OR KEYCODE_0
+
+
+ KEYCODE_RIGHT OR JOYCODE_1_XAXIS_RIGHT_SWITCH OR KEYCODE_Z
+
+
+ KEYCODE_H OR JOYCODE_1_BUTTON1 OR MOUSECODE_1_BUTTON1
+
+
+ KEYCODE_7 OR JOYCODE_1_BUTTON2 OR KEYCODE_L
+
+
+ KEYCODE_9 OR JOYCODE_1_BUTTON3 OR MOUSECODE_1_BUTTON2
+
+
+
+
+
+
+
+
+
+
+ KEYCODE_0 OR JOYCODE_1_BUTTON1 OR MOUSECODE_1_BUTTON1
+
+
+ KEYCODE_Z OR JOYCODE_1_BUTTON2 OR KEYCODE_L
+
+
+ KEYCODE_X OR JOYCODE_1_BUTTON3 OR MOUSECODE_1_BUTTON2
+
+
+
+
+
+
+
+
+ KEYCODE_LSHIFT OR JOYCODE_1_BUTTON1
+
+
+ KEYCODE_0 OR JOYCODE_1_BUTTON2
+
+
+ KEYCODE_Z OR JOYCODE_1_BUTTON3
+
+
+ KEYCODE_X OR JOYCODE_1_BUTTON4
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ KEYCODE_RSHIFT OR JOYCODE_2_BUTTON1
+
+
+ KEYCODE_W OR JOYCODE_2_BUTTON2
+
+
+ KEYCODE_I OR JOYCODE_2_BUTTON3
+
+
+ KEYCODE_K OR JOYCODE_2_BUTTON4
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+
+
+
+
+
+
+
+
+ KEYCODE_7 OR JOYCODE_1_BUTTON1 OR MOUSECODE_1_BUTTON1 OR KEYCODE_0
+
+
+ KEYCODE_H OR JOYCODE_1_BUTTON2 OR KEYCODE_L OR KEYCODE_Z
+
+
+
+
+
diff --git a/ctrlr/xarcade.cfg b/ctrlr/xarcade.cfg
new file mode 100644
index 00000000000..92bbbbeec9e
--- /dev/null
+++ b/ctrlr/xarcade.cfg
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ KEYCODE_UP OR KEYCODE_8PAD
+
+
+ KEYCODE_DOWN OR KEYCODE_2PAD
+
+
+ KEYCODE_LEFT OR KEYCODE_4PAD
+
+
+ KEYCODE_RIGHT OR KEYCODE_6PAD
+
+
+ KEYCODE_ENTER OR KEYCODE_LCONTROL
+
+
+
+ KEYCODE_TAB OR KEYCODE_1 KEYCODE_3
+
+
+ KEYCODE_ESC OR KEYCODE_2 KEYCODE_4
+
+
+
+ KEYCODE_1
+
+
+ KEYCODE_2
+
+
+ KEYCODE_3
+
+
+ KEYCODE_4
+
+
+ NONE
+
+
+ NONE
+
+
+
+ KEYCODE_8PAD
+
+
+ KEYCODE_2PAD
+
+
+ KEYCODE_4PAD
+
+
+ KEYCODE_6PAD
+
+
+ KEYCODE_R
+
+
+ KEYCODE_F
+
+
+ KEYCODE_D
+
+
+ KEYCODE_G
+
+
+ KEYCODE_8PAD
+
+
+ KEYCODE_2PAD
+
+
+ KEYCODE_4PAD
+
+
+ KEYCODE_6PAD
+
+
+
+ KEYCODE_LCONTROL OR JOYCODE_1_BUTTON1 OR MOUSECODE_1_BUTTON1
+
+
+ KEYCODE_LALT OR JOYCODE_1_BUTTON2 OR MOUSECODE_1_BUTTON3
+
+
+ KEYCODE_SPACE OR JOYCODE_1_BUTTON3 OR MOUSECODE_1_BUTTON2
+
+
+ KEYCODE_LSHIFT OR JOYCODE_1_BUTTON4
+
+
+ KEYCODE_Z OR JOYCODE_1_BUTTON5
+
+
+ KEYCODE_X OR JOYCODE_1_BUTTON6
+
+
+ KEYCODE_A OR JOYCODE_2_BUTTON1
+
+
+ KEYCODE_S OR JOYCODE_2_BUTTON2
+
+
+ KEYCODE_Q OR JOYCODE_2_BUTTON3
+
+
+ KEYCODE_W OR JOYCODE_2_BUTTON4
+
+
+ KEYCODE_E OR JOYCODE_2_BUTTON5
+
+
+ KEYCODE_OPENBRACE OR JOYCODE_2_BUTTON6
+
+
+
+
+
+
+
+ KEYCODE_C OR JOYCODE_1_BUTTON1
+
+
+ KEYCODE_LSHIFT OR JOYCODE_1_BUTTON2
+
+
+ KEYCODE_Z OR JOYCODE_1_BUTTON3
+
+
+ KEYCODE_X OR JOYCODE_1_BUTTON4
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ KEYCODE_CLOSEBRACE OR JOYCODE_2_BUTTON1
+
+
+ KEYCODE_W OR JOYCODE_2_BUTTON2
+
+
+ KEYCODE_E OR JOYCODE_2_BUTTON3
+
+
+ KEYCODE_OPENBRACE OR JOYCODE_2_BUTTON4
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+ NONE
+
+
+
+
+
diff --git a/dist.mak b/dist.mak
new file mode 100644
index 00000000000..6951096a07c
--- /dev/null
+++ b/dist.mak
@@ -0,0 +1,124 @@
+###########################################################################
+#
+# dist.mak
+#
+# This is used during MAME release process, it's rather hacky
+#
+###########################################################################
+
+ifeq ($(OS),Windows_NT)
+OS := windows
+else
+UNAME := $(shell uname -mps)
+ifeq ($(firstword $(filter Linux,$(UNAME))),Linux)
+OS := linux
+endif
+ifeq ($(firstword $(filter Solaris,$(UNAME))),Solaris)
+OS := solaris
+endif
+ifeq ($(firstword $(filter SunOS,$(UNAME))),SunOS)
+OS := solaris
+endif
+ifeq ($(firstword $(filter FreeBSD,$(UNAME))),FreeBSD)
+OS := freebsd
+endif
+ifeq ($(firstword $(filter GNU/kFreeBSD,$(UNAME))),GNU/kFreeBSD)
+OS := freebsd
+endif
+ifeq ($(firstword $(filter NetBSD,$(UNAME))),NetBSD)
+OS := netbsd
+endif
+ifeq ($(firstword $(filter OpenBSD,$(UNAME))),OpenBSD)
+OS := openbsd
+endif
+ifeq ($(firstword $(filter Darwin,$(UNAME))),Darwin)
+OS := osx
+endif
+ifeq ($(firstword $(filter Haiku,$(UNAME))),Haiku)
+OS := haiku
+endif
+ifndef OS
+$(error Unable to detect OS from uname -a: $(UNAME))
+endif
+endif
+
+ifndef TARGETOS
+ TARGETOS := $(OS)
+endif
+
+EXE :=
+ifeq ($(OS),windows)
+EXE := .exe
+PROJECTTYPE := mingw-gcc
+else
+ifeq ($(OS),osx)
+PROJECTTYPE := osx_clang
+else
+PROJECTTYPE := $(OS)_gcc
+endif
+endif
+
+ifeq ($(DEBUG),1)
+ MAINBINVARIANT := d
+ BUILDVARIANT := Debug
+else
+ MAINBINVARIANT :=
+ BUILDVARIANT := Release
+endif
+
+ifeq ($(PTR64),1)
+ MAINBINARCH := 64
+ BUILDARCH := x64
+else
+ MAINBINARCH :=
+ BUILDARCH := x32
+endif
+
+SHELLTYPE := msdos
+ifeq (,$(ComSpec)$(COMSPEC))
+ SHELLTYPE := posix
+endif
+ifeq (/bin,$(findstring /bin,$(SHELL)))
+ SHELLTYPE := posix
+endif
+ifeq (/bin,$(findstring /bin,$(MAKESHELL)))
+ SHELLTYPE := posix
+endif
+
+ifeq (posix,$(SHELLTYPE))
+ MKDIR = $(SILENT) mkdir -p "$(1)"
+ COPY = $(SILENT) cp -fR "$(1)" "$(2)"
+else
+ MKDIR = $(SILENT) mkdir "$(subst /,\\,$(1))" 2> nul || exit 0
+ COPY = $(SILENT) copy /Y "$(subst /,\\,$(1))" "$(subst /,\\,$(2))" > nul || exit 0
+endif
+
+ifndef TARGET
+ TARGET := mame
+endif
+
+MAINBIN := $(TARGET)$(MAINBINARCH)$(MAINBINVARIANT)
+BINDIR := build/$(PROJECTTYPE)/bin/$(BUILDARCH)/$(BUILDVARIANT)
+STAGEDIR := build/release/$(BUILDARCH)/$(BUILDVARIANT)/$(TARGET)
+
+BINARIES = $(MAINBIN) castool chdman floptool imgtool jedutil ldresample ldverify nltool nlwav romcmp unidasm
+SIMPLE_DIRS := ctrlr docs/man docs/swlist hash ini/presets nl_examples
+LOCALISATIONS := $(wildcard language/*/*.mo)
+COPIED_FILES := uismall.bdf roms/dir.txt $(foreach DIR,$(SIMPLE_DIRS),$(wildcard $(DIR)/*)) language/LICENSE language/README.md $(LOCALISATIONS)
+CREATED_DIRS := docs ini roms $(SIMPLE_DIRS) language $(dir $(LOCALISATIONS))
+
+GEN_FOLDERS := $(addprefix $(STAGEDIR)/,$(CREATED_DIRS))
+COPY_BINARIES := $(addprefix $(STAGEDIR)/,$(addsuffix $(EXE),$(BINARIES)))
+COPY_FILES := $(addprefix $(STAGEDIR)/,$(COPIED_FILES))
+
+all: $(COPY_BINARIES) $(COPY_FILES)
+
+$(GEN_FOLDERS):
+ -$(call MKDIR,$@)
+
+$(STAGEDIR)/%: $(BINDIR)/% | $(GEN_FOLDERS)
+ -$(call COPY,$<,$@)
+ strip $@
+
+$(STAGEDIR)/%: % | $(GEN_FOLDERS)
+ -$(call COPY,$<,$@)
diff --git a/docs/.gitignore b/docs/.gitignore
deleted file mode 100644
index 27ffc2f17fb..00000000000
--- a/docs/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.pyc
-build
diff --git a/roms/dir.txt b/roms/dir.txt
new file mode 100644
index 00000000000..6a07c924677
--- /dev/null
+++ b/roms/dir.txt
@@ -0,0 +1 @@
+Place ROM directories here
diff --git a/samples/dir.txt b/samples/dir.txt
new file mode 100644
index 00000000000..1980bb732c3
--- /dev/null
+++ b/samples/dir.txt
@@ -0,0 +1 @@
+Place samples directories here